add main.py?
This commit is contained in:
@@ -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 ...
|
||||||
Reference in New Issue
Block a user