@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.
Files changed (75) hide show
  1. package/dist/cjs/graphs/Graph.cjs +27 -14
  2. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  3. package/dist/cjs/graphs/MultiAgentGraph.cjs +1 -1
  4. package/dist/cjs/instrumentation.cjs +3 -3
  5. package/dist/cjs/langfuse.cjs +3 -3
  6. package/dist/cjs/langfuseRuntimeScope.cjs +1 -1
  7. package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
  8. package/dist/cjs/main.cjs +5 -1
  9. package/dist/cjs/messages/assistantPhase.cjs +59 -0
  10. package/dist/cjs/messages/assistantPhase.cjs.map +1 -0
  11. package/dist/cjs/messages/index.cjs +1 -0
  12. package/dist/cjs/prompts/activityLabel.cjs +76 -0
  13. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  14. package/dist/cjs/run.cjs +200 -10
  15. package/dist/cjs/run.cjs.map +1 -1
  16. package/dist/cjs/session/AgentSession.cjs +1 -1
  17. package/dist/cjs/stream.cjs +45 -8
  18. package/dist/cjs/stream.cjs.map +1 -1
  19. package/dist/cjs/tools/ToolNode.cjs +3 -3
  20. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +81 -6
  21. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  22. package/dist/cjs/utils/callbacks.cjs +8 -0
  23. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  24. package/dist/esm/graphs/Graph.mjs +27 -14
  25. package/dist/esm/graphs/Graph.mjs.map +1 -1
  26. package/dist/esm/graphs/MultiAgentGraph.mjs +1 -1
  27. package/dist/esm/instrumentation.mjs +3 -3
  28. package/dist/esm/langfuse.mjs +3 -3
  29. package/dist/esm/langfuseRuntimeScope.mjs +1 -1
  30. package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
  31. package/dist/esm/main.mjs +3 -2
  32. package/dist/esm/messages/assistantPhase.mjs +57 -0
  33. package/dist/esm/messages/assistantPhase.mjs.map +1 -0
  34. package/dist/esm/messages/index.mjs +1 -0
  35. package/dist/esm/prompts/activityLabel.mjs +74 -1
  36. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  37. package/dist/esm/run.mjs +202 -12
  38. package/dist/esm/run.mjs.map +1 -1
  39. package/dist/esm/session/AgentSession.mjs +1 -1
  40. package/dist/esm/stream.mjs +45 -8
  41. package/dist/esm/stream.mjs.map +1 -1
  42. package/dist/esm/tools/ToolNode.mjs +3 -3
  43. package/dist/esm/tools/subagent/SubagentExecutor.mjs +81 -6
  44. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  45. package/dist/esm/utils/callbacks.mjs +8 -1
  46. package/dist/esm/utils/callbacks.mjs.map +1 -1
  47. package/dist/types/messages/assistantPhase.d.ts +22 -0
  48. package/dist/types/messages/index.d.ts +1 -0
  49. package/dist/types/prompts/activityLabel.d.ts +21 -1
  50. package/dist/types/run.d.ts +15 -2
  51. package/dist/types/types/activityLabel.d.ts +63 -0
  52. package/dist/types/types/assistantPhase.d.ts +6 -0
  53. package/dist/types/types/graph.d.ts +8 -1
  54. package/dist/types/types/index.d.ts +1 -0
  55. package/dist/types/types/stream.d.ts +11 -0
  56. package/dist/types/utils/callbacks.d.ts +1 -0
  57. package/package.json +3 -3
  58. package/src/graphs/Graph.ts +33 -9
  59. package/src/graphs/__tests__/Graph.reasoning.test.ts +57 -0
  60. package/src/messages/assistantPhase.test.ts +75 -0
  61. package/src/messages/assistantPhase.ts +91 -0
  62. package/src/messages/index.ts +1 -0
  63. package/src/prompts/activityLabel.ts +177 -1
  64. package/src/run.ts +403 -21
  65. package/src/specs/activity-label-prompt.test.ts +123 -1
  66. package/src/specs/activity-phase-label.test.ts +306 -0
  67. package/src/stream.ts +69 -12
  68. package/src/tools/__tests__/SubagentExecutor.test.ts +436 -0
  69. package/src/tools/subagent/SubagentExecutor.ts +160 -8
  70. package/src/types/activityLabel.ts +65 -0
  71. package/src/types/assistantPhase.ts +6 -0
  72. package/src/types/graph.ts +8 -0
  73. package/src/types/index.ts +1 -0
  74. package/src/types/stream.ts +9 -0
  75. 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: { message_id: messageId }
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 stepId = await dispatchMessageCreationStep({
225
- graph,
226
- stepKey,
227
- messageId,
228
- metadata
229
- });
230
- await graph.dispatchMessageDelta(stepId, { content }, metadata);
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: { message_id: messageId }
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: [{