from langgraph.checkpoint.memory import InMemorySaver
from langgraph.graph import StateGraph, START, END
from langgraph.types import RunnableConfig

 # 记忆 是通过编译时候添加InMemorySaver ,invoke时候添加thread_id来个例记忆 ,就具有了记忆的能力
# 定义状态结构
class State(dict):
    total: int  # 当前累加总和
    new_value: int  # 新输入的数字


# 定义节点：执行累加逻辑
def add_node(state: State, config: RunnableConfig):
    # 取出旧的总和（如果没有则为0）
    old_total = state.get("total", 0)
    print(old_total)
    # 获取新输入的数字
    new_value = state["new_value"]
    # 计算新的总和
    new_total = old_total + new_value
    state["total"] = new_total
    return state


# 构建图
def build_graph():
    graph_builder = StateGraph(State)
    graph_builder.add_node("add", add_node)
    graph_builder.add_edge(START, "add")
    graph_builder.add_edge("add", END)

    # 编译成可运行的应用
    memory = InMemorySaver()
    graph = graph_builder.compile(memory)
    return graph


graph = build_graph()

# === 第一次调用 ===
config1 = RunnableConfig(configurable={
    "thread_id": "12345"
})
result1 = graph.invoke({"new_value": 5}, config=config1)
print("结果1:", result1)

# === 第二次调用（同一个线程，累加）===
result2 = graph.invoke({"new_value": 7}, config=config1)
print("结果2:", result2)

# === 第三次调用（不同线程，全新开始）===
config2 = RunnableConfig(configurable={
    "thread_id": "12345"
})
result3 = graph.invoke({"new_value": 10}, config=config2)
print("结果3:", result3)