from smolagents import CodeAgent, HfApiModel, load_tool, tool import datetime import pytz import yaml # ==== Import des tools définis dans tools/ ==== from tools.final_answer import FinalAnswerTool #from tools.web_search import DuckDuckGoSearchTool from tools.visit_webpage import VisitWebpageTool from tools.http_search import HttpSearchTool from tools.image_wrapper import save_image_to_tmp from Gradio_UI import GradioUI # ==== Nouveaux tools Python ==== @tool def my_custom_tool(arg1: str, arg2: int) -> str: """Tool de démonstration. Retourne une phrase en français décrivant l'appel effectué. Args: arg1: premier argument textuel. arg2: second argument numérique. """ return f'Le tool my_custom_tool a été appelé avec arg1="{arg1}" et arg2={arg2}.' @tool def get_current_time_in_timezone(timezone: str) -> str: """Retourne l'heure locale actuelle dans un fuseau horaire donné. Args: timezone: Fuseau horaire valide (ex: 'Europe/Paris', 'America/New_York'). """ try: tz = pytz.timezone(timezone) local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") return f"L'heure locale actuelle dans {timezone} est : {local_time}" except Exception as e: return f"Erreur pour le fuseau '{timezone}' : {str(e)}" @tool def generate_image_and_save(prompt: str) -> str: """Génère une image via image_generation_tool, la sauvegarde dans /tmp et renvoie le chemin du fichier. Args: prompt: description textuelle de l'image à générer. """ img = image_generation_tool(prompt=prompt) filepath = save_image_to_tmp(img) return f"Image sauvegardée dans : {filepath}" @tool def generate_image(prompt: str) -> object: """Génère une image à partir d'un prompt et la renvoie directement. L'UI Gradio pourra l'afficher si elle gère les objets image. Args: prompt: description textuelle de l'image. """ img = image_generation_tool(prompt=prompt) return img # ==== Instanciation des tools existants ==== final_answer = FinalAnswerTool() #web_search = DuckDuckGoSearchTool() visit_webpage = VisitWebpageTool() http_search = HttpSearchTool() # Tool Hub text->image (prévu dans le cours) image_generation_tool = load_tool( "agents-course/text-to-image", trust_remote_code=True, ) # ==== Modèle LLM (Qwen2.5 Coder 32B Instruct) ==== model = HfApiModel( max_tokens=2096, temperature=0.5, model_id="Qwen/Qwen2.5-Coder-32B-Instruct", custom_role_conversions=None, ) # ==== Prompts (prompts.yaml) ==== with open("prompts.yaml", "r") as stream: prompt_templates = yaml.safe_load(stream) # ==== Création de l’agent ==== agent = CodeAgent( model=model, tools=[ #web_search, # DuckDuckGo web search http_search, visit_webpage, # lecture de page web image_generation_tool, # génération d’image generate_image_and_save, generate_image, my_custom_tool, # tool custom get_current_time_in_timezone, final_answer, # final_answer doit être présent ], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates, ) GradioUI(agent).launch()