shawnnygoh's picture
Update agent.py
fe0904c verified
Raw History Blame Contribute Delete
1.84 kB
"""
Agent built with LangGraph.
"""
from typing import TypedDict, Annotated
from langgraph.graph import START, StateGraph, END
from langgraph.graph.message import add_messages
from langchain_huggingface import ChatHuggingFace
from langchain_groq import ChatGroq
from langgraph.prebuilt import ToolNode, tools_condition
from langchain_core.tools import tool
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.messages import AnyMessage
import os
with open("system_prompt.txt") as f:
SYSTEM_PROMPT = f.read()
@tool
def add_tool(a: int, b: int) -> int:
"""Add two integers."""
return a + b
@tool
def subtract_tool(a: int, b: int) -> int:
"""Subtract two integers."""
return a - b
@tool
def multiply_tool(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
@tool
def divide_tool(a: int, b: int) -> int:
"""Divide two integers."""
return a / b
@tool
def modulus_tool(a: int, b: int) -> int:
"""Calculate the modulus of two integers."""
return a % b
search_tool = DuckDuckGoSearchRun()
llm = ChatGroq(
model="llama3-8b-8192",
api_key=os.environ.get("GROQ_API_KEY")
)
chat = ChatHuggingFace(llm=llm, verbose=True)
tools = [add_tool, subtract_tool, multiply_tool, divide_tool, modulus_tool, search_tool]
chat_with_tools = chat.bind_tools(tools)
class AgentState(TypedDict):
messages: Annotated[list[AnyMessage], add_messages]
def assistant(state: AgentState):
return {
"messages": [chat_with_tools.invoke(state["messages"])],
}
builder = StateGraph(AgentState)
builder.add_node("assistant", assistant)
builder.add_node("tools", ToolNode(tools))
builder.add_edge(START, "assistant")
builder.add_conditional_edges(
"assistant",
tools_condition,
)
builder.add_edge("tools", "assistant")
graph = builder.compile()