File size: 1,442 Bytes
4863f6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import os
from typing import TypedDict, Annotated

from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint, HuggingFaceEmbeddings
from langchain_community.tools import DuckDuckGoSearchRun
from langgraph.graph import StateGraph, START
from langchain_core.messages import AnyMessage, SystemMessage
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langchain_openai import ChatOpenAI

from tools import multiply, divide, add, substract

available_tools = [multiply, divide, add, substract, DuckDuckGoSearchRun(output_format="list", max_results=5)]

with os.read("system_prompt.txt", "r") as file:
    sys_prompt = SystemMessage(content=file.read())

class AgentState(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]
    
chat = ChatOpenAI(model="o4-mini",)
chat.bind_tools(available_tools)

def assistant(state: AgentState):
    return {
        "messages": [chat.invoke(state["messages"])]
    }

def init_step(state: AgentState):
    return {
        "messages": [sys_prompt]
    }

builder = StateGraph(AgentState)

builder.add_node("assistant", assistant)
builder.add_node("init", init_step)
builder.add_node("tools", ToolNode(available_tools))

builder.add_edge(START, "init")
builder.add_edge("ini", "assistant")
builder.add_conditional_edges("assistant", tools_condition)

builder.add_edge("tools", "assistant")

gaia_agent = builder.compile()