@librechat/agents 3.1.85 → 3.1.87
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/README.md +69 -0
- package/dist/cjs/agents/AgentContext.cjs +7 -2
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/events.cjs +23 -0
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +133 -18
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +251 -53
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +1 -5
- package/dist/cjs/llm/init.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +113 -24
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +3 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +18 -5
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs +253 -0
- package/dist/cjs/openai/index.cjs.map +1 -0
- package/dist/cjs/responses/index.cjs +448 -0
- package/dist/cjs/responses/index.cjs.map +1 -0
- package/dist/cjs/run.cjs +108 -7
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +1057 -0
- package/dist/cjs/session/AgentSession.cjs.map +1 -0
- package/dist/cjs/session/JsonlSessionStore.cjs +425 -0
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -0
- package/dist/cjs/session/handlers.cjs +221 -0
- package/dist/cjs/session/handlers.cjs.map +1 -0
- package/dist/cjs/session/ids.cjs +22 -0
- package/dist/cjs/session/ids.cjs.map +1 -0
- package/dist/cjs/session/messageSerialization.cjs +179 -0
- package/dist/cjs/session/messageSerialization.cjs.map +1 -0
- package/dist/cjs/stream.cjs +472 -11
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +1 -1
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +177 -59
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/eagerEventExecution.cjs +113 -0
- package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -0
- package/dist/cjs/tools/handlers.cjs +1 -1
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/streamedToolCallSeals.cjs +42 -0
- package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -0
- package/dist/esm/agents/AgentContext.mjs +7 -2
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/events.mjs +23 -1
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +133 -18
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +251 -53
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +1 -5
- package/dist/esm/llm/init.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +113 -25
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +4 -2
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/main.mjs +5 -1
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/openai/index.mjs +246 -0
- package/dist/esm/openai/index.mjs.map +1 -0
- package/dist/esm/responses/index.mjs +440 -0
- package/dist/esm/responses/index.mjs.map +1 -0
- package/dist/esm/run.mjs +108 -7
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +1054 -0
- package/dist/esm/session/AgentSession.mjs.map +1 -0
- package/dist/esm/session/JsonlSessionStore.mjs +422 -0
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -0
- package/dist/esm/session/handlers.mjs +219 -0
- package/dist/esm/session/handlers.mjs.map +1 -0
- package/dist/esm/session/ids.mjs +17 -0
- package/dist/esm/session/ids.mjs.map +1 -0
- package/dist/esm/session/messageSerialization.mjs +173 -0
- package/dist/esm/session/messageSerialization.mjs.map +1 -0
- package/dist/esm/stream.mjs +473 -12
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +1 -1
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +177 -59
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/eagerEventExecution.mjs +107 -0
- package/dist/esm/tools/eagerEventExecution.mjs.map +1 -0
- package/dist/esm/tools/handlers.mjs +1 -1
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/streamedToolCallSeals.mjs +36 -0
- package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/graphs/Graph.d.ts +24 -9
- package/dist/types/index.d.ts +1 -0
- package/dist/types/llm/openai/index.d.ts +1 -0
- package/dist/types/openai/index.d.ts +75 -0
- package/dist/types/responses/index.d.ts +97 -0
- package/dist/types/run.d.ts +2 -0
- package/dist/types/session/AgentSession.d.ts +32 -0
- package/dist/types/session/JsonlSessionStore.d.ts +67 -0
- package/dist/types/session/handlers.d.ts +8 -0
- package/dist/types/session/ids.d.ts +4 -0
- package/dist/types/session/index.d.ts +5 -0
- package/dist/types/session/messageSerialization.d.ts +7 -0
- package/dist/types/session/types.d.ts +191 -0
- package/dist/types/tools/ToolNode.d.ts +12 -1
- package/dist/types/tools/eagerEventExecution.d.ts +23 -0
- package/dist/types/tools/streamedToolCallSeals.d.ts +13 -0
- package/dist/types/types/hitl.d.ts +4 -0
- package/dist/types/types/run.d.ts +11 -1
- package/dist/types/types/tools.d.ts +36 -0
- package/package.json +19 -2
- package/src/__tests__/stream.eagerEventExecution.test.ts +2458 -0
- package/src/agents/AgentContext.ts +7 -2
- package/src/agents/__tests__/AgentContext.test.ts +254 -5
- package/src/events.ts +29 -0
- package/src/graphs/Graph.ts +224 -50
- package/src/graphs/MultiAgentGraph.ts +1 -1
- package/src/graphs/__tests__/composition.smoke.test.ts +30 -0
- package/src/index.ts +3 -0
- package/src/llm/anthropic/index.ts +356 -84
- package/src/llm/anthropic/llm.spec.ts +64 -0
- package/src/llm/custom-chat-models.smoke.test.ts +175 -4
- package/src/llm/openai/contentBlocks.test.ts +35 -0
- package/src/llm/openai/deepseek.test.ts +201 -2
- package/src/llm/openai/index.ts +171 -26
- package/src/llm/openai/utils/index.ts +22 -0
- package/src/llm/openrouter/index.ts +4 -2
- package/src/openai/__tests__/openai.test.ts +337 -0
- package/src/openai/index.ts +404 -0
- package/src/responses/__tests__/responses.test.ts +652 -0
- package/src/responses/index.ts +677 -0
- package/src/run.ts +158 -8
- package/src/scripts/compare_pi_vs_ours.ts +592 -173
- package/src/scripts/session_live.ts +548 -0
- package/src/session/AgentSession.ts +1432 -0
- package/src/session/JsonlSessionStore.ts +572 -0
- package/src/session/__tests__/JsonlSessionStore.test.ts +1410 -0
- package/src/session/__tests__/handlers.test.ts +161 -0
- package/src/session/handlers.ts +272 -0
- package/src/session/ids.ts +17 -0
- package/src/session/index.ts +44 -0
- package/src/session/messageSerialization.ts +207 -0
- package/src/session/types.ts +275 -0
- package/src/specs/custom-event-await.test.ts +89 -0
- package/src/specs/summarization.test.ts +1 -1
- package/src/stream.ts +755 -48
- package/src/summarization/node.ts +1 -1
- package/src/tools/ToolNode.ts +299 -126
- package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +373 -0
- package/src/tools/__tests__/handlers.test.ts +2 -1
- package/src/tools/__tests__/hitl.test.ts +206 -110
- package/src/tools/eagerEventExecution.ts +153 -0
- package/src/tools/handlers.ts +8 -4
- package/src/tools/streamedToolCallSeals.ts +57 -0
- package/src/types/hitl.ts +4 -0
- package/src/types/run.ts +11 -0
- package/src/types/tools.ts +36 -0
- package/dist/cjs/llm/text.cjs +0 -69
- package/dist/cjs/llm/text.cjs.map +0 -1
- package/dist/esm/llm/text.mjs +0 -67
- package/dist/esm/llm/text.mjs.map +0 -1
|
@@ -14,7 +14,7 @@ import { messagesStateReducer } from '../messages/reducer.mjs';
|
|
|
14
14
|
import { GraphNodeKeys, ContentTypes, Providers, StepTypes, GraphEvents } from '../common/enum.mjs';
|
|
15
15
|
import { resetIfNotEmpty, joinKeys } from '../utils/graph.mjs';
|
|
16
16
|
import { isAnthropicLike, isOpenAILike, isGoogleLike } from '../utils/llm.mjs';
|
|
17
|
-
import
|
|
17
|
+
import '../stream.mjs';
|
|
18
18
|
import { sleep } from '../utils/run.mjs';
|
|
19
19
|
import 'ai-tokenizer';
|
|
20
20
|
import 'zod-to-json-schema';
|
|
@@ -29,6 +29,7 @@ import { createSummarizeNode } from '../summarization/node.mjs';
|
|
|
29
29
|
import { createSchemaOnlyTools } from '../tools/schema.mjs';
|
|
30
30
|
import { AgentContext } from '../agents/AgentContext.mjs';
|
|
31
31
|
import { createFakeStreamingLLM } from '../llm/fake.mjs';
|
|
32
|
+
import { handleToolCalls } from '../tools/handlers.mjs';
|
|
32
33
|
import '../tools/local/CompileCheckTool.mjs';
|
|
33
34
|
import 'path';
|
|
34
35
|
import 'fs/promises';
|
|
@@ -51,6 +52,9 @@ import { partitionAndMarkOpenRouterToolCache } from '../llm/openrouter/toolCache
|
|
|
51
52
|
const { AGENT, TOOLS, SUMMARIZE } = GraphNodeKeys;
|
|
52
53
|
/** Minimum relative variance before calibrated toolSchemaTokens overrides current value. */
|
|
53
54
|
const CALIBRATION_VARIANCE_THRESHOLD = 0.15;
|
|
55
|
+
function getHandlerDispatchedEventKey(eventName, stepId) {
|
|
56
|
+
return `${eventName}:${stepId}`;
|
|
57
|
+
}
|
|
54
58
|
class Graph {
|
|
55
59
|
messageStepHasToolCalls = new Map();
|
|
56
60
|
messageIdsByStepKey = new Map();
|
|
@@ -61,11 +65,12 @@ class Graph {
|
|
|
61
65
|
contentIndexMap = new Map();
|
|
62
66
|
toolCallStepIds = new Map();
|
|
63
67
|
/**
|
|
64
|
-
* Step IDs
|
|
65
|
-
*
|
|
66
|
-
*
|
|
68
|
+
* Step IDs dispatched through the handler registry during this run.
|
|
69
|
+
* Event echo suppression is tracked separately so repeated deltas for
|
|
70
|
+
* the same step are scoped to the active custom event dispatch.
|
|
67
71
|
*/
|
|
68
72
|
handlerDispatchedStepIds = new Set();
|
|
73
|
+
handlerDispatchedEventCounts = new Map();
|
|
69
74
|
signal;
|
|
70
75
|
/** Set of invoked tool call IDs from non-message run steps completed mid-run, if any */
|
|
71
76
|
invokedToolIds;
|
|
@@ -84,6 +89,16 @@ class Graph {
|
|
|
84
89
|
* graph compiles.
|
|
85
90
|
*/
|
|
86
91
|
toolOutputReferences;
|
|
92
|
+
/**
|
|
93
|
+
* Run-scoped opt-in for eager event-driven tool execution. The stream
|
|
94
|
+
* handler may prestart eligible event-driven tools; ToolNode later
|
|
95
|
+
* consumes the settled promises while preserving final ToolMessage order.
|
|
96
|
+
*/
|
|
97
|
+
eagerEventToolExecution;
|
|
98
|
+
eagerEventToolExecutions = new Map();
|
|
99
|
+
eagerEventToolUsageCount = new Map();
|
|
100
|
+
eagerEventToolUsageCountsByAgentId = new Map();
|
|
101
|
+
eagerEventToolCallChunks = new Map();
|
|
87
102
|
/**
|
|
88
103
|
* Run-scoped execution backend for built-in code tools. Defaults to the
|
|
89
104
|
* remote Code API sandbox when unset.
|
|
@@ -122,7 +137,12 @@ class Graph {
|
|
|
122
137
|
this.hookRegistry = undefined;
|
|
123
138
|
this.humanInTheLoop = undefined;
|
|
124
139
|
this.toolOutputReferences = undefined;
|
|
140
|
+
this.eagerEventToolExecution = undefined;
|
|
141
|
+
this.eagerEventToolExecutions.clear();
|
|
142
|
+
this.clearEagerEventToolUsageCounts();
|
|
143
|
+
this.eagerEventToolCallChunks.clear();
|
|
125
144
|
this.toolExecution = undefined;
|
|
145
|
+
this.handlerDispatchedEventCounts.clear();
|
|
126
146
|
/**
|
|
127
147
|
* ToolNodes compiled from this graph captured the registry
|
|
128
148
|
* instance at construction time, so simply dropping the Graph's
|
|
@@ -152,6 +172,39 @@ class Graph {
|
|
|
152
172
|
this._compiledToolNodes.clear();
|
|
153
173
|
this.sessions.clear();
|
|
154
174
|
}
|
|
175
|
+
getEagerEventToolUsageCount(agentId) {
|
|
176
|
+
if (agentId == null || agentId === '') {
|
|
177
|
+
return this.eagerEventToolUsageCount;
|
|
178
|
+
}
|
|
179
|
+
let usageCount = this.eagerEventToolUsageCountsByAgentId.get(agentId);
|
|
180
|
+
if (usageCount == null) {
|
|
181
|
+
usageCount = new Map();
|
|
182
|
+
this.eagerEventToolUsageCountsByAgentId.set(agentId, usageCount);
|
|
183
|
+
}
|
|
184
|
+
return usageCount;
|
|
185
|
+
}
|
|
186
|
+
clearEagerEventToolUsageCounts() {
|
|
187
|
+
this.eagerEventToolUsageCount.clear();
|
|
188
|
+
for (const usageCount of this.eagerEventToolUsageCountsByAgentId.values()) {
|
|
189
|
+
usageCount.clear();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
markHandlerDispatchedEvent(eventName, stepId) {
|
|
193
|
+
const key = getHandlerDispatchedEventKey(eventName, stepId);
|
|
194
|
+
this.handlerDispatchedEventCounts.set(key, (this.handlerDispatchedEventCounts.get(key) ?? 0) + 1);
|
|
195
|
+
return () => {
|
|
196
|
+
const count = this.handlerDispatchedEventCounts.get(key) ?? 0;
|
|
197
|
+
if (count <= 1) {
|
|
198
|
+
this.handlerDispatchedEventCounts.delete(key);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this.handlerDispatchedEventCounts.set(key, count - 1);
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
hasHandlerDispatchedEvent(eventName, stepId) {
|
|
205
|
+
const key = getHandlerDispatchedEventKey(eventName, stepId);
|
|
206
|
+
return (this.handlerDispatchedEventCounts.get(key) ?? 0) > 0;
|
|
207
|
+
}
|
|
155
208
|
/**
|
|
156
209
|
* Subclass hook to register a freshly compiled ToolNode so
|
|
157
210
|
* `clearHeavyState` can flush its per-Run direct-path turn cache
|
|
@@ -282,7 +335,11 @@ class StandardGraph extends Graph {
|
|
|
282
335
|
* a stale reference on 2nd+ processStream calls.
|
|
283
336
|
*/
|
|
284
337
|
this.toolCallStepIds.clear();
|
|
338
|
+
this.eagerEventToolExecutions.clear();
|
|
339
|
+
this.clearEagerEventToolUsageCounts();
|
|
340
|
+
this.eagerEventToolCallChunks.clear();
|
|
285
341
|
this.handlerDispatchedStepIds = resetIfNotEmpty(this.handlerDispatchedStepIds, new Set());
|
|
342
|
+
this.handlerDispatchedEventCounts = resetIfNotEmpty(this.handlerDispatchedEventCounts, new Map());
|
|
286
343
|
this.messageIdsByStepKey = resetIfNotEmpty(this.messageIdsByStepKey, new Map());
|
|
287
344
|
this.messageStepHasToolCalls = resetIfNotEmpty(this.messageStepHasToolCalls, new Map());
|
|
288
345
|
this.prelimMessageIdsByStepKey = resetIfNotEmpty(this.prelimMessageIdsByStepKey, new Map());
|
|
@@ -506,6 +563,9 @@ class StandardGraph extends Graph {
|
|
|
506
563
|
toolRegistry: agentContext?.toolRegistry,
|
|
507
564
|
hookRegistry: this.hookRegistry,
|
|
508
565
|
humanInTheLoop: this.humanInTheLoop,
|
|
566
|
+
eagerEventToolExecution: this.eagerEventToolExecution,
|
|
567
|
+
eagerEventToolExecutions: this.eagerEventToolExecutions,
|
|
568
|
+
eagerEventToolUsageCount: this.getEagerEventToolUsageCount(agentContext?.agentId),
|
|
509
569
|
toolExecution: this.toolExecution,
|
|
510
570
|
directToolNames: directToolNames.size > 0 ? directToolNames : undefined,
|
|
511
571
|
maxContextTokens: agentContext?.maxContextTokens,
|
|
@@ -956,7 +1016,7 @@ class StandardGraph extends Graph {
|
|
|
956
1016
|
if (typeof content === 'string') {
|
|
957
1017
|
await this.dispatchMessageDelta(stepId, {
|
|
958
1018
|
content: [{ type: ContentTypes.TEXT, text: content }],
|
|
959
|
-
});
|
|
1019
|
+
}, metadata);
|
|
960
1020
|
}
|
|
961
1021
|
else if (Array.isArray(content) &&
|
|
962
1022
|
content.every((c) => typeof c === 'object' &&
|
|
@@ -965,7 +1025,7 @@ class StandardGraph extends Graph {
|
|
|
965
1025
|
c.type.startsWith('text'))) {
|
|
966
1026
|
await this.dispatchMessageDelta(stepId, {
|
|
967
1027
|
content: content,
|
|
968
|
-
});
|
|
1028
|
+
}, metadata);
|
|
969
1029
|
}
|
|
970
1030
|
}
|
|
971
1031
|
}
|
|
@@ -995,7 +1055,7 @@ class StandardGraph extends Graph {
|
|
|
995
1055
|
if (typeof content === 'string') {
|
|
996
1056
|
await this.dispatchMessageDelta(stepId, {
|
|
997
1057
|
content: [{ type: ContentTypes.TEXT, text: content }],
|
|
998
|
-
});
|
|
1058
|
+
}, metadata);
|
|
999
1059
|
}
|
|
1000
1060
|
else if (Array.isArray(content) &&
|
|
1001
1061
|
content.every((c) => typeof c === 'object' &&
|
|
@@ -1004,7 +1064,7 @@ class StandardGraph extends Graph {
|
|
|
1004
1064
|
c.type.startsWith('text'))) {
|
|
1005
1065
|
await this.dispatchMessageDelta(stepId, {
|
|
1006
1066
|
content: content,
|
|
1007
|
-
});
|
|
1067
|
+
}, metadata);
|
|
1008
1068
|
}
|
|
1009
1069
|
}
|
|
1010
1070
|
}
|
|
@@ -1174,8 +1234,16 @@ class StandardGraph extends Graph {
|
|
|
1174
1234
|
await handler.handle(GraphEvents.ON_RUN_STEP, runStep, resolvedConfig?.configurable, this);
|
|
1175
1235
|
this.handlerDispatchedStepIds.add(runStep.id);
|
|
1176
1236
|
}
|
|
1177
|
-
|
|
1178
|
-
|
|
1237
|
+
const unmarkHandlerDispatchedEvent = handler
|
|
1238
|
+
? this.markHandlerDispatchedEvent(GraphEvents.ON_RUN_STEP, runStep.id)
|
|
1239
|
+
: undefined;
|
|
1240
|
+
try {
|
|
1241
|
+
if (resolvedConfig) {
|
|
1242
|
+
await safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP, runStep, resolvedConfig);
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
finally {
|
|
1246
|
+
unmarkHandlerDispatchedEvent?.();
|
|
1179
1247
|
}
|
|
1180
1248
|
},
|
|
1181
1249
|
dispatchRunStepCompleted: async (stepId, result, nodeConfig) => {
|
|
@@ -1206,7 +1274,7 @@ class StandardGraph extends Graph {
|
|
|
1206
1274
|
const StateAnnotation = Annotation.Root({
|
|
1207
1275
|
messages: Annotation({
|
|
1208
1276
|
reducer: (a, b) => {
|
|
1209
|
-
if (!
|
|
1277
|
+
if (!this.messages.length) {
|
|
1210
1278
|
this.startIndex = a.length + b.length;
|
|
1211
1279
|
}
|
|
1212
1280
|
const result = messagesStateReducer(a, b);
|
|
@@ -1303,7 +1371,15 @@ class StandardGraph extends Graph {
|
|
|
1303
1371
|
// but the primary dispatch above guarantees the event reaches the handler.
|
|
1304
1372
|
// The customEventCallback in run.ts skips events already dispatched above
|
|
1305
1373
|
// to prevent double handling.
|
|
1306
|
-
|
|
1374
|
+
const unmarkHandlerDispatchedEvent = handler
|
|
1375
|
+
? this.markHandlerDispatchedEvent(GraphEvents.ON_RUN_STEP, stepId)
|
|
1376
|
+
: undefined;
|
|
1377
|
+
try {
|
|
1378
|
+
await safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP, runStep, this.config);
|
|
1379
|
+
}
|
|
1380
|
+
finally {
|
|
1381
|
+
unmarkHandlerDispatchedEvent?.();
|
|
1382
|
+
}
|
|
1307
1383
|
return stepId;
|
|
1308
1384
|
}
|
|
1309
1385
|
/**
|
|
@@ -1352,7 +1428,7 @@ class StandardGraph extends Graph {
|
|
|
1352
1428
|
async handleToolCallError(data, metadata) {
|
|
1353
1429
|
await StandardGraph.handleToolCallErrorStatic(this, data, metadata);
|
|
1354
1430
|
}
|
|
1355
|
-
async dispatchRunStepDelta(id, delta) {
|
|
1431
|
+
async dispatchRunStepDelta(id, delta, metadata) {
|
|
1356
1432
|
if (!this.config) {
|
|
1357
1433
|
throw new Error('No config provided');
|
|
1358
1434
|
}
|
|
@@ -1363,9 +1439,22 @@ class StandardGraph extends Graph {
|
|
|
1363
1439
|
id,
|
|
1364
1440
|
delta,
|
|
1365
1441
|
};
|
|
1366
|
-
|
|
1442
|
+
const handler = this.handlerRegistry?.getHandler(GraphEvents.ON_RUN_STEP_DELTA);
|
|
1443
|
+
if (handler) {
|
|
1444
|
+
await handler.handle(GraphEvents.ON_RUN_STEP_DELTA, runStepDelta, metadata, this);
|
|
1445
|
+
this.handlerDispatchedStepIds.add(id);
|
|
1446
|
+
}
|
|
1447
|
+
const unmarkHandlerDispatchedEvent = handler
|
|
1448
|
+
? this.markHandlerDispatchedEvent(GraphEvents.ON_RUN_STEP_DELTA, id)
|
|
1449
|
+
: undefined;
|
|
1450
|
+
try {
|
|
1451
|
+
await safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP_DELTA, runStepDelta, this.config);
|
|
1452
|
+
}
|
|
1453
|
+
finally {
|
|
1454
|
+
unmarkHandlerDispatchedEvent?.();
|
|
1455
|
+
}
|
|
1367
1456
|
}
|
|
1368
|
-
async dispatchMessageDelta(id, delta) {
|
|
1457
|
+
async dispatchMessageDelta(id, delta, metadata) {
|
|
1369
1458
|
if (!this.config) {
|
|
1370
1459
|
throw new Error('No config provided');
|
|
1371
1460
|
}
|
|
@@ -1373,9 +1462,22 @@ class StandardGraph extends Graph {
|
|
|
1373
1462
|
id,
|
|
1374
1463
|
delta,
|
|
1375
1464
|
};
|
|
1376
|
-
|
|
1465
|
+
const handler = this.handlerRegistry?.getHandler(GraphEvents.ON_MESSAGE_DELTA);
|
|
1466
|
+
if (handler) {
|
|
1467
|
+
await handler.handle(GraphEvents.ON_MESSAGE_DELTA, messageDelta, metadata, this);
|
|
1468
|
+
this.handlerDispatchedStepIds.add(id);
|
|
1469
|
+
}
|
|
1470
|
+
const unmarkHandlerDispatchedEvent = handler
|
|
1471
|
+
? this.markHandlerDispatchedEvent(GraphEvents.ON_MESSAGE_DELTA, id)
|
|
1472
|
+
: undefined;
|
|
1473
|
+
try {
|
|
1474
|
+
await safeDispatchCustomEvent(GraphEvents.ON_MESSAGE_DELTA, messageDelta, this.config);
|
|
1475
|
+
}
|
|
1476
|
+
finally {
|
|
1477
|
+
unmarkHandlerDispatchedEvent?.();
|
|
1478
|
+
}
|
|
1377
1479
|
}
|
|
1378
|
-
dispatchReasoningDelta = async (stepId, delta) => {
|
|
1480
|
+
dispatchReasoningDelta = async (stepId, delta, metadata) => {
|
|
1379
1481
|
if (!this.config) {
|
|
1380
1482
|
throw new Error('No config provided');
|
|
1381
1483
|
}
|
|
@@ -1383,7 +1485,20 @@ class StandardGraph extends Graph {
|
|
|
1383
1485
|
id: stepId,
|
|
1384
1486
|
delta,
|
|
1385
1487
|
};
|
|
1386
|
-
|
|
1488
|
+
const handler = this.handlerRegistry?.getHandler(GraphEvents.ON_REASONING_DELTA);
|
|
1489
|
+
if (handler) {
|
|
1490
|
+
await handler.handle(GraphEvents.ON_REASONING_DELTA, reasoningDelta, metadata, this);
|
|
1491
|
+
this.handlerDispatchedStepIds.add(stepId);
|
|
1492
|
+
}
|
|
1493
|
+
const unmarkHandlerDispatchedEvent = handler
|
|
1494
|
+
? this.markHandlerDispatchedEvent(GraphEvents.ON_REASONING_DELTA, stepId)
|
|
1495
|
+
: undefined;
|
|
1496
|
+
try {
|
|
1497
|
+
await safeDispatchCustomEvent(GraphEvents.ON_REASONING_DELTA, reasoningDelta, this.config);
|
|
1498
|
+
}
|
|
1499
|
+
finally {
|
|
1500
|
+
unmarkHandlerDispatchedEvent?.();
|
|
1501
|
+
}
|
|
1387
1502
|
};
|
|
1388
1503
|
}
|
|
1389
1504
|
|