sirine1712 commited on
Commit
3258955
·
verified ·
1 Parent(s): 7d0dbc6

Update multiagents.py

Browse files
Files changed (1) hide show
  1. multiagents.py +37 -78
multiagents.py CHANGED
@@ -1,11 +1,9 @@
 
1
 
2
- # a multi agent proposal to solve HF agent course final assignment
3
  import os
4
  import dotenv
5
- from smolagents import CodeAgent
6
- from smolagents import OpenAIServerModel
7
  from tools.fetch import fetch_webpage, search_web
8
- from smolagents import PythonInterpreterTool
9
  from tools.yttranscript import get_youtube_transcript, get_youtube_title_description
10
  from tools.stt import get_text_transcript_from_audio_file
11
  from tools.image import analyze_image
@@ -14,60 +12,32 @@ import myprompts
14
 
15
  dotenv.load_dotenv()
16
 
17
- gemini_model = OpenAIServerModel(
18
- model_id="gemini-2.0-flash",
19
- api_key=os.environ["GEMINI_API_KEY"],
20
- # Google Gemini OpenAI-compatible API base URL
21
- api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
22
- )
23
-
24
- vllm_model = OpenAIServerModel(
25
- model_id="Qwen/Qwen2.5-1.5B-Instruct",
26
- api_base="http://192.168.1.39:18000/v1",
27
- api_key="token-abc123",
28
- )
29
-
30
- openai_41nano_model = OpenAIServerModel(
31
  model_id="llama3-70b-8192",
32
  api_key=os.environ["GROQ_API_KEY"],
33
- api_base="https://api.groq.com/openai/v1"
34
  )
35
 
36
- openai_41mini_model = OpenAIServerModel(
37
- model_id="llama3-70b-8192",
38
- api_key=os.environ["GROQ_API_KEY"],
39
- api_base="https://api.groq.com/openai/v1"
40
- )
41
-
42
-
43
- def check_final_answer(final_answer, agent_memory) -> bool:
44
- """
45
- Check if the final answer is correct.
46
- basic check on the length of the answer.
47
- """
48
  mylog("check_final_answer", final_answer)
49
- # if return answer is more than 200 characters, we will assume it is not correct
50
- if len(str(final_answer)) > 200:
51
- return False
52
- else:
53
- return True
54
-
55
 
 
56
  web_agent = CodeAgent(
57
- model=openai_41nano_model,
58
- tools=[
59
- search_web,
60
- fetch_webpage,
61
- ],
62
  name="web_agent",
63
- description="Use search engine to find webpages related to a subject and get the page content",
64
- additional_authorized_imports=["pandas", "numpy","bs4"],
65
- verbosity_level=1,
66
  max_steps=7,
67
  )
