langchain.js
    Preparing search index...

    Interface CompiledGraph<N, State, Update, ContextType, InputType, OutputType, NodeReturnType, CommandType, StreamCustomType>

    The Pregel class is the core runtime engine of LangGraph, implementing a message-passing graph computation model inspired by Google's Pregel system. It provides the foundation for building reliable, controllable agent workflows that can evolve state over time.

    Key features:

    • Message passing between nodes in discrete "supersteps"
    • Built-in persistence layer through checkpointers
    • First-class streaming support for values, updates, and events
    • Human-in-the-loop capabilities via interrupts
    • Support for parallel node execution within supersteps

    The Pregel class is not intended to be instantiated directly by consumers. Instead, use the following higher-level APIs:

    • StateGraph: The main graph class for building agent workflows
    • Functional API: A declarative approach using tasks and entrypoints
      • A Pregel instance is returned by the entrypoint function
    // Using StateGraph API
    const graph = new StateGraph(annotation)
    .addNode("nodeA", myNodeFunction)
    .addEdge("nodeA", "nodeB")
    .compile();

    // The compiled graph is a Pregel instance
    const result = await graph.invoke(input);
    // Using Functional API
    import { task, entrypoint } from "@langchain/langgraph";
    import { MemorySaver } from "@langchain/langgraph-checkpoint";

    // Define tasks that can be composed
    const addOne = task("add", async (x: number) => x + 1);

    // Create a workflow using the entrypoint function
    const workflow = entrypoint({
    name: "workflow",
    checkpointer: new MemorySaver()
    }, async (numbers: number[]) => {
    // Tasks can be run in parallel
    const results = await Promise.all(numbers.map(n => addOne(n)));
    return results;
    });

    // The workflow is a Pregel instance
    const result = await workflow.invoke([1, 2, 3]); // Returns [2, 3, 4]
    interface CompiledGraph<
        N extends string,
        State = any,
        Update = any,
        ContextType extends Record<string, any> = Record<string, any>,
        InputType = any,
        OutputType = any,
        NodeReturnType = unknown,
        CommandType = unknown,
        StreamCustomType = any,
    > {
        "~NodeReturnType": NodeReturnType;
        "~NodeType": N;
        "~RunInput": Update;
        "~RunOutput": State;
        autoValidate: boolean;
        builder: Graph<N, State, Update>;
        cache?: any;
        channels: Channels;
        checkpointer?: any;
        config?: LangGraphRunnableConfig<Record<string, any>>;
        debug: boolean;
        inputChannels: string | N | (string | N)[];
        interruptAfter?: any;
        interruptBefore?: any;
        nodes: Nodes;
        outputChannels: string | N | (string | N)[];
        retryPolicy?: RetryPolicy;
        stepTimeout?: number;
        store?: any;
        streamChannels?: string | N | (string | N)[];
        streamMode: StreamMode[];
        get streamChannelsAsIs(): keyof Channels | (keyof Channels)[];
        get streamChannelsList(): (keyof Channels)[];
        attachBranch(
            start: "__start__" | N,
            name: string,
            branch: Branch<State, N>,
        ): void;
        attachEdge(start: "__start__" | N, end: "__end__" | N): void;
        attachNode(key: N, node: NodeSpec<State, Update>): void;
        clearCache(): Promise<void>;
        getGraph(
            config?: RunnableConfig<Record<string, any>> & {
                xray?: number | boolean;
            },
        ): Graph;
        getGraphAsync(
            config?: RunnableConfig<Record<string, any>> & {
                xray?: number | boolean;
            },
        ): Promise<Graph>;
        getState(
            config: RunnableConfig,
            options?: GetStateOptions,
        ): Promise<StateSnapshot>;
        getStateHistory(
            config: RunnableConfig,
            options?: any,
        ): AsyncIterableIterator<StateSnapshot>;
        getSubgraphs(
            namespace?: string,
            recurse?: boolean,
        ): Generator<
            [
                string,
                Pregel<
                    any,
                    any,
                    StrRecord<string, any>,
                    any,
                    any,
                    any,
                    any,
                    unknown,
                    CommandInstance<unknown, Record<string, unknown>, string>,
                    any,
                >,
            ],
        >;
        getSubgraphsAsync(
            namespace?: string,
            recurse?: boolean,
        ): AsyncGenerator<
            [
                string,
                Pregel<
                    any,
                    any,
                    StrRecord<string, any>,
                    any,
                    any,
                    any,
                    any,
                    unknown,
                    CommandInstance<unknown, Record<string, unknown>, string>,
                    any,
                >,
            ],
        >;
        invoke(
            input: null | InputType | CommandType,
            options?: Partial<
                Omit<
                    PregelOptions<
                        Record<"__start__" | N, PregelNode<State, Update>>,
                        Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                        ContextType & Record<string, any>,
                        undefined | StreamMode | StreamMode[],
                        boolean,
                        undefined | "text/event-stream",
                    >,
                    "encoding",
                >,
            >,
        ): Promise<OutputType>;
        stream<
            TStreamMode extends undefined
            | StreamMode
            | StreamMode[],
            TSubgraphs extends boolean,
            TEncoding extends undefined | "text/event-stream",
        >(
            input: null | InputType | CommandType,
            options?: Partial<
                PregelOptions<
                    Record<"__start__" | N, PregelNode<State, Update>>,
                    Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                    ContextType & Record<string, any>,
                    TStreamMode,
                    TSubgraphs,
                    TEncoding,
                >,
            >,
        ): Promise<
            IterableReadableStream<
                StreamOutputMap<
                    TStreamMode,
                    TSubgraphs,
                    InputType,
                    OutputType,
                    "__start__"
                    | N,
                    NodeReturnType,
                    StreamCustomType,
                    TEncoding,
                >,
            >,
        >;
        streamEvents(
            input: null | InputType | CommandType,
            options: Partial<
                PregelOptions<
                    Record<"__start__" | N, PregelNode<State, Update>>,
                    Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                    ContextType & Record<string, any>,
                    undefined | StreamMode | StreamMode[],
                    boolean,
                    undefined | "text/event-stream",
                >,
            > & { version: "v1" | "v2" },
            streamOptions?: Omit<EventStreamCallbackHandlerInput, "autoClose">,
        ): IterableReadableStream<StreamEvent>;
        streamEvents(
            input: null | InputType | CommandType,
            options: Partial<
                PregelOptions<
                    Record<"__start__" | N, PregelNode<State, Update>>,
                    Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                    ContextType & Record<string, any>,
                    undefined | StreamMode | StreamMode[],
                    boolean,
                    undefined | "text/event-stream",
                >,
            > & { encoding: "text/event-stream"; version: "v1" | "v2" },
            streamOptions?: Omit<EventStreamCallbackHandlerInput, "autoClose">,
        ): IterableReadableStream<Uint8Array<ArrayBufferLike>>;
        updateState(
            inputConfig: LangGraphRunnableConfig,
            values: unknown,
            asNode?: string | N,
        ): Promise<RunnableConfig<Record<string, any>>>;
        validate(): this;
        withConfig(
            config: Omit<LangGraphRunnableConfig, "store" | "writer" | "interrupt">,
        ): CompiledGraph<
            N,
            State,
            Update,
            ContextType,
            InputType,
            OutputType,
            NodeReturnType,
            CommandType,
            StreamCustomType,
        >;
    }

    Type Parameters

    • N extends string

      Mapping of node names to their PregelNode implementations

    • State = any

      Mapping of channel names to their BaseChannel or ManagedValueSpec implementations

    • Update = any

      Type of context that can be passed to the graph

    • ContextType extends Record<string, any> = Record<string, any>

      Type of input values accepted by the graph

    • InputType = any

      Type of output values produced by the graph

    • OutputType = any
    • NodeReturnType = unknown
    • CommandType = unknown
    • StreamCustomType = any

    Hierarchy (View Summary)

    Index

    Properties

    "~NodeReturnType": NodeReturnType
    "~NodeType": N
    "~RunInput": Update
    "~RunOutput": State
    autoValidate: boolean = true

    Whether to automatically validate the graph structure when it is compiled. Defaults to true.

    builder: Graph<N, State, Update>
    cache?: any

    Optional cache for the graph, useful for caching tasks.

    channels: Channels

    The channels in the graph, mapping channel names to their BaseChannel or ManagedValueSpec instances

    checkpointer?: any

    Optional checkpointer for persisting graph state. When provided, saves a checkpoint of the graph state at every superstep. When false or undefined, checkpointing is disabled, and the graph will not be able to save or restore state.

    config?: LangGraphRunnableConfig<Record<string, any>>

    The default configuration for graph execution, can be overridden on a per-invocation basis

    debug: boolean = false

    Whether to enable debug logging. Defaults to false.

    inputChannels: string | N | (string | N)[]

    The input channels for the graph. These channels receive the initial input when the graph is invoked. Can be a single channel key or an array of channel keys.

    interruptAfter?: any

    Optional array of node names or "all" to interrupt after executing these nodes. Used for implementing human-in-the-loop workflows.

    interruptBefore?: any

    Optional array of node names or "all" to interrupt before executing these nodes. Used for implementing human-in-the-loop workflows.

    nodes: Nodes

    The nodes in the graph, mapping node names to their PregelNode instances

    outputChannels: string | N | (string | N)[]

    The output channels for the graph. These channels contain the final output when the graph completes. Can be a single channel key or an array of channel keys.

    retryPolicy?: RetryPolicy

    Optional retry policy for handling failures in node execution

    stepTimeout?: number

    Optional timeout in milliseconds for the execution of each superstep

    store?: any

    Optional long-term memory store for the graph, allows for persistence & retrieval of data across threads

    streamChannels?: string | N | (string | N)[]

    Optional channels to stream. If not specified, all channels will be streamed. Can be a single channel key or an array of channel keys.

    streamMode: StreamMode[] = ...

    The streaming modes enabled for this graph. Defaults to ["values"]. Supported modes:

    • "values": Streams the full state after each step
    • "updates": Streams state updates after each step
    • "messages": Streams messages from within nodes
    • "custom": Streams custom events from within nodes
    • "debug": Streams events related to the execution of the graph - useful for tracing & debugging graph execution

    Accessors

    • get streamChannelsAsIs(): keyof Channels | (keyof Channels)[]

      Gets the channels to stream in their original format. If streamChannels is specified, returns it as-is (either single key or array). Otherwise, returns all channels in the graph as an array.

      Returns keyof Channels | (keyof Channels)[]

      Channel keys to stream, either as a single key or array

    • get streamChannelsList(): (keyof Channels)[]

      Gets a list of all channels that should be streamed. If streamChannels is specified, returns those channels. Otherwise, returns all channels in the graph.

      Returns (keyof Channels)[]

      Array of channel keys to stream

    Methods

    • Parameters

      • start: "__start__" | N
      • name: string
      • branch: Branch<State, N>

      Returns void

    • Parameters

      • start: "__start__" | N
      • end: "__end__" | N

      Returns void

    • Parameters

      Returns void

    • Returns Promise<void>

    • Returns a drawable representation of the computation graph.

      Parameters

      • Optionalconfig: RunnableConfig<Record<string, any>> & { xray?: number | boolean }

      Returns Graph

      Use getGraphAsync instead. The async method will be the default in the next minor core release.

    • Returns a drawable representation of the computation graph.

      Parameters

      • Optionalconfig: RunnableConfig<Record<string, any>> & { xray?: number | boolean }

      Returns Promise<Graph>

    • Gets the current state of the graph. Requires a checkpointer to be configured.

      Parameters

      • config: RunnableConfig

        Configuration for retrieving the state

      • Optionaloptions: GetStateOptions

        Additional options

      Returns Promise<StateSnapshot>

      A snapshot of the current graph state

      If no checkpointer is configured

    • Gets the history of graph states. Requires a checkpointer to be configured. Useful for:

      • Debugging execution history
      • Implementing time travel
      • Analyzing graph behavior

      Parameters

      • config: RunnableConfig

        Configuration for retrieving the history

      • Optionaloptions: any

        Options for filtering the history

      Returns AsyncIterableIterator<StateSnapshot>

      An async iterator of state snapshots

      If no checkpointer is configured

    • Gets all subgraphs within this graph. A subgraph is a Pregel instance that is nested within a node of this graph.

      Parameters

      • Optionalnamespace: string

        Optional namespace to filter subgraphs

      • Optionalrecurse: boolean

        Whether to recursively get subgraphs of subgraphs

      Returns Generator<
          [
              string,
              Pregel<
                  any,
                  any,
                  StrRecord<string, any>,
                  any,
                  any,
                  any,
                  any,
                  unknown,
                  CommandInstance<unknown, Record<string, unknown>, string>,
                  any,
              >,
          ],
      >

      Generator yielding tuples of [name, subgraph]

      Use getSubgraphsAsync instead. The async method will become the default in the next minor release.

    • Gets all subgraphs within this graph asynchronously. A subgraph is a Pregel instance that is nested within a node of this graph.

      Parameters

      • Optionalnamespace: string

        Optional namespace to filter subgraphs

      • Optionalrecurse: boolean

        Whether to recursively get subgraphs of subgraphs

      Returns AsyncGenerator<
          [
              string,
              Pregel<
                  any,
                  any,
                  StrRecord<string, any>,
                  any,
                  any,
                  any,
                  any,
                  unknown,
                  CommandInstance<unknown, Record<string, unknown>, string>,
                  any,
              >,
          ],
      >

      AsyncGenerator yielding tuples of [name, subgraph]

    • Run the graph with a single input and config.

      Parameters

      • input: null | InputType | CommandType

        The input to the graph.

      • Optionaloptions: Partial<
            Omit<
                PregelOptions<
                    Record<"__start__" | N, PregelNode<State, Update>>,
                    Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                    ContextType & Record<string, any>,
                    undefined | StreamMode | StreamMode[],
                    boolean,
                    undefined | "text/event-stream",
                >,
                "encoding",
            >,
        >

        The configuration to use for the run.

      Returns Promise<OutputType>

    • Streams the execution of the graph, emitting state updates as they occur. This is the primary method for observing graph execution in real-time.

      Stream modes:

      • "values": Emits complete state after each step
      • "updates": Emits only state changes after each step
      • "debug": Emits detailed debug information
      • "messages": Emits messages from within nodes
      • "custom": Emits custom events from within nodes
      • "checkpoints": Emits checkpoints from within nodes
      • "tasks": Emits tasks from within nodes

      Type Parameters

      • TStreamMode extends undefined | StreamMode | StreamMode[]
      • TSubgraphs extends boolean
      • TEncoding extends undefined | "text/event-stream"

      Parameters

      Returns Promise<
          IterableReadableStream<
              StreamOutputMap<
                  TStreamMode,
                  TSubgraphs,
                  InputType,
                  OutputType,
                  "__start__"
                  | N,
                  NodeReturnType,
                  StreamCustomType,
                  TEncoding,
              >,
          >,
      >

      An async iterable stream of graph state updates

    • Parameters

      • input: null | InputType | CommandType
      • options: Partial<
            PregelOptions<
                Record<"__start__" | N, PregelNode<State, Update>>,
                Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                ContextType & Record<string, any>,
                undefined | StreamMode | StreamMode[],
                boolean,
                undefined | "text/event-stream",
            >,
        > & { version: "v1" | "v2" }
      • OptionalstreamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">

      Returns IterableReadableStream<StreamEvent>

    • Parameters

      • input: null | InputType | CommandType
      • options: Partial<
            PregelOptions<
                Record<"__start__" | N, PregelNode<State, Update>>,
                Record<string | N, BaseChannel<unknown, unknown, unknown>>,
                ContextType & Record<string, any>,
                undefined | StreamMode | StreamMode[],
                boolean,
                undefined | "text/event-stream",
            >,
        > & { encoding: "text/event-stream"; version: "v1" | "v2" }
      • OptionalstreamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">

      Returns IterableReadableStream<Uint8Array<ArrayBufferLike>>

    • Updates the state of the graph with new values. Requires a checkpointer to be configured.

      This method can be used for:

      • Implementing human-in-the-loop workflows
      • Modifying graph state during breakpoints
      • Integrating external inputs into the graph

      Parameters

      • inputConfig: LangGraphRunnableConfig

        Configuration for the update

      • values: unknown

        The values to update the state with

      • OptionalasNode: string | N

        Optional node name to attribute the update to

      Returns Promise<RunnableConfig<Record<string, any>>>

      Updated configuration

      If no checkpointer is configured

      If the update cannot be attributed to a node

    • Validates the graph structure to ensure it is well-formed. Checks for:

      • No orphaned nodes
      • Valid input/output channel configurations
      • Valid interrupt configurations

      Returns this

      this - The Pregel instance for method chaining

      If the graph structure is invalid