|
|
|
|
|
import os
|
|
import dotenv
|
|
from smolagents import CodeAgent, ToolCallingAgent
|
|
from smolagents import OpenAIServerModel
|
|
from tools.fetch import fetch_webpage, search_web
|
|
from smolagents import PythonInterpreterTool
|
|
from tools.yttranscript import get_youtube_transcript, get_youtube_title_description
|
|
from tools.stt import stt
|
|
from tools.image import analyze_image
|
|
from tools.mylogger import save_file_with_timestamp, mylog
|
|
import myprompts
|
|
|
|
dotenv.load_dotenv()
|
|
|
|
gemini_model = OpenAIServerModel(
|
|
model_id="gemini-2.0-flash",
|
|
api_key=os.environ["GEMINI_API_KEY"],
|
|
|
|
api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
|
|
)
|
|
|
|
vllm_model = OpenAIServerModel(
|
|
model_id="Qwen/Qwen2.5-1.5B-Instruct",
|
|
api_base="http://192.168.1.39:18000/v1",
|
|
api_key="token-abc123",
|
|
)
|
|
|
|
openai_41nano_model = OpenAIServerModel(
|
|
model_id="gpt-4.1-nano",
|
|
api_base="https://api.openai.com/v1",
|
|
api_key=os.environ["OPENAI_API_KEY"],
|
|
)
|
|
|
|
openai_41mini_model = OpenAIServerModel(
|
|
model_id="gpt-4.1-mini",
|
|
api_base="https://api.openai.com/v1",
|
|
api_key=os.environ["OPENAI_API_KEY"],
|
|
)
|
|
|
|
|
|
def check_final_answer(final_answer, agent_memory) -> bool:
|
|
"""
|
|
Check if the final answer is correct.
|
|
This is a placeholder function. You can implement your own logic here.
|
|
"""
|
|
|
|
if len(str(final_answer)) > 200:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
web_agent = CodeAgent(
|
|
model=openai_41nano_model,
|
|
tools=[
|
|
search_web,
|
|
fetch_webpage,
|
|
],
|
|
name="web_agent",
|
|
description="Use search engine to find webpages related to a subject and get the page content",
|
|
additional_authorized_imports=["pandas", "numpy","bs4"],
|
|
verbosity_level=1,
|
|
max_steps=7,
|
|
)
|
|
|
|
audiovideo_agent = CodeAgent(
|
|
model=openai_41nano_model,
|
|
tools=[
|
|
get_youtube_transcript,
|
|
get_youtube_title_description,
|
|
stt,
|
|
analyze_image
|
|
],
|
|
name="audiovideo_agent",
|
|
description="Extracts information from image, video or audio files from the web",
|
|
additional_authorized_imports=["pandas", "numpy","bs4", "requests"],
|
|
verbosity_level=1,
|
|
max_steps=7,
|
|
)
|
|
|
|
|
|
|
|
manager_agent = CodeAgent(
|
|
model=openai_41mini_model,
|
|
tools=[ PythonInterpreterTool()],
|
|
managed_agents=[web_agent, audiovideo_agent],
|
|
additional_authorized_imports=["pandas", "numpy","bs4"],
|
|
planning_interval=5,
|
|
verbosity_level=2,
|
|
final_answer_checks=[check_final_answer],
|
|
max_steps=15,
|
|
name="manager_agent",
|
|
description="A manager agent that coordinates the work of other agents to answer questions.",
|
|
)
|
|
|
|
class MultiAgent:
|
|
def __init__(self):
|
|
print("BasicAgent initialized.")
|
|
|
|
def __call__(self, question: str) -> str:
|
|
mylog(self.__class__.__name__, question)
|
|
|
|
try:
|
|
prefix = """You are the top agent of a multi-agent system that can answer questions by coordinating the work of other agents.
|
|
You will receive a question and you will decide which agent to use to answer it.
|
|
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.
|
|
You can also use your own knowledge to answer the question.
|
|
You need to respect the output format that is given to you.
|
|
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.
|
|
"""
|
|
|
|
question = prefix + "\nTHE QUESTION:\n" + question + '\n' + myprompts.output_format
|
|
|
|
fixed_answer = ""
|
|
|
|
fixed_answer = manager_agent.run(question)
|
|
|
|
return fixed_answer
|
|
except Exception as e:
|
|
error = f"An error occurred while processing the question: {e}"
|
|
print(error)
|
|
return error
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
""""
|
|
question = "How many studio albums were published by Mercedes Sosa between 2000 and 2009 (included)? You can use the latest 2022 version of english wikipedia."
|
|
"""
|
|
question = """
|
|
Hi, I was out sick from my classes on Friday, so I'm trying to figure out what I need to study for my Calculus mid-term next week. My friend from class sent me an audio recording of Professor Willowbrook giving out the recommended reading for the test, but my headphones are broken :(
|
|
|
|
Could you please listen to the recording for me and tell me the page numbers I'm supposed to go over? I've attached a file called Homework.mp3 that has the recording. Please provide just the page numbers as a comma-delimited list. And please provide the list in ascending order.
|
|
|
|
File URL: https://agents-course-unit4-scoring.hf.space/files/1f975693-876d-457b-a649-393859e79bf3
|
|
"""
|
|
agent = MultiAgent()
|
|
answer = agent(question)
|
|
print(f"Answer: {answer}")
|
|
|