Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from dotenv import load_dotenv | |
| from research_manager import ResearchManager | |
| load_dotenv() | |
| async def ask_clarifications(query: str) -> tuple[str, list[str]]: | |
| """Generate clarifying questions for *query* and return both a nicely formatted string and the raw list.""" | |
| manager = ResearchManager() | |
| questions = await manager.get_clarifying_questions(query) | |
| if not questions: | |
| return ( | |
| "No clarifying questions were generated. You can proceed to run the research.", | |
| [], | |
| ) | |
| formatted = "\n".join(f"{idx+1}. {q}" for idx, q in enumerate(questions)) | |
| return formatted, questions | |
| async def run_research(query: str, answers: str, questions: list[str]): | |
| """Run the complete research pipeline and stream the markdown report.""" | |
| clarifications_block = "" | |
| answer_lines = [line.strip() for line in answers.split("\n")] | |
| while len(answer_lines) < len(questions): | |
| answer_lines.append("") | |
| q_and_a = [] | |
| for idx, question in enumerate(questions): | |
| answer = answer_lines[idx] | |
| q_and_a.append(f"Q{idx+1}: {question}\nA{idx+1}: {answer}") | |
| clarifications_block = "\n".join(q_and_a) | |
| async for chunk in ResearchManager().run(query, clarifications_block): | |
| yield chunk | |
| with gr.Blocks(theme=gr.themes.Default(primary_hue="yellow")) as ui: | |
| gr.Markdown("# Deep Research") | |
| with gr.Row(): | |
| query_textbox = gr.Textbox( | |
| label="What topic would you like to research?", | |
| placeholder="e.g. How to create a Deep Research Agent?", | |
| ) | |
| ask_button = gr.Button("Ask clarifying questions") | |
| clarifying_questions_state = gr.State([]) | |
| clarifications_markdown = gr.Markdown(label="Clarifying questions will appear here") | |
| clarification_answers_box = gr.Textbox( | |
| label="Your answers to the clarifying questions (one per line)", | |
| placeholder="Answer 1\nAnswer 2\n...", | |
| lines=3, | |
| ) | |
| run_button = gr.Button("Run research", variant="primary") | |
| report = gr.Markdown(label="Report") | |
| ask_button.click( | |
| fn=ask_clarifications, | |
| inputs=query_textbox, | |
| outputs=[clarifications_markdown, clarifying_questions_state], | |
| ) | |
| run_button.click( | |
| fn=run_research, | |
| inputs=[query_textbox, clarification_answers_box, clarifying_questions_state], | |
| outputs=report, | |
| ) | |
| if __name__ == "__main__": | |
| ui.launch() | |