mayank1101's picture
Upload 7 files
28d8100 verified
raw
history blame
6.84 kB
# import gradio as gr
# import httpx
# import json
# from typing import Tuple, Any
# # Define the FastAPI endpoint URL
# FASTAPI_ENDPOINT = "http://localhost:8000/websearch"
# def query_api(query: str) -> Tuple[Any, Any]:
# try:
# # Send POST request to FastAPI endpoint with streaming enabled
# with httpx.Client() as client:
# with client.stream("POST", FASTAPI_ENDPOINT, json={"query": query}, timeout=60.0) as response:
# response.raise_for_status() # Raise an exception for 4xx or 5xx status codes
# # Process the streaming response
# response_data = ""
# for chunk in response.iter_text():
# response_data += chunk
# # Parse the accumulated response data as JSON
# response_json = json.loads(response_data)
# # Extract content and citations from the response JSON
# content = response_json.get("content", "")
# citations = response_json.get("citations", [])
# # Beautify content using Markdown formatting
# beautified_content = f"# Search Results\n\n{content}"
# # Beautify citations by adding Markdown links
# beautified_citations = "# Citations\n\n"
# for i, citation in enumerate(citations, start=1):
# beautified_citations += f"{i}. [{citation}]({citation})\n"
# # Yield the beautified content and citations
# yield beautified_content, beautified_citations
# except httpx.TimeoutException:
# yield "Request timed out. Please try again later.", ""
# except httpx.HTTPStatusError as e:
# yield f"HTTP error occurred: {e}", ""
# except Exception as e:
# yield f"An error occurred: {e}", ""
# # Create Gradio interface
# with gr.Blocks(css=".gradio-container { background-color: #f5f5f5; padding: 20px; border-radius: 10px; }") as demo:
# gr.Markdown("# Web Search Application")
# with gr.Row():
# with gr.Column():
# query = gr.Textbox(
# label="Enter your query",
# placeholder="Type your search query here...",
# lines=2,
# max_lines=4,
# value="",
# elem_id="query-input"
# )
# submit_button = gr.Button("Search")
# with gr.Column():
# output_content = gr.Textbox(
# label="Response Content",
# placeholder="Search results will appear here...",
# lines=10,
# max_lines=20,
# value="",
# elem_id="response-content"
# )
# output_citations = gr.Textbox(
# label="Citations",
# placeholder="Citations will appear here...",
# lines=5,
# max_lines=10,
# value="",
# elem_id="response-citations"
# )
# # Set up event listener
# submit_button.click(query_api, inputs=query, outputs=[output_content, output_citations])
# gr.Markdown("Powered by FastAPI and Gradio")
# # Launch the Gradio application
# demo.launch()
import gradio as gr
import httpx
import json
# Define the FastAPI endpoint URL
FASTAPI_ENDPOINT = "http://localhost:8000/websearch"
def query_api(query: str) -> tuple:
try:
# Send POST request to FastAPI endpoint with streaming enabled
with httpx.Client() as client:
with client.stream("POST", FASTAPI_ENDPOINT, json={"query": query}, timeout=60.0) as response:
response.raise_for_status() # Raise an exception for 4xx or 5xx status codes
# Process the streaming response
response_data = ""
for chunk in response.iter_text():
response_data += chunk
# Parse the accumulated response data as JSON
response_json = json.loads(response_data)
# Extract content and citations from the response JSON
content = response_json.get("content", "")
citations = response_json.get("citations", [])
# Beautify content using Markdown formatting
beautified_content = f"# Search Results\n\n{content}"
# Beautify citations by adding Markdown links
beautified_citations = "# Citations/Sources\n\n"
for i, citation in enumerate(citations, start=1):
beautified_citations += f"{i}. [{citation}]({citation})\n"
# Yield the beautified content and citations
yield beautified_content, beautified_citations
except httpx.TimeoutException:
yield "# Request Timeout\n\nRequest timed out. Please try again later.", ""
except httpx.HTTPStatusError as e:
yield f"# HTTP Error\n\nHTTP error occurred: {e}", ""
except Exception as e:
yield f"# Error\n\nAn error occurred: {e}", ""
# Create Gradio interface
with gr.Blocks(css=".gradio-container { background-color: #f5f5f5; padding: 20px; border-radius: 10px; }", theme=gr.themes.Citrus()) as demo:
gr.Markdown("# Web Search Application")
with gr.Row():
with gr.Column(
render=True,
show_progress=True
):
query = gr.Textbox(
label="Enter your query",
placeholder="Type your search query here...",
lines=2,
max_lines=4,
value="",
elem_id="query-input"
)
submit_button = gr.Button("Search")
with gr.Column(
render=True,
show_progress=True
):
output_content = gr.Markdown(
label="Response Content",
value="",
elem_id="response-content",
height="600px",
visible=True,
show_label=True
)
output_citations = gr.Markdown(
label="Citations",
value="",
elem_id="response-citations",
height="200px",
visible=True,
show_label=True
)
# Set up event listener
submit_button.click(query_api, inputs=query, outputs=[output_content, output_citations])
gr.Markdown("Powered by FastAPI and Gradio")
# Launch the Gradio application
demo.launch()