Spaces:
Sleeping
Sleeping
import sys | |
import os | |
import gradio as gr | |
import requests | |
from config import BACKEND_HOST, BACKEND_PORT, FRONTEND_PORT, APP_NAME | |
# Add the project root directory to the Python path | |
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
API_URL = f"http://{BACKEND_HOST}:{BACKEND_PORT}/search" | |
def search_prompt(query: str, n: int) -> list: | |
""" | |
Query the backend search API and format the results. | |
Args: | |
query: The search query. | |
n: The number of results to return. | |
Returns: | |
list: A list of formatted results, or an error message | |
""" | |
try: | |
response = requests.get(API_URL, params={"query": query, "n": n}) | |
response.raise_for_status() | |
data = response.json() | |
# Extract and sort results | |
results = data["results"] | |
sorted_results = sorted(results, key=lambda x: x[0], reverse=True) | |
# Format results in a table | |
tabular_results = [[result[1], f"{result[0]:.4f}"] for result in sorted_results] | |
return tabular_results | |
except Exception as e: | |
return [["Error", str(e)]] | |
def validate_and_search(query: str, n: int) -> list: | |
""" | |
Validate inputs and perform the search if inputs are valid. | |
Args: | |
query: The search query. | |
n: The number of results to return. | |
Returns: | |
list: A list of results or an error message. | |
""" | |
if not query.strip(): | |
return [["Error", "Your input is empty, please enter a query."]] | |
if n <= 0 or not isinstance(n, int): | |
return [["Error", "Invalid number of top results. Please enter a positive number."]] | |
# Call the backend search function | |
return search_prompt(query, n) | |
with gr.Blocks() as demo: | |
gr.Markdown(f"# {APP_NAME}") | |
query = gr.Textbox(label="Enter your query:") | |
n = gr.Number(label="Number of top results", value=5, precision=0) | |
output = gr.Dataframe( | |
headers=["Prompt", "Similarity"], | |
datatype=["str", "str"], | |
interactive=False, | |
label=f"Top results" | |
) | |
search_button = gr.Button("Search") | |
search_button.click(validate_and_search, inputs=[query, n], outputs=[output]) | |
demo.launch(server_name="0.0.0.0", server_port=FRONTEND_PORT) | |