@librechat/agents 3.4.2 → 3.4.4
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/cjs/graphs/Graph.cjs +27 -14
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +1 -1
- package/dist/cjs/instrumentation.cjs +3 -3
- package/dist/cjs/langfuse.cjs +3 -3
- package/dist/cjs/langfuseRuntimeScope.cjs +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
- package/dist/cjs/main.cjs +5 -1
- package/dist/cjs/messages/assistantPhase.cjs +59 -0
- package/dist/cjs/messages/assistantPhase.cjs.map +1 -0
- package/dist/cjs/messages/index.cjs +1 -0
- package/dist/cjs/prompts/activityLabel.cjs +76 -0
- package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
- package/dist/cjs/run.cjs +200 -10
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +1 -1
- package/dist/cjs/stream.cjs +45 -8
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +3 -3
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +81 -6
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs +8 -0
- package/dist/cjs/utils/callbacks.cjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +27 -14
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +1 -1
- package/dist/esm/instrumentation.mjs +3 -3
- package/dist/esm/langfuse.mjs +3 -3
- package/dist/esm/langfuseRuntimeScope.mjs +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
- package/dist/esm/main.mjs +3 -2
- package/dist/esm/messages/assistantPhase.mjs +57 -0
- package/dist/esm/messages/assistantPhase.mjs.map +1 -0
- package/dist/esm/messages/index.mjs +1 -0
- package/dist/esm/prompts/activityLabel.mjs +74 -1
- package/dist/esm/prompts/activityLabel.mjs.map +1 -1
- package/dist/esm/run.mjs +202 -12
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +1 -1
- package/dist/esm/stream.mjs +45 -8
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +3 -3
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +81 -6
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs +8 -1
- package/dist/esm/utils/callbacks.mjs.map +1 -1
- package/dist/types/messages/assistantPhase.d.ts +22 -0
- package/dist/types/messages/index.d.ts +1 -0
- package/dist/types/prompts/activityLabel.d.ts +21 -1
- package/dist/types/run.d.ts +15 -2
- package/dist/types/types/activityLabel.d.ts +63 -0
- package/dist/types/types/assistantPhase.d.ts +6 -0
- package/dist/types/types/graph.d.ts +8 -1
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/stream.d.ts +11 -0
- package/dist/types/utils/callbacks.d.ts +1 -0
- package/package.json +3 -3
- package/src/graphs/Graph.ts +33 -9
- package/src/graphs/__tests__/Graph.reasoning.test.ts +57 -0
- package/src/messages/assistantPhase.test.ts +75 -0
- package/src/messages/assistantPhase.ts +91 -0
- package/src/messages/index.ts +1 -0
- package/src/prompts/activityLabel.ts +177 -1
- package/src/run.ts +403 -21
- package/src/specs/activity-label-prompt.test.ts +123 -1
- package/src/specs/activity-phase-label.test.ts +306 -0
- package/src/stream.ts +69 -12
- package/src/tools/__tests__/SubagentExecutor.test.ts +436 -0
- package/src/tools/subagent/SubagentExecutor.ts +160 -8
- package/src/types/activityLabel.ts +65 -0
- package/src/types/assistantPhase.ts +6 -0
- package/src/types/graph.ts +8 -0
- package/src/types/index.ts +1 -0
- package/src/types/stream.ts +9 -0
- package/src/utils/callbacks.ts +21 -0
|
@@ -10,8 +10,16 @@ function findCallback(callbacks, predicate) {
|
|
|
10
10
|
if (callbacks == null) return;
|
|
11
11
|
return (Array.isArray(callbacks) ? callbacks : callbacks.handlers).find(predicate);
|
|
12
12
|
}
|
|
13
|
+
function filterCallbacks(callbacks, predicate) {
|
|
14
|
+
if (callbacks == null) return [];
|
|
15
|
+
if (Array.isArray(callbacks)) return callbacks.filter(predicate);
|
|
16
|
+
const filtered = callbacks.copy();
|
|
17
|
+
for (const handler of [...filtered.handlers]) if (!predicate(handler)) filtered.removeHandler(handler);
|
|
18
|
+
return filtered;
|
|
19
|
+
}
|
|
13
20
|
//#endregion
|
|
14
21
|
exports.appendCallbacks = appendCallbacks;
|
|
22
|
+
exports.filterCallbacks = filterCallbacks;
|
|
15
23
|
exports.findCallback = findCallback;
|
|
16
24
|
|
|
17
25
|
//# sourceMappingURL=callbacks.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.cjs","names":["ensureHandler"],"sources":["../../../src/utils/callbacks.ts"],"sourcesContent":["import { ensureHandler } from '@langchain/core/callbacks/manager';\nimport type {\n BaseCallbackHandler,\n CallbackHandlerMethods,\n} from '@langchain/core/callbacks/base';\nimport type { Callbacks } from '@langchain/core/callbacks/manager';\n\nexport type CallbackEntry = BaseCallbackHandler | CallbackHandlerMethods;\n\nexport function appendCallbacks(\n callbacks: Callbacks | undefined,\n additions: readonly CallbackEntry[]\n): Callbacks {\n if (additions.length === 0) {\n return callbacks ?? [];\n }\n\n if (callbacks == null) {\n return [...additions];\n }\n\n if (Array.isArray(callbacks)) {\n return callbacks.concat(additions);\n }\n\n return callbacks.copy(additions.map(ensureHandler));\n}\n\nexport function findCallback(\n callbacks: Callbacks | undefined,\n predicate: (callback: CallbackEntry) => boolean\n): CallbackEntry | undefined {\n if (callbacks == null) {\n return undefined;\n }\n\n const handlers = Array.isArray(callbacks) ? callbacks : callbacks.handlers;\n return handlers.find(predicate);\n}\n"],"mappings":";;AASA,SAAgB,gBACd,WACA,WACW;CACX,IAAI,UAAU,WAAW,GACvB,OAAO,aAAa,CAAC;CAGvB,IAAI,aAAa,MACf,OAAO,CAAC,GAAG,SAAS;CAGtB,IAAI,MAAM,QAAQ,SAAS,GACzB,OAAO,UAAU,OAAO,SAAS;CAGnC,OAAO,UAAU,KAAK,UAAU,IAAIA,kCAAAA,aAAa,CAAC;AACpD;AAEA,SAAgB,aACd,WACA,WAC2B;CAC3B,IAAI,aAAa,MACf;CAIF,QADiB,MAAM,QAAQ,SAAS,IAAI,YAAY,UAAU,SAAA,CAClD,KAAK,SAAS;AAChC"}
|
|
1
|
+
{"version":3,"file":"callbacks.cjs","names":["ensureHandler"],"sources":["../../../src/utils/callbacks.ts"],"sourcesContent":["import { ensureHandler } from '@langchain/core/callbacks/manager';\nimport type {\n BaseCallbackHandler,\n CallbackHandlerMethods,\n} from '@langchain/core/callbacks/base';\nimport type { Callbacks } from '@langchain/core/callbacks/manager';\n\nexport type CallbackEntry = BaseCallbackHandler | CallbackHandlerMethods;\n\nexport function appendCallbacks(\n callbacks: Callbacks | undefined,\n additions: readonly CallbackEntry[]\n): Callbacks {\n if (additions.length === 0) {\n return callbacks ?? [];\n }\n\n if (callbacks == null) {\n return [...additions];\n }\n\n if (Array.isArray(callbacks)) {\n return callbacks.concat(additions);\n }\n\n return callbacks.copy(additions.map(ensureHandler));\n}\n\nexport function findCallback(\n callbacks: Callbacks | undefined,\n predicate: (callback: CallbackEntry) => boolean\n): CallbackEntry | undefined {\n if (callbacks == null) {\n return undefined;\n }\n\n const handlers = Array.isArray(callbacks) ? callbacks : callbacks.handlers;\n return handlers.find(predicate);\n}\n\nexport function filterCallbacks(\n callbacks: Callbacks | undefined,\n predicate: (callback: CallbackEntry) => boolean\n): Callbacks {\n if (callbacks == null) {\n return [];\n }\n\n if (Array.isArray(callbacks)) {\n return callbacks.filter(predicate);\n }\n\n const filtered = callbacks.copy();\n for (const handler of [...filtered.handlers]) {\n if (!predicate(handler)) {\n filtered.removeHandler(handler);\n }\n }\n return filtered;\n}\n"],"mappings":";;AASA,SAAgB,gBACd,WACA,WACW;CACX,IAAI,UAAU,WAAW,GACvB,OAAO,aAAa,CAAC;CAGvB,IAAI,aAAa,MACf,OAAO,CAAC,GAAG,SAAS;CAGtB,IAAI,MAAM,QAAQ,SAAS,GACzB,OAAO,UAAU,OAAO,SAAS;CAGnC,OAAO,UAAU,KAAK,UAAU,IAAIA,kCAAAA,aAAa,CAAC;AACpD;AAEA,SAAgB,aACd,WACA,WAC2B;CAC3B,IAAI,aAAa,MACf;CAIF,QADiB,MAAM,QAAQ,SAAS,IAAI,YAAY,UAAU,SAAA,CAClD,KAAK,SAAS;AAChC;AAEA,SAAgB,gBACd,WACA,WACW;CACX,IAAI,aAAa,MACf,OAAO,CAAC;CAGV,IAAI,MAAM,QAAQ,SAAS,GACzB,OAAO,UAAU,OAAO,SAAS;CAGnC,MAAM,WAAW,UAAU,KAAK;CAChC,KAAK,MAAM,WAAW,CAAC,GAAG,SAAS,QAAQ,GACzC,IAAI,CAAC,UAAU,OAAO,GACpB,SAAS,cAAc,OAAO;CAGlC,OAAO;AACT"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { SUBAGENT_REPLAY_CONTROLLER } from "../tools/subagent/SubagentReplay.mjs";
|
|
2
2
|
import { composeAbortSignals } from "../utils/misc.mjs";
|
|
3
3
|
import { hasToolOutputTracingConfig, resolveLangfuseConfig, resolveToolOutputTracingConfig } from "../langfuseConfig.mjs";
|
|
4
|
-
import { resolveLangfuseRuntimeScope, withLangfuseRuntimeScope } from "../langfuseRuntimeScope.mjs";
|
|
5
|
-
import { createLangfuseHandler, createLangfuseTraceMetadata, disposeLangfuseHandler, isLangfuseCallbackHandler } from "../langfuse.mjs";
|
|
6
4
|
import { PREEMPT_BOUNDARY_HOOK_TIMEOUT_MS } from "../common/constants.mjs";
|
|
7
5
|
import { GraphNodeKeys } from "../common/enum.mjs";
|
|
8
6
|
import "../common/index.mjs";
|
|
7
|
+
import { resolveLangfuseRuntimeScope, withLangfuseRuntimeScope } from "../langfuseRuntimeScope.mjs";
|
|
9
8
|
import { shouldTraceToolNodeForLangfuse } from "../langfuseToolOutputTracing.mjs";
|
|
9
|
+
import { createLangfuseHandler, createLangfuseTraceMetadata, disposeLangfuseHandler, isLangfuseCallbackHandler } from "../langfuse.mjs";
|
|
10
10
|
import { appendCallbacks, findCallback } from "../utils/callbacks.mjs";
|
|
11
11
|
import { applyGraphRuntimeConfig } from "./applyGraphRuntimeConfig.mjs";
|
|
12
12
|
import { calculateMaxToolResultChars } from "../utils/truncation.mjs";
|
|
@@ -28,11 +28,12 @@ import { coalesceAdjacentUserTurns, strictAlternationProviders } from "../messag
|
|
|
28
28
|
import { appendPredecessorHandoffCue, removePredecessorHandoffCue } from "../messages/handoffCue.mjs";
|
|
29
29
|
import { messagesStateReducer as messagesStateReducer$1 } from "../messages/reducer.mjs";
|
|
30
30
|
import { splitAtRecencyBoundary } from "../messages/recency.mjs";
|
|
31
|
+
import { getMessageCreationContentMetadata, splitAssistantTextContentByPhase } from "../messages/assistantPhase.mjs";
|
|
31
32
|
import "../messages/index.mjs";
|
|
32
33
|
import { joinKeys, resetIfNotEmpty } from "../utils/graph.mjs";
|
|
33
34
|
import { isAnthropicLike, isGoogleLike, isOpenAILike } from "../utils/llm.mjs";
|
|
34
|
-
import { handleToolCalls } from "../tools/handlers.mjs";
|
|
35
35
|
import { RUN_BREAKER_SCOPE_CONFIG_KEY, STREAM_LIMIT_EPOCH_KEY, StreamLimitExceededError, resolveStreamLimits, sweepStaleStreamLimitEntries } from "../llm/streamLimits.mjs";
|
|
36
|
+
import { handleToolCalls } from "../tools/handlers.mjs";
|
|
36
37
|
import { ToolOutputReferenceRegistry, annotateMessagesForLLM } from "../tools/toolOutputReferences.mjs";
|
|
37
38
|
import { HandlerRegistry } from "../events.mjs";
|
|
38
39
|
import { sleep } from "../utils/run.mjs";
|
|
@@ -62,8 +63,8 @@ import { createSchemaOnlyTools } from "../tools/schema.mjs";
|
|
|
62
63
|
import { AgentContext } from "../agents/AgentContext.mjs";
|
|
63
64
|
import { createFakeStreamingLLM } from "../llm/fake.mjs";
|
|
64
65
|
import { nanoid } from "nanoid";
|
|
65
|
-
import { AIMessageChunk, HumanMessage, ToolMessage } from "@langchain/core/messages";
|
|
66
66
|
import { Annotation, END, START, StateGraph } from "@langchain/langgraph";
|
|
67
|
+
import { AIMessageChunk, HumanMessage, ToolMessage } from "@langchain/core/messages";
|
|
67
68
|
import { tool } from "@langchain/core/tools";
|
|
68
69
|
import { v4 } from "uuid";
|
|
69
70
|
import { ContextOverflowError } from "@langchain/core/errors";
|
|
@@ -199,10 +200,13 @@ function minDefined(left, right) {
|
|
|
199
200
|
if (right == null) return left;
|
|
200
201
|
return Math.min(left, right);
|
|
201
202
|
}
|
|
202
|
-
async function dispatchMessageCreationStep({ graph, stepKey, messageId, metadata }) {
|
|
203
|
+
async function dispatchMessageCreationStep({ graph, stepKey, messageId, content, contentType, metadata }) {
|
|
203
204
|
await graph.dispatchRunStep(stepKey, {
|
|
204
205
|
type: "message_creation",
|
|
205
|
-
message_creation: {
|
|
206
|
+
message_creation: {
|
|
207
|
+
message_id: messageId,
|
|
208
|
+
...getMessageCreationContentMetadata(content, contentType)
|
|
209
|
+
}
|
|
206
210
|
}, metadata);
|
|
207
211
|
return graph.getStepIdByKey(stepKey);
|
|
208
212
|
}
|
|
@@ -215,19 +219,25 @@ async function dispatchTextMessageContent({ graph, stepKey, provider, content, m
|
|
|
215
219
|
graph,
|
|
216
220
|
stepKey,
|
|
217
221
|
messageId,
|
|
222
|
+
content: [contentPart],
|
|
218
223
|
metadata
|
|
219
224
|
});
|
|
220
225
|
await graph.dispatchMessageDelta(stepId, { content: [contentPart] }, metadata);
|
|
221
226
|
}
|
|
222
227
|
return true;
|
|
223
228
|
}
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
229
|
+
const contentGroups = Array.isArray(content) ? splitAssistantTextContentByPhase(content) : [content];
|
|
230
|
+
for (const contentGroup of contentGroups) {
|
|
231
|
+
const stepId = await dispatchMessageCreationStep({
|
|
232
|
+
graph,
|
|
233
|
+
stepKey,
|
|
234
|
+
messageId,
|
|
235
|
+
content: contentGroup,
|
|
236
|
+
contentType: "text",
|
|
237
|
+
metadata
|
|
238
|
+
});
|
|
239
|
+
await graph.dispatchMessageDelta(stepId, { content: contentGroup }, metadata);
|
|
240
|
+
}
|
|
231
241
|
return true;
|
|
232
242
|
}
|
|
233
243
|
async function dispatchReasoningContent({ graph, agentContext, reasoningContent, metadata }) {
|
|
@@ -246,7 +256,10 @@ async function dispatchReasoningContent({ graph, agentContext, reasoningContent,
|
|
|
246
256
|
}
|
|
247
257
|
await graph.dispatchRunStep(stepKey, {
|
|
248
258
|
type: "message_creation",
|
|
249
|
-
message_creation: {
|
|
259
|
+
message_creation: {
|
|
260
|
+
message_id: messageId,
|
|
261
|
+
content_type: "think"
|
|
262
|
+
}
|
|
250
263
|
}, metadata);
|
|
251
264
|
const stepId = graph.getStepIdByKey(stepKey);
|
|
252
265
|
await graph.dispatchReasoningDelta(stepId, { content: [{
|