phucdev's picture
Implement basic agent and tools to solve GAIA questions
9c49c2c
raw
history blame
3.14 kB
from typing import Annotated, Optional, TypedDict
from dotenv import find_dotenv, load_dotenv
from langchain.chat_models import init_chat_model
from langchain_core.messages import AnyMessage, HumanMessage
from langgraph.graph.message import add_messages
from langgraph.prebuilt import create_react_agent
from tools import (add, ask_about_image, divide, get_current_time_and_date,
get_sum, get_weather_info, get_youtube_transcript,
get_youtube_video_info, inspect_file_as_text, multiply,
reverse_text, subtract, visit_website, web_search,
wiki_search)
class AgentState(TypedDict):
input_file: Optional[str] # Contains file path
messages: Annotated[list[AnyMessage], add_messages]
class BasicAgent:
def __init__(self):
load_dotenv(find_dotenv())
model = init_chat_model("groq:meta-llama/llama-4-scout-17b-16e-instruct")
system_prompt = (
"You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer "
"with the following template: FINAL ANSWER: [YOUR FINAL ANSWER]. YOUR FINAL ANSWER should be a number OR "
"as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a "
"number, don't use comma to write your number neither use units such as $ or percent sign unless specified "
"otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), "
"and write the digits in plain text unless specified otherwise. If you are asked for a comma separated "
"list, apply the above rules depending of whether the element to be put in the list is a number or a string."
"Give it all you can: I know for a fact that you have access to all the relevant tools to solve it and find "
"the correct answer (the answer does exist). Failure or 'I cannot answer' or 'None found' will not be "
"tolerated, success will be rewarded. Run verification steps if that's needed, you must make sure you find "
"the correct answer! "
)
tools = [
get_weather_info,
add,
get_sum,
subtract,
multiply,
divide,
get_current_time_and_date,
wiki_search,
web_search,
visit_website,
inspect_file_as_text,
ask_about_image,
reverse_text,
get_youtube_video_info,
get_youtube_transcript,
]
self.agent = create_react_agent(model=model, tools=tools, prompt=system_prompt)
print("BasicAgent initialized.")
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
messages = [HumanMessage(content=question)]
response = self.agent.invoke({"messages": messages})
response_string = response["messages"][-1].content
print(f"Agent's response: {response_string}")
return response_string