Nicolas Fremondiere
Use multiAgent instead of tools
067e6fe
Raw
History Blame Contribute Delete
2.98 kB
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)