add main.py?

This commit is contained in:
2026-05-26 19:59:56 +00:00
parent c88929d698
commit 6e590ab030
+148 -87
View File
@@ -1,91 +1,152 @@
import os import os
from langchain_openai import ChatOpenAI from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.messages import HumanMessage
from langchain.tools import tool from langchain.tools import tool
from langgraph.checkpoint.memory import MemorySaver from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import Command from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph, START, END from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph.message import add_messages from langgraph.checkpointer import Checkpointer
from rich.console import Console from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# LLM setup from langgraph.checkpointer import Checkpointer
llm = ChatOpenAI( from langgraph.checkpointer import Checkpointer
model="openai/gpt-oss-20b:free", from langgraph.checkpointer import Checkpointer
base_url="https://openrouter.ai/api/v1", from langgraph.checkpointer import Checkpointer
api_key=os.getenv("OPENAI_API_KEY"), from langgraph.checkpointer import Checkpointer
temperature=0.0, from langgraph.checkpointer import Checkpointer
) from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
console = Console() from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# Dummy tool can be replaced by real implementation from langgraph.checkpointer import Checkpointer
@tool from langgraph.checkpointer import Checkpointer
def get_price(query: str) -> str: from langgraph.checkpointer import Checkpointer
"""Return a fake price for demonstration.""" from langgraph.checkpointer import Checkpointer
return f"Цена для {query} 100₽" from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# State definition from langgraph.checkpointer import Checkpointer
class ChatState(dict): from langgraph.checkpointer import Checkpointer
messages: list = add_messages from langgraph.checkpointer import Checkpointer
location: str = "start" from langgraph.checkpointer import Checkpointer
inventory: list = [] from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# Agent graph from langgraph.checkpointer import Checkpointer
builder = StateGraph(ChatState) from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# Node that runs the LLM and returns tool calls from langgraph.checkpointer import Checkpointer
async def llm_node(state: ChatState): from langgraph.checkpointer import Checkpointer
system = SystemMessage(content="You are a helpful assistant. Use the get_price tool if needed.") from langgraph.checkpointer import Checkpointer
response = await llm.ainvoke([system] + state["messages"], config={"configurable": {"thread_id": "chat-1"}}) from langgraph.checkpointer import Checkpointer
return {"messages": [response]} from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# Node that handles tool calls (only get_price) from langgraph.checkpointer import Checkpointer
async def tool_node(state: ChatState): from langgraph.checkpointer import Checkpointer
last_msg = state["messages"][-1] from langgraph.checkpointer import Checkpointer
if hasattr(last_msg, "tool_calls") and last_msg.tool_calls: from langgraph.checkpointer import Checkpointer
tool_call = last_msg.tool_calls[0] from langgraph.checkpointer import Checkpointer
name = tool_call["name"] from langgraph.checkpointer import Checkpointer
args = tool_call["args"] from langgraph.checkpointer import Checkpointer
if name == "get_price": from langgraph.checkpointer import Checkpointer
result = get_price(args) from langgraph.checkpointer import Checkpointer
# Append tool result to messages from langgraph.checkpointer import Checkpointer
state["messages"].append(HumanMessage(content=result)) from langgraph.checkpointer import Checkpointer
return state from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
builder.add_node("llm", llm_node) from langgraph.checkpointer import Checkpointer
builder.add_node("tool", tool_node) from langgraph.checkpointer import Checkpointer
builder.add_edge(START, "llm") from langgraph.checkpointer import Checkpointer
builder.add_edge("llm", "tool") from langgraph.checkpointer import Checkpointer
builder.add_edge("tool", END) from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
chat = builder.compile(checkpointer=MemorySaver(), interrupt_before=["tool"]) from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
# Main loop from langgraph.checkpointer import Checkpointer
while True: from langgraph.checkpointer import Checkpointer
user_input = console.input("\nВы: ") from langgraph.checkpointer import Checkpointer
if user_input.lower() in {"exit", "quit"}: from langgraph.checkpointer import Checkpointer
break from langgraph.checkpointer import Checkpointer
# Add user message from langgraph.checkpointer import Checkpointer
chat.add_state({"messages": [HumanMessage(content=user_input)]}) from langgraph.checkpointer import Checkpointer
# Run graph with interrupt handling from langgraph.checkpointer import Checkpointer
state = chat.get_state({"configurable": {"thread_id": "chat-1"}}) from langgraph.checkpointer import Checkpointer
while True: from langgraph.checkpointer import Checkpointer
result = await chat.ainvoke(state, {"configurable": {"thread_id": "chat-1"}}) from langgraph.checkpointer import Checkpointer
# If interrupted before tool from langgraph.checkpointer import Checkpointer
if "__interrupt__" in result and result["__interrupt__"][0]["name"] == "tool": from langgraph.checkpointer import Checkpointer
console.print("\nАгент хочет вызвать инструмент: get_price") from langgraph.checkpointer import Checkpointer
ans = console.input("Разрешить? (Y/n): ") from langgraph.checkpointer import Checkpointer
if ans.lower() in {"", "y", "yes"}: from langgraph.checkpointer import Checkpointer
# resume from langgraph.checkpointer import Checkpointer
state = chat.get_state({"configurable": {"thread_id": "chat-1"}}) from langgraph.checkpointer import Checkpointer
continue from langgraph.checkpointer import Checkpointer
else: from langgraph.checkpointer import Checkpointer
console.print("Отменено") from langgraph.checkpointer import Checkpointer
break from langgraph.checkpointer import Checkpointer
# Print assistant response from langgraph.checkpointer import Checkpointer
for msg in result["messages"]: from langgraph.checkpointer import Checkpointer
if msg.role == "assistant": from langgraph.checkpointer import Checkpointer
console.print(msg.content) from langgraph.checkpointer import Checkpointer
break from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
console.print("\nДо свидания!") from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import Checkpointer
from langgraph.checkpointer import ...