LangGraph/Core Model
Intermediate11 min

State: The Agent's Brain

Designing state: TypedDict, Pydantic, reducers, and the add_messages pattern.

Quick Reference

  • TypedDict is the default state type — lightweight, no validation overhead
  • Pydantic v2 BaseModel adds runtime coercion and validation on every state update
  • Reducers (Annotated[list, operator.add]) control how node outputs merge into state
  • add_messages is the built-in reducer for chat messages — handles deduplication by ID
  • MessagesState is a pre-built state class with a messages key using add_messages
  • RemoveMessage lets nodes surgically delete messages from the state history

3 Ways to Define State

State{ messages, next_action }Node A{ messages: [...] }reducer mergesNode B{ next_action: "tool" }reducer mergesNode C{ messages: [...] }Final Merged Statestate flows down

State flows through nodes — each returns a partial update, merged via reducers

TypeValidationCoercionPerformanceUse When
TypedDictNone (trust nodes)NoneFastestSimple state, trusted nodes
Pydantic BaseModelOn every updateYes (v2)SlowerNeed validation, external input
dataclassNoneNoneFastPrefer dataclass syntax
TypedDict — the default
Pydantic — when you need validation