sirine1712 commited on
Commit
a11eed6
·
verified ·
1 Parent(s): dd5985f

Update multiagents.py

Browse files
Files changed (1) hide show
  1. multiagents.py +91 -46
multiagents.py CHANGED
@@ -1,34 +1,73 @@
 
 
1
  import os
2
- from smolagents import CodeAgent, OpenAIServerModel, PythonInterpreterTool
 
 
3
  from tools.fetch import fetch_webpage, search_web
 
4
  from tools.yttranscript import get_youtube_transcript, get_youtube_title_description
5
  from tools.stt import get_text_transcript_from_audio_file
6
  from tools.image import analyze_image
7
  from common.mylogger import mylog
8
- from myprompts import output_format
9
- import dotenv
10
 
11
  dotenv.load_dotenv()
12
 
13
- # --- Models ---
14
- openai_model = OpenAIServerModel(
15
- model_id="gpt-3.5-turbo",
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  api_key=os.environ["OPENAI_API_KEY"],
 
 
 
 
17
  api_base="https://api.openai.com/v1",
 
18
  )
19
 
20
- # --- Tool Agents ---
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  web_agent = CodeAgent(
22
- model=openai_model,
23
- tools=[search_web, fetch_webpage],
 
 
 
24
  name="web_agent",
25
- description="Searches the web and fetches content from webpages.",
26
- max_steps=6,
27
- verbosity_level=1,
 
28
  )
29
 
30
  audiovideo_agent = CodeAgent(
31
- model=openai_model,
32
  tools=[
33
  get_youtube_transcript,
34
  get_youtube_title_description,
@@ -36,57 +75,63 @@ audiovideo_agent = CodeAgent(
36
  analyze_image
37
  ],
38
  name="audiovideo_agent",
39
- description="Processes audio, video, and image content.",
40
- max_steps=6,
41
  verbosity_level=1,
 
42
  )
43
 
44
- # --- Answer Checker ---
45
- def check_final_answer(answer: str, _) -> bool:
46
- return isinstance(answer, str) and len(answer.strip()) <= 200
47
 
48
- # --- Manager Agent ---
49
  manager_agent = CodeAgent(
50
- model=openai_model,
51
- tools=[PythonInterpreterTool()],
52
- managed_agents=[web_agent, audiovideo_agent],
53
- name="manager_agent",
54
- description="Manages sub-agents to answer complex queries.",
55
- final_answer_checks=[check_final_answer],
56
  verbosity_level=2,
57
- max_steps=12,
 
 
 
58
  )
59
 
60
- # --- Entry Class ---
61
  class MultiAgent:
62
  def __init__(self):
63
- print(" MultiAgent initialized")
64
 
65
  def __call__(self, question: str) -> str:
66
- mylog("MultiAgent", question)
 
67
  try:
68
- system_instruction = (
69
- "You are the lead agent in a multi-agent AI system. Use the sub-agents wisely."
70
- " Answer using reasoning, planning, and tools where needed."
71
- " Stay concise and always format the answer exactly as required."
72
- )
 
 
73
 
74
- prompt = f"""
75
- {system_instruction}
76
 
77
- THE QUESTION:
78
- {question.strip()}
79
 
80
- {output_format.strip()}
81
- """
82
- return str(manager_agent.run(prompt))
83
  except Exception as e:
84
- error_msg = f"An error occurred while processing the question: {e}"
85
- print(error_msg)
86
- return error_msg
87
 
88
 
89
  if __name__ == "__main__":
90
- example_question = "What was the actual enrollment of the Malko competition in 2023?"
 
 
 
 
91
  agent = MultiAgent()
92
- print(agent(example_question))
 
 
 
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
12
  from common.mylogger import mylog
13
+ 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="gpt-4.1-nano",
32
+ api_base="https://api.openai.com/v1",
33
  api_key=os.environ["OPENAI_API_KEY"],
34
+ )
35
+
36
+ openai_41mini_model = OpenAIServerModel(
37
+ model_id="gpt-3.5-turbo",
38
  api_base="https://api.openai.com/v1",
39
+ api_key=os.environ["OPENAI_API_KEY"],
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
  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],
94
+ max_steps=15,
95
+ name="manager_agent",
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
+