nl2sql

Architecture Overview

NL2SQL is a multi-stage orchestration pipeline built on LangGraph. A single request flows through control-plane nodes (resolution, decomposition, planning), capability-driven subgraphs (SQL agents), and an aggregation layer. The system is wired by NL2SQLContext, which instantiates registries, stores, and policy enforcement.

Key runtime components

System topology

flowchart TD
    UserQuery[User Query] --> Runtime[run_with_graph()]
    Runtime --> Graph[build_graph()]
    Graph --> Resolver[DatasourceResolverNode]
    Resolver --> Decomposer[DecomposerNode]
    Decomposer --> Planner[GlobalPlannerNode]
    Planner --> Router[Scan Layer Router]
    Router --> Subgraph[SQL Agent Subgraph]
    Subgraph --> Router
    Router --> Aggregator[EngineAggregatorNode]
    Aggregator --> Synthesizer[AnswerSynthesizerNode]

    subgraph Context[NL2SQLContext]
        DS[DatasourceRegistry]
        LLM[LLMRegistry]
        VS[VectorStore]
        SS[SchemaStore]
        RBAC[RBAC]
        AS[ArtifactStore]
    end

Subsystem architecture

flowchart LR
    User[User Query]
    Planner[Planner/Decomposer]
    Schema[Schema Store]
    Retrieval[Chunking + Retrieval]
    Validator[Validation Layer]
    Execution[Execution Layer]
    Adapter[Adapter/Plugin Backend]
    Artifacts[Artifact Store]
    Obs[Observability]

    User --> Planner
    Planner --> Retrieval
    Retrieval --> Schema
    Planner --> Validator
    Validator --> Execution
    Execution --> Adapter
    Execution --> Artifacts
    Planner --> Obs
    Execution --> Obs

Major subsystems (and responsibilities)

End-to-end flow

sequenceDiagram
    participant User as User
    participant Runtime as run_with_graph
    participant Resolver as DatasourceResolverNode
    participant Decomposer as DecomposerNode
    participant Planner as GlobalPlannerNode
    participant Router as Scan Layer Router
    participant Subgraph as SQL Agent Subgraph
    participant Agg as EngineAggregatorNode
    participant Synth as AnswerSynthesizerNode

    User->>Runtime: user_query
    Runtime->>Resolver: GraphState
    Resolver->>Decomposer: resolved datasources
    Decomposer->>Planner: sub_queries + combine groups
    Planner->>Router: ExecutionDAG
    Router->>Subgraph: Send(sub_query)
    Subgraph-->>Router: ArtifactRef + diagnostics
    Router->>Agg: all scan artifacts
    Agg->>Synth: aggregated rows
    Synth-->>Runtime: final_answer + errors

Determinism

Determinism guarantees and non-determinism sources are documented in determinism.md.

Source references