File size: 1,901 Bytes
ccca999
 
 
 
 
 
 
 
14cafef
 
 
 
ccca999
 
 
 
 
 
 
 
 
 
 
14cafef
 
 
2171e7d
 
ccca999
a7becf3
14cafef
ccca999
 
 
 
 
 
 
bf4d9ee
ccca999
 
 
 
61d8471
ccca999
 
 
 
 
 
 
 
 
 
 
 
 
 
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
48
49
50
51
52
53
54
55
56
57
58
import os
from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages
from langchain_core.messages import AnyMessage, HumanMessage, AIMessage, ToolMessage, SystemMessage
from langchain_groq import ChatGroq
from langgraph.prebuilt import ToolNode
from langgraph.graph import START, StateGraph, END
from langgraph.prebuilt import tools_condition
from tools import (retriever, web_search, wiki_search, youtube_analysis, 
                   add_numbers, subtract_numbers, multiply_numbers, divide_numbers, modulus_numbers,
                   detect_objects, run_python
                   )
from prompt import text_prompt
from dotenv import load_dotenv
#from PIL import Image
#from io import StringIO

#load_dotenv()
os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY")

class State(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]

tools = [retriever, web_search, wiki_search, youtube_analysis, 
        add_numbers, subtract_numbers, multiply_numbers, divide_numbers, modulus_numbers,
        detect_objects, run_python]
#model = "qwen/qwen3-32b"
model = "deepseek-r1-distill-llama-70b"
llm = ChatGroq(
    model= model,
    temperature=0.0,
    max_tokens= None,
    reasoning_format="parsed",
    timeout=None,
    max_retries=2,
    )
llm_with_tools = llm.bind_tools(tools)

def ask_agent(agent_state: State):
    system_prompt = SystemMessage(
        content = text_prompt
    )
    query = agent_state["messages"][-1] # HumanMessage
    response = llm_with_tools.invoke(text_prompt + query.content)
    return {"messages": [response]}

graph_builder = StateGraph(State)

graph_builder.add_node("agent", ask_agent)
graph_builder.add_node("tools", ToolNode(tools))
graph_builder.add_edge(START, "agent")
graph_builder.add_conditional_edges(
    "agent",
    tools_condition
)
graph_builder.add_edge("tools", "agent")

alfred = graph_builder.compile()