Spaces:
Sleeping
Sleeping
ChatWithMahadevan
/
community_contributions
/deep_research_user_clarifying_questions
/deep_research.py
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) | |
# Global variable to store the current query for the two-step process | |
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 | |
# Parse the clarifying answers (assuming they're provided as numbered responses) | |
answers = [] | |
lines = clarifying_answers.strip().split('\n') | |
for line in lines: | |
line = line.strip() | |
if line and not line.startswith('#'): # Skip empty lines and comments | |
# Remove numbering if present (e.g., "1. ", "1) ", etc.) | |
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 | |
# Run the research with clarifications | |
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) | |