@librechat/agents 3.7.15 → 3.7.17

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 (125) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +91 -0
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/agents/projection.cjs +2 -1
  4. package/dist/cjs/agents/projection.cjs.map +1 -1
  5. package/dist/cjs/graphs/Graph.cjs +47 -6
  6. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  7. package/dist/cjs/graphs/MultiAgentGraph.cjs +20 -7
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  9. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -1
  10. package/dist/cjs/llm/openai/utils/index.cjs +1 -1
  11. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  12. package/dist/cjs/llm/preempt.cjs +1 -10
  13. package/dist/cjs/llm/preempt.cjs.map +1 -1
  14. package/dist/cjs/main.cjs +23 -3
  15. package/dist/cjs/messages/contextPruning.cjs +1 -1
  16. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  17. package/dist/cjs/messages/core.cjs +29 -1
  18. package/dist/cjs/messages/core.cjs.map +1 -1
  19. package/dist/cjs/messages/fading.cjs +122 -0
  20. package/dist/cjs/messages/fading.cjs.map +1 -0
  21. package/dist/cjs/messages/format.cjs +1 -1
  22. package/dist/cjs/messages/index.cjs +1 -0
  23. package/dist/cjs/messages/prune.cjs +364 -236
  24. package/dist/cjs/messages/prune.cjs.map +1 -1
  25. package/dist/cjs/run.cjs +27 -0
  26. package/dist/cjs/run.cjs.map +1 -1
  27. package/dist/cjs/session/AgentSession.cjs +213 -8
  28. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  29. package/dist/cjs/session/JsonlSessionStore.cjs +41 -0
  30. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  31. package/dist/cjs/session/index.cjs +1 -1
  32. package/dist/cjs/stream.cjs +1 -1
  33. package/dist/cjs/summarization/node.cjs +1 -1
  34. package/dist/cjs/tools/ToolNode.cjs +1 -1
  35. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +2 -0
  36. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  37. package/dist/cjs/tools/subagent/SubagentReplay.cjs +2 -1
  38. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  39. package/dist/cjs/utils/errors.cjs +3 -1
  40. package/dist/cjs/utils/errors.cjs.map +1 -1
  41. package/dist/cjs/utils/index.cjs +1 -1
  42. package/dist/cjs/utils/truncation.cjs +9 -0
  43. package/dist/cjs/utils/truncation.cjs.map +1 -1
  44. package/dist/esm/agents/AgentContext.mjs +92 -1
  45. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  46. package/dist/esm/agents/projection.mjs +2 -1
  47. package/dist/esm/agents/projection.mjs.map +1 -1
  48. package/dist/esm/graphs/Graph.mjs +47 -6
  49. package/dist/esm/graphs/Graph.mjs.map +1 -1
  50. package/dist/esm/graphs/MultiAgentGraph.mjs +20 -7
  51. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  52. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -1
  53. package/dist/esm/llm/openai/utils/index.mjs +2 -2
  54. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  55. package/dist/esm/llm/preempt.mjs +1 -10
  56. package/dist/esm/llm/preempt.mjs.map +1 -1
  57. package/dist/esm/main.mjs +6 -5
  58. package/dist/esm/messages/contextPruning.mjs +1 -1
  59. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  60. package/dist/esm/messages/core.mjs +29 -2
  61. package/dist/esm/messages/core.mjs.map +1 -1
  62. package/dist/esm/messages/fading.mjs +108 -0
  63. package/dist/esm/messages/fading.mjs.map +1 -0
  64. package/dist/esm/messages/format.mjs +1 -1
  65. package/dist/esm/messages/index.mjs +1 -0
  66. package/dist/esm/messages/prune.mjs +363 -235
  67. package/dist/esm/messages/prune.mjs.map +1 -1
  68. package/dist/esm/run.mjs +27 -0
  69. package/dist/esm/run.mjs.map +1 -1
  70. package/dist/esm/session/AgentSession.mjs +213 -8
  71. package/dist/esm/session/AgentSession.mjs.map +1 -1
  72. package/dist/esm/session/JsonlSessionStore.mjs +41 -0
  73. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  74. package/dist/esm/session/index.mjs +1 -1
  75. package/dist/esm/stream.mjs +1 -1
  76. package/dist/esm/summarization/node.mjs +1 -1
  77. package/dist/esm/tools/ToolNode.mjs +1 -1
  78. package/dist/esm/tools/subagent/SubagentExecutor.mjs +2 -0
  79. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  80. package/dist/esm/tools/subagent/SubagentReplay.mjs +2 -1
  81. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  82. package/dist/esm/utils/errors.mjs +3 -1
  83. package/dist/esm/utils/errors.mjs.map +1 -1
  84. package/dist/esm/utils/index.mjs +1 -1
  85. package/dist/esm/utils/truncation.mjs +7 -1
  86. package/dist/esm/utils/truncation.mjs.map +1 -1
  87. package/dist/types/agents/AgentContext.d.ts +32 -1
  88. package/dist/types/agents/projection.d.ts +3 -1
  89. package/dist/types/graphs/Graph.d.ts +14 -1
  90. package/dist/types/graphs/MultiAgentGraph.d.ts +7 -0
  91. package/dist/types/messages/contextPruning.d.ts +2 -0
  92. package/dist/types/messages/core.d.ts +2 -0
  93. package/dist/types/messages/fading.d.ts +81 -0
  94. package/dist/types/messages/index.d.ts +1 -0
  95. package/dist/types/messages/prune.d.ts +71 -24
  96. package/dist/types/run.d.ts +16 -0
  97. package/dist/types/session/AgentSession.d.ts +15 -0
  98. package/dist/types/session/JsonlSessionStore.d.ts +4 -1
  99. package/dist/types/session/types.d.ts +9 -0
  100. package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -1
  101. package/dist/types/types/graph.d.ts +23 -0
  102. package/dist/types/types/run.d.ts +10 -0
  103. package/dist/types/utils/truncation.d.ts +9 -0
  104. package/package.json +1 -1
  105. package/src/agents/AgentContext.ts +175 -1
  106. package/src/agents/projection.ts +4 -0
  107. package/src/graphs/Graph.ts +97 -11
  108. package/src/graphs/MultiAgentGraph.ts +54 -6
  109. package/src/llm/openai/utils/index.ts +3 -1
  110. package/src/llm/preempt.ts +4 -17
  111. package/src/messages/contextPruning.ts +7 -1
  112. package/src/messages/core.ts +52 -0
  113. package/src/messages/fading.ts +301 -0
  114. package/src/messages/index.ts +1 -0
  115. package/src/messages/prune.ts +719 -507
  116. package/src/run.ts +52 -0
  117. package/src/session/AgentSession.ts +397 -8
  118. package/src/session/JsonlSessionStore.ts +71 -0
  119. package/src/session/types.ts +10 -0
  120. package/src/tools/subagent/SubagentExecutor.ts +6 -0
  121. package/src/tools/subagent/SubagentReplay.ts +15 -2
  122. package/src/types/graph.ts +25 -0
  123. package/src/types/run.ts +10 -0
  124. package/src/utils/errors.ts +17 -1
  125. package/src/utils/truncation.ts +25 -0
@@ -0,0 +1,108 @@
1
+ import { calculateMaxToolCallInputChars, calculateMaxToolResultChars } from "../utils/truncation.mjs";
2
+ //#region src/messages/fading.ts
3
+ const FADING_TIER_VERSION = 1;
4
+ const PRESSURE_THRESHOLD_MASKING = .8;
5
+ const FADING_MIN_BUDGET_TOKENS = 170;
6
+ const MASKED_RESULT_MIN_CHARS = 300;
7
+ const MASKED_RESULT_CAP_RATIO = .1;
8
+ const PRESSURE_BAND_RUNGS = [
9
+ [.99, 4],
10
+ [.9, 2],
11
+ [.85, 1]
12
+ ];
13
+ function floorBudgetTokens(window) {
14
+ return Math.min(170, window);
15
+ }
16
+ function createFadingTier(window) {
17
+ return {
18
+ v: 1,
19
+ budgetTokens: window,
20
+ masked: false
21
+ };
22
+ }
23
+ function isFadingTier(value) {
24
+ if (typeof value !== "object" || value === null) return false;
25
+ const { v, budgetTokens, masked, latched } = value;
26
+ return v === 1 && typeof budgetTokens === "number" && Number.isFinite(budgetTokens) && budgetTokens > 0 && typeof masked === "boolean" && (latched === void 0 || latched === true);
27
+ }
28
+ function maxFadingRung(window) {
29
+ const floor = floorBudgetTokens(window);
30
+ if (!(floor > 0)) return 0;
31
+ return Math.max(0, Math.ceil(Math.log2(window / floor)));
32
+ }
33
+ function fadingBudgetTokens(window, rung) {
34
+ return Math.max(floorBudgetTokens(window), Math.floor(window / 2 ** rung));
35
+ }
36
+ function seedFadingTier(window, seed) {
37
+ if (!isFadingTier(seed)) return createFadingTier(window);
38
+ const budgetTokens = Math.max(floorBudgetTokens(window), Math.min(seed.budgetTokens, window));
39
+ if (!(seed.latched === true || seed.masked || budgetTokens !== seed.budgetTokens || budgetTokens < window)) return createFadingTier(window);
40
+ return {
41
+ v: 1,
42
+ budgetTokens,
43
+ masked: seed.masked,
44
+ latched: true
45
+ };
46
+ }
47
+ function fadingRungForResultChars(window, targetChars, maxToolResultChars) {
48
+ const deepest = maxFadingRung(window);
49
+ for (let rung = 0; rung < deepest; rung++) {
50
+ const windowResultChars = calculateMaxToolResultChars(fadingBudgetTokens(window, rung));
51
+ if ((maxToolResultChars == null ? windowResultChars : Math.min(windowResultChars, maxToolResultChars)) <= targetChars) return rung;
52
+ }
53
+ return deepest;
54
+ }
55
+ function fadingRungForBudget(window, rawTokens, maxToolResultChars, toolExchangeWidth = 1) {
56
+ if (!(rawTokens > 0)) return 0;
57
+ const targetChars = Math.floor(rawTokens) * 4;
58
+ const width = Math.max(1, Math.floor(toolExchangeWidth));
59
+ const deepest = maxFadingRung(window);
60
+ for (let rung = 0; rung < deepest; rung++) {
61
+ const budgetTokens = fadingBudgetTokens(window, rung);
62
+ const windowResultChars = calculateMaxToolResultChars(budgetTokens);
63
+ if (width * ((maxToolResultChars == null ? windowResultChars : Math.min(windowResultChars, maxToolResultChars)) + calculateMaxToolCallInputChars(budgetTokens)) <= targetChars) return rung;
64
+ }
65
+ return deepest;
66
+ }
67
+ function fadingRungForExchangeChars(window, targetChars, maxToolResultChars) {
68
+ const deepest = maxFadingRung(window);
69
+ for (let rung = 0; rung < deepest; rung++) {
70
+ const budgetTokens = fadingBudgetTokens(window, rung);
71
+ const windowResultChars = calculateMaxToolResultChars(budgetTokens);
72
+ if ((maxToolResultChars == null ? windowResultChars : Math.min(windowResultChars, maxToolResultChars)) + calculateMaxToolCallInputChars(budgetTokens) <= targetChars) return rung;
73
+ }
74
+ return deepest;
75
+ }
76
+ function resolveFadingCaps(tier, maxToolResultChars) {
77
+ const { budgetTokens } = tier;
78
+ const windowResultChars = calculateMaxToolResultChars(budgetTokens);
79
+ const resultChars = maxToolResultChars != null ? Math.min(windowResultChars, maxToolResultChars) : windowResultChars;
80
+ return {
81
+ budgetTokens,
82
+ resultChars,
83
+ consumedChars: tier.masked ? Math.min(resultChars, Math.max(300, Math.floor(resultChars * MASKED_RESULT_CAP_RATIO))) : resultChars,
84
+ inputChars: calculateMaxToolCallInputChars(budgetTokens)
85
+ };
86
+ }
87
+ function resolveFadingTier(tier, window, signals, maxToolResultChars) {
88
+ const fitRung = fadingRungForBudget(window, signals.effectiveRawTokens, maxToolResultChars, signals.toolExchangeWidth);
89
+ const bandRung = signals.summarizationEnabled ? 0 : PRESSURE_BAND_RUNGS.find(([threshold]) => signals.contextPressure >= threshold)?.[1] ?? 0;
90
+ const rung = Math.min(maxFadingRung(window), Math.max(fitRung + bandRung, signals.minRung ?? 0));
91
+ const budgetTokens = Math.min(tier.budgetTokens, fadingBudgetTokens(window, rung));
92
+ const masked = tier.masked || signals.contextPressure >= .8;
93
+ if (budgetTokens === tier.budgetTokens && masked === tier.masked) return tier;
94
+ return {
95
+ v: 1,
96
+ budgetTokens,
97
+ masked,
98
+ latched: true
99
+ };
100
+ }
101
+ function isInformativeFadingTier(tier, window) {
102
+ if (tier == null) return false;
103
+ return tier.latched === true || tier.masked || window != null && window > 0 && tier.budgetTokens < window;
104
+ }
105
+ //#endregion
106
+ export { FADING_MIN_BUDGET_TOKENS, FADING_TIER_VERSION, MASKED_RESULT_MIN_CHARS, PRESSURE_THRESHOLD_MASKING, createFadingTier, fadingBudgetTokens, fadingRungForBudget, fadingRungForExchangeChars, fadingRungForResultChars, isFadingTier, isInformativeFadingTier, maxFadingRung, resolveFadingCaps, resolveFadingTier, seedFadingTier };
107
+
108
+ //# sourceMappingURL=fading.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fading.mjs","names":[],"sources":["../../../src/messages/fading.ts"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
+ import { HARD_MAX_TOOL_RESULT_CHARS } from "../utils/truncation.mjs";
1
2
  import { COMPACTION_SEMANTIC_INDEX_LIMITS } from "../common/constants.mjs";
2
3
  import "../common/enum.mjs";
3
4
  import "../common/index.mjs";
4
- import { HARD_MAX_TOOL_RESULT_CHARS } from "../utils/truncation.mjs";
5
5
  import { compactToolContent, getToolContentCharLength, isAtomicToolContentBlock, serializeStructuredValueBounded } from "../utils/toolContent.mjs";
6
6
  import { hasBijectiveProviderContentPartMapping, inspectProviderMessageProvenance, inspectProviderSourceMessageIds, setFreshProviderMessageProvenance, setInvalidProviderMessageProvenance, setProviderMessageProvenance } from "./provenance.mjs";
7
7
  import { toLangChainContent, toLangChainMessageFields } from "./langchain.mjs";
@@ -1,3 +1,4 @@
1
+ import "./fading.mjs";
1
2
  import "./provenance.mjs";
2
3
  import "./cache.mjs";
3
4
  import "./core.mjs";