What is State in LangGraph?

State in LangGraph is a way to maintain and track information as an AI system processes data.

Think of it as the system’s memory, allowing it to remember and update information as it moves through different stages of a workflow, or graph.

Example

Simple

from typing import TypedDict
from langgraph.graph import END, StateGraph
 
 
class SimpleState(TypedDict):
    count: int
 
def increment(state: SimpleState) -> SimpleState:
    return {
        "count": state["count"] + 1
    }
 
def shouldContinue(state: SimpleState):
    if(state["count"] < 5):
        return "continue"
    else:
        # return END
        return "stop"
 
graph = StateGraph(SimpleState)
 
graph.add_node("increment", increment)
graph.add_conditional_edges("increment", shouldContinue, 
                            {
                                "continue": "increment",
                                "stop": END
                            }
)
 
graph.set_entry_point("increment")
 
app = graph.compile()
 
initial_state = {
    "count" : 0
}
 
result = app.invoke(initial_state)
print(result)

Complex

from typing import TypedDict
from langgraph.graph import END, StateGraph
from typing import List
 
 
class SimpleState(TypedDict):
    count: int
    c_sum: int
    history: List[int]
 
def increment(state: SimpleState) -> SimpleState:
    newCount = state["count"] + 1
    return {
        "count": newCount,
        "c_sum": state["c_sum"] + newCount,
        "history": state["history"] + [newCount]
    }
 
def shouldContinue(state: SimpleState):
    if(state["count"] < 5):
        return "continue"
    else:
        # return END
        return "stop"
 
graph = StateGraph(SimpleState)
 
graph.add_node("increment", increment)
graph.add_conditional_edges("increment", shouldContinue, 
                            {
                                "continue": "increment",
                                "stop": END
                            }
)
 
graph.set_entry_point("increment")
 
app = graph.compile()
 
initial_state = {
    "count" : 0,
    "c_sum" : 0,
    "history": []
}
 
result = app.invoke(initial_state)
print(result)

Annotated StateGraph

from typing import TypedDict, List, Annotated
from langgraph.graph import END, StateGraph
import operator
 
 
class SimpleState(TypedDict):
    count: int
    sum: Annotated[int, operator.add]
    history: Annotated[List[int], operator.concat]
 
def increment(state: SimpleState) -> SimpleState:
    newCount = state["count"] + 1
    return {
        "count": newCount,
        "sum": newCount,
        "history": [newCount]
    }
 
def shouldContinue(state: SimpleState):
    if(state["count"] < 5):
        return "continue"
    else:
        # return END
        return "stop"
 
graph = StateGraph(SimpleState)
 
graph.add_node("increment", increment)
graph.add_conditional_edges("increment", shouldContinue, 
                            {
                                "continue": "increment",
                                "stop": END
                            }
)
 
graph.set_entry_point("increment")
 
app = graph.compile()
 
initial_state = {
    "count" : 0,
    "sum" : 0,
    "history": []
}
 
result = app.invoke(initial_state)
print(result)