File size: 2,715 Bytes
476b409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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