import contextlib import io import logging import os logger = logging.getLogger(__name__) from models import GoogleModelID, OpenRouterModelID from settings import Settings from smolagents import LiteLLMModel, CodeAgent from smolagents import GoogleSearchTool, VisitWebpageTool, FinalAnswerTool from smolagents.local_python_executor import BASE_PYTHON_TOOLS from tools import GetTaskFileTool, VideoUnderstandingTool, AudioUnderstandingTool from tools import ChessPiecePlacementTool, ChessGameFenTool, BestChessMoveTool, ConvertChessMoveTool # Base tools may use these to process files BASE_PYTHON_TOOLS["open"] = open BASE_PYTHON_TOOLS["os"] = os BASE_PYTHON_TOOLS["io"] = io BASE_PYTHON_TOOLS["contextlib"] = contextlib BASE_PYTHON_TOOLS["exec"] = exec class BasicAgent: def __init__(self, settings: Settings): self.agent = CodeAgent( add_base_tools=False, tools=[GoogleSearchTool("serper"), VisitWebpageTool(max_output_length=100000), FinalAnswerTool(), GetTaskFileTool(settings), VideoUnderstandingTool(settings, GoogleModelID.GEMINI_2_0_FLASH), AudioUnderstandingTool(settings, GoogleModelID.GEMINI_2_0_FLASH), ChessPiecePlacementTool(), ChessGameFenTool(settings, OpenRouterModelID.GPT_O4_MINI), BestChessMoveTool(settings), ConvertChessMoveTool(settings, OpenRouterModelID.QWEN_3_14B_FREE) ], additional_authorized_imports=[ "unicodedata", "stat", "datetime", "random", "pandas", "itertools", "math", "statistics", "queue", "time", "collections", "re", "os" ], max_steps=10, verbosity_level=1, model=LiteLLMModel( # model_id=OpenRouterModelID.GPT_O4_MINI, model_id=OpenRouterModelID.GPT_4_1_MINI, # model_id=OpenRouterModelID.GROK_3_BETA, # model_id=OpenRouterModelID.GROK_3_MINI_BETA, api_key = settings.openrouter_api_key.get_secret_value(), temperature=0.0, timeout=180 ) ) # print("BasicAgent initialized.") def __call__(self, question: str) -> str: logger.info(f"Agent received question (first 50 chars): {question[:50]}...") final_answer = self.agent.run(question) logger.info(f"Agent returning fixed answer: {final_answer}") return final_answer