@librechat/agents 3.1.96 → 3.1.98

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 (81) hide show
  1. package/dist/cjs/graphs/Graph.cjs +60 -21
  2. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  3. package/dist/cjs/instrumentation.cjs +120 -9
  4. package/dist/cjs/instrumentation.cjs.map +1 -1
  5. package/dist/cjs/langfuse.cjs +30 -226
  6. package/dist/cjs/langfuse.cjs.map +1 -1
  7. package/dist/cjs/langfuseToolOutputTracing.cjs +476 -0
  8. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -0
  9. package/dist/cjs/llm/bedrock/index.cjs +10 -0
  10. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  11. package/dist/cjs/llm/bedrock/toolCache.cjs +125 -0
  12. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -0
  13. package/dist/cjs/messages/cache.cjs +17 -9
  14. package/dist/cjs/messages/cache.cjs.map +1 -1
  15. package/dist/cjs/run.cjs +142 -69
  16. package/dist/cjs/run.cjs.map +1 -1
  17. package/dist/cjs/tools/ToolNode.cjs +26 -9
  18. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  19. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +10 -6
  20. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  21. package/dist/esm/graphs/Graph.mjs +62 -23
  22. package/dist/esm/graphs/Graph.mjs.map +1 -1
  23. package/dist/esm/instrumentation.mjs +118 -9
  24. package/dist/esm/instrumentation.mjs.map +1 -1
  25. package/dist/esm/langfuse.mjs +28 -224
  26. package/dist/esm/langfuse.mjs.map +1 -1
  27. package/dist/esm/langfuseToolOutputTracing.mjs +468 -0
  28. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -0
  29. package/dist/esm/llm/bedrock/index.mjs +10 -0
  30. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  31. package/dist/esm/llm/bedrock/toolCache.mjs +122 -0
  32. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -0
  33. package/dist/esm/messages/cache.mjs +17 -9
  34. package/dist/esm/messages/cache.mjs.map +1 -1
  35. package/dist/esm/run.mjs +144 -71
  36. package/dist/esm/run.mjs.map +1 -1
  37. package/dist/esm/tools/ToolNode.mjs +26 -9
  38. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  39. package/dist/esm/tools/subagent/SubagentExecutor.mjs +10 -6
  40. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  41. package/dist/types/graphs/Graph.d.ts +5 -1
  42. package/dist/types/instrumentation.d.ts +5 -1
  43. package/dist/types/langfuse.d.ts +6 -28
  44. package/dist/types/langfuseToolOutputTracing.d.ts +20 -0
  45. package/dist/types/llm/bedrock/index.d.ts +16 -0
  46. package/dist/types/llm/bedrock/toolCache.d.ts +4 -0
  47. package/dist/types/messages/cache.d.ts +2 -2
  48. package/dist/types/run.d.ts +5 -1
  49. package/dist/types/tools/ToolNode.d.ts +4 -1
  50. package/dist/types/tools/subagent/SubagentExecutor.d.ts +2 -0
  51. package/dist/types/types/graph.d.ts +30 -0
  52. package/dist/types/types/llm.d.ts +2 -2
  53. package/dist/types/types/run.d.ts +6 -0
  54. package/dist/types/types/tools.d.ts +7 -0
  55. package/package.json +2 -1
  56. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +332 -0
  57. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +504 -0
  58. package/src/graphs/Graph.ts +104 -34
  59. package/src/instrumentation.ts +172 -11
  60. package/src/langfuse.ts +59 -324
  61. package/src/langfuseToolOutputTracing.ts +702 -0
  62. package/src/llm/bedrock/index.ts +32 -1
  63. package/src/llm/bedrock/llm.spec.ts +154 -1
  64. package/src/llm/bedrock/toolCache.test.ts +131 -0
  65. package/src/llm/bedrock/toolCache.ts +191 -0
  66. package/src/messages/cache.test.ts +97 -38
  67. package/src/messages/cache.ts +18 -10
  68. package/src/run.ts +190 -87
  69. package/src/specs/langfuse-callbacks.test.ts +178 -1
  70. package/src/specs/langfuse-config.test.ts +112 -76
  71. package/src/specs/langfuse-instrumentation.test.ts +283 -0
  72. package/src/specs/langfuse-metadata.test.ts +54 -1
  73. package/src/specs/langfuse-tool-output-tracing.test.ts +616 -0
  74. package/src/tools/ToolNode.ts +35 -8
  75. package/src/tools/__tests__/SubagentExecutor.test.ts +32 -0
  76. package/src/tools/__tests__/ToolNode.langfuse.test.ts +47 -0
  77. package/src/tools/subagent/SubagentExecutor.ts +11 -6
  78. package/src/types/graph.ts +32 -0
  79. package/src/types/llm.ts +2 -2
  80. package/src/types/run.ts +6 -0
  81. package/src/types/tools.ts +7 -0
@@ -54,7 +54,10 @@ var CloudflareSandboxTools = require('../tools/cloudflare/CloudflareSandboxTools
54
54
  var request = require('../llm/request.cjs');
55
55
  var init = require('../llm/init.cjs');
56
56
  var langfuse = require('../langfuse.cjs');
57
+ var instrumentation = require('../instrumentation.cjs');
58
+ var langfuseToolOutputTracing = require('../langfuseToolOutputTracing.cjs');
57
59
  var toolCache = require('../llm/openrouter/toolCache.cjs');
60
+ var toolCache$1 = require('../llm/bedrock/toolCache.cjs');
58
61
 
59
62
  /* eslint-disable no-console */
60
63
  const { AGENT, TOOLS, SUMMARIZE } = _enum.GraphNodeKeys;
@@ -105,6 +108,10 @@ class Graph {
105
108
  * graph compiles.
106
109
  */
107
110
  toolOutputReferences;
111
+ /**
112
+ * Run-scoped Langfuse defaults. Per-agent config wins when present.
113
+ */
114
+ langfuse;
108
115
  /**
109
116
  * Run-scoped opt-in for eager event-driven tool execution. The stream
110
117
  * handler may prestart eligible event-driven tools; ToolNode later
@@ -325,10 +332,11 @@ class StandardGraph extends Graph {
325
332
  agentContexts = new Map();
326
333
  /** Default agent ID to use */
327
334
  defaultAgentId;
328
- constructor({ runId, signal, agents, tokenCounter, indexTokenCountMap, calibrationRatio, }) {
335
+ constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, }) {
329
336
  super();
330
337
  this.runId = runId;
331
338
  this.signal = signal;
339
+ this.langfuse = langfuse;
332
340
  if (agents.length === 0) {
333
341
  throw new Error('At least one agent configuration is required');
334
342
  }
@@ -559,6 +567,10 @@ class StandardGraph extends Graph {
559
567
  initializeTools({ currentTools, currentToolMap, agentContext, }) {
560
568
  const toolDefinitions = agentContext?.toolDefinitions;
561
569
  const eventDrivenMode = toolDefinitions != null && toolDefinitions.length > 0;
570
+ const traceToolNode = langfuseToolOutputTracing.shouldTraceToolNodeForLangfuse({
571
+ runLangfuse: this.langfuse,
572
+ agentLangfuse: agentContext?.langfuse,
573
+ });
562
574
  if (eventDrivenMode) {
563
575
  const schemaTools = schema.createSchemaOnlyTools(toolDefinitions);
564
576
  const toolDefMap = new Map(toolDefinitions.map((def) => [def.name, def]));
@@ -578,6 +590,9 @@ class StandardGraph extends Graph {
578
590
  const node = new ToolNode.ToolNode({
579
591
  tools: allTools,
580
592
  toolMap: allToolMap,
593
+ trace: traceToolNode,
594
+ runLangfuse: this.langfuse,
595
+ agentLangfuse: agentContext?.langfuse,
581
596
  eventDrivenMode: true,
582
597
  sessions: this.sessions,
583
598
  toolDefinitions: toolDefMap,
@@ -616,6 +631,9 @@ class StandardGraph extends Graph {
616
631
  const node = new ToolNode.ToolNode({
617
632
  tools: allTraditionalTools,
618
633
  toolMap: traditionalToolMap,
634
+ trace: traceToolNode,
635
+ runLangfuse: this.langfuse,
636
+ agentLangfuse: agentContext?.langfuse,
619
637
  toolCallStepIds: this.toolCallStepIds,
620
638
  errorHandler: (data, metadata) => StandardGraph.handleToolCallErrorStatic(this, data, metadata),
621
639
  toolRegistry: agentContext?.toolRegistry,
@@ -703,6 +721,11 @@ class StandardGraph extends Graph {
703
721
  toolsForBinding =
704
722
  toolCache.partitionAndMarkOpenRouterToolCache(rawToolsForBinding, anthropicToolCache.makeIsDeferred(agentContext.toolDefinitions)) ?? rawToolsForBinding;
705
723
  }
724
+ else if (agentContext.provider === _enum.Providers.BEDROCK &&
725
+ agentContext.clientOptions?.promptCache === true) {
726
+ toolsForBinding =
727
+ toolCache$1.partitionAndMarkBedrockToolCache(rawToolsForBinding, anthropicToolCache.makeIsDeferred(agentContext.toolDefinitions)) ?? rawToolsForBinding;
728
+ }
706
729
  let model = this.overrideModel ??
707
730
  init.initializeModel({
708
731
  tools: toolsForBinding,
@@ -975,41 +998,56 @@ class StandardGraph extends Graph {
975
998
  messageCount: finalMessages.length,
976
999
  provider: agentContext.provider,
977
1000
  }, invokeMeta, { force: true });
978
- const langfuseHandler = langfuse.createLangfuseHandler({
979
- langfuse: agentContext.langfuse,
980
- userId: config.configurable?.user_id,
981
- sessionId: config.configurable?.thread_id,
982
- traceMetadata: langfuse.createLangfuseTraceMetadata({
983
- messageId: this.runId,
984
- parentMessageId: config.configurable?.requestBody?.parentMessageId,
985
- agentId,
986
- agentName: agentContext.name,
987
- }),
988
- tags: ['librechat', 'agent'],
1001
+ const langfuse$1 = langfuseToolOutputTracing.resolveLangfuseConfig(this.langfuse, agentContext.langfuse);
1002
+ const traceMetadata = langfuse.createLangfuseTraceMetadata({
1003
+ messageId: this.runId,
1004
+ parentMessageId: config.configurable?.requestBody?.parentMessageId,
1005
+ agentId,
1006
+ agentName: agentContext.name,
989
1007
  });
990
- const invokeConfig = langfuseHandler
991
- ? {
992
- ...config,
993
- callbacks: callbacks.appendCallbacks(config.callbacks, [langfuseHandler]),
1008
+ let langfuseHandler;
1009
+ let invokeConfig = {
1010
+ ...config,
1011
+ metadata: {
1012
+ ...(config.metadata ?? {}),
1013
+ ...traceMetadata,
1014
+ },
1015
+ };
1016
+ instrumentation.initializeLangfuseTracing(langfuse$1);
1017
+ if (callbacks.findCallback(config.callbacks, langfuse.isLangfuseCallbackHandler) == null) {
1018
+ langfuseHandler = langfuse.createLangfuseHandler({
1019
+ langfuse: langfuse$1,
1020
+ userId: config.configurable?.user_id,
1021
+ sessionId: config.configurable?.thread_id,
1022
+ traceMetadata,
1023
+ tags: ['librechat', 'agent'],
1024
+ });
1025
+ if (langfuseHandler != null) {
1026
+ invokeConfig = {
1027
+ ...invokeConfig,
1028
+ callbacks: callbacks.appendCallbacks(invokeConfig.callbacks, [
1029
+ langfuseHandler,
1030
+ ]),
1031
+ };
994
1032
  }
995
- : config;
1033
+ }
996
1034
  try {
997
- result = await invoke.attemptInvoke({
1035
+ result = await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invoke.attemptInvoke({
998
1036
  model: (this.overrideModel ?? model),
999
1037
  messages: finalMessages,
1000
1038
  provider: agentContext.provider,
1001
1039
  context: this,
1002
- }, invokeConfig);
1040
+ }, invokeConfig), agentContext.langfuse);
1003
1041
  }
1004
1042
  catch (primaryError) {
1005
- result = await invoke.tryFallbackProviders({
1043
+ result = await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invoke.tryFallbackProviders({
1006
1044
  fallbacks,
1007
1045
  tools: agentContext.tools,
1008
1046
  messages: finalMessages,
1009
1047
  config: invokeConfig,
1010
1048
  primaryError,
1011
1049
  context: this,
1012
- });
1050
+ }), agentContext.langfuse);
1013
1051
  }
1014
1052
  finally {
1015
1053
  await langfuse.disposeLangfuseHandler(langfuseHandler);
@@ -1167,6 +1205,7 @@ class StandardGraph extends Graph {
1167
1205
  parentHandlerRegistry: getParentHandlerRegistry,
1168
1206
  parentRunId: this.runId ?? '',
1169
1207
  parentAgentId: agentContext.agentId,
1208
+ langfuse: this.langfuse,
1170
1209
  tokenCounter: agentContext.tokenCounter,
1171
1210
  maxDepth: effectiveSubagentDepth,
1172
1211
  createChildGraph: (input) => {