|
|
|
import os
|
|
import yaml
|
|
import importlib
|
|
|
|
from smolagents import (
|
|
CodeAgent,
|
|
DuckDuckGoSearchTool,
|
|
VisitWebpageTool,
|
|
WikipediaSearchTool,
|
|
OpenAIServerModel,
|
|
SpeechToTextTool,
|
|
FinalAnswerTool,
|
|
)
|
|
|
|
|
|
from tools import GetTaskFileTool, LoadXlsxFileTool, LoadTextFileTool
|
|
|
|
sys_instruction = (
|
|
"You are a general AI assistant. Answer each question by reporting your thoughts, "
|
|
"then submit ONLY a concise text using the 'final_answer' tool. "
|
|
"Final answer MUST be a number, a few words, or a comma-separated list of numbers and/or strings. "
|
|
"For numbers, avoid commas and units unless specified. For strings, avoid articles and abbreviations, "
|
|
"and write digits in full unless stated otherwise. Apply these rules for list elements as well."
|
|
)
|
|
|
|
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 = (
|
|
"You are an expert and helpful agent named {{name}}.\n"
|
|
"A valued client has assigned you the following task:\n"
|
|
"---\n"
|
|
"Task:\n"
|
|
"{{task}}\n"
|
|
"---\n"
|
|
"Use your tools as needed. Before completing the task, plan your actions carefully.\n"
|
|
"While completing the task, think step by step. And after completing the task, carefully double check your solution.\n\n"
|
|
"If you respond correctly, you will be rewarded with a very high bonus.\n\n"
|
|
"Your final_answer MUST be:\n"
|
|
"- a number,\n"
|
|
"- a short phrase,\n"
|
|
"- or a comma-separated list of numbers or strings (no articles or abbreviations).\n\n"
|
|
"Only the content passed to the final_answer tool will be preserved—everything else 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.
|
|
"""
|
|
|
|
model = OpenAIServerModel(
|
|
model_id=model_id,
|
|
api_key=os.getenv("OPENAI_API_KEY"),
|
|
temperature=model_temperature
|
|
)
|
|
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.
|
|
"""
|
|
|
|
|
|
agent = CodeAgent(
|
|
tools=[
|
|
DuckDuckGoSearchTool(),
|
|
VisitWebpageTool(),
|
|
WikipediaSearchTool(),
|
|
GetTaskFileTool(),
|
|
SpeechToTextTool(),
|
|
LoadXlsxFileTool(),
|
|
LoadTextFileTool(),
|
|
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 |