|
|
|
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. |
|
""" |
|
|
|
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. |
|
""" |
|
|
|
|
|
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 |