Spaces:
Sleeping
Sleeping
| from langchain_core.prompts import ChatPromptTemplate | |
| from langgraph.graph import StateGraph, END, MessagesState | |
| from langchain_openai import ChatOpenAI | |
| from langgraph.prebuilt import ToolNode | |
| from langchain_core.messages import HumanMessage | |
| from dotenv import load_dotenv | |
| from tools import transfer_call, leave_message, go_to | |
| from prompts import system_prompt, system_prompt_original | |
| load_dotenv() | |
| llm = ChatOpenAI( | |
| model="gpt-4.1", | |
| temperature=0.3, | |
| ) | |
| # 1. Define the tools | |
| tools = [transfer_call, leave_message, go_to] | |
| tool_node = ToolNode(tools) | |
| # 2. Create the graph | |
| graph = StateGraph(MessagesState) | |
| # 3. Define a new prompt | |
| prompt = ChatPromptTemplate.from_messages( | |
| [ | |
| ( | |
| "system", | |
| system_prompt_original, | |
| ), | |
| ("placeholder", "{messages}"), | |
| ] | |
| ) | |
| # 4. Define the agent | |
| agent = prompt | llm.bind_tools(tools) | |
| # 5. Define the nodes | |
| def agent_node(state: MessagesState): | |
| response = agent.invoke(state) | |
| return {"messages": [response]} | |
| # 6. Define the edges | |
| def should_continue(state: MessagesState): | |
| last_message = state["messages"][-1] | |
| if last_message.tool_calls: | |
| return "continue" | |
| return "end" | |
| # 7. Build the graph | |
| graph.add_node("agent", agent_node) | |
| graph.add_node("action", tool_node) | |
| graph.set_entry_point("agent") | |
| graph.add_conditional_edges( | |
| "agent", | |
| should_continue, | |
| { | |
| "continue": "action", | |
| "end": END, | |
| }, | |
| ) | |
| graph.add_edge("action", "agent") | |
| # 8. Compile the graph | |
| app = graph.compile() | |
| # This is a simplified conversation loop for demonstration. | |
| def get_agent_response(conversation: list): | |
| response = app.invoke({"messages": conversation}) | |
| return response["messages"][len(conversation) :] | |