from smolagents import Tool import os import asyncio from ressources_getter import save_file, \ get_prompt_with_file_content, extract_text_from_file, convert_excel_to_text, delete_tmp_files from hf_api import get_file_by_task_id from agent_websearch import create_wikipedia_agent from agent_multimedia import create_multimedia_agent from agent_code import create_code_analyzer_agent from smolagents import ToolCallingAgent, LiteLLMModel from dotenv import load_dotenv load_dotenv() agent_wikipedia = create_wikipedia_agent() agent_multimedia = create_multimedia_agent() agent_code = create_code_analyzer_agent() gemini_flash_manager_model = LiteLLMModel(model_id="gemini/gemini-2.5-flash", api_key=os.getenv("GOOGLE_API_KEY")) manager_agent = ToolCallingAgent( tools=[extract_text_from_file,convert_excel_to_text,delete_tmp_files], # Les agents workers sont des outils pour le manager model=gemini_flash_manager_model, managed_agents=[agent_wikipedia,agent_multimedia,agent_code], name="manager_agent", description=( "Je suis un agent manager. Mon rôle est de comprendre les requêtes complexes, " "de les décomposer en tâches plus petites et de déléguer ces tâches " "aux agents spécialisés (WikiAgent) pour obtenir la meilleure réponse. " "Je coordonne leurs actions et synthétise les résultats." "Le résultat final est une réponse concise et directe à la requête de l'utilisateur. Si la requête applique un resultat numérique, on ne retourne que le nombre." "Après avoir répondu à la requête, je supprime les fichiers temporaires téléchargés pour économiser de l'espace disque avec l'outil delete_tmp_files." "Si tu ne trouve pas une réponse satisfaisante sous 5 étapes ou que tu n'as pas les outils pour y répondre, renvoie une chaine de caractères vide." ) ) # Pour interagir avec l'agent manager async def run_multi_agent_system(prompt: str): print(f"\nRequête au Manager : {prompt}") return manager_agent.run(prompt,max_steps=5) class BasicAgent: task_id:str file_content_type:str agent = manager_agent def __init__(self): print("BasicAgent initialized.") def __call__(self, question: str, task_id :str) -> str: print(f"Agent received question (first 50 chars): {question[:50]}...") file_bytes,file_name=get_file_by_task_id(task_id) print(file_name) file_path = save_file(file_bytes,file_name) prompt = get_prompt_with_file_content(question,file_path) answer = asyncio.run(run_multi_agent_system(prompt)) print(f"Agent returning fixed answer: {answer}") return answer # if __name__ == "__main__": # agent = BasicAgent() # question = ".rewsna eht sa 'tfel' drow eht fo etisoppo eht etirw ,ecnetnes siht dnatsrednu uoy fI" # task_id = "2d83110e-a098-4ebb-9987-066c06fa42d0" # response = agent(question,task_id) # print(response)