From Chains to Graphs: The Evolution of LLM Orchestration

Click each milestone to see what it unlocked for LLM workflow design.

2022 Prompt Chaining (Manual)
Sequential function calls. Output of one LLM call becomes input to the next. No framework, just Python.
The earliest LLM applications were pure prompt chains - call GPT-3, parse the output, feed it to the next call. No abstractions, no state management. Every developer wrote their own loop. It worked for 2-3 step pipelines but collapsed at scale.
SequentialManual glue code
2023 LangChain SequentialChain
First framework abstraction for chains. Define steps as objects, compose them in sequence. Still linear.
LangChain introduced SequentialChain - a wrapper that connected multiple chain steps. Input/output variables were mapped between steps. It solved the boilerplate problem but imposed rigid linearity. No branching, no conditions, no loops.
SequentialFramework abstraction
2023 LCEL (LangChain Expression Language)
Pipe operator composition: chain1 | chain2 | chain3. Elegant syntax, still fundamentally linear.
LCEL made chains composable with the pipe operator. RunnablePassthrough | prompt | llm | parser reads like a Unix pipeline. Streaming, batching, and async came for free. But the pipe is a line, not a graph. Conditional routing required escape hatches like RunnableBranch.
Pipe compositionStreaming built-in
2024 LlamaIndex QueryPipeline
DAG-based pipeline with modules and links. First attempt at non-linear orchestration in LlamaIndex.
LlamaIndex's QueryPipeline allowed defining modules and linking them as a DAG. But it was deprecated in favor of Workflow and then AgentWorkflow. As of 2026, LlamaIndex Core 0.14 has no stable, supported graph primitive for custom conditional routing.
DAG structureDeprecated
2024 LangGraph StateGraph
Full graph runtime: nodes, conditional edges, cycles, checkpointing, streaming. The graph era begins.
LangGraph introduced StateGraph with a TypedDict state schema. add_node(), add_conditional_edges(), compile(). Support for cycles (retry loops), parallel branches, checkpointing to SQLite/Redis, and event streaming. This was the inflection point - workflows became declarative graphs instead of imperative code.
Conditional edgesTypedDict stateCycles
2025 SynapseKit StateGraph
Near-identical API to LangGraph. Adds TypedState with StateField reducers for parallel state merging.
SynapseKit's StateGraph mirrors LangGraph's API: add_node(), add_conditional_edge(), set_entry_point(), compile(). The key addition: StateField reducers that define how concurrent writes merge (append, last-write-wins, custom). This prevents bugs in fan-out/fan-in patterns where multiple branches write to the same state key.
Conditional edgesStateField reducersMermaid export
2026 Graph Primitives as Standard
Graph workflows become the expected primitive for any serious LLM framework. Absence is now a gap.
By 2026, graph primitives are table stakes. Conditional routing, checkpointing, parallel branches, streaming events - these are not advanced features. They are baseline expectations. The benchmark in notebook #23 confirms: two of three major frameworks ship them. The one that does not (LlamaIndex) scores 0/7 on graph features.
7 features expectedState managementObservability
www.engineersofai.com