|
import gradio as gr |
|
from dotenv import load_dotenv |
|
from research_manager import ResearchManager |
|
import certifi |
|
import os |
|
os.environ['SSL_CERT_FILE'] = certifi.where() |
|
|
|
load_dotenv(override=True) |
|
|
|
|
|
current_query = None |
|
|
|
async def run(query: str): |
|
"""First step: Generate clarifying questions""" |
|
global current_query |
|
current_query = query |
|
|
|
async for chunk in ResearchManager().run(query): |
|
yield chunk |
|
|
|
async def process_clarifications(clarifying_answers: str): |
|
"""Second step: Process user clarifications and run research""" |
|
global current_query |
|
|
|
if current_query is None: |
|
yield "Error: No query found. Please start a new research query." |
|
return |
|
|
|
|
|
answers = [] |
|
lines = clarifying_answers.strip().split('\n') |
|
for line in lines: |
|
line = line.strip() |
|
if line and not line.startswith('#'): |
|
|
|
import re |
|
line = re.sub(r'^\d+[\.\)]\s*', '', line) |
|
if line: |
|
answers.append(line) |
|
|
|
if len(answers) < 3: |
|
yield f"Please provide answers to all 3 clarifying questions. You provided {len(answers)} answers." |
|
return |
|
|
|
|
|
async for chunk in ResearchManager().run(current_query, answers): |
|
yield chunk |
|
|
|
with gr.Blocks(theme=gr.themes.Default(primary_hue="sky")) as ui: |
|
gr.Markdown("# Deep Research with Clarifying Questions") |
|
|
|
with gr.Tab("Step 1: Ask Questions"): |
|
gr.Markdown("### Enter your research topic") |
|
query_textbox = gr.Textbox(label="What topic would you like to research?", placeholder="e.g., AI trends in 2024") |
|
run_button = gr.Button("Generate Clarifying Questions", variant="primary") |
|
questions_output = gr.Markdown(label="Clarifying Questions") |
|
|
|
run_button.click(fn=run, inputs=query_textbox, outputs=questions_output) |
|
query_textbox.submit(fn=run, inputs=query_textbox, outputs=questions_output) |
|
|
|
with gr.Tab("Step 2: Provide Answers"): |
|
gr.Markdown("### Answer the clarifying questions") |
|
gr.Markdown("Please provide your answers to the clarifying questions from Step 1. You can format them as numbered responses or just separate lines.") |
|
clarifying_answers_textbox = gr.Textbox( |
|
label="Your Answers to Clarifying Questions", |
|
placeholder="1. [Your answer to question 1]\n2. [Your answer to question 2]\n3. [Your answer to question 3]", |
|
lines=5 |
|
) |
|
process_button = gr.Button("Process Answers & Run Research", variant="primary") |
|
research_output = gr.Markdown(label="Research Results") |
|
|
|
process_button.click(fn=process_clarifications, inputs=clarifying_answers_textbox, outputs=research_output) |
|
|
|
ui.launch(inbrowser=True) |
|
|
|
|