68
 
 
69
  audiovideo_agent = CodeAgent(
70
- model=openai_41nano_model,
71
  tools=[
72
  get_youtube_transcript,
73
  get_youtube_title_description,
@@ -75,19 +45,18 @@ audiovideo_agent = CodeAgent(
75
  analyze_image
76
  ],
77
  name="audiovideo_agent",
78
- description="Extracts information from image, video or audio files from the web",
79
- additional_authorized_imports=["pandas", "numpy","bs4", "requests"],
80
  verbosity_level=1,
81
  max_steps=7,
82
  )
83
 
84
-
85
-
86
  manager_agent = CodeAgent(
87
- model=openai_41mini_model,
88
- tools=[ PythonInterpreterTool()],
89
- managed_agents=[web_agent, audiovideo_agent],
90
- additional_authorized_imports=["pandas", "numpy","bs4"],
91
  planning_interval=5,
92
  verbosity_level=2,
93
  final_answer_checks=[check_final_answer],
@@ -96,42 +65,32 @@ manager_agent = CodeAgent(
96
  description="A manager agent that coordinates the work of other agents to answer questions.",
97
  )
98
 
 
99
  class MultiAgent:
100
  def __init__(self):
101
- print("BasicAgent initialized.")
102
 
103
  def __call__(self, question: str) -> str:
104
- mylog(self.__class__.__name__, question)
105
 
106
  try:
107
- prefix = """You are the top agent of a multi-agent system that can answer questions by coordinating the work of other agents.
108
- You will receive a question and you will decide which agent to use to answer it.
109
- You can use the web_agent to search the web for information and for fetching the content of a web page, or the audiovideo_agent to extract information from video or audio files.
110
- You can also use your own knowledge to answer the question.
111
- You need to respect the output format that is given to you.
112
- Finding the correct answer to the question need reasoning and plannig, read the question carrefully, think step by step and do not skip any steps.
113
- """
114
-
115
- question = prefix + "\nTHE QUESTION:\n" + question + '\n' + myprompts.output_format
116
-
117
- fixed_answer = ""
118
-
119
- fixed_answer = manager_agent.run(question)
120
-
121
- return fixed_answer
122
  except Exception as e:
123
  error = f"An error occurred while processing the question: {e}"
124
  print(error)
125
  return error
126
 
127
-
128
  if __name__ == "__main__":
129
- # Example usage
130
-
131
- question = """
132
- What was the actual enrollment of the Malko competition in 2023?
133
- """
134
  agent = MultiAgent()
135
  answer = agent(question)
136
  print(f"Answer: {answer}")
137
-
 
1
+ # multiagent.py — GAIA-compliant smolagents setup using Groq
2
 
 
3
  import os
4
  import dotenv
5
+ from smolagents import CodeAgent, OpenAIServerModel, PythonInterpreterTool
 
6
  from tools.fetch import fetch_webpage, search_web
 
7
  from tools.yttranscript import get_youtube_transcript, get_youtube_title_description
8
  from tools.stt import get_text_transcript_from_audio_file
9
  from tools.image import analyze_image
 
12
 
13
  dotenv.load_dotenv()
14
 
15
+ # Use Groq’s LLaMA3 (OpenAI-compatible and fast)
16
+ groq_model = OpenAIServerModel(
 
 
 
 
 
 
 
 
 
 
 
 
17
  model_id="llama3-70b-8192",
18
  api_key=os.environ["GROQ_API_KEY"],
19
+ api_base="https://api.groq.com/openai/v1",
20
  )
21
 
22
+ # Final answer validation
23
+ def check_final_answer(final_answer, agent_memory) -> bool:
 
 
 
 
 
 
 
 
 
 
24
  mylog("check_final_answer", final_answer)
25
+ return len(str(final_answer)) <= 200
 
 
 
 
 
26
 
27
+ # ✅ Web agent for search and scraping
28
  web_agent = CodeAgent(
29
+ model=groq_model,
30
+ tools=[search_web, fetch_webpage],
 
 
 
31
  name="web_agent",
32
+ description="Use search engine to find webpages related to a subject and get the page content.",
33
+ additional_authorized_imports=["pandas", "numpy", "bs4"],
34
+ verbosity_level=1,
35
  max_steps=7,
36
  )
37
 
38
+ # ✅ Audio/Video/Image processing agent
39
  audiovideo_agent = CodeAgent(
40
+ model=groq_model,
41
  tools=[
42
  get_youtube_transcript,
43
  get_youtube_title_description,
 
45
  analyze_image
46
  ],
47
  name="audiovideo_agent",
48
+ description="Extracts information from image, video or audio files from the web.",
49
+ additional_authorized_imports=["pandas", "numpy", "bs4", "requests"],
50
  verbosity_level=1,
51
  max_steps=7,
52
  )
53
 
54
+ # ✅ Manager agent (planner/coordinator)
 
55
  manager_agent = CodeAgent(
56
+ model=groq_model,
57
+ tools=[PythonInterpreterTool()],
58
+ managed_agents=[web_agent, audiovideo_agent],
59
+ additional_authorized_imports=["pandas", "numpy", "bs4"],
60
  planning_interval=5,
61
  verbosity_level=2,
62
  final_answer_checks=[check_final_answer],
 
65
  description="A manager agent that coordinates the work of other agents to answer questions.",
66
  )
67
 
68
+ # ✅ Multi-agent system wrapper class
69
  class MultiAgent:
70
  def __init__(self):
71
+ print("MultiAgent system initialized.")
72
 
73
  def __call__(self, question: str) -> str:
74
+ mylog(self.__class__.__name__, question)
75
 
76
  try:
77
+ prefix = """
78
+ You are the top agent of a multi-agent system that can answer questions by coordinating the work of other agents.
79
+ You can use the web_agent to search the web, or the audiovideo_agent to extract info from audio/video/images.
80
+ You must reason step by step and respect the required output format.
81
+ Only return the final answer in the correct format.
82
+ """
83
+ full_prompt = prefix.strip() + "\nTHE QUESTION:\n" + question.strip() + "\n" + myprompts.output_format.strip()
84
+ answer = manager_agent.run(full_prompt)
85
+ return answer
 
 
 
 
 
 
86
  except Exception as e:
87
  error = f"An error occurred while processing the question: {e}"
88
  print(error)
89
  return error
90
 
91
+ # ✅ Manual test (can be triggered from HF Space too)
92
  if __name__ == "__main__":
93
+ question = "What was the actual enrollment of the Malko competition in 2023?"
 
 
 
 
94
  agent = MultiAgent()
95
  answer = agent(question)
96
  print(f"Answer: {answer}")