import os import logging import sys import smolagents LOG = logging.getLogger(__name__) SYSTEM_PROMPT = """ You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer with the following template: FINAL ANSWER: [YOUR FINAL ANSWER]. YOUR FINAL 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), and write the digits in plain text unless specified otherwise. 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. Take the time to plan the steps to reach the solution. Show the steps and then execute the steps. """ # --- Basic Agent Definition --- # ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------ class BasicAgent: def __init__(self, model_id=None): print("BasicAgent initialized.") LOG.warning("logging BasicAgent initialized.") if model_id: self.model_id = model_id else: self.model_id = "HuggingFaceTB/SmolLM2-1.7B-Instruct" # Run locally. self.model = smolagents.TransformersModel( model_id=self.model_id, max_new_tokens=8000, ) #self.model = smolagents.HfApiModel( # max_tokens=8000, # temperature=0.1, # model_id=self.model_id, # custom_role_conversions=None, # ) ddg = smolagents.DuckDuckGoSearchTool() self.tools = [smolagents.DuckDuckGoSearchTool(), smolagents.VisitWebpageTool(), smolagents.FinalAnswerTool()] self.search_agent = smolagents.CodeAgent( name="search_agent", description="Search the web", model=self.model, tools=self.tools, max_steps=6, verbosity_level=2, planning_interval=None, additional_authorized_imports=["duckduckgo_search"], ) self.manager_agent = smolagents.CodeAgent( name="manager_agent", description="Manger of other agents", tools=[smolagents.FinalAnswerTool()], model=self.model, max_steps=6, verbosity_level=2, planning_interval=None, additional_authorized_imports=["duckduckgo_search"], managed_agents=[self.search_agent] ) def __call__(self, question: str) -> str: print(f"Agent received question (first 50 chars): {question[:50]}...") prompt = f"{SYSTEM_PROMPT}\n\n{question}" answer = self.manager_agent.run(prompt) LOG.warning(f"{answer=}") return answer