lucasnseq's picture
Update agent.py
a5d264f verified
# Libs
import os
import yaml
import importlib
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
VisitWebpageTool,
WikipediaSearchTool,
OpenAIServerModel,
SpeechToTextTool,
FinalAnswerTool,
)
# Local
from tools import GetTaskFileTool, LoadXlsxFileTool, LoadTextFileTool, AnalyzeImageTool
sys_instruction = (
"You are a general-purpose AI assistant. For each question, first reason through your answer, "
"then use the 'final_answer' tool to submit ONLY the final output.\n"
"Your final answer MUST be one of the following:\n"
"- A number (without commas or units, unless explicitly instructed),\n"
"- A short phrase,\n"
"- A comma-separated list of numbers or strings.\n"
"For strings, avoid articles and abbreviations, and write digits fully unless told otherwise. "
"Apply these formatting rules consistently to each item in a list."
)
prompts = yaml.safe_load(
importlib.resources.files("smolagents.prompts").joinpath("code_agent.yaml").read_text()
)
prompts["system_prompt"] = sys_instruction + prompts["system_prompt"]
# req_instruction = (
req_instruction = (
"You are a highly capable and autonomous agent named {{name}}, designed to solve complex tasks efficiently.\n"
"A valued client has assigned you the following task:\n"
"---\n"
"Task:\n"
"{{task}}\n"
"---\n"
"To complete this task successfully, follow these steps carefully:\n"
" 1. Comprehend the task and identify the intended goal.\n"
" 2. Break the task into clear, logical steps.\n"
" 3. Select and prepare the tools or resources you need.\n"
" 4. Set up the required environment or context.\n"
" 5. Execute each step methodically.\n"
" 6. Monitor outcomes and identify any deviations.\n"
" 7. Revise your plan if necessary based on feedback.\n"
" 8. Maintain internal state and track progress.\n"
" 9. Verify that the goal has been fully achieved.\n"
" 10. Present the final result clearly and concisely.\n"
"If you succeed, you will be rewarded with a significant bonus.\n\n"
"Your final_answer MUST be:\n"
"- a number (retain its original type; do not include units),\n"
"- a concise phrase,\n"
"- or a comma-separated list of numbers or strings (no articles, no abbreviations).\n\n"
"Only the content passed to the final_answer tool will be preserved. Any other content will be discarded."
)
prompts['managed_agent']['task'] = req_instruction
prompts['managed_agent']['report'] = "{{final_answer}}"
def get_model(
model_id: str = "gpt-4.1-mini",
model_temperature: float = 0.7,
):
"""
Create and return an OpenAIServerModel instance with the specified model ID and temperature.
"""
# Load the model
if "gpt" in model_id:
model = OpenAIServerModel(
model_id=model_id,
api_key=os.getenv("OPENAI_API_KEY"),
temperature=model_temperature
)
elif "gemini" in model_id:
model = OpenAIServerModel(
model_id=model_id,
api_key=os.getenv("GOOGLEAI_API_KEY"),
api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
temperature=model_temperature
)
else:
raise ValueError(f"Unknown model_id: {model_id}. Supported models are gpt and gemini.")
return model
def get_agent(
model_id: str = "gpt-4.1-mini",
model_temperature: float = 0.7,
agent_max_steps: int = 15,
):
"""
Create and return a CodeAgent instance with the specified model and tools.
"""
# Defne the agent with the tools
agent = CodeAgent(
tools=[
DuckDuckGoSearchTool(),
VisitWebpageTool(),
WikipediaSearchTool(),
GetTaskFileTool(),
SpeechToTextTool(),
LoadXlsxFileTool(),
LoadTextFileTool(),
AnalyzeImageTool(model_id=model_id),
FinalAnswerTool(),
],
model=get_model(
model_id=model_id,
model_temperature=model_temperature,
),
prompt_templates=prompts,
max_steps=agent_max_steps,
additional_authorized_imports = ["pandas"],
name="GAIAAgent",
)
return agent
def test():
"""test tests something. """
# Test the agent with a simple task
return True