Nicolas Fremondiere commited on
Commit
067e6fe
·
1 Parent(s): b830998

Use multiAgent instead of tools

Browse files
Files changed (5) hide show
  1. agent.py +7 -36
  2. agent_code.py +1 -0
  3. agent_multimedia.py +2 -1
  4. agent_websearch.py +3 -2
  5. requirements.txt +2 -1
agent.py CHANGED
@@ -17,51 +17,22 @@ agent_wikipedia = create_wikipedia_agent()
17
  agent_multimedia = create_multimedia_agent()
18
  agent_code = create_code_analyzer_agent()
19
 
20
- class WikipediaAgentTool(Tool):
21
- name = "WikipediaAgentTool"
22
- description = "Delegates tasks to the WebSearch agent."
23
- inputs = {"query": {"type": "string", "description": "Search query for Wikipedia or Web search."}}
24
- output_type = "string"
25
- def forward(self, query: str) -> str:
26
- return agent_wikipedia.run(query,max_steps=5)
27
-
28
- class MediaAgentTool(Tool):
29
- name = "MediaAgentTool"
30
- description = """Delegates tasks to the Media agent. It can search for videos on YouTube to download them localy.
31
- It can also analyze local video,image and music content."""
32
- inputs = {"query": {"type": "string", "description": "Search query with a Youtube url or query with the file path."}}
33
- output_type = "string"
34
-
35
- def forward(self, query: str) -> str:
36
- # Utilise l'agent vidéo pour rechercher sur YouTube
37
- return agent_multimedia.run(query,max_steps=5)
38
-
39
-
40
- class CodeAgentTool(Tool):
41
- name = "CodeAgentTool"
42
- description = """Delegates tasks to the Code agent. It can execute Python code and return the output."""
43
- inputs = {"query": {"type": "string", "description": "Query with file path of the code."}}
44
- output_type = "string"
45
-
46
- def forward(self, query: str) -> str:
47
- # Utilise l'agent code pour exécuter du code Python
48
- return agent_code.run(query,max_steps=5)
49
-
50
-
51
 
52
  gemini_flash_manager_model = LiteLLMModel(model_id="gemini/gemini-2.5-flash", api_key=os.getenv("GOOGLE_API_KEY"))
53
 
54
 
55
  manager_agent = ToolCallingAgent(
56
- tools=[WikipediaAgentTool(),MediaAgentTool(),CodeAgentTool(),extract_text_from_file,convert_excel_to_text,delete_tmp_files], # Les agents workers sont des outils pour le manager
57
  model=gemini_flash_manager_model,
58
- name="ManagerAgent",
 
59
  description=(
60
  "Je suis un agent manager. Mon rôle est de comprendre les requêtes complexes, "
61
  "de les décomposer en tâches plus petites et de déléguer ces tâches "
62
  "aux agents spécialisés (WikiAgent) pour obtenir la meilleure réponse. "
63
  "Je coordonne leurs actions et synthétise les résultats."
64
- "Après avoir répondu à la requête, je supprime les fichiers temporaires téléchargés pour économiser de l'espace disque."
 
65
  "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."
66
  )
67
  )
@@ -91,7 +62,7 @@ class BasicAgent:
91
 
92
  # if __name__ == "__main__":
93
  # agent = BasicAgent()
94
- # question = "Review the chess position provided in the image. It is black's turn. Provide the correct next move for black which guarantees a win. Please provide your response in algebraic notation."
95
- # task_id = "cca530fc-4052-43b2-b130-b30968d8aa44"
96
  # response = agent(question,task_id)
97
  # print(response)
 
17
  agent_multimedia = create_multimedia_agent()
18
  agent_code = create_code_analyzer_agent()
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  gemini_flash_manager_model = LiteLLMModel(model_id="gemini/gemini-2.5-flash", api_key=os.getenv("GOOGLE_API_KEY"))
22
 
23
 
24
  manager_agent = ToolCallingAgent(
25
+ tools=[extract_text_from_file,convert_excel_to_text,delete_tmp_files], # Les agents workers sont des outils pour le manager
26
  model=gemini_flash_manager_model,
27
+ managed_agents=[agent_wikipedia,agent_multimedia,agent_code],
28
+ name="manager_agent",
29
  description=(
30
  "Je suis un agent manager. Mon rôle est de comprendre les requêtes complexes, "
31
  "de les décomposer en tâches plus petites et de déléguer ces tâches "
32
  "aux agents spécialisés (WikiAgent) pour obtenir la meilleure réponse. "
33
  "Je coordonne leurs actions et synthétise les résultats."
34
+ "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."
35
+ "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."
36
  "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."
37
  )
38
  )
 
62
 
63
  # if __name__ == "__main__":
64
  # agent = BasicAgent()
65
+ # question = ".rewsna eht sa 'tfel' drow eht fo etisoppo eht etirw ,ecnetnes siht dnatsrednu uoy fI"
66
+ # task_id = "2d83110e-a098-4ebb-9987-066c06fa42d0"
67
  # response = agent(question,task_id)
68
  # print(response)
agent_code.py CHANGED
@@ -34,6 +34,7 @@ Sois concis et direct dans tes réponses. Concentre-toi uniquement sur l'exécut
34
  """
35
 
36
  code_analyzer_agent = CodeAgent(
 
37
  model=model,
38
  tools=[],
39
  description=system_prompt,
 
34
  """
35
 
36
  code_analyzer_agent = CodeAgent(
37
+ name="code_analyzer_agent",
38
  model=model,
39
  tools=[],
40
  description=system_prompt,
agent_multimedia.py CHANGED
@@ -95,12 +95,13 @@ def create_multimedia_agent():
95
  Lorsque tu reçois un lien d'une vidéo youtube, utilise la fonction 'download_video_youtube' pour télécharger la vidéo.
96
  Si tu as un fichier video,image ou son local, utilise la fonction 'analyze_media_content' pour analyser le contenu.
97
  Utilise tes outils pour répondre aux questions de l'utilisateur concernant le contenu du fichier.
98
- Fait bien attention à supprimer les fichiers temporaires téléchargées après analyse pour économiser de l'espace disque.
99
  Fournis un réponse concise et sans points ou virgules.
100
  """
101
 
102
  # Crée l'agent en lui passant l'instance de LiteLLMModel
103
  video_agent = ToolCallingAgent(
 
104
  model=gemini_flash_vlm_model, # Passe l'instance LiteLLMModel ici
105
  tools=[analyze_media_content, download_video_youtube,delete_tmp_files], # Liste des outils que l'agent peut utiliser
106
  description=system_prompt,
 
95
  Lorsque tu reçois un lien d'une vidéo youtube, utilise la fonction 'download_video_youtube' pour télécharger la vidéo.
96
  Si tu as un fichier video,image ou son local, utilise la fonction 'analyze_media_content' pour analyser le contenu.
97
  Utilise tes outils pour répondre aux questions de l'utilisateur concernant le contenu du fichier.
98
+ Fait bien attention à supprimer les fichiers temporaires téléchargées après analyse pour économiser de l'espace disque avec l'outil delete_tmp_files.
99
  Fournis un réponse concise et sans points ou virgules.
100
  """
101
 
102
  # Crée l'agent en lui passant l'instance de LiteLLMModel
103
  video_agent = ToolCallingAgent(
104
+ name="multimedia_analysis_agent",
105
  model=gemini_flash_vlm_model, # Passe l'instance LiteLLMModel ici
106
  tools=[analyze_media_content, download_video_youtube,delete_tmp_files], # Liste des outils que l'agent peut utiliser
107
  description=system_prompt,
agent_websearch.py CHANGED
@@ -3,6 +3,8 @@ import requests
3
  from bs4 import BeautifulSoup
4
  from typing import List, Dict, Any
5
  import os
 
 
6
  from dotenv import load_dotenv
7
  from smolagents import CodeAgent, LiteLLMModel, tool, DuckDuckGoSearchTool
8
 
@@ -185,11 +187,10 @@ def create_wikipedia_agent():
185
  """
186
  # Création de l'agent avec les outils
187
  return CodeAgent(
 
188
  tools=[
189
  search_internet,
190
  get_wikipedia_page,
191
- # get_featured_articles_by_year,
192
- # search_wikipedia_category
193
  ],
194
  model=model,
195
  description=system_prompt,
 
3
  from bs4 import BeautifulSoup
4
  from typing import List, Dict, Any
5
  import os
6
+
7
+ from ddgs import DDGS
8
  from dotenv import load_dotenv
9
  from smolagents import CodeAgent, LiteLLMModel, tool, DuckDuckGoSearchTool
10
 
 
187
  """
188
  # Création de l'agent avec les outils
189
  return CodeAgent(
190
+ name="websearch_agent",
191
  tools=[
192
  search_internet,
193
  get_wikipedia_page,
 
 
194
  ],
195
  model=model,
196
  description=system_prompt,
requirements.txt CHANGED
@@ -13,4 +13,5 @@ wikipedia-api
13
  beautifulsoup4
14
  yt_dlp
15
  google-generativeai
16
- openpyxl
 
 
13
  beautifulsoup4
14
  yt_dlp
15
  google-generativeai
16
+ openpyxl
17
+ duckduckgo_search