Spaces:
Runtime error
Runtime error
import gradio as gr | |
from search import search_google | |
from scraper import scrape_url | |
from rag import VectorStore | |
from llm import generate_answer | |
import time | |
vs = VectorStore() | |
def ask_agent(question): | |
# Search Google | |
with gr.Blocks(analytics_enabled=False) as progress_section: | |
with gr.Row(): | |
gr.Textbox("Searching web...", show_label=False) | |
urls = [u for u in search_google(question, num_results=3) if u.startswith("http")] | |
if not urls: | |
return "β οΈ No search results found. Try a different query." | |
# Scrape URLs | |
progress_section.children[0].children[0].value = "Scraping content..." | |
texts_images = [] | |
for url in urls: | |
texts_images.append(scrape_url(url)) | |
texts = [ti[0] for ti in texts_images if not ti[0].startswith("[Error")] | |
images = [ti[1] for ti in texts_images] | |
# Add to vector store | |
if texts: | |
vs.add_texts(texts) | |
# Retrieve context | |
progress_section.children[0].children[0].value = "Analyzing content..." | |
relevant = vs.retrieve(question, top_k=2) | |
context = "\n\n".join(relevant) if relevant else "No relevant context found." | |
# Generate answer | |
progress_section.children[0].children[0].value = "Generating answer..." | |
answer = generate_answer(context, question) | |
# Prepare image gallery | |
image_gallery = [] | |
for url, imgs in zip(urls, images): | |
if imgs: | |
image_gallery.extend(imgs[:3]) # Show max 3 images per site | |
# Prepare sources | |
sources = "\n".join([f"- [{url}]({url})" for url in urls]) | |
return answer, image_gallery, sources | |
with gr.Blocks( | |
theme=gr.themes.Soft( | |
primary_hue="violet", | |
font=[gr.themes.GoogleFont("Poppins")] | |
), | |
css=".gradio-container {max-width: 900px !important}" | |
) as demo: | |
gr.Markdown(""" | |
# π **Smart Web Research Agent** | |
Ask anything - I'll search the web, analyze content, and provide answers with sources! | |
""") | |
with gr.Row(): | |
question = gr.Textbox( | |
label="Your question", | |
placeholder="e.g., Best budget laptop 2024?", | |
scale=4 | |
) | |
submit_btn = gr.Button("Search", variant="primary", scale=1) | |
progress = gr.Textbox(visible=False) | |
with gr.Accordion("Answer", open=True): | |
answer = gr.Markdown() | |
with gr.Accordion("Sources", open=False): | |
sources = gr.Markdown() | |
with gr.Accordion("Images", open=False): | |
gallery = gr.Gallery( | |
columns=3, | |
object_fit="contain", | |
height="auto" | |
) | |
submit_btn.click( | |
fn=ask_agent, | |
inputs=question, | |
outputs=[answer, gallery, sources], | |
api_name="search" | |
) | |
demo.launch() |