from smolagents import CodeAgent, LiteLLMModel import os from cloudpathlib import AnyPath from google.genai import types from tools import initialize_all_available_tools class MyAgent: def __init__(self, verbosity_level=0): model = LiteLLMModel( model_id="gemini/gemini-2.0-flash-lite", api_key=os.environ.get('GOOGLE_API_KEY') ) tools = initialize_all_available_tools() self.agent = CodeAgent( tools=tools, model=model, max_steps=10, verbosity_level=verbosity_level ) with AnyPath("gaia_prompt.txt").open("r", encoding='utf-8') as f: self.gaia_prompt = f.read() def get_answer(self, question, additional_data: dict | None = None): prompt = self.make_prompt(question) additional_args = self.make_additional_args(additional_data) answer = self.agent.run(prompt, additional_args=additional_args) answer = str(answer) fa_tmlp = "FINAL ANSWER:" if answer.startswith(fa_tmlp): answer = answer[len(fa_tmlp):] return answer.strip() def make_prompt(self, question): custom_prompt = """ I will ask you a question. Your answer should be a number OR as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a number, don't use comma to write your number neither use units such as $ or percent sign unless specified otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities). If you are asked for a comma separated list, apply the above rules depending of whether the element to be put in the list is a number or a string. Examples: Q: What is the capital of France? A: Paris Q: What is 2+2 equal to? A: 4 """ return custom_prompt + '\n' + question def make_additional_args(self, additional_data: dict | None = None): if additional_data is None: return None return {"additional_file": types.Part.from_bytes( data=additional_data['content'], mime_type=additional_data['Content-Type'], )}