Test_Magus / agent.py
SergeyO7's picture
Update agent.py
ea6e8d7 verified
raw
history blame
2.15 kB
from smolagents import CodeAgent, DuckDuckGoSearchTool, WikipediaSearchTool, LiteLLMModel, tool, load_tool # HfApiModel, OpenAIServerModel
from tools.final_answer import FinalAnswerTool
import asyncio
import os
import yaml
class MagAgent:
def __init__(self):
"""Initialize the MagAgent with search tools."""
print("Initializing MagAgent with search tools...")
model = LiteLLMModel(
model_id="gemini/gemini-2.0-flash",
api_key= os.environ.get("GEMINI_KEY"),
max_tokens=8192
)
# Load prompt templates
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
self.agent = CodeAgent(
model= model,
tools=[
DuckDuckGoSearchTool(),
WikipediaSearchTool(),
FinalAnswerToolnswer()
]
)
print("MagAgent initialized.")
async def __call__(self, question: str) -> str:
"""Process a question asynchronously using the MagAgent."""
print(f"MagAgent received question (first 50 chars): {question[:50]}...")
try:
# Define a task with fallback search logic
task = (
f"Answer the following question accurately and concisely: {question}\n"
"First, try searching Wikipedia with 'Mercedes Sosa'. If that fails, "
"use DuckDuckGo to search 'Mercedes Sosa discography 2000-2009'."
)
response = await asyncio.to_thread(
self.agent.run,
task=task
)
if not response or "No Wikipedia page found" in response:
# Fallback response if search fails
response = "Unable to retrieve exact data. Please refine the question or check external sources."
print(f"MagAgent response: {response[:50]}...")
return response
except Exception as e:
error_msg = f"Error processing question: {str(e)}. Check API key or network connectivity."
print(error_msg)
return error_msg