Spaces:
Runtime error
Runtime error
| import os | |
| import time | |
| from smolagents import ( | |
| ToolCallingAgent, | |
| CodeAgent, | |
| MCPClient, | |
| WikipediaSearchTool, | |
| InferenceClientModel, | |
| ) | |
| max_steps_internet_researcher = 10 | |
| max_steps_manager = 10 | |
| max_retries = 3 | |
| cooldown_on_error = 10 | |
| qwuen_72b = "Qwen/Qwen2.5-72B-Instruct" | |
| model_235b_thinking = "qwen/qwen3-235b-a22b-thinking-2507" | |
| model_235b_instruct = "qwen/Qwen3-235B-A22B-Instruct-2507" | |
| model_235b = "qwen/qwen3-235b-a22b-fp8" | |
| model_480b = "qwen/qwen3-coder-480b-a35b-instruct" | |
| def get_hf_model(): | |
| hf_token = os.getenv("HF_TOKEN") | |
| return InferenceClientModel(model_235b_instruct, token=hf_token, timeout=300) | |
| def get_tavily_mcp_client(): | |
| tavily_token = os.getenv("TAVILY_TOKEN") | |
| # context manager + Streamable HTTP transport: | |
| return MCPClient( | |
| { | |
| "url": f"https://mcp.tavily.com/mcp/?tavilyApiKey={tavily_token}", | |
| "transport": "streamable-http", | |
| } | |
| ) | |
| class Agent: | |
| def __init__(self): | |
| model = get_hf_model() | |
| mcpClient = get_tavily_mcp_client() | |
| tools = mcpClient.get_tools() | |
| tools.append( | |
| WikipediaSearchTool( | |
| user_agent="Research (Elias.Rosendahl.Jensen-CIC@ibm.com)", | |
| language="en", | |
| content_type="summary", | |
| extract_format="WIKI", | |
| ) | |
| ) | |
| internet_reseacher = ToolCallingAgent( | |
| tools=tools, | |
| model=model, | |
| max_steps=max_steps_internet_researcher, | |
| name="web_search_agent", | |
| description="Runs web searches for you.", | |
| ) | |
| agent = CodeAgent( | |
| tools=[], | |
| managed_agents=[internet_reseacher], | |
| max_steps=max_steps_manager, | |
| model=model, | |
| ) | |
| self.agent = agent | |
| print("BasicAgent initialized.") | |
| def __call__(self, question: str) -> str: | |
| prompt = f"You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer with ONLY the final answer. YOUR FINAL ANSWER should be a number OR as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a number, don't use comma to write your number neither use units such as $ or percent sign unless specified otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise. If you are asked for a comma separated list, apply the above rules depending of whether the element to be put in the list is a number or a string. the question is: {question}" | |
| print(f"Agent received question: {prompt}...") | |
| for _ in range(0, max_retries): | |
| try: | |
| answer = self.agent.run(prompt) | |
| if isinstance(answer, str): | |
| if "AGENT ERROR" in answer: | |
| print("agent error: ", answer) | |
| time.sleep(cooldown_on_error) | |
| continue | |
| print(f"Agent returning fixed answer: {answer}") | |
| return answer | |
| except Exception as e: | |
| print("Other error: ", e) | |
| time.sleep(cooldown_on_error) | |
| return "ERROR: no more retries" | |