bwilkie commited on
Commit
2cfe5e7
·
verified ·
1 Parent(s): 164dce0

Update multiagents.py

Browse files
Files changed (1) hide show
  1. multiagents.py +136 -136
multiagents.py CHANGED
@@ -1,137 +1,137 @@
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-4.1-mini",
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,
74
- get_text_transcript_from_audio_file,
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
 
 
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-4.1-mini",
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,
74
+ get_text_transcript_from_audio_file,
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