Spaces:
Runtime error
Runtime error
| import os | |
| import requests | |
| from markdownify import markdownify as md | |
| from requests.exceptions import RequestException | |
| import re | |
| from transformers.agents import ( | |
| ReactCodeAgent, | |
| ReactJsonAgent, | |
| HfApiEngine, | |
| ManagedAgent, | |
| stream_to_gradio, | |
| Tool, | |
| ) | |
| from transformers.agents.search import DuckDuckGoSearchTool | |
| import gradio as gr | |
| import datetime | |
| from huggingface_hub import login | |
| # Log in to Hugging Face | |
| hf_token = os.getenv("hf_token") | |
| login(hf_token) | |
| model = "meta-llama/Meta-Llama-3.1-70B-Instruct" | |
| # Define the VisitWebpageTool | |
| class VisitWebpageTool(Tool): | |
| name = "visit_webpage" | |
| description = "Visits a webpage at the given url and returns its content as a markdown string." | |
| inputs = { | |
| "url": { | |
| "type": "string", | |
| "description": "The url of the webpage to visit.", | |
| } | |
| } | |
| output_type = "string" | |
| def forward(self, url: str) -> str: | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| markdown_content = md(response.text).strip() | |
| markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content) | |
| return markdown_content | |
| except RequestException as e: | |
| return f"Error fetching the webpage: {str(e)}" | |
| except Exception as e: | |
| return f"An unexpected error occurred: {str(e)}" | |
| visit_page_tool = VisitWebpageTool() | |
| # Set up the multi-agent system | |
| llm_engine = HfApiEngine(model) | |
| # Agent to clarify specifics | |
| clarify_agent = ReactJsonAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| ) | |
| # Agent to plan the project | |
| plan_agent = ReactJsonAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| ) | |
| # Agent to break the plan into tasks | |
| task_agent = ReactJsonAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| ) | |
| # Agent to execute tasks | |
| execute_agent = ReactCodeAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| additional_authorized_imports=['requests', 'bs4'] | |
| ) | |
| # Agent to review code | |
| review_agent = ReactCodeAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| additional_authorized_imports=['requests', 'bs4', 'transformers'] | |
| ) | |
| # Agent to revise code | |
| revise_agent = ReactCodeAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| max_iterations=20, | |
| ) | |
| # Managed agents | |
| managed_clarify_agent = ManagedAgent( | |
| agent=clarify_agent, | |
| name="clarify_agent", | |
| description="Clarifies project specifics if not given in the project description.", | |
| ) | |
| managed_plan_agent = ManagedAgent( | |
| agent=plan_agent, | |
| name="plan_agent", | |
| description="Plans the project.", | |
| ) | |
| managed_task_agent = ManagedAgent( | |
| agent=task_agent, | |
| name="task_agent", | |
| description="Breaks the plan into tasks.", | |
| ) | |
| managed_execute_agent = ManagedAgent( | |
| agent=execute_agent, | |
| name="execute_agent", | |
| description="Executes the tasks.", | |
| ) | |
| managed_review_agent = ManagedAgent( | |
| agent=review_agent, | |
| name="review_agent", | |
| description="Reviews the code written in completion of tasks.", | |
| ) | |
| managed_revise_agent = ManagedAgent( | |
| agent=revise_agent, | |
| name="revise_agent", | |
| description="Revises the code if needed.", | |
| ) | |
| # Manager agent | |
| manager_agent = ReactCodeAgent( | |
| tools=[], | |
| llm_engine=llm_engine, | |
| managed_agents=[ | |
| managed_clarify_agent, | |
| managed_plan_agent, | |
| managed_task_agent, | |
| managed_execute_agent, | |
| managed_review_agent, | |
| managed_revise_agent, | |
| ], | |
| additional_authorized_imports=["time", "datetime"], | |
| ) | |
| # Implement the Gradio interface | |
| def interact_with_agent(task): | |
| messages = [] | |
| messages.append(gr.ChatMessage(role="user", content=task)) | |
| yield messages | |
| try: | |
| for msg in stream_to_gradio(manager_agent, task): | |
| messages.append(msg) | |
| yield messages + [ | |
| gr.ChatMessage(role="assistant", content="β³ Task not finished yet!") | |
| ] | |
| except Exception as e: | |
| messages.append(gr.ChatMessage(role="assistant", content=f"Error: {str(e)}")) | |
| yield messages | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Multi-agent Software Team") | |
| gr.Markdown("Gradio space based on the multiagent_web_assistant cookbook https://huggingface.co/learn/cookbook/multiagent_web_assistant") | |
| text_input = gr.Textbox(lines=1, label="Project Description", value="Create a simple web app that allows users to upload images and apply filters.") | |
| submit = gr.Button("Start Project Development") | |
| chatbot = gr.Chatbot( | |
| label="Agent", | |
| type="messages", | |
| avatar_images=( | |
| None, | |
| "https://em-content.zobj.net/source/twitter/53/robot-face_1f916.png", | |
| ), | |
| ) | |
| submit.click(interact_with_agent, [text_input], [chatbot]) | |
| if __name__ == "__main__": | |
| demo.launch(share=True) | |