Spaces:
Runtime error
Runtime error
Download app.py from murtuza26/First_agent_template: direct link, hf CLI and curl.
- Browser
- Download file 4.35 kB
-
https://huggingface.co/spaces/murtuza26/First_agent_template/resolve/main/app.py
- Command line
-
hf download hf://spaces/murtuza26/First_agent_template/app.py
-
curl -L -o app.py https://huggingface.co/spaces/murtuza26/First_agent_template/resolve/main/app.py
4.35 kB
| import json | |
| import yaml | |
| from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool | |
| from tools.final_answer import FinalAnswerTool | |
| from Gradio_UI import GradioUI | |
| # Load prompt templates from prompts.yaml | |
| try: | |
| with open("prompts.yaml", 'r') as stream: | |
| prompt_templates = yaml.safe_load(stream) | |
| except Exception as e: | |
| print(f"⚠️ Error loading prompt templates: {e}") | |
| prompt_templates = {} | |
| # Research Tool (Limits articles to avoid hitting API limits) | |
| def limited_research_tool(query: str, max_articles: int = 3) -> str: | |
| """Fetches only the first few research articles to avoid search limit errors. | |
| Args: | |
| query: The research topic to search online. | |
| max_articles: Number of articles to retrieve and summarize (default: 3). | |
| Returns: | |
| A summarized version of the key insights from the articles. | |
| """ | |
| print(f"🔍 Researching: {query} (Max {max_articles} articles)") | |
| research_tool = DuckDuckGoSearchTool() # Ensure tool is initialized | |
| try: | |
| # Get search results (limit articles) | |
| search_results = research_tool.run(query)[:max_articles] | |
| # Summarize articles (Placeholder summarizer) | |
| summaries = [f"Summary of {article}" for article in search_results] | |
| return "\n\n".join(summaries) if summaries else "No useful research found." | |
| except Exception as e: | |
| print(f"❌ Research failed: {e}") | |
| return "Research unavailable at the moment." | |
| # Writer Tool (Formats research into an article draft) | |
| def writer_tool(research_data: str) -> str: | |
| """ | |
| Creates a structured article draft based on research data. | |
| Args: | |
| research_data: A string containing summarized research insights, typically | |
| generated by the limited_research_tool function. Each summary | |
| is separated by two newline characters and represents a key | |
| point or source. | |
| Returns: | |
| A draft article in string format, structured using the provided research data. | |
| """ | |
| return f"📄 Draft article:\n{research_data}" | |
| # Editor Tool (Refines and finalizes the article) | |
| def editor_tool(draft: str) -> str: | |
| """ | |
| Refines and enhances the draft article. | |
| Args: | |
| draft: A string representing the initial draft of an article, usually generated | |
| by the writer_tool. This draft includes summarized research content | |
| and serves as the basis for polishing the final article. | |
| Returns: | |
| A string containing the improved and refined version of the article. | |
| """ | |
| return f"✍️ Edited article:\n{draft}" | |
| # Final Answer Tool (Ensures structured output) | |
| final_answer = FinalAnswerTool() | |
| # Define LLM Model | |
| model = HfApiModel( | |
| max_tokens=2096, | |
| temperature=0.5, | |
| model_id='Qwen/Qwen2.5-Coder-32B-Instruct', | |
| ) | |
| # Researcher Agent (Uses Limited Research Tool) | |
| researcher = CodeAgent( | |
| model=model, | |
| tools=[limited_research_tool], | |
| max_steps=6, | |
| verbosity_level=2, | |
| name="Researcher", | |
| description=prompt_templates.get("managed_agent", {}).get("researcher", {}).get("task", "Research topic details."), | |
| prompt_templates=prompt_templates, | |
| ) | |
| # Writer Agent | |
| writer = CodeAgent( | |
| model=model, | |
| tools=[writer_tool], | |
| max_steps=6, | |
| verbosity_level=2, | |
| name="Writer", | |
| description=prompt_templates.get("managed_agent", {}).get("writer", {}).get("task", "Write an article draft."), | |
| prompt_templates=prompt_templates, | |
| ) | |
| # Editor Agent (Includes Final Answer Tool) | |
| editor = CodeAgent( | |
| model=model, | |
| tools=[editor_tool, final_answer], | |
| max_steps=6, | |
| verbosity_level=2, | |
| name="Editor", | |
| description=prompt_templates.get("managed_agent", {}).get("editor", {}).get("task", "Edit and finalize an article."), | |
| prompt_templates=prompt_templates, | |
| ) | |
| # Orchestrator Agent (Manages Research, Writing, and Editing) | |
| orchestrator_agent = CodeAgent( | |
| model=model, | |
| tools=[limited_research_tool, writer_tool, editor_tool, final_answer], | |
| max_steps=6, | |
| verbosity_level=2, | |
| name="Orchestrator", | |
| description="An agent that coordinates research, writing, and editing.", | |
| prompt_templates=prompt_templates, | |
| ) | |
| # Launch Gradio UI | |
| print("🚀 Launching Gradio UI...") | |
| GradioUI(orchestrator_agent).launch() | |