Spaces:
Sleeping
Sleeping
from smolagents import ( | |
LiteLLMModel, | |
OpenAIServerModel, | |
ToolCallingAgent, | |
CodeAgent, | |
VisitWebpageTool, | |
WikipediaSearchTool, | |
SpeechToTextTool, | |
PythonInterpreterTool, | |
) | |
import os | |
import yaml | |
import time | |
from typing import Optional | |
from tools import MySearchTool, DuckDuckGoSearchTool | |
google_search_tool = {"type": "google_search"} | |
gemini_api_key = os.environ.get("GEMINI_API_KEY", None) | |
open_router_api_key = os.environ.get("OPENROUTER_API_KEY", None) | |
gemini_model = LiteLLMModel( | |
# model_id="gemini/gemini-2.0-flash", | |
model_id="gemini/gemini-2.0-flash-001", | |
api_key=gemini_api_key, | |
tools=[google_search_tool], | |
) | |
# alternative model | |
model = OpenAIServerModel( | |
# model_id='deepseek/deepseek-r1-0528-qwen3-8b:free', | |
# model_id="thudm/glm-4-32b:free" function calling | |
model_id="google/gemini-2.0-flash-exp:free", # function calling support | |
api_key=open_router_api_key, | |
) | |
search_tool = DuckDuckGoSearchTool() | |
speech_tool = SpeechToTextTool() | |
wiki_tool = WikipediaSearchTool() | |
python_tool = PythonInterpreterTool() | |
visit_webpage_tool = VisitWebpageTool() | |
my_search_tool = MySearchTool() | |
with open("prompts.yaml", "r") as stream: | |
prompt_templates = yaml.safe_load(stream) | |
prompt_templates["final_answer"] = { | |
"pre_messages": "", | |
"final_answer": "Here is the final answer from your managed agent '{{name}}':\n{{final_answer}}", | |
"post_messages": "", | |
} | |
class SkynetMultiAgent: | |
def __init__(self): | |
web_agent = ToolCallingAgent( | |
tools=[], | |
model=gemini_model, | |
name="web_search_agent", | |
description=""" | |
This agent has access to Google Search to search for information about a specific topic. | |
""", | |
max_steps=2, | |
prompt_templates=prompt_templates, | |
) | |
self.agent = CodeAgent( | |
tools=[], | |
model=gemini_model, | |
name="manager_agent", | |
description="Manages the web agents and it runs code.", | |
managed_agents=[web_agent], | |
prompt_templates=prompt_templates, | |
max_steps=2, | |
) | |
def __call__(self, question: str, file_path: Optional[str] = None) -> str: | |
print(f"Agent received question (first 50 chars): {question[:50]}...") | |
# Adding extra content if provided | |
if file_path and os.path.exists(file_path): | |
eval_question = f"{question}\n\nFile provided: {file_path}" | |
print(f"Processing question with file: {file_path}") | |
else: | |
eval_question = question | |
time.sleep(2) # 2-second delay | |
fixed_answer = self.agent.run(eval_question, max_steps=5) | |
print(f"Agent returning fixed answer: {fixed_answer}") | |
return fixed_answer | |
class SkynetSingleAgent: | |
def __init__(self): | |
self.agent = ToolCallingAgent( | |
tools=[], | |
model=gemini_model, | |
name="skynet_agent", | |
description="Agent to answer questions and to search in the web using google search tool", | |
prompt_templates=prompt_templates, | |
) | |
def __call__(self, question: str, file_path: Optional[str] = None) -> str: | |
print(f"Agent received question (first 50 chars): {question[:50]}...") | |
# Adding extra content if provided | |
if file_path and os.path.exists(file_path): | |
eval_question = f"{question}\n\nFile provided: {file_path}" | |
print(f"Processing question with file: {file_path}") | |
else: | |
eval_question = question | |
fixed_answer = self.agent.run(eval_question) | |
print(f"Agent returning fixed answer: {fixed_answer}") | |
return fixed_answer | |