@langchain/langgraph 1.4.13 → 1.4.15-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/func/index.cjs +1 -1
- package/dist/func/index.js +1 -1
- package/dist/graph/message.cjs +7 -4
- package/dist/graph/message.cjs.map +1 -1
- package/dist/graph/message.d.cts.map +1 -1
- package/dist/graph/message.d.ts.map +1 -1
- package/dist/graph/message.js +7 -4
- package/dist/graph/message.js.map +1 -1
- package/dist/graph/state.cjs +3 -1
- package/dist/graph/state.cjs.map +1 -1
- package/dist/graph/state.d.cts +4 -2
- package/dist/graph/state.d.cts.map +1 -1
- package/dist/graph/state.d.ts +4 -2
- package/dist/graph/state.d.ts.map +1 -1
- package/dist/graph/state.js +3 -1
- package/dist/graph/state.js.map +1 -1
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pregel/algo.cjs +1 -1
- package/dist/pregel/algo.js +1 -1
- package/dist/pregel/index.cjs +1 -1
- package/dist/pregel/index.js +1 -1
- package/dist/pregel/loop.cjs +1 -1
- package/dist/pregel/loop.js +1 -1
- package/dist/pregel/messages-v2.cjs +6 -0
- package/dist/pregel/messages-v2.cjs.map +1 -1
- package/dist/pregel/messages-v2.js +6 -0
- package/dist/pregel/messages-v2.js.map +1 -1
- package/dist/pregel/read.cjs +18 -7
- package/dist/pregel/read.cjs.map +1 -1
- package/dist/pregel/read.d.cts +3 -1
- package/dist/pregel/read.d.cts.map +1 -1
- package/dist/pregel/read.d.ts +3 -1
- package/dist/pregel/read.d.ts.map +1 -1
- package/dist/pregel/read.js +18 -7
- package/dist/pregel/read.js.map +1 -1
- package/dist/pregel/runnable.cjs +103 -0
- package/dist/pregel/runnable.cjs.map +1 -0
- package/dist/pregel/runnable.js +103 -0
- package/dist/pregel/runnable.js.map +1 -0
- package/dist/pregel/runner.cjs +1 -1
- package/dist/pregel/runner.js +1 -1
- package/dist/pregel/utils/config.cjs +3 -2
- package/dist/pregel/utils/config.cjs.map +1 -1
- package/dist/pregel/utils/config.d.cts.map +1 -1
- package/dist/pregel/utils/config.d.ts.map +1 -1
- package/dist/pregel/utils/config.js +3 -2
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/utils/index.cjs +8 -0
- package/dist/pregel/utils/index.cjs.map +1 -1
- package/dist/pregel/utils/index.d.cts +37 -1
- package/dist/pregel/utils/index.d.cts.map +1 -1
- package/dist/pregel/utils/index.d.ts +37 -1
- package/dist/pregel/utils/index.d.ts.map +1 -1
- package/dist/pregel/utils/index.js +8 -1
- package/dist/pregel/utils/index.js.map +1 -1
- package/dist/web.cjs +6 -4
- package/dist/web.d.cts +2 -2
- package/dist/web.d.ts +2 -2
- package/dist/web.js +2 -1
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ const require_base = require("./channels/base.cjs");
|
|
|
6
6
|
const require_binop = require("./channels/binop.cjs");
|
|
7
7
|
const require_annotation = require("./graph/annotation.cjs");
|
|
8
8
|
const require_config = require("./pregel/utils/config.cjs");
|
|
9
|
+
const require_index = require("./pregel/utils/index.cjs");
|
|
9
10
|
const require_runtime = require("./pregel/runtime.cjs");
|
|
10
11
|
const require_convert = require("./stream/convert.cjs");
|
|
11
12
|
const require_stream_channel = require("./stream/stream-channel.cjs");
|
|
@@ -29,7 +30,7 @@ const require_messages_reducer = require("./graph/messages_reducer.cjs");
|
|
|
29
30
|
const require_messages$1 = require("./state/prebuilt/messages.cjs");
|
|
30
31
|
const require_state = require("./graph/state.cjs");
|
|
31
32
|
const require_message = require("./graph/message.cjs");
|
|
32
|
-
const require_index = require("./func/index.cjs");
|
|
33
|
+
const require_index$1 = require("./func/index.cjs");
|
|
33
34
|
const require_messages_annotation = require("./graph/messages_annotation.cjs");
|
|
34
35
|
const require_writer = require("./writer.cjs");
|
|
35
36
|
require("./web.cjs");
|
|
@@ -143,13 +144,13 @@ Object.defineProperty(exports, "emptyCheckpoint", {
|
|
|
143
144
|
return _langchain_langgraph_checkpoint.emptyCheckpoint;
|
|
144
145
|
}
|
|
145
146
|
});
|
|
146
|
-
exports.entrypoint = require_index.entrypoint;
|
|
147
|
+
exports.entrypoint = require_index$1.entrypoint;
|
|
147
148
|
exports.filterLifecycleEntries = require_lifecycle.filterLifecycleEntries;
|
|
148
149
|
exports.filterSubgraphHandles = require_subgraphs.filterSubgraphHandles;
|
|
149
150
|
exports.getConfig = require_config.getConfig;
|
|
150
151
|
exports.getCurrentTaskInput = require_config.getCurrentTaskInput;
|
|
151
152
|
exports.getJsonSchemaFromSchema = require_adapter.getJsonSchemaFromSchema;
|
|
152
|
-
exports.getPreviousState = require_index.getPreviousState;
|
|
153
|
+
exports.getPreviousState = require_index$1.getPreviousState;
|
|
153
154
|
exports.getSchemaDefaultGetter = require_adapter.getSchemaDefaultGetter;
|
|
154
155
|
exports.getStore = require_config.getStore;
|
|
155
156
|
exports.getSubgraphsSeenSet = require_errors.getSubgraphsSeenSet;
|
|
@@ -169,8 +170,9 @@ exports.isSerializableSchema = require_types$1.isSerializableSchema;
|
|
|
169
170
|
exports.isStandardSchema = require_types$1.isStandardSchema;
|
|
170
171
|
exports.messagesDeltaReducer = require_messages_reducer.messagesDeltaReducer;
|
|
171
172
|
exports.messagesStateReducer = require_messages_reducer.messagesStateReducer;
|
|
173
|
+
exports.omitPayload = require_index.omitPayload;
|
|
172
174
|
exports.pushMessage = require_message.pushMessage;
|
|
173
|
-
exports.task = require_index.task;
|
|
175
|
+
exports.task = require_index$1.task;
|
|
174
176
|
exports.writer = require_writer.writer;
|
|
175
177
|
|
|
176
178
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["initializeAsyncLocalStorageSingleton"],"sources":["../src/index.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\nimport { initializeAsyncLocalStorageSingleton } from \"./node.js\";\n\n// Initialize global async local storage instance for tracing\ninitializeAsyncLocalStorageSingleton();\n\nexport * from \"./web.js\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["initializeAsyncLocalStorageSingleton"],"sources":["../src/index.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\nimport { initializeAsyncLocalStorageSingleton } from \"./node.js\";\n\n// Initialize global async local storage instance for tracing\ninitializeAsyncLocalStorageSingleton();\n\nexport * from \"./web.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,aAAAA,sCAAsC"}
|
package/dist/index.d.cts
CHANGED
|
@@ -13,7 +13,7 @@ import { UntrackedValueChannel } from "./channels/untracked_value.cjs";
|
|
|
13
13
|
import { RunControl } from "./pregel/runtime.cjs";
|
|
14
14
|
import { ExecutionInfo, LangGraphRunnableConfig, Runtime, ServerInfo } from "./pregel/runnable_types.cjs";
|
|
15
15
|
import { Annotation, AnnotationRoot, NodeType, SingleReducer, StateDefinition, StateType, UpdateType } from "./graph/annotation.cjs";
|
|
16
|
-
import { CachePolicy, RetryPolicy } from "./pregel/utils/index.cjs";
|
|
16
|
+
import { CachePolicy, RetryPolicy, TracePolicy, omitPayload } from "./pregel/utils/index.cjs";
|
|
17
17
|
import { PregelNode } from "./pregel/read.cjs";
|
|
18
18
|
import { AgentStatus, ChatModelStream, InferExtensions, InterruptPayload, LifecycleCause, LifecycleData, MessagesEventData, Namespace, NativeStreamTransformer, ProtocolEvent, StreamEmitter, StreamTransformer, ToolCallStatus, ToolCallStream, ToolsEventData, UpdatesEventData, UsageInfo, isNativeTransformer } from "./stream/types.cjs";
|
|
19
19
|
import { GetStateOptions, MultipleChannelSubscriptionOptions, PregelOptions, PregelParams, SingleChannelSubscriptionOptions, StateSnapshot, StreamMode, StreamOutputMap } from "./pregel/types.cjs";
|
|
@@ -46,4 +46,4 @@ import { getJsonSchemaFromSchema, getSchemaDefaultGetter } from "./state/adapter
|
|
|
46
46
|
import { MessagesDeltaValue, MessagesValue } from "./state/prebuilt/messages.cjs";
|
|
47
47
|
import { getConfig, getCurrentTaskInput, getStore, getWriter } from "./pregel/utils/config.cjs";
|
|
48
48
|
import { AsyncBatchedStore, BaseCheckpointSaver, BaseStore, Checkpoint, CheckpointMetadata, CheckpointTuple, GetOperation, InMemoryStore, Item, ListNamespacesOperation, MatchCondition, MemorySaver, NameSpacePath, NamespaceMatchType, Operation, OperationResults, PutOperation, SearchOperation, copyCheckpoint, emptyCheckpoint } from "./web.cjs";
|
|
49
|
-
export { AddNodeOptions, AgentStatus, Annotation, AnnotationRoot, AnyStateSchema, AnyValue, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseLangGraphErrorFields, BaseStore, BinaryOperator, BinaryOperatorAggregate, COMMAND_SYMBOL, CachePolicy, ChatModelStream, ChatModelStreamImpl, Checkpoint, CheckpointMetadata, CheckpointTuple, Command, CommandInstance, CommandParams, CompiledGraph, CompiledGraphType, CompiledStateGraph, ConditionalEdgeRouter, ConditionalEdgeRouterTypes, ContextSchemaInit, ConvertToProtocolEventOptions, CreateGraphRunStreamOptions, DeltaChannel, DeltaReducer, DeltaValue, DeltaValueInit, DynamicBarrierValue, END, EmptyChannelError, EmptyInputError, EntrypointOptions, EphemeralValue, StreamChannel as EventLog, ExecutionInfo, ExtractStateType, ExtractUpdateType, GetOperation, GetStateOptions, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphNode, GraphNodeReturnValue, GraphNodeTypes, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InferExtensions, InferInterruptInputType, InferInterruptResumeType, InferStateSchemaUpdate, InferStateSchemaValue, InferWriterType, Interrupt, InterruptPayload, InvalidUpdateError, Item, LangGraphRunnableConfig, LastValue, LifecycleCause, LifecycleData, LifecycleEntry, LifecycleProjection, LifecycleTransformerOptions, ListNamespacesOperation, MatchCondition, MemorySaver, MessageGraph, Messages, MessagesAnnotation, MessagesDeltaValue, MessagesEventData, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleChannelSubscriptionOptions, MultipleSubgraphsError, NameSpacePath, NamedBarrierValue, Namespace, NamespaceMatchType, NativeStreamTransformer, NodeError, NodeInterrupt, NodePolicyOptions, NodeSpec, NodeTimeoutError, NodeType, Operation, OperationResults, Overwrite, OverwriteValue, ParentCommand, Pregel, PregelNode, PregelOptions, PregelParams, ProtocolEvent, PutOperation, REMOVE_ALL_MESSAGES, ReducedValue, ReducedValueInit, RemoteException, RetryPolicy, RunControl, Runtime, START, STREAM_EVENTS_V3_MODES, SearchOperation, Send, SendOptions, ServerInfo, SingleChannelSubscriptionOptions, SingleReducer, StateDefinition, StateDefinitionInit, StateGraph, StateGraphAddNodeOptions, StateGraphArgs, StateGraphArgsWithInputOutputSchemas, StateGraphArgsWithStateSchema, StateGraphInit, StateGraphInputError, StateGraphNodeSpec, StateGraphOptions, StateSchema, StateSchemaField, StateSchemaFieldToChannel, StateSchemaFields, StateSchemaFieldsToStateDefinition, StateSnapshot, StateType, StreamChannel, StreamEmitter, StreamMode, StreamOutputMap, StreamTransformer, SubgraphDiscoveryProjection, SubgraphDiscoveryTransformerOptions, SubgraphRunStream, TaskOptions, TimeoutPolicy, ToStateDefinition, ToolCallStatus, ToolCallStream, ToolsEventData, Topic, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, UntrackedValueInit, UpdateType, UpdatesEventData, UsageInfo, WaitForNames, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, pushMessage, task, writer };
|
|
49
|
+
export { AddNodeOptions, AgentStatus, Annotation, AnnotationRoot, AnyStateSchema, AnyValue, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseLangGraphErrorFields, BaseStore, BinaryOperator, BinaryOperatorAggregate, COMMAND_SYMBOL, CachePolicy, ChatModelStream, ChatModelStreamImpl, Checkpoint, CheckpointMetadata, CheckpointTuple, Command, CommandInstance, CommandParams, CompiledGraph, CompiledGraphType, CompiledStateGraph, ConditionalEdgeRouter, ConditionalEdgeRouterTypes, ContextSchemaInit, ConvertToProtocolEventOptions, CreateGraphRunStreamOptions, DeltaChannel, DeltaReducer, DeltaValue, DeltaValueInit, DynamicBarrierValue, END, EmptyChannelError, EmptyInputError, EntrypointOptions, EphemeralValue, StreamChannel as EventLog, ExecutionInfo, ExtractStateType, ExtractUpdateType, GetOperation, GetStateOptions, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphNode, GraphNodeReturnValue, GraphNodeTypes, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InferExtensions, InferInterruptInputType, InferInterruptResumeType, InferStateSchemaUpdate, InferStateSchemaValue, InferWriterType, Interrupt, InterruptPayload, InvalidUpdateError, Item, LangGraphRunnableConfig, LastValue, LifecycleCause, LifecycleData, LifecycleEntry, LifecycleProjection, LifecycleTransformerOptions, ListNamespacesOperation, MatchCondition, MemorySaver, MessageGraph, Messages, MessagesAnnotation, MessagesDeltaValue, MessagesEventData, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleChannelSubscriptionOptions, MultipleSubgraphsError, NameSpacePath, NamedBarrierValue, Namespace, NamespaceMatchType, NativeStreamTransformer, NodeError, NodeInterrupt, NodePolicyOptions, NodeSpec, NodeTimeoutError, NodeType, Operation, OperationResults, Overwrite, OverwriteValue, ParentCommand, Pregel, PregelNode, PregelOptions, PregelParams, ProtocolEvent, PutOperation, REMOVE_ALL_MESSAGES, ReducedValue, ReducedValueInit, RemoteException, RetryPolicy, RunControl, Runtime, START, STREAM_EVENTS_V3_MODES, SearchOperation, Send, SendOptions, ServerInfo, SingleChannelSubscriptionOptions, SingleReducer, StateDefinition, StateDefinitionInit, StateGraph, StateGraphAddNodeOptions, StateGraphArgs, StateGraphArgsWithInputOutputSchemas, StateGraphArgsWithStateSchema, StateGraphInit, StateGraphInputError, StateGraphNodeSpec, StateGraphOptions, StateSchema, StateSchemaField, StateSchemaFieldToChannel, StateSchemaFields, StateSchemaFieldsToStateDefinition, StateSnapshot, StateType, StreamChannel, StreamEmitter, StreamMode, StreamOutputMap, StreamTransformer, SubgraphDiscoveryProjection, SubgraphDiscoveryTransformerOptions, SubgraphRunStream, TaskOptions, TimeoutPolicy, ToStateDefinition, ToolCallStatus, ToolCallStream, ToolsEventData, Topic, TracePolicy, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, UntrackedValueInit, UpdateType, UpdatesEventData, UsageInfo, WaitForNames, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, omitPayload, pushMessage, task, writer };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { UntrackedValueChannel } from "./channels/untracked_value.js";
|
|
|
13
13
|
import { RunControl } from "./pregel/runtime.js";
|
|
14
14
|
import { ExecutionInfo, LangGraphRunnableConfig, Runtime, ServerInfo } from "./pregel/runnable_types.js";
|
|
15
15
|
import { Annotation, AnnotationRoot, NodeType, SingleReducer, StateDefinition, StateType, UpdateType } from "./graph/annotation.js";
|
|
16
|
-
import { CachePolicy, RetryPolicy } from "./pregel/utils/index.js";
|
|
16
|
+
import { CachePolicy, RetryPolicy, TracePolicy, omitPayload } from "./pregel/utils/index.js";
|
|
17
17
|
import { PregelNode } from "./pregel/read.js";
|
|
18
18
|
import { AgentStatus, ChatModelStream, InferExtensions, InterruptPayload, LifecycleCause, LifecycleData, MessagesEventData, Namespace, NativeStreamTransformer, ProtocolEvent, StreamEmitter, StreamTransformer, ToolCallStatus, ToolCallStream, ToolsEventData, UpdatesEventData, UsageInfo, isNativeTransformer } from "./stream/types.js";
|
|
19
19
|
import { GetStateOptions, MultipleChannelSubscriptionOptions, PregelOptions, PregelParams, SingleChannelSubscriptionOptions, StateSnapshot, StreamMode, StreamOutputMap } from "./pregel/types.js";
|
|
@@ -46,4 +46,4 @@ import { getJsonSchemaFromSchema, getSchemaDefaultGetter } from "./state/adapter
|
|
|
46
46
|
import { MessagesDeltaValue, MessagesValue } from "./state/prebuilt/messages.js";
|
|
47
47
|
import { getConfig, getCurrentTaskInput, getStore, getWriter } from "./pregel/utils/config.js";
|
|
48
48
|
import { AsyncBatchedStore, BaseCheckpointSaver, BaseStore, Checkpoint, CheckpointMetadata, CheckpointTuple, GetOperation, InMemoryStore, Item, ListNamespacesOperation, MatchCondition, MemorySaver, NameSpacePath, NamespaceMatchType, Operation, OperationResults, PutOperation, SearchOperation, copyCheckpoint, emptyCheckpoint } from "./web.js";
|
|
49
|
-
export { AddNodeOptions, AgentStatus, Annotation, AnnotationRoot, AnyStateSchema, AnyValue, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseLangGraphErrorFields, BaseStore, BinaryOperator, BinaryOperatorAggregate, COMMAND_SYMBOL, CachePolicy, ChatModelStream, ChatModelStreamImpl, Checkpoint, CheckpointMetadata, CheckpointTuple, Command, CommandInstance, CommandParams, CompiledGraph, CompiledGraphType, CompiledStateGraph, ConditionalEdgeRouter, ConditionalEdgeRouterTypes, ContextSchemaInit, ConvertToProtocolEventOptions, CreateGraphRunStreamOptions, DeltaChannel, DeltaReducer, DeltaValue, DeltaValueInit, DynamicBarrierValue, END, EmptyChannelError, EmptyInputError, EntrypointOptions, EphemeralValue, StreamChannel as EventLog, ExecutionInfo, ExtractStateType, ExtractUpdateType, GetOperation, GetStateOptions, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphNode, GraphNodeReturnValue, GraphNodeTypes, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InferExtensions, InferInterruptInputType, InferInterruptResumeType, InferStateSchemaUpdate, InferStateSchemaValue, InferWriterType, Interrupt, InterruptPayload, InvalidUpdateError, Item, LangGraphRunnableConfig, LastValue, LifecycleCause, LifecycleData, LifecycleEntry, LifecycleProjection, LifecycleTransformerOptions, ListNamespacesOperation, MatchCondition, MemorySaver, MessageGraph, Messages, MessagesAnnotation, MessagesDeltaValue, MessagesEventData, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleChannelSubscriptionOptions, MultipleSubgraphsError, NameSpacePath, NamedBarrierValue, Namespace, NamespaceMatchType, NativeStreamTransformer, NodeError, NodeInterrupt, NodePolicyOptions, NodeSpec, NodeTimeoutError, NodeType, Operation, OperationResults, Overwrite, OverwriteValue, ParentCommand, Pregel, PregelNode, PregelOptions, PregelParams, ProtocolEvent, PutOperation, REMOVE_ALL_MESSAGES, ReducedValue, ReducedValueInit, RemoteException, RetryPolicy, RunControl, Runtime, START, STREAM_EVENTS_V3_MODES, SearchOperation, Send, SendOptions, ServerInfo, SingleChannelSubscriptionOptions, SingleReducer, StateDefinition, StateDefinitionInit, StateGraph, StateGraphAddNodeOptions, StateGraphArgs, StateGraphArgsWithInputOutputSchemas, StateGraphArgsWithStateSchema, StateGraphInit, StateGraphInputError, StateGraphNodeSpec, StateGraphOptions, StateSchema, StateSchemaField, StateSchemaFieldToChannel, StateSchemaFields, StateSchemaFieldsToStateDefinition, StateSnapshot, StateType, StreamChannel, StreamEmitter, StreamMode, StreamOutputMap, StreamTransformer, SubgraphDiscoveryProjection, SubgraphDiscoveryTransformerOptions, SubgraphRunStream, TaskOptions, TimeoutPolicy, ToStateDefinition, ToolCallStatus, ToolCallStream, ToolsEventData, Topic, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, UntrackedValueInit, UpdateType, UpdatesEventData, UsageInfo, WaitForNames, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, pushMessage, task, writer };
|
|
49
|
+
export { AddNodeOptions, AgentStatus, Annotation, AnnotationRoot, AnyStateSchema, AnyValue, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseLangGraphErrorFields, BaseStore, BinaryOperator, BinaryOperatorAggregate, COMMAND_SYMBOL, CachePolicy, ChatModelStream, ChatModelStreamImpl, Checkpoint, CheckpointMetadata, CheckpointTuple, Command, CommandInstance, CommandParams, CompiledGraph, CompiledGraphType, CompiledStateGraph, ConditionalEdgeRouter, ConditionalEdgeRouterTypes, ContextSchemaInit, ConvertToProtocolEventOptions, CreateGraphRunStreamOptions, DeltaChannel, DeltaReducer, DeltaValue, DeltaValueInit, DynamicBarrierValue, END, EmptyChannelError, EmptyInputError, EntrypointOptions, EphemeralValue, StreamChannel as EventLog, ExecutionInfo, ExtractStateType, ExtractUpdateType, GetOperation, GetStateOptions, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphNode, GraphNodeReturnValue, GraphNodeTypes, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InferExtensions, InferInterruptInputType, InferInterruptResumeType, InferStateSchemaUpdate, InferStateSchemaValue, InferWriterType, Interrupt, InterruptPayload, InvalidUpdateError, Item, LangGraphRunnableConfig, LastValue, LifecycleCause, LifecycleData, LifecycleEntry, LifecycleProjection, LifecycleTransformerOptions, ListNamespacesOperation, MatchCondition, MemorySaver, MessageGraph, Messages, MessagesAnnotation, MessagesDeltaValue, MessagesEventData, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleChannelSubscriptionOptions, MultipleSubgraphsError, NameSpacePath, NamedBarrierValue, Namespace, NamespaceMatchType, NativeStreamTransformer, NodeError, NodeInterrupt, NodePolicyOptions, NodeSpec, NodeTimeoutError, NodeType, Operation, OperationResults, Overwrite, OverwriteValue, ParentCommand, Pregel, PregelNode, PregelOptions, PregelParams, ProtocolEvent, PutOperation, REMOVE_ALL_MESSAGES, ReducedValue, ReducedValueInit, RemoteException, RetryPolicy, RunControl, Runtime, START, STREAM_EVENTS_V3_MODES, SearchOperation, Send, SendOptions, ServerInfo, SingleChannelSubscriptionOptions, SingleReducer, StateDefinition, StateDefinitionInit, StateGraph, StateGraphAddNodeOptions, StateGraphArgs, StateGraphArgsWithInputOutputSchemas, StateGraphArgsWithStateSchema, StateGraphInit, StateGraphInputError, StateGraphNodeSpec, StateGraphOptions, StateSchema, StateSchemaField, StateSchemaFieldToChannel, StateSchemaFields, StateSchemaFieldsToStateDefinition, StateSnapshot, StateType, StreamChannel, StreamEmitter, StreamMode, StreamOutputMap, StreamTransformer, SubgraphDiscoveryProjection, SubgraphDiscoveryTransformerOptions, SubgraphRunStream, TaskOptions, TimeoutPolicy, ToStateDefinition, ToolCallStatus, ToolCallStream, ToolsEventData, Topic, TracePolicy, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, UntrackedValueInit, UpdateType, UpdatesEventData, UsageInfo, WaitForNames, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, omitPayload, pushMessage, task, writer };
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { BaseChannel } from "./channels/base.js";
|
|
|
5
5
|
import { BinaryOperatorAggregate } from "./channels/binop.js";
|
|
6
6
|
import { Annotation } from "./graph/annotation.js";
|
|
7
7
|
import { getConfig, getCurrentTaskInput, getStore, getWriter } from "./pregel/utils/config.js";
|
|
8
|
+
import { omitPayload } from "./pregel/utils/index.js";
|
|
8
9
|
import { RunControl } from "./pregel/runtime.js";
|
|
9
10
|
import { STREAM_EVENTS_V3_MODES, convertToProtocolEvent, isCheckpointEnvelope } from "./stream/convert.js";
|
|
10
11
|
import { StreamChannel } from "./stream/stream-channel.js";
|
|
@@ -36,6 +37,6 @@ import { AsyncBatchedStore, BaseCheckpointSaver, BaseStore, InMemoryStore, Memor
|
|
|
36
37
|
//#region src/index.ts
|
|
37
38
|
initializeAsyncLocalStorageSingleton();
|
|
38
39
|
//#endregion
|
|
39
|
-
export { Annotation, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseStore, BinaryOperatorAggregate, COMMAND_SYMBOL, ChatModelStreamImpl, Command, CommandInstance, CompiledStateGraph, DeltaChannel, DeltaValue, END, EmptyChannelError, EmptyInputError, StreamChannel as EventLog, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InvalidUpdateError, MemorySaver, MessageGraph, MessagesAnnotation, MessagesDeltaValue, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleSubgraphsError, NodeError, NodeInterrupt, NodeTimeoutError, Overwrite, ParentCommand, REMOVE_ALL_MESSAGES, ReducedValue, RemoteException, RunControl, START, STREAM_EVENTS_V3_MODES, Send, StateGraph, StateGraphInputError, StateSchema, StreamChannel, SubgraphRunStream, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, pushMessage, task, writer };
|
|
40
|
+
export { Annotation, AsyncBatchedStore, BaseChannel, BaseCheckpointSaver, BaseLangGraphError, BaseStore, BinaryOperatorAggregate, COMMAND_SYMBOL, ChatModelStreamImpl, Command, CommandInstance, CompiledStateGraph, DeltaChannel, DeltaValue, END, EmptyChannelError, EmptyInputError, StreamChannel as EventLog, Graph, GraphBubbleUp, GraphDrained, GraphInterrupt, GraphRecursionError, GraphRunStream, GraphValueError, INTERRUPT, InMemoryStore, InvalidUpdateError, MemorySaver, MessageGraph, MessagesAnnotation, MessagesDeltaValue, MessagesValue, MessagesZodMeta, MessagesZodState, MultipleSubgraphsError, NodeError, NodeInterrupt, NodeTimeoutError, Overwrite, ParentCommand, REMOVE_ALL_MESSAGES, ReducedValue, RemoteException, RunControl, START, STREAM_EVENTS_V3_MODES, Send, StateGraph, StateGraphInputError, StateSchema, StreamChannel, SubgraphRunStream, UnreachableNodeError, UntrackedValue, UntrackedValueChannel, messagesStateReducer as addMessages, convertToProtocolEvent, copyCheckpoint, createGraphRunStream, createLifecycleTransformer, createMessagesTransformer, createSubgraphDiscoveryTransformer, createValuesTransformer, emptyCheckpoint, entrypoint, filterLifecycleEntries, filterSubgraphHandles, getConfig, getCurrentTaskInput, getJsonSchemaFromSchema, getPreviousState, getSchemaDefaultGetter, getStore, getSubgraphsSeenSet, getWriter, interrupt, isCheckpointEnvelope, isCommand, isGraphBubbleUp, isGraphDrained, isGraphInterrupt, isInterrupted, isNativeTransformer, isNodeError, isNodeTimeoutError, isParentCommand, isSerializableSchema, isStandardSchema, messagesDeltaReducer, messagesStateReducer, omitPayload, pushMessage, task, writer };
|
|
40
41
|
|
|
41
42
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\nimport { initializeAsyncLocalStorageSingleton } from \"./node.js\";\n\n// Initialize global async local storage instance for tracing\ninitializeAsyncLocalStorageSingleton();\n\nexport * from \"./web.js\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\nimport { initializeAsyncLocalStorageSingleton } from \"./node.js\";\n\n// Initialize global async local storage instance for tracing\ninitializeAsyncLocalStorageSingleton();\n\nexport * from \"./web.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAAsC"}
|
package/dist/pregel/algo.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const require_constants = require("../constants.cjs");
|
|
2
2
|
const require_errors = require("../errors.cjs");
|
|
3
3
|
const require_base = require("../channels/base.cjs");
|
|
4
|
+
const require_index = require("./utils/index.cjs");
|
|
4
5
|
const require_hash = require("../hash.cjs");
|
|
5
6
|
const require_io = require("./io.cjs");
|
|
6
7
|
const require_types = require("./types.cjs");
|
|
7
|
-
const require_index = require("./utils/index.cjs");
|
|
8
8
|
const require_call = require("./call.cjs");
|
|
9
9
|
let _langchain_langgraph_checkpoint = require("@langchain/langgraph-checkpoint");
|
|
10
10
|
let _langchain_core_runnables = require("@langchain/core/runnables");
|
package/dist/pregel/algo.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CACHE_NS_WRITES, CONFIG_KEY_CHECKPOINTER, CONFIG_KEY_CHECKPOINT_MAP, CONFIG_KEY_NODE_ERROR, CONFIG_KEY_PREVIOUS_STATE, CONFIG_KEY_READ, CONFIG_KEY_RESUME_MAP, CONFIG_KEY_SCRATCHPAD, CONFIG_KEY_SEND, CONFIG_KEY_TASK_ID, ERROR, ERROR_SOURCE_NODE, INTERRUPT, NO_WRITES, PREVIOUS, PULL, PUSH, RESERVED, RESUME, RETURN, Send, TAG_HIDDEN, TASKS, _isSend, _isSendInterface } from "../constants.js";
|
|
2
2
|
import { EmptyChannelError, InvalidUpdateError, NodeError } from "../errors.js";
|
|
3
3
|
import { createCheckpoint, emptyChannels, getOnlyChannels, isDeltaChannel } from "../channels/base.js";
|
|
4
|
+
import { getNullChannelVersion } from "./utils/index.js";
|
|
4
5
|
import { XXH3 } from "../hash.js";
|
|
5
6
|
import { readChannel, readChannels } from "./io.js";
|
|
6
7
|
import { isCall } from "./types.js";
|
|
7
|
-
import { getNullChannelVersion } from "./utils/index.js";
|
|
8
8
|
import { getRunnableForFunc } from "./call.js";
|
|
9
9
|
import { copyCheckpoint, maxChannelVersion, uuid5 } from "@langchain/langgraph-checkpoint";
|
|
10
10
|
import { mergeConfigs, patchConfig } from "@langchain/core/runnables";
|
package/dist/pregel/index.cjs
CHANGED
|
@@ -5,10 +5,10 @@ const require_base = require("../channels/base.cjs");
|
|
|
5
5
|
const require_config = require("./utils/config.cjs");
|
|
6
6
|
const require_utils = require("../utils.cjs");
|
|
7
7
|
const require_write = require("./write.cjs");
|
|
8
|
+
const require_index = require("./utils/index.cjs");
|
|
8
9
|
const require_read = require("./read.cjs");
|
|
9
10
|
const require_runtime = require("./runtime.cjs");
|
|
10
11
|
const require_io = require("./io.cjs");
|
|
11
|
-
const require_index = require("./utils/index.cjs");
|
|
12
12
|
const require_algo = require("./algo.cjs");
|
|
13
13
|
const require_subgraph = require("./utils/subgraph.cjs");
|
|
14
14
|
const require_debug = require("./debug.cjs");
|
package/dist/pregel/index.js
CHANGED
|
@@ -4,10 +4,10 @@ import { channelsFromCheckpoint, createCheckpoint, getOnlyChannels } from "../ch
|
|
|
4
4
|
import { ensureLangGraphConfig, getConfig, recastCheckpointNamespace } from "./utils/config.js";
|
|
5
5
|
import { gatherIterator, patchConfigurable } from "../utils.js";
|
|
6
6
|
import { ChannelWrite, PASSTHROUGH } from "./write.js";
|
|
7
|
+
import { _coerceToDict, combineAbortSignals, getNewChannelVersions, patchCheckpointMap } from "./utils/index.js";
|
|
7
8
|
import { PregelNode } from "./read.js";
|
|
8
9
|
import { RunControl } from "./runtime.js";
|
|
9
10
|
import { mapInput, readChannels } from "./io.js";
|
|
10
|
-
import { _coerceToDict, combineAbortSignals, getNewChannelVersions, patchCheckpointMap } from "./utils/index.js";
|
|
11
11
|
import { _applyWrites, _localRead, _prepareNextTasks } from "./algo.js";
|
|
12
12
|
import { findSubgraphPregel } from "./utils/subgraph.js";
|
|
13
13
|
import { printStepCheckpoint, printStepTasks, printStepWrites, tasksWithWrites } from "./debug.js";
|
package/dist/pregel/loop.cjs
CHANGED
|
@@ -2,9 +2,9 @@ const require_constants = require("../constants.cjs");
|
|
|
2
2
|
const require_errors = require("../errors.cjs");
|
|
3
3
|
const require_base = require("../channels/base.cjs");
|
|
4
4
|
const require_utils = require("../utils.cjs");
|
|
5
|
+
const require_index = require("./utils/index.cjs");
|
|
5
6
|
const require_hash = require("../hash.cjs");
|
|
6
7
|
const require_io = require("./io.cjs");
|
|
7
|
-
const require_index = require("./utils/index.cjs");
|
|
8
8
|
const require_algo = require("./algo.cjs");
|
|
9
9
|
const require_debug = require("./debug.cjs");
|
|
10
10
|
const require_replay = require("./replay.cjs");
|
package/dist/pregel/loop.js
CHANGED
|
@@ -2,9 +2,9 @@ import { CONFIG_KEY_CHECKPOINT_ID, CONFIG_KEY_CHECKPOINT_MAP, CONFIG_KEY_CHECKPO
|
|
|
2
2
|
import { EmptyInputError, GraphInterrupt, isGraphInterrupt } from "../errors.js";
|
|
3
3
|
import { channelsFromCheckpoint, createCheckpoint, deltaChannelsToSnapshot, exitDeltaTaskId, isDeltaChannel } from "../channels/base.js";
|
|
4
4
|
import { gatherIterator, gatherIteratorSync, prefixGenerator } from "../utils.js";
|
|
5
|
+
import { getNewChannelVersions, patchConfigurable } from "./utils/index.js";
|
|
5
6
|
import { isXXH3 } from "../hash.js";
|
|
6
7
|
import { mapCommand, mapInput, mapOutputUpdates, mapOutputValues, readChannels } from "./io.js";
|
|
7
|
-
import { getNewChannelVersions, patchConfigurable } from "./utils/index.js";
|
|
8
8
|
import { _applyWrites, _prepareNextTasks, _prepareNodeErrorHandlerTask, _prepareSingleTask, increment, sanitizeUntrackedValuesInSend, shouldInterrupt } from "./algo.js";
|
|
9
9
|
import { mapDebugCheckpoint, mapDebugTaskResults, mapDebugTasks, printStepTasks } from "./debug.js";
|
|
10
10
|
import { ReplayState } from "./replay.js";
|
|
@@ -112,6 +112,12 @@ var StreamProtocolMessagesHandler = class extends _langchain_core_callbacks_base
|
|
|
112
112
|
[data, metadata]
|
|
113
113
|
]);
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Emit a complete message as protocol events (message-start, content
|
|
117
|
+
* blocks, message-finish). Public so `pushMessage` can deliver manually
|
|
118
|
+
* created messages when this handler is registered (streamEvents v3),
|
|
119
|
+
* mirroring `StreamMessagesHandler._emit` on the classic path.
|
|
120
|
+
*/
|
|
115
121
|
emitFinalMessage(meta, message, runId, dedupe = false) {
|
|
116
122
|
const existingId = message.id ?? (runId != null ? this.stableMessageIdMap[runId] : void 0);
|
|
117
123
|
if (dedupe && existingId != null && this.seen[existingId] !== void 0) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-v2.cjs","names":["BaseCallbackHandler","ToolMessage","BaseMessage","BaseMessageChunk"],"sources":["../../src/pregel/messages-v2.ts"],"sourcesContent":["import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport {\n BaseMessage,\n ToolMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { ChatGeneration, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\ntype Meta = [string[], Record<string, unknown>];\ntype CompatibleContentBlock = { type: string; [key: string]: unknown };\n\nfunction getResponseMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"response_metadata\" in message &&\n typeof message.response_metadata === \"object\" &&\n message.response_metadata != null\n ) {\n return message.response_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction getUsageMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"usage_metadata\" in message &&\n typeof message.usage_metadata === \"object\" &&\n message.usage_metadata != null\n ) {\n return message.usage_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction startBlockFor(block: CompatibleContentBlock): CompatibleContentBlock {\n switch (block.type) {\n case \"text\":\n return { type: \"text\", text: \"\" };\n case \"reasoning\":\n return { type: \"reasoning\", reasoning: \"\" };\n case \"tool_call\":\n case \"tool_call_chunk\":\n return {\n type: \"tool_call_chunk\",\n ...(block.id != null ? { id: block.id } : {}),\n ...(block.name != null ? { name: block.name } : {}),\n args: \"\",\n };\n default:\n return block;\n }\n}\n\nfunction deltaFor(\n block: CompatibleContentBlock\n): ChatModelStreamEvent | undefined {\n switch (block.type) {\n case \"text\": {\n const text = typeof block.text === \"string\" ? block.text : \"\";\n return text.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"text-delta\", text },\n }\n : undefined;\n }\n case \"reasoning\": {\n const reasoning =\n typeof block.reasoning === \"string\" ? block.reasoning : \"\";\n return reasoning.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"reasoning-delta\", reasoning },\n }\n : undefined;\n }\n case \"tool_call_chunk\":\n return {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: {\n type: \"block-delta\",\n fields: { ...block, type: \"tool_call_chunk\" },\n },\n };\n default:\n return undefined;\n }\n}\n\n/**\n * A callback handler that implements protocol-native stream_mode=messages.\n *\n * LangChain Core owns chat model content-block event construction. This handler\n * only captures LangGraph metadata, forwards Core events to the Pregel messages\n * channel, and emits a small non-streaming fallback for models that cannot\n * produce stream events.\n */\nexport class StreamProtocolMessagesHandler extends BaseCallbackHandler {\n name = \"StreamProtocolMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage | true> = {};\n\n streamedRunIds = new Set<string>();\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_chat_model_stream_events = true;\n\n // Dispatch this handler's callbacks inline rather than on LangChain's\n // background callback queue. The handler's only side effect is a synchronous\n // `push()` onto the run's stream, so running it inline guarantees those\n // pushes happen *during* the model/chain call — while the stream is still\n // open — instead of after the Pregel loop has returned and sealed the\n // stream. Background dispatch let a model/tool call in a nested or parallel\n // task flush its `messages` chunk after close, where `push()` silently drops\n // it; this surfaced as empty per-message streams (`sub.messages`) for\n // subagents dispatched in parallel from a single tools step.\n awaitHandlers = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n private normalizeMessageId(message: BaseMessage, runId: string | undefined) {\n let messageId = message.id;\n\n if (runId != null) {\n if (ToolMessage.isInstance(message)) {\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n return message.id;\n }\n\n private emit(meta: Meta, data: ChatModelStreamEvent, runId?: string) {\n const metadata = runId != null ? { ...meta[1], run_id: runId } : meta[1];\n this.streamFn([meta[0], \"messages\", [data, metadata]]);\n }\n\n private emitFinalMessage(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n const existingId =\n message.id ??\n (runId != null ? this.stableMessageIdMap[runId] : undefined);\n if (dedupe && existingId != null && this.seen[existingId] !== undefined) {\n return;\n }\n\n const messageId = this.normalizeMessageId(message, runId);\n const role =\n message.type === \"human\"\n ? \"human\"\n : message.type === \"system\"\n ? \"system\"\n : message.type === \"tool\"\n ? \"tool\"\n : \"ai\";\n const toolCallId =\n role === \"tool\" && ToolMessage.isInstance(message)\n ? message.tool_call_id\n : undefined;\n\n this.emit(\n meta,\n {\n event: \"message-start\",\n ...(messageId != null ? { id: messageId } : {}),\n ...(role !== \"ai\" ? ({ role } as Record<string, unknown>) : {}),\n ...(typeof toolCallId === \"string\"\n ? ({ tool_call_id: toolCallId } as Record<string, unknown>)\n : {}),\n } as ChatModelStreamEvent,\n runId\n );\n\n const contentBlocks: CompatibleContentBlock[] = Array.isArray(\n message.content\n )\n ? (message.content as CompatibleContentBlock[])\n : typeof message.content === \"string\" && message.content.length > 0\n ? [{ type: \"text\", text: message.content }]\n : [];\n\n contentBlocks.forEach((block, offset) => {\n const index = typeof block.index === \"number\" ? block.index : offset;\n this.emit(\n meta,\n {\n event: \"content-block-start\",\n index,\n content: startBlockFor(block),\n },\n runId\n );\n const delta = deltaFor({ ...block, index });\n if (delta != null) {\n this.emit(meta, delta, runId);\n }\n this.emit(\n meta,\n {\n event: \"content-block-finish\",\n index,\n content: block,\n },\n runId\n );\n });\n\n this.emit(\n meta,\n {\n event: \"message-finish\",\n ...(getUsageMetadata(message) != null\n ? { usage: getUsageMetadata(message) }\n : {}),\n ...(getResponseMetadata(message) != null\n ? { responseMetadata: getResponseMetadata(message) }\n : {}),\n },\n runId\n );\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken() {\n // Core v2 stream events are forwarded via handleChatModelStreamEvent.\n }\n\n handleChatModelStreamEvent(event: ChatModelStreamEvent, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n let forwarded = event;\n if (event.event === \"message-start\") {\n this.streamedRunIds.add(runId);\n const id = event.id ?? `run-${runId}`;\n this.seen[id] = true;\n this.stableMessageIdMap[runId] ??= id;\n if (event.id == null) {\n forwarded = { ...event, id };\n }\n }\n\n this.emit(meta, forwarded, runId);\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n const message = BaseMessage.isInstance(chatGeneration?.message)\n ? chatGeneration.message\n : undefined;\n\n if (message != null) {\n if (this.streamedRunIds.has(runId)) {\n const messageId = this.normalizeMessageId(message, runId);\n if (messageId != null) this.seen[messageId] = message;\n } else {\n this.emitFinalMessage(meta, message, runId, true);\n }\n }\n\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (BaseMessage.isInstance(value) ||\n BaseMessageChunk.isInstance(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (BaseMessage.isInstance(item) ||\n BaseMessageChunk.isInstance(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const meta = this.metadatas[runId];\n delete this.metadatas[runId];\n if (meta === undefined) return;\n\n const emitMessage = (value: unknown) => {\n if (BaseMessage.isInstance(value) && !ToolMessage.isInstance(value)) {\n this.emitFinalMessage(meta, value, runId, true);\n }\n };\n\n if (BaseMessage.isInstance(outputs)) {\n emitMessage(outputs);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) emitMessage(value);\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (Array.isArray(value)) {\n for (const item of value) emitMessage(item);\n } else {\n emitMessage(value);\n }\n }\n }\n\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages-v2.cjs","names":["BaseCallbackHandler","ToolMessage","BaseMessage","BaseMessageChunk"],"sources":["../../src/pregel/messages-v2.ts"],"sourcesContent":["import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport {\n BaseMessage,\n ToolMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { ChatGeneration, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\ntype Meta = [string[], Record<string, unknown>];\ntype CompatibleContentBlock = { type: string; [key: string]: unknown };\n\nfunction getResponseMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"response_metadata\" in message &&\n typeof message.response_metadata === \"object\" &&\n message.response_metadata != null\n ) {\n return message.response_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction getUsageMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"usage_metadata\" in message &&\n typeof message.usage_metadata === \"object\" &&\n message.usage_metadata != null\n ) {\n return message.usage_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction startBlockFor(block: CompatibleContentBlock): CompatibleContentBlock {\n switch (block.type) {\n case \"text\":\n return { type: \"text\", text: \"\" };\n case \"reasoning\":\n return { type: \"reasoning\", reasoning: \"\" };\n case \"tool_call\":\n case \"tool_call_chunk\":\n return {\n type: \"tool_call_chunk\",\n ...(block.id != null ? { id: block.id } : {}),\n ...(block.name != null ? { name: block.name } : {}),\n args: \"\",\n };\n default:\n return block;\n }\n}\n\nfunction deltaFor(\n block: CompatibleContentBlock\n): ChatModelStreamEvent | undefined {\n switch (block.type) {\n case \"text\": {\n const text = typeof block.text === \"string\" ? block.text : \"\";\n return text.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"text-delta\", text },\n }\n : undefined;\n }\n case \"reasoning\": {\n const reasoning =\n typeof block.reasoning === \"string\" ? block.reasoning : \"\";\n return reasoning.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"reasoning-delta\", reasoning },\n }\n : undefined;\n }\n case \"tool_call_chunk\":\n return {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: {\n type: \"block-delta\",\n fields: { ...block, type: \"tool_call_chunk\" },\n },\n };\n default:\n return undefined;\n }\n}\n\n/**\n * A callback handler that implements protocol-native stream_mode=messages.\n *\n * LangChain Core owns chat model content-block event construction. This handler\n * only captures LangGraph metadata, forwards Core events to the Pregel messages\n * channel, and emits a small non-streaming fallback for models that cannot\n * produce stream events.\n */\nexport class StreamProtocolMessagesHandler extends BaseCallbackHandler {\n name = \"StreamProtocolMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage | true> = {};\n\n streamedRunIds = new Set<string>();\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_chat_model_stream_events = true;\n\n // Dispatch this handler's callbacks inline rather than on LangChain's\n // background callback queue. The handler's only side effect is a synchronous\n // `push()` onto the run's stream, so running it inline guarantees those\n // pushes happen *during* the model/chain call — while the stream is still\n // open — instead of after the Pregel loop has returned and sealed the\n // stream. Background dispatch let a model/tool call in a nested or parallel\n // task flush its `messages` chunk after close, where `push()` silently drops\n // it; this surfaced as empty per-message streams (`sub.messages`) for\n // subagents dispatched in parallel from a single tools step.\n awaitHandlers = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n private normalizeMessageId(message: BaseMessage, runId: string | undefined) {\n let messageId = message.id;\n\n if (runId != null) {\n if (ToolMessage.isInstance(message)) {\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n return message.id;\n }\n\n private emit(meta: Meta, data: ChatModelStreamEvent, runId?: string) {\n const metadata = runId != null ? { ...meta[1], run_id: runId } : meta[1];\n this.streamFn([meta[0], \"messages\", [data, metadata]]);\n }\n\n /**\n * Emit a complete message as protocol events (message-start, content\n * blocks, message-finish). Public so `pushMessage` can deliver manually\n * created messages when this handler is registered (streamEvents v3),\n * mirroring `StreamMessagesHandler._emit` on the classic path.\n */\n emitFinalMessage(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n const existingId =\n message.id ??\n (runId != null ? this.stableMessageIdMap[runId] : undefined);\n if (dedupe && existingId != null && this.seen[existingId] !== undefined) {\n return;\n }\n\n const messageId = this.normalizeMessageId(message, runId);\n const role =\n message.type === \"human\"\n ? \"human\"\n : message.type === \"system\"\n ? \"system\"\n : message.type === \"tool\"\n ? \"tool\"\n : \"ai\";\n const toolCallId =\n role === \"tool\" && ToolMessage.isInstance(message)\n ? message.tool_call_id\n : undefined;\n\n this.emit(\n meta,\n {\n event: \"message-start\",\n ...(messageId != null ? { id: messageId } : {}),\n ...(role !== \"ai\" ? ({ role } as Record<string, unknown>) : {}),\n ...(typeof toolCallId === \"string\"\n ? ({ tool_call_id: toolCallId } as Record<string, unknown>)\n : {}),\n } as ChatModelStreamEvent,\n runId\n );\n\n const contentBlocks: CompatibleContentBlock[] = Array.isArray(\n message.content\n )\n ? (message.content as CompatibleContentBlock[])\n : typeof message.content === \"string\" && message.content.length > 0\n ? [{ type: \"text\", text: message.content }]\n : [];\n\n contentBlocks.forEach((block, offset) => {\n const index = typeof block.index === \"number\" ? block.index : offset;\n this.emit(\n meta,\n {\n event: \"content-block-start\",\n index,\n content: startBlockFor(block),\n },\n runId\n );\n const delta = deltaFor({ ...block, index });\n if (delta != null) {\n this.emit(meta, delta, runId);\n }\n this.emit(\n meta,\n {\n event: \"content-block-finish\",\n index,\n content: block,\n },\n runId\n );\n });\n\n this.emit(\n meta,\n {\n event: \"message-finish\",\n ...(getUsageMetadata(message) != null\n ? { usage: getUsageMetadata(message) }\n : {}),\n ...(getResponseMetadata(message) != null\n ? { responseMetadata: getResponseMetadata(message) }\n : {}),\n },\n runId\n );\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken() {\n // Core v2 stream events are forwarded via handleChatModelStreamEvent.\n }\n\n handleChatModelStreamEvent(event: ChatModelStreamEvent, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n let forwarded = event;\n if (event.event === \"message-start\") {\n this.streamedRunIds.add(runId);\n const id = event.id ?? `run-${runId}`;\n this.seen[id] = true;\n this.stableMessageIdMap[runId] ??= id;\n if (event.id == null) {\n forwarded = { ...event, id };\n }\n }\n\n this.emit(meta, forwarded, runId);\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n const message = BaseMessage.isInstance(chatGeneration?.message)\n ? chatGeneration.message\n : undefined;\n\n if (message != null) {\n if (this.streamedRunIds.has(runId)) {\n const messageId = this.normalizeMessageId(message, runId);\n if (messageId != null) this.seen[messageId] = message;\n } else {\n this.emitFinalMessage(meta, message, runId, true);\n }\n }\n\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (BaseMessage.isInstance(value) ||\n BaseMessageChunk.isInstance(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (BaseMessage.isInstance(item) ||\n BaseMessageChunk.isInstance(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const meta = this.metadatas[runId];\n delete this.metadatas[runId];\n if (meta === undefined) return;\n\n const emitMessage = (value: unknown) => {\n if (BaseMessage.isInstance(value) && !ToolMessage.isInstance(value)) {\n this.emitFinalMessage(meta, value, runId, true);\n }\n };\n\n if (BaseMessage.isInstance(outputs)) {\n emitMessage(outputs);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) emitMessage(value);\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (Array.isArray(value)) {\n for (const item of value) emitMessage(item);\n } else {\n emitMessage(value);\n }\n }\n }\n\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n}\n"],"mappings":";;;;AAiBA,SAAS,oBACP,SACqC;AACrC,KACE,uBAAuB,WACvB,OAAO,QAAQ,sBAAsB,YACrC,QAAQ,qBAAqB,KAE7B,QAAO,QAAQ;;AAKnB,SAAS,iBACP,SACqC;AACrC,KACE,oBAAoB,WACpB,OAAO,QAAQ,mBAAmB,YAClC,QAAQ,kBAAkB,KAE1B,QAAO,QAAQ;;AAKnB,SAAS,cAAc,OAAuD;AAC5E,SAAQ,MAAM,MAAd;EACE,KAAK,OACH,QAAO;GAAE,MAAM;GAAQ,MAAM;GAAI;EACnC,KAAK,YACH,QAAO;GAAE,MAAM;GAAa,WAAW;GAAI;EAC7C,KAAK;EACL,KAAK,kBACH,QAAO;GACL,MAAM;GACN,GAAI,MAAM,MAAM,OAAO,EAAE,IAAI,MAAM,IAAI,GAAG,EAAE;GAC5C,GAAI,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,MAAM,GAAG,EAAE;GAClD,MAAM;GACP;EACH,QACE,QAAO;;;AAIb,SAAS,SACP,OACkC;AAClC,SAAQ,MAAM,MAAd;EACE,KAAK,QAAQ;GACX,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,UAAO,KAAK,SAAS,IACjB;IACE,OAAO;IACP,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;IACvD,OAAO;KAAE,MAAM;KAAc;KAAM;IACpC,GACD,KAAA;;EAEN,KAAK,aAAa;GAChB,MAAM,YACJ,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AAC1D,UAAO,UAAU,SAAS,IACtB;IACE,OAAO;IACP,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;IACvD,OAAO;KAAE,MAAM;KAAmB;KAAW;IAC9C,GACD,KAAA;;EAEN,KAAK,kBACH,QAAO;GACL,OAAO;GACP,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;GACvD,OAAO;IACL,MAAM;IACN,QAAQ;KAAE,GAAG;KAAO,MAAM;KAAmB;IAC9C;GACF;EACH,QACE;;;;;;;;;;;AAYN,IAAa,gCAAb,cAAmDA,+BAAAA,oBAAoB;CACrE,OAAO;CAEP;CAEA,YAA8C,EAAE;CAEhD,OAA2C,EAAE;CAE7C,iCAAiB,IAAI,KAAa;CAElC,qBAA6C,EAAE;CAE/C,qCAAqC;CAWrC,gBAAgB;CAEhB,YAAY,UAA8C;AACxD,SAAO;AACP,OAAK,WAAW;;CAGlB,mBAA2B,SAAsB,OAA2B;EAC1E,IAAI,YAAY,QAAQ;AAExB,MAAI,SAAS,KACX,KAAIC,yBAAAA,YAAY,WAAW,QAAQ,CACjC,eAAc,OAAO,MAAM,QAAQ,QAAQ;OACtC;AACL,OAAI,aAAa,QAAQ,cAAc,OAAO,QAC5C,aACE,KAAK,mBAAmB,UAAU,aAAa,OAAO;AAE1D,QAAK,mBAAmB,WAAW;;AAIvC,MAAI,cAAc,QAAQ,IAAI;AAE5B,WAAQ,KAAK;AAEb,WAAQ,UAAU,KAAK;;AAGzB,MAAI,QAAQ,MAAM,KAAM,MAAK,KAAK,QAAQ,MAAM;AAChD,SAAO,QAAQ;;CAGjB,KAAa,MAAY,MAA4B,OAAgB;EACnE,MAAM,WAAW,SAAS,OAAO;GAAE,GAAG,KAAK;GAAI,QAAQ;GAAO,GAAG,KAAK;AACtE,OAAK,SAAS;GAAC,KAAK;GAAI;GAAY,CAAC,MAAM,SAAS;GAAC,CAAC;;;;;;;;CASxD,iBACE,MACA,SACA,OACA,SAAS,OACT;EACA,MAAM,aACJ,QAAQ,OACP,SAAS,OAAO,KAAK,mBAAmB,SAAS,KAAA;AACpD,MAAI,UAAU,cAAc,QAAQ,KAAK,KAAK,gBAAgB,KAAA,EAC5D;EAGF,MAAM,YAAY,KAAK,mBAAmB,SAAS,MAAM;EACzD,MAAM,OACJ,QAAQ,SAAS,UACb,UACA,QAAQ,SAAS,WACf,WACA,QAAQ,SAAS,SACf,SACA;EACV,MAAM,aACJ,SAAS,UAAUA,yBAAAA,YAAY,WAAW,QAAQ,GAC9C,QAAQ,eACR,KAAA;AAEN,OAAK,KACH,MACA;GACE,OAAO;GACP,GAAI,aAAa,OAAO,EAAE,IAAI,WAAW,GAAG,EAAE;GAC9C,GAAI,SAAS,OAAQ,EAAE,MAAM,GAA+B,EAAE;GAC9D,GAAI,OAAO,eAAe,WACrB,EAAE,cAAc,YAAY,GAC7B,EAAE;GACP,EACD,MACD;AAUD,GARgD,MAAM,QACpD,QAAQ,QACT,GACI,QAAQ,UACT,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SAAS,IAC9D,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;GAAS,CAAC,GACzC,EAAE,EAEM,SAAS,OAAO,WAAW;GACvC,MAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAC9D,QAAK,KACH,MACA;IACE,OAAO;IACP;IACA,SAAS,cAAc,MAAM;IAC9B,EACD,MACD;GACD,MAAM,QAAQ,SAAS;IAAE,GAAG;IAAO;IAAO,CAAC;AAC3C,OAAI,SAAS,KACX,MAAK,KAAK,MAAM,OAAO,MAAM;AAE/B,QAAK,KACH,MACA;IACE,OAAO;IACP;IACA,SAAS;IACV,EACD,MACD;IACD;AAEF,OAAK,KACH,MACA;GACE,OAAO;GACP,GAAI,iBAAiB,QAAQ,IAAI,OAC7B,EAAE,OAAO,iBAAiB,QAAQ,EAAE,GACpC,EAAE;GACN,GAAI,oBAAoB,QAAQ,IAAI,OAChC,EAAE,kBAAkB,oBAAoB,QAAQ,EAAE,GAClD,EAAE;GACP,EACD,MACD;;CAGH,qBACE,MACA,WACA,OACA,cACA,cACA,MACA,UACA,MACA;AACA,MACE,aACC,CAAC,QAAS,CAAC,KAAK,SAAA,qBAAsB,IAAI,CAAC,KAAK,SAAS,WAAW,EAErE,MAAK,UAAU,SAAS,CACrB,SAAS,wBAAmC,MAAM,IAAI,EACvD;GAAE;GAAM;GAAM,GAAG;GAAU,CAC5B;;CAIL,oBAAoB;CAIpB,2BAA2B,OAA6B,OAAe;EACrE,MAAM,OAAO,KAAK,UAAU;AAC5B,MAAI,SAAS,KAAA,EAAW;EAExB,IAAI,YAAY;AAChB,MAAI,MAAM,UAAU,iBAAiB;AACnC,QAAK,eAAe,IAAI,MAAM;GAC9B,MAAM,KAAK,MAAM,MAAM,OAAO;AAC9B,QAAK,KAAK,MAAM;AAChB,QAAK,mBAAmB,WAAW;AACnC,OAAI,MAAM,MAAM,KACd,aAAY;IAAE,GAAG;IAAO;IAAI;;AAIhC,OAAK,KAAK,MAAM,WAAW,MAAM;;CAGnC,aAAa,QAAmB,OAAe;EAC7C,MAAM,OAAO,KAAK,UAAU;AAC5B,MAAI,SAAS,KAAA,EAAW;EAExB,MAAM,iBAAiB,OAAO,cAAc,KAAK;EACjD,MAAM,UAAUC,yBAAAA,YAAY,WAAW,gBAAgB,QAAQ,GAC3D,eAAe,UACf,KAAA;AAEJ,MAAI,WAAW,KACb,KAAI,KAAK,eAAe,IAAI,MAAM,EAAE;GAClC,MAAM,YAAY,KAAK,mBAAmB,SAAS,MAAM;AACzD,OAAI,aAAa,KAAM,MAAK,KAAK,aAAa;QAE9C,MAAK,iBAAiB,MAAM,SAAS,OAAO,KAAK;AAIrD,OAAK,eAAe,OAAO,MAAM;AACjC,SAAO,KAAK,UAAU;AACtB,SAAO,KAAK,mBAAmB;;CAIjC,eAAe,MAAW,OAAe;AACvC,OAAK,eAAe,OAAO,MAAM;AACjC,SAAO,KAAK,UAAU;AACtB,SAAO,KAAK,mBAAmB;;CAGjC,iBACE,QACA,QACA,OACA,cACA,MACA,UACA,UACA,MACA;AACA,MACE,aAAa,KAAA,KACb,SAAS,SAAS,mBACjB,SAAS,KAAA,KAAa,CAAC,KAAK,SAAA,mBAAoB,GACjD;AACA,QAAK,UAAU,SAAS,CACrB,SAAS,wBAAmC,MAAM,IAAI,EACvD;IAAE;IAAM;IAAM,GAAG;IAAU,CAC5B;AAED,OAAI,OAAO,WAAW;SACf,MAAM,SAAS,OAAO,OAAO,OAAO,CACvC,MACGA,yBAAAA,YAAY,WAAW,MAAM,IAC5BC,yBAAAA,iBAAiB,WAAW,MAAM,KACpC,MAAM,OAAO,KAAA,EAEb,MAAK,KAAK,MAAM,MAAM;aACb,MAAM,QAAQ,MAAM;UACxB,MAAM,QAAQ,MACjB,MACGD,yBAAAA,YAAY,WAAW,KAAK,IAC3BC,yBAAAA,iBAAiB,WAAW,KAAK,KACnC,KAAK,OAAO,KAAA,EAEZ,MAAK,KAAK,KAAK,MAAM;;;;;CASnC,eAAe,SAAsB,OAAe;EAClD,MAAM,OAAO,KAAK,UAAU;AAC5B,SAAO,KAAK,UAAU;AACtB,MAAI,SAAS,KAAA,EAAW;EAExB,MAAM,eAAe,UAAmB;AACtC,OAAID,yBAAAA,YAAY,WAAW,MAAM,IAAI,CAACD,yBAAAA,YAAY,WAAW,MAAM,CACjE,MAAK,iBAAiB,MAAM,OAAO,OAAO,KAAK;;AAInD,MAAIC,yBAAAA,YAAY,WAAW,QAAQ,CACjC,aAAY,QAAQ;WACX,MAAM,QAAQ,QAAQ,CAC/B,MAAK,MAAM,SAAS,QAAS,aAAY,MAAM;WACtC,WAAW,QAAQ,OAAO,YAAY,SAC/C,MAAK,MAAM,SAAS,OAAO,OAAO,QAAQ,CACxC,KAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,QAAQ,MAAO,aAAY,KAAK;MAE3C,aAAY,MAAM;AAKxB,SAAO,KAAK,mBAAmB;;CAIjC,iBAAiB,MAAW,OAAe;AACzC,SAAO,KAAK,UAAU;AACtB,SAAO,KAAK,mBAAmB"}
|
|
@@ -112,6 +112,12 @@ var StreamProtocolMessagesHandler = class extends BaseCallbackHandler {
|
|
|
112
112
|
[data, metadata]
|
|
113
113
|
]);
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Emit a complete message as protocol events (message-start, content
|
|
117
|
+
* blocks, message-finish). Public so `pushMessage` can deliver manually
|
|
118
|
+
* created messages when this handler is registered (streamEvents v3),
|
|
119
|
+
* mirroring `StreamMessagesHandler._emit` on the classic path.
|
|
120
|
+
*/
|
|
115
121
|
emitFinalMessage(meta, message, runId, dedupe = false) {
|
|
116
122
|
const existingId = message.id ?? (runId != null ? this.stableMessageIdMap[runId] : void 0);
|
|
117
123
|
if (dedupe && existingId != null && this.seen[existingId] !== void 0) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-v2.js","names":[],"sources":["../../src/pregel/messages-v2.ts"],"sourcesContent":["import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport {\n BaseMessage,\n ToolMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { ChatGeneration, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\ntype Meta = [string[], Record<string, unknown>];\ntype CompatibleContentBlock = { type: string; [key: string]: unknown };\n\nfunction getResponseMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"response_metadata\" in message &&\n typeof message.response_metadata === \"object\" &&\n message.response_metadata != null\n ) {\n return message.response_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction getUsageMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"usage_metadata\" in message &&\n typeof message.usage_metadata === \"object\" &&\n message.usage_metadata != null\n ) {\n return message.usage_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction startBlockFor(block: CompatibleContentBlock): CompatibleContentBlock {\n switch (block.type) {\n case \"text\":\n return { type: \"text\", text: \"\" };\n case \"reasoning\":\n return { type: \"reasoning\", reasoning: \"\" };\n case \"tool_call\":\n case \"tool_call_chunk\":\n return {\n type: \"tool_call_chunk\",\n ...(block.id != null ? { id: block.id } : {}),\n ...(block.name != null ? { name: block.name } : {}),\n args: \"\",\n };\n default:\n return block;\n }\n}\n\nfunction deltaFor(\n block: CompatibleContentBlock\n): ChatModelStreamEvent | undefined {\n switch (block.type) {\n case \"text\": {\n const text = typeof block.text === \"string\" ? block.text : \"\";\n return text.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"text-delta\", text },\n }\n : undefined;\n }\n case \"reasoning\": {\n const reasoning =\n typeof block.reasoning === \"string\" ? block.reasoning : \"\";\n return reasoning.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"reasoning-delta\", reasoning },\n }\n : undefined;\n }\n case \"tool_call_chunk\":\n return {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: {\n type: \"block-delta\",\n fields: { ...block, type: \"tool_call_chunk\" },\n },\n };\n default:\n return undefined;\n }\n}\n\n/**\n * A callback handler that implements protocol-native stream_mode=messages.\n *\n * LangChain Core owns chat model content-block event construction. This handler\n * only captures LangGraph metadata, forwards Core events to the Pregel messages\n * channel, and emits a small non-streaming fallback for models that cannot\n * produce stream events.\n */\nexport class StreamProtocolMessagesHandler extends BaseCallbackHandler {\n name = \"StreamProtocolMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage | true> = {};\n\n streamedRunIds = new Set<string>();\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_chat_model_stream_events = true;\n\n // Dispatch this handler's callbacks inline rather than on LangChain's\n // background callback queue. The handler's only side effect is a synchronous\n // `push()` onto the run's stream, so running it inline guarantees those\n // pushes happen *during* the model/chain call — while the stream is still\n // open — instead of after the Pregel loop has returned and sealed the\n // stream. Background dispatch let a model/tool call in a nested or parallel\n // task flush its `messages` chunk after close, where `push()` silently drops\n // it; this surfaced as empty per-message streams (`sub.messages`) for\n // subagents dispatched in parallel from a single tools step.\n awaitHandlers = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n private normalizeMessageId(message: BaseMessage, runId: string | undefined) {\n let messageId = message.id;\n\n if (runId != null) {\n if (ToolMessage.isInstance(message)) {\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n return message.id;\n }\n\n private emit(meta: Meta, data: ChatModelStreamEvent, runId?: string) {\n const metadata = runId != null ? { ...meta[1], run_id: runId } : meta[1];\n this.streamFn([meta[0], \"messages\", [data, metadata]]);\n }\n\n private emitFinalMessage(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n const existingId =\n message.id ??\n (runId != null ? this.stableMessageIdMap[runId] : undefined);\n if (dedupe && existingId != null && this.seen[existingId] !== undefined) {\n return;\n }\n\n const messageId = this.normalizeMessageId(message, runId);\n const role =\n message.type === \"human\"\n ? \"human\"\n : message.type === \"system\"\n ? \"system\"\n : message.type === \"tool\"\n ? \"tool\"\n : \"ai\";\n const toolCallId =\n role === \"tool\" && ToolMessage.isInstance(message)\n ? message.tool_call_id\n : undefined;\n\n this.emit(\n meta,\n {\n event: \"message-start\",\n ...(messageId != null ? { id: messageId } : {}),\n ...(role !== \"ai\" ? ({ role } as Record<string, unknown>) : {}),\n ...(typeof toolCallId === \"string\"\n ? ({ tool_call_id: toolCallId } as Record<string, unknown>)\n : {}),\n } as ChatModelStreamEvent,\n runId\n );\n\n const contentBlocks: CompatibleContentBlock[] = Array.isArray(\n message.content\n )\n ? (message.content as CompatibleContentBlock[])\n : typeof message.content === \"string\" && message.content.length > 0\n ? [{ type: \"text\", text: message.content }]\n : [];\n\n contentBlocks.forEach((block, offset) => {\n const index = typeof block.index === \"number\" ? block.index : offset;\n this.emit(\n meta,\n {\n event: \"content-block-start\",\n index,\n content: startBlockFor(block),\n },\n runId\n );\n const delta = deltaFor({ ...block, index });\n if (delta != null) {\n this.emit(meta, delta, runId);\n }\n this.emit(\n meta,\n {\n event: \"content-block-finish\",\n index,\n content: block,\n },\n runId\n );\n });\n\n this.emit(\n meta,\n {\n event: \"message-finish\",\n ...(getUsageMetadata(message) != null\n ? { usage: getUsageMetadata(message) }\n : {}),\n ...(getResponseMetadata(message) != null\n ? { responseMetadata: getResponseMetadata(message) }\n : {}),\n },\n runId\n );\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken() {\n // Core v2 stream events are forwarded via handleChatModelStreamEvent.\n }\n\n handleChatModelStreamEvent(event: ChatModelStreamEvent, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n let forwarded = event;\n if (event.event === \"message-start\") {\n this.streamedRunIds.add(runId);\n const id = event.id ?? `run-${runId}`;\n this.seen[id] = true;\n this.stableMessageIdMap[runId] ??= id;\n if (event.id == null) {\n forwarded = { ...event, id };\n }\n }\n\n this.emit(meta, forwarded, runId);\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n const message = BaseMessage.isInstance(chatGeneration?.message)\n ? chatGeneration.message\n : undefined;\n\n if (message != null) {\n if (this.streamedRunIds.has(runId)) {\n const messageId = this.normalizeMessageId(message, runId);\n if (messageId != null) this.seen[messageId] = message;\n } else {\n this.emitFinalMessage(meta, message, runId, true);\n }\n }\n\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (BaseMessage.isInstance(value) ||\n BaseMessageChunk.isInstance(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (BaseMessage.isInstance(item) ||\n BaseMessageChunk.isInstance(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const meta = this.metadatas[runId];\n delete this.metadatas[runId];\n if (meta === undefined) return;\n\n const emitMessage = (value: unknown) => {\n if (BaseMessage.isInstance(value) && !ToolMessage.isInstance(value)) {\n this.emitFinalMessage(meta, value, runId, true);\n }\n };\n\n if (BaseMessage.isInstance(outputs)) {\n emitMessage(outputs);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) emitMessage(value);\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (Array.isArray(value)) {\n for (const item of value) emitMessage(item);\n } else {\n emitMessage(value);\n }\n }\n }\n\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages-v2.js","names":[],"sources":["../../src/pregel/messages-v2.ts"],"sourcesContent":["import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport {\n BaseMessage,\n ToolMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { ChatGeneration, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\ntype Meta = [string[], Record<string, unknown>];\ntype CompatibleContentBlock = { type: string; [key: string]: unknown };\n\nfunction getResponseMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"response_metadata\" in message &&\n typeof message.response_metadata === \"object\" &&\n message.response_metadata != null\n ) {\n return message.response_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction getUsageMetadata(\n message: BaseMessage\n): Record<string, unknown> | undefined {\n if (\n \"usage_metadata\" in message &&\n typeof message.usage_metadata === \"object\" &&\n message.usage_metadata != null\n ) {\n return message.usage_metadata as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction startBlockFor(block: CompatibleContentBlock): CompatibleContentBlock {\n switch (block.type) {\n case \"text\":\n return { type: \"text\", text: \"\" };\n case \"reasoning\":\n return { type: \"reasoning\", reasoning: \"\" };\n case \"tool_call\":\n case \"tool_call_chunk\":\n return {\n type: \"tool_call_chunk\",\n ...(block.id != null ? { id: block.id } : {}),\n ...(block.name != null ? { name: block.name } : {}),\n args: \"\",\n };\n default:\n return block;\n }\n}\n\nfunction deltaFor(\n block: CompatibleContentBlock\n): ChatModelStreamEvent | undefined {\n switch (block.type) {\n case \"text\": {\n const text = typeof block.text === \"string\" ? block.text : \"\";\n return text.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"text-delta\", text },\n }\n : undefined;\n }\n case \"reasoning\": {\n const reasoning =\n typeof block.reasoning === \"string\" ? block.reasoning : \"\";\n return reasoning.length > 0\n ? {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: { type: \"reasoning-delta\", reasoning },\n }\n : undefined;\n }\n case \"tool_call_chunk\":\n return {\n event: \"content-block-delta\",\n index: typeof block.index === \"number\" ? block.index : 0,\n delta: {\n type: \"block-delta\",\n fields: { ...block, type: \"tool_call_chunk\" },\n },\n };\n default:\n return undefined;\n }\n}\n\n/**\n * A callback handler that implements protocol-native stream_mode=messages.\n *\n * LangChain Core owns chat model content-block event construction. This handler\n * only captures LangGraph metadata, forwards Core events to the Pregel messages\n * channel, and emits a small non-streaming fallback for models that cannot\n * produce stream events.\n */\nexport class StreamProtocolMessagesHandler extends BaseCallbackHandler {\n name = \"StreamProtocolMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage | true> = {};\n\n streamedRunIds = new Set<string>();\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_chat_model_stream_events = true;\n\n // Dispatch this handler's callbacks inline rather than on LangChain's\n // background callback queue. The handler's only side effect is a synchronous\n // `push()` onto the run's stream, so running it inline guarantees those\n // pushes happen *during* the model/chain call — while the stream is still\n // open — instead of after the Pregel loop has returned and sealed the\n // stream. Background dispatch let a model/tool call in a nested or parallel\n // task flush its `messages` chunk after close, where `push()` silently drops\n // it; this surfaced as empty per-message streams (`sub.messages`) for\n // subagents dispatched in parallel from a single tools step.\n awaitHandlers = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n private normalizeMessageId(message: BaseMessage, runId: string | undefined) {\n let messageId = message.id;\n\n if (runId != null) {\n if (ToolMessage.isInstance(message)) {\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n return message.id;\n }\n\n private emit(meta: Meta, data: ChatModelStreamEvent, runId?: string) {\n const metadata = runId != null ? { ...meta[1], run_id: runId } : meta[1];\n this.streamFn([meta[0], \"messages\", [data, metadata]]);\n }\n\n /**\n * Emit a complete message as protocol events (message-start, content\n * blocks, message-finish). Public so `pushMessage` can deliver manually\n * created messages when this handler is registered (streamEvents v3),\n * mirroring `StreamMessagesHandler._emit` on the classic path.\n */\n emitFinalMessage(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n const existingId =\n message.id ??\n (runId != null ? this.stableMessageIdMap[runId] : undefined);\n if (dedupe && existingId != null && this.seen[existingId] !== undefined) {\n return;\n }\n\n const messageId = this.normalizeMessageId(message, runId);\n const role =\n message.type === \"human\"\n ? \"human\"\n : message.type === \"system\"\n ? \"system\"\n : message.type === \"tool\"\n ? \"tool\"\n : \"ai\";\n const toolCallId =\n role === \"tool\" && ToolMessage.isInstance(message)\n ? message.tool_call_id\n : undefined;\n\n this.emit(\n meta,\n {\n event: \"message-start\",\n ...(messageId != null ? { id: messageId } : {}),\n ...(role !== \"ai\" ? ({ role } as Record<string, unknown>) : {}),\n ...(typeof toolCallId === \"string\"\n ? ({ tool_call_id: toolCallId } as Record<string, unknown>)\n : {}),\n } as ChatModelStreamEvent,\n runId\n );\n\n const contentBlocks: CompatibleContentBlock[] = Array.isArray(\n message.content\n )\n ? (message.content as CompatibleContentBlock[])\n : typeof message.content === \"string\" && message.content.length > 0\n ? [{ type: \"text\", text: message.content }]\n : [];\n\n contentBlocks.forEach((block, offset) => {\n const index = typeof block.index === \"number\" ? block.index : offset;\n this.emit(\n meta,\n {\n event: \"content-block-start\",\n index,\n content: startBlockFor(block),\n },\n runId\n );\n const delta = deltaFor({ ...block, index });\n if (delta != null) {\n this.emit(meta, delta, runId);\n }\n this.emit(\n meta,\n {\n event: \"content-block-finish\",\n index,\n content: block,\n },\n runId\n );\n });\n\n this.emit(\n meta,\n {\n event: \"message-finish\",\n ...(getUsageMetadata(message) != null\n ? { usage: getUsageMetadata(message) }\n : {}),\n ...(getResponseMetadata(message) != null\n ? { responseMetadata: getResponseMetadata(message) }\n : {}),\n },\n runId\n );\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken() {\n // Core v2 stream events are forwarded via handleChatModelStreamEvent.\n }\n\n handleChatModelStreamEvent(event: ChatModelStreamEvent, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n let forwarded = event;\n if (event.event === \"message-start\") {\n this.streamedRunIds.add(runId);\n const id = event.id ?? `run-${runId}`;\n this.seen[id] = true;\n this.stableMessageIdMap[runId] ??= id;\n if (event.id == null) {\n forwarded = { ...event, id };\n }\n }\n\n this.emit(meta, forwarded, runId);\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n const meta = this.metadatas[runId];\n if (meta === undefined) return;\n\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n const message = BaseMessage.isInstance(chatGeneration?.message)\n ? chatGeneration.message\n : undefined;\n\n if (message != null) {\n if (this.streamedRunIds.has(runId)) {\n const messageId = this.normalizeMessageId(message, runId);\n if (messageId != null) this.seen[messageId] = message;\n } else {\n this.emitFinalMessage(meta, message, runId, true);\n }\n }\n\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n this.streamedRunIds.delete(runId);\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (BaseMessage.isInstance(value) ||\n BaseMessageChunk.isInstance(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (BaseMessage.isInstance(item) ||\n BaseMessageChunk.isInstance(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const meta = this.metadatas[runId];\n delete this.metadatas[runId];\n if (meta === undefined) return;\n\n const emitMessage = (value: unknown) => {\n if (BaseMessage.isInstance(value) && !ToolMessage.isInstance(value)) {\n this.emitFinalMessage(meta, value, runId, true);\n }\n };\n\n if (BaseMessage.isInstance(outputs)) {\n emitMessage(outputs);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) emitMessage(value);\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (Array.isArray(value)) {\n for (const item of value) emitMessage(item);\n } else {\n emitMessage(value);\n }\n }\n }\n\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n}\n"],"mappings":"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"}
|
package/dist/pregel/read.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_constants = require("../constants.cjs");
|
|
2
2
|
const require_utils = require("../utils.cjs");
|
|
3
3
|
const require_write = require("./write.cjs");
|
|
4
|
+
const require_runnable = require("./runnable.cjs");
|
|
4
5
|
let _langchain_core_runnables = require("@langchain/core/runnables");
|
|
5
6
|
//#region src/pregel/read.ts
|
|
6
7
|
var ChannelRead = class ChannelRead extends require_utils.RunnableCallable {
|
|
@@ -39,12 +40,13 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
39
40
|
retryPolicy;
|
|
40
41
|
cachePolicy;
|
|
41
42
|
timeout;
|
|
43
|
+
tracePolicy;
|
|
42
44
|
subgraphs;
|
|
43
45
|
ends;
|
|
44
46
|
isErrorHandler;
|
|
45
47
|
errorHandlerNode;
|
|
46
48
|
constructor(fields) {
|
|
47
|
-
const { channels, triggers, mapper, writers, bound, kwargs, metadata, retryPolicy, cachePolicy, timeout, tags, subgraphs, ends, isErrorHandler, errorHandlerNode } = fields;
|
|
49
|
+
const { channels, triggers, mapper, writers, bound, kwargs, metadata, retryPolicy, cachePolicy, timeout, tracePolicy, tags, subgraphs, ends, isErrorHandler, errorHandlerNode } = fields;
|
|
48
50
|
const mergedTags = [...fields.config?.tags ? fields.config.tags : [], ...tags ?? []];
|
|
49
51
|
super({
|
|
50
52
|
...fields,
|
|
@@ -65,6 +67,7 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
65
67
|
this.retryPolicy = retryPolicy;
|
|
66
68
|
this.cachePolicy = cachePolicy;
|
|
67
69
|
this.timeout = timeout;
|
|
70
|
+
this.tracePolicy = tracePolicy;
|
|
68
71
|
this.subgraphs = subgraphs;
|
|
69
72
|
this.ends = ends;
|
|
70
73
|
this.isErrorHandler = isErrorHandler;
|
|
@@ -82,15 +85,19 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
82
85
|
}
|
|
83
86
|
getNode() {
|
|
84
87
|
const writers = this.getWriters();
|
|
88
|
+
const sequence = (fields) => this.tracePolicy ? new require_runnable.RunnableSeq({
|
|
89
|
+
...fields,
|
|
90
|
+
tracePolicy: this.tracePolicy
|
|
91
|
+
}) : new _langchain_core_runnables.RunnableSequence(fields);
|
|
85
92
|
if (this.bound === defaultRunnableBound && writers.length === 0) return;
|
|
86
93
|
else if (this.bound === defaultRunnableBound && writers.length === 1) return writers[0];
|
|
87
|
-
else if (this.bound === defaultRunnableBound) return
|
|
94
|
+
else if (this.bound === defaultRunnableBound) return sequence({
|
|
88
95
|
first: writers[0],
|
|
89
96
|
middle: writers.slice(1, writers.length - 1),
|
|
90
97
|
last: writers[writers.length - 1],
|
|
91
98
|
omitSequenceTags: true
|
|
92
99
|
});
|
|
93
|
-
else if (writers.length > 0) return
|
|
100
|
+
else if (writers.length > 0) return sequence({
|
|
94
101
|
first: this.bound,
|
|
95
102
|
middle: writers.slice(0, writers.length - 1),
|
|
96
103
|
last: writers[writers.length - 1],
|
|
@@ -114,7 +121,8 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
114
121
|
config: this.config,
|
|
115
122
|
retryPolicy: this.retryPolicy,
|
|
116
123
|
cachePolicy: this.cachePolicy,
|
|
117
|
-
timeout: this.timeout
|
|
124
|
+
timeout: this.timeout,
|
|
125
|
+
tracePolicy: this.tracePolicy
|
|
118
126
|
});
|
|
119
127
|
}
|
|
120
128
|
pipe(coerceable) {
|
|
@@ -128,7 +136,8 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
128
136
|
kwargs: this.kwargs,
|
|
129
137
|
retryPolicy: this.retryPolicy,
|
|
130
138
|
cachePolicy: this.cachePolicy,
|
|
131
|
-
timeout: this.timeout
|
|
139
|
+
timeout: this.timeout,
|
|
140
|
+
tracePolicy: this.tracePolicy
|
|
132
141
|
});
|
|
133
142
|
else if (this.bound === defaultRunnableBound) return new PregelNode({
|
|
134
143
|
channels: this.channels,
|
|
@@ -140,7 +149,8 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
140
149
|
kwargs: this.kwargs,
|
|
141
150
|
retryPolicy: this.retryPolicy,
|
|
142
151
|
cachePolicy: this.cachePolicy,
|
|
143
|
-
timeout: this.timeout
|
|
152
|
+
timeout: this.timeout,
|
|
153
|
+
tracePolicy: this.tracePolicy
|
|
144
154
|
});
|
|
145
155
|
else return new PregelNode({
|
|
146
156
|
channels: this.channels,
|
|
@@ -152,7 +162,8 @@ var PregelNode = class PregelNode extends _langchain_core_runnables.RunnableBind
|
|
|
152
162
|
kwargs: this.kwargs,
|
|
153
163
|
retryPolicy: this.retryPolicy,
|
|
154
164
|
cachePolicy: this.cachePolicy,
|
|
155
|
-
timeout: this.timeout
|
|
165
|
+
timeout: this.timeout,
|
|
166
|
+
tracePolicy: this.tracePolicy
|
|
156
167
|
});
|
|
157
168
|
}
|
|
158
169
|
};
|
package/dist/pregel/read.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.cjs","names":["RunnableCallable","CONFIG_KEY_READ","RunnablePassthrough","RunnableBinding","ChannelWrite","RunnableSequence"],"sources":["../../src/pregel/read.ts"],"sourcesContent":["import {\n Runnable,\n RunnableBinding,\n RunnableBindingArgs,\n RunnableConfig,\n RunnablePassthrough,\n RunnableSequence,\n _coerceToRunnable,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { CONFIG_KEY_READ } from \"../constants.js\";\nimport { ChannelWrite } from \"./write.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type { CachePolicy, RetryPolicy, TimeoutPolicy } from \"./utils/index.js\";\n\nexport class ChannelRead<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n> extends RunnableCallable {\n lc_graph_name = \"ChannelRead\";\n\n channel: string | Array<string>;\n\n fresh: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(\n channel: string | Array<string>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any,\n fresh: boolean = false\n ) {\n super({\n trace: false,\n func: (_: RunInput, config: RunnableConfig) =>\n ChannelRead.doRead(config, this.channel, this.fresh, this.mapper),\n });\n this.fresh = fresh;\n this.mapper = mapper;\n this.channel = channel;\n this.name = Array.isArray(channel)\n ? `ChannelRead<${channel.join(\",\")}>`\n : `ChannelRead<${channel}>`;\n }\n\n static doRead<T = unknown>(\n config: RunnableConfig,\n channel: string | Array<string>,\n fresh: boolean,\n mapper?: (args: unknown) => unknown\n ): T {\n const read: (arg: string | string[], fresh: boolean) => unknown =\n config.configurable?.[CONFIG_KEY_READ];\n if (!read) {\n throw new Error(\n \"Runnable is not configured with a read function. Make sure to call in the context of a Pregel process\"\n );\n }\n if (mapper) {\n return mapper(read(channel, fresh)) as T;\n } else {\n return read(channel, fresh) as T;\n }\n }\n}\n\nconst defaultRunnableBound =\n /* #__PURE__ */ new RunnablePassthrough<PregelNodeInputType>();\n\ninterface PregelNodeArgs<RunInput, RunOutput> extends Partial<\n RunnableBindingArgs<RunInput, RunOutput>\n> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n timeout?: TimeoutPolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n /** Whether this node is an auto-generated node-level error handler. */\n isErrorHandler?: boolean;\n /** Name of the error handler node to run if this node's execution fails. */\n errorHandlerNode?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\n\nexport class PregelNode<\n RunInput = PregelNodeInputType,\n RunOutput = PregelNodeOutputType,\n> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name = \"PregelNode\";\n\n channels: Record<string, string> | string[];\n\n triggers: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n writers: Runnable[] = [];\n\n bound: Runnable<RunInput, RunOutput> = defaultRunnableBound;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any> = {};\n\n metadata: Record<string, unknown> = {};\n\n tags: string[] = [];\n\n retryPolicy?: RetryPolicy;\n\n cachePolicy?: CachePolicy;\n\n timeout?: TimeoutPolicy;\n\n subgraphs?: Runnable[];\n\n ends?: string[];\n\n isErrorHandler?: boolean;\n\n errorHandlerNode?: string;\n\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>) {\n const {\n channels,\n triggers,\n mapper,\n writers,\n bound,\n kwargs,\n metadata,\n retryPolicy,\n cachePolicy,\n timeout,\n tags,\n subgraphs,\n ends,\n isErrorHandler,\n errorHandlerNode,\n } = fields;\n const mergedTags = [\n ...(fields.config?.tags ? fields.config.tags : []),\n ...(tags ?? []),\n ];\n\n super({\n ...fields,\n bound:\n fields.bound ??\n (defaultRunnableBound as unknown as Runnable<RunInput, RunOutput>),\n config: {\n ...(fields.config ? fields.config : {}),\n tags: mergedTags,\n },\n });\n\n this.channels = channels;\n this.triggers = triggers;\n this.mapper = mapper;\n this.writers = writers ?? this.writers;\n this.bound = bound ?? this.bound;\n this.kwargs = kwargs ?? this.kwargs;\n this.metadata = metadata ?? this.metadata;\n this.tags = mergedTags;\n this.retryPolicy = retryPolicy;\n this.cachePolicy = cachePolicy;\n this.timeout = timeout;\n this.subgraphs = subgraphs;\n this.ends = ends;\n this.isErrorHandler = isErrorHandler;\n this.errorHandlerNode = errorHandlerNode;\n }\n\n getWriters(): Array<Runnable> {\n const newWriters = [...this.writers];\n while (\n newWriters.length > 1 &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 1] instanceof ChannelWrite &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 2] instanceof ChannelWrite\n ) {\n // we can combine writes if they are consecutive\n // careful to not modify the original writers list or ChannelWrite\n const endWriters = newWriters.slice(-2) as ChannelWrite[];\n const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);\n newWriters[newWriters.length - 2] = new ChannelWrite(\n combinedWrites,\n endWriters[0].config?.tags\n );\n newWriters.pop();\n }\n return newWriters;\n }\n\n getNode(): Runnable<RunInput, RunOutput> | undefined {\n const writers = this.getWriters();\n if (this.bound === defaultRunnableBound && writers.length === 0) {\n return undefined;\n } else if (this.bound === defaultRunnableBound && writers.length === 1) {\n return writers[0];\n } else if (this.bound === defaultRunnableBound) {\n return new RunnableSequence({\n first: writers[0],\n middle: writers.slice(1, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else if (writers.length > 0) {\n return new RunnableSequence({\n first: this.bound,\n middle: writers.slice(0, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else {\n return this.bound;\n }\n }\n\n join(channels: Array<string>): PregelNode<RunInput, RunOutput> {\n if (!Array.isArray(channels)) {\n throw new Error(\"channels must be a list\");\n }\n if (typeof this.channels !== \"object\") {\n throw new Error(\"all channels must be named when using .join()\");\n }\n\n return new PregelNode<RunInput, RunOutput>({\n channels: {\n ...this.channels,\n ...Object.fromEntries(channels.map((chan) => [chan, chan])),\n },\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound,\n kwargs: this.kwargs,\n config: this.config,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n }\n\n pipe<NewRunOutput>(\n coerceable: RunnableLike\n ): PregelNode<RunInput, Exclude<NewRunOutput, Error>> {\n if (ChannelWrite.isWriter(coerceable)) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: [...this.writers, coerceable],\n bound: this.bound as unknown as PregelNode<\n RunInput,\n Exclude<NewRunOutput, Error>\n >,\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n } else if (this.bound === defaultRunnableBound) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: _coerceToRunnable<RunInput, NewRunOutput>(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n } else {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound.pipe(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read.cjs","names":["RunnableCallable","CONFIG_KEY_READ","RunnablePassthrough","RunnableBinding","ChannelWrite","RunnableSeq","RunnableSequence"],"sources":["../../src/pregel/read.ts"],"sourcesContent":["import {\n Runnable,\n RunnableBinding,\n RunnableBindingArgs,\n RunnableConfig,\n RunnablePassthrough,\n RunnableSequence,\n _coerceToRunnable,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { CONFIG_KEY_READ } from \"../constants.js\";\nimport { ChannelWrite } from \"./write.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type {\n CachePolicy,\n RetryPolicy,\n TimeoutPolicy,\n TracePolicy,\n} from \"./utils/index.js\";\nimport { RunnableSeq } from \"./runnable.js\";\n\nexport class ChannelRead<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n> extends RunnableCallable {\n lc_graph_name = \"ChannelRead\";\n\n channel: string | Array<string>;\n\n fresh: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(\n channel: string | Array<string>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any,\n fresh: boolean = false\n ) {\n super({\n trace: false,\n func: (_: RunInput, config: RunnableConfig) =>\n ChannelRead.doRead(config, this.channel, this.fresh, this.mapper),\n });\n this.fresh = fresh;\n this.mapper = mapper;\n this.channel = channel;\n this.name = Array.isArray(channel)\n ? `ChannelRead<${channel.join(\",\")}>`\n : `ChannelRead<${channel}>`;\n }\n\n static doRead<T = unknown>(\n config: RunnableConfig,\n channel: string | Array<string>,\n fresh: boolean,\n mapper?: (args: unknown) => unknown\n ): T {\n const read: (arg: string | string[], fresh: boolean) => unknown =\n config.configurable?.[CONFIG_KEY_READ];\n if (!read) {\n throw new Error(\n \"Runnable is not configured with a read function. Make sure to call in the context of a Pregel process\"\n );\n }\n if (mapper) {\n return mapper(read(channel, fresh)) as T;\n } else {\n return read(channel, fresh) as T;\n }\n }\n}\n\nconst defaultRunnableBound =\n /* #__PURE__ */ new RunnablePassthrough<PregelNodeInputType>();\n\ninterface PregelNodeArgs<RunInput, RunOutput> extends Partial<\n RunnableBindingArgs<RunInput, RunOutput>\n> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n timeout?: TimeoutPolicy;\n tracePolicy?: TracePolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n /** Whether this node is an auto-generated node-level error handler. */\n isErrorHandler?: boolean;\n /** Name of the error handler node to run if this node's execution fails. */\n errorHandlerNode?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\n\nexport class PregelNode<\n RunInput = PregelNodeInputType,\n RunOutput = PregelNodeOutputType,\n> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name = \"PregelNode\";\n\n channels: Record<string, string> | string[];\n\n triggers: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n writers: Runnable[] = [];\n\n bound: Runnable<RunInput, RunOutput> = defaultRunnableBound;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any> = {};\n\n metadata: Record<string, unknown> = {};\n\n tags: string[] = [];\n\n retryPolicy?: RetryPolicy;\n\n cachePolicy?: CachePolicy;\n\n timeout?: TimeoutPolicy;\n\n tracePolicy?: TracePolicy;\n\n subgraphs?: Runnable[];\n\n ends?: string[];\n\n isErrorHandler?: boolean;\n\n errorHandlerNode?: string;\n\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>) {\n const {\n channels,\n triggers,\n mapper,\n writers,\n bound,\n kwargs,\n metadata,\n retryPolicy,\n cachePolicy,\n timeout,\n tracePolicy,\n tags,\n subgraphs,\n ends,\n isErrorHandler,\n errorHandlerNode,\n } = fields;\n const mergedTags = [\n ...(fields.config?.tags ? fields.config.tags : []),\n ...(tags ?? []),\n ];\n\n super({\n ...fields,\n bound:\n fields.bound ??\n (defaultRunnableBound as unknown as Runnable<RunInput, RunOutput>),\n config: {\n ...(fields.config ? fields.config : {}),\n tags: mergedTags,\n },\n });\n\n this.channels = channels;\n this.triggers = triggers;\n this.mapper = mapper;\n this.writers = writers ?? this.writers;\n this.bound = bound ?? this.bound;\n this.kwargs = kwargs ?? this.kwargs;\n this.metadata = metadata ?? this.metadata;\n this.tags = mergedTags;\n this.retryPolicy = retryPolicy;\n this.cachePolicy = cachePolicy;\n this.timeout = timeout;\n this.tracePolicy = tracePolicy;\n this.subgraphs = subgraphs;\n this.ends = ends;\n this.isErrorHandler = isErrorHandler;\n this.errorHandlerNode = errorHandlerNode;\n }\n\n getWriters(): Array<Runnable> {\n const newWriters = [...this.writers];\n while (\n newWriters.length > 1 &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 1] instanceof ChannelWrite &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 2] instanceof ChannelWrite\n ) {\n // we can combine writes if they are consecutive\n // careful to not modify the original writers list or ChannelWrite\n const endWriters = newWriters.slice(-2) as ChannelWrite[];\n const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);\n newWriters[newWriters.length - 2] = new ChannelWrite(\n combinedWrites,\n endWriters[0].config?.tags\n );\n newWriters.pop();\n }\n return newWriters;\n }\n\n getNode(): Runnable<RunInput, RunOutput> | undefined {\n const writers = this.getWriters();\n const sequence = (\n fields: ConstructorParameters<\n typeof RunnableSequence<RunInput, RunOutput>\n >[0]\n ) =>\n this.tracePolicy\n ? new RunnableSeq({ ...fields, tracePolicy: this.tracePolicy })\n : new RunnableSequence(fields);\n if (this.bound === defaultRunnableBound && writers.length === 0) {\n return undefined;\n } else if (this.bound === defaultRunnableBound && writers.length === 1) {\n return writers[0];\n } else if (this.bound === defaultRunnableBound) {\n return sequence({\n first: writers[0],\n middle: writers.slice(1, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else if (writers.length > 0) {\n return sequence({\n first: this.bound,\n middle: writers.slice(0, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else {\n return this.bound;\n }\n }\n\n join(channels: Array<string>): PregelNode<RunInput, RunOutput> {\n if (!Array.isArray(channels)) {\n throw new Error(\"channels must be a list\");\n }\n if (typeof this.channels !== \"object\") {\n throw new Error(\"all channels must be named when using .join()\");\n }\n\n return new PregelNode<RunInput, RunOutput>({\n channels: {\n ...this.channels,\n ...Object.fromEntries(channels.map((chan) => [chan, chan])),\n },\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound,\n kwargs: this.kwargs,\n config: this.config,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n tracePolicy: this.tracePolicy,\n });\n }\n\n pipe<NewRunOutput>(\n coerceable: RunnableLike\n ): PregelNode<RunInput, Exclude<NewRunOutput, Error>> {\n if (ChannelWrite.isWriter(coerceable)) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: [...this.writers, coerceable],\n bound: this.bound as unknown as PregelNode<\n RunInput,\n Exclude<NewRunOutput, Error>\n >,\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n tracePolicy: this.tracePolicy,\n });\n } else if (this.bound === defaultRunnableBound) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: _coerceToRunnable<RunInput, NewRunOutput>(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n tracePolicy: this.tracePolicy,\n });\n } else {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound.pipe(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n tracePolicy: this.tracePolicy,\n });\n }\n }\n}\n"],"mappings":"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"}
|