@librechat/agents 3.6.14 → 3.6.16

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 (127) hide show
  1. package/README.md +41 -0
  2. package/dist/cjs/agents/AgentContext.cjs +1 -1
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +9 -7
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/llm/contextPressureMeter.cjs +8 -6
  7. package/dist/cjs/llm/contextPressureMeter.cjs.map +1 -1
  8. package/dist/cjs/llm/init.cjs +1 -0
  9. package/dist/cjs/llm/init.cjs.map +1 -1
  10. package/dist/cjs/llm/invoke.cjs +9 -2
  11. package/dist/cjs/llm/invoke.cjs.map +1 -1
  12. package/dist/cjs/llm/openai/index.cjs +1 -1
  13. package/dist/cjs/llm/prepareProviderRequest.cjs +6 -3
  14. package/dist/cjs/llm/prepareProviderRequest.cjs.map +1 -1
  15. package/dist/cjs/llm/providerRegistry.cjs +69 -0
  16. package/dist/cjs/llm/providerRegistry.cjs.map +1 -0
  17. package/dist/cjs/llm/providers.cjs +38 -25
  18. package/dist/cjs/llm/providers.cjs.map +1 -1
  19. package/dist/cjs/llm/request.cjs +6 -4
  20. package/dist/cjs/llm/request.cjs.map +1 -1
  21. package/dist/cjs/llm/truncation.cjs +2 -1
  22. package/dist/cjs/llm/truncation.cjs.map +1 -1
  23. package/dist/cjs/main.cjs +18 -15
  24. package/dist/cjs/messages/format.cjs.map +1 -1
  25. package/dist/cjs/messages/prune.cjs +8 -4
  26. package/dist/cjs/messages/prune.cjs.map +1 -1
  27. package/dist/cjs/provider-registration.cjs +4 -0
  28. package/dist/cjs/run.cjs +2 -2
  29. package/dist/cjs/stream.cjs +1 -1
  30. package/dist/cjs/stream.cjs.map +1 -1
  31. package/dist/cjs/summarization/node.cjs +2 -2
  32. package/dist/cjs/summarization/node.cjs.map +1 -1
  33. package/dist/cjs/utils/llm.cjs +6 -4
  34. package/dist/cjs/utils/llm.cjs.map +1 -1
  35. package/dist/cjs/utils/toolContent.cjs +2 -2
  36. package/dist/cjs/utils/toolContent.cjs.map +1 -1
  37. package/dist/esm/agents/AgentContext.mjs +1 -1
  38. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  39. package/dist/esm/graphs/Graph.mjs +10 -8
  40. package/dist/esm/graphs/Graph.mjs.map +1 -1
  41. package/dist/esm/llm/contextPressureMeter.mjs +8 -6
  42. package/dist/esm/llm/contextPressureMeter.mjs.map +1 -1
  43. package/dist/esm/llm/init.mjs +1 -0
  44. package/dist/esm/llm/init.mjs.map +1 -1
  45. package/dist/esm/llm/invoke.mjs +9 -2
  46. package/dist/esm/llm/invoke.mjs.map +1 -1
  47. package/dist/esm/llm/openai/index.mjs +1 -1
  48. package/dist/esm/llm/prepareProviderRequest.mjs +7 -4
  49. package/dist/esm/llm/prepareProviderRequest.mjs.map +1 -1
  50. package/dist/esm/llm/providerRegistry.mjs +64 -0
  51. package/dist/esm/llm/providerRegistry.mjs.map +1 -0
  52. package/dist/esm/llm/providers.mjs +36 -22
  53. package/dist/esm/llm/providers.mjs.map +1 -1
  54. package/dist/esm/llm/request.mjs +6 -4
  55. package/dist/esm/llm/request.mjs.map +1 -1
  56. package/dist/esm/llm/truncation.mjs +2 -1
  57. package/dist/esm/llm/truncation.mjs.map +1 -1
  58. package/dist/esm/main.mjs +12 -10
  59. package/dist/esm/messages/format.mjs.map +1 -1
  60. package/dist/esm/messages/prune.mjs +8 -4
  61. package/dist/esm/messages/prune.mjs.map +1 -1
  62. package/dist/esm/provider-registration.mjs +3 -0
  63. package/dist/esm/run.mjs +2 -2
  64. package/dist/esm/stream.mjs +1 -1
  65. package/dist/esm/stream.mjs.map +1 -1
  66. package/dist/esm/summarization/node.mjs +2 -2
  67. package/dist/esm/summarization/node.mjs.map +1 -1
  68. package/dist/esm/utils/llm.mjs +6 -4
  69. package/dist/esm/utils/llm.mjs.map +1 -1
  70. package/dist/esm/utils/toolContent.mjs +3 -3
  71. package/dist/esm/utils/toolContent.mjs.map +1 -1
  72. package/dist/types/agents/AgentContext.d.ts +5 -5
  73. package/dist/types/index.d.ts +2 -0
  74. package/dist/types/llm/contextOverflowRecovery.d.ts +2 -2
  75. package/dist/types/llm/init.d.ts +21 -14
  76. package/dist/types/llm/invoke.d.ts +5 -6
  77. package/dist/types/llm/prepareProviderRequest.d.ts +5 -6
  78. package/dist/types/llm/providerRegistry.d.ts +11 -0
  79. package/dist/types/llm/providers.d.ts +4 -5
  80. package/dist/types/llm/request.d.ts +2 -3
  81. package/dist/types/llm/truncation.d.ts +2 -2
  82. package/dist/types/messages/core.d.ts +1 -2
  83. package/dist/types/messages/format.d.ts +3 -3
  84. package/dist/types/messages/prune.d.ts +3 -2
  85. package/dist/types/provider-registration.d.ts +15 -0
  86. package/dist/types/stream.d.ts +1 -2
  87. package/dist/types/summarization/node.d.ts +1 -2
  88. package/dist/types/types/activityLabel.d.ts +3 -4
  89. package/dist/types/types/graph.d.ts +4 -5
  90. package/dist/types/types/llm.d.ts +54 -13
  91. package/dist/types/types/reasoningLabel.d.ts +2 -3
  92. package/dist/types/types/run.d.ts +3 -3
  93. package/dist/types/types/summarize.d.ts +2 -2
  94. package/dist/types/utils/errors.d.ts +3 -3
  95. package/dist/types/utils/llm.d.ts +4 -4
  96. package/dist/types/utils/llmConfig.d.ts +2 -2
  97. package/package.json +9 -1
  98. package/src/agents/AgentContext.ts +27 -26
  99. package/src/graphs/Graph.ts +14 -14
  100. package/src/index.ts +5 -0
  101. package/src/llm/contextOverflowRecovery.ts +2 -2
  102. package/src/llm/contextPressureMeter.ts +23 -13
  103. package/src/llm/init.ts +40 -17
  104. package/src/llm/invoke.ts +36 -21
  105. package/src/llm/prepareProviderRequest.ts +19 -18
  106. package/src/llm/providerRegistry.ts +134 -0
  107. package/src/llm/providers.ts +73 -30
  108. package/src/llm/request.ts +10 -6
  109. package/src/llm/truncation.ts +9 -3
  110. package/src/messages/core.ts +2 -2
  111. package/src/messages/format.ts +14 -16
  112. package/src/messages/prune.ts +22 -17
  113. package/src/provider-registration.ts +29 -0
  114. package/src/run.ts +1 -1
  115. package/src/session/AgentSession.ts +1 -1
  116. package/src/stream.ts +7 -8
  117. package/src/summarization/node.ts +7 -7
  118. package/src/types/activityLabel.ts +3 -4
  119. package/src/types/graph.ts +5 -5
  120. package/src/types/llm.ts +95 -13
  121. package/src/types/reasoningLabel.ts +2 -3
  122. package/src/types/run.ts +3 -3
  123. package/src/types/summarize.ts +2 -2
  124. package/src/utils/errors.ts +3 -3
  125. package/src/utils/llm.ts +22 -15
  126. package/src/utils/llmConfig.ts +4 -4
  127. package/src/utils/toolContent.ts +9 -3
package/src/utils/llm.ts CHANGED
@@ -1,37 +1,44 @@
1
1
  // src/utils/llm.ts
2
+ import type { ProviderName } from '@/types';
3
+ import { getProviderFamily } from '@/llm/providerRegistry';
2
4
  import { Providers } from '@/common';
3
5
 
4
- export function isOpenAILike(provider?: string | Providers): boolean {
6
+ export function isOpenAILike(provider?: ProviderName): boolean {
5
7
  if (provider == null) {
6
8
  return false;
7
9
  }
8
10
  return (
9
- [
10
- Providers.OPENAI,
11
- Providers.AZURE,
12
- Providers.OPENROUTER,
13
- Providers.XAI,
14
- Providers.DEEPSEEK,
15
- ] as string[]
16
- ).includes(provider);
11
+ getProviderFamily(provider) === 'openai' ||
12
+ (
13
+ [
14
+ Providers.OPENAI,
15
+ Providers.AZURE,
16
+ Providers.OPENROUTER,
17
+ Providers.XAI,
18
+ Providers.DEEPSEEK,
19
+ ] as string[]
20
+ ).includes(provider)
21
+ );
17
22
  }
18
23
 
19
- export function isGoogleLike(provider?: string | Providers): boolean {
24
+ export function isGoogleLike(provider?: ProviderName): boolean {
20
25
  if (provider == null) {
21
26
  return false;
22
27
  }
23
- return ([Providers.GOOGLE, Providers.VERTEXAI] as string[]).includes(
24
- provider
28
+ return (
29
+ getProviderFamily(provider) === 'google' ||
30
+ ([Providers.GOOGLE, Providers.VERTEXAI] as string[]).includes(provider)
25
31
  );
26
32
  }
27
33
 
28
34
  /** Returns true for native Anthropic or Bedrock running a Claude model. */
29
35
  export function isAnthropicLike(
30
- provider?: string | Providers,
36
+ provider?: ProviderName,
31
37
  clientOptions?: { model?: string }
32
38
  ): boolean {
33
- if (provider === Providers.ANTHROPIC) return true;
34
- if (provider === Providers.BEDROCK) {
39
+ const family = provider == null ? undefined : getProviderFamily(provider);
40
+ if (provider === Providers.ANTHROPIC || family === 'anthropic') return true;
41
+ if (provider === Providers.BEDROCK || family === 'bedrock') {
35
42
  return (
36
43
  clientOptions?.model == null ||
37
44
  /claude/i.test(String(clientOptions.model))
@@ -3,7 +3,7 @@ import type * as or from '@/llm/openrouter';
3
3
  import type * as t from '@/types';
4
4
  import { Providers } from '@/common';
5
5
 
6
- export const llmConfigs: Record<string, t.LLMConfig | undefined> = {
6
+ export const llmConfigs: Record<string, t.BuiltInLLMConfig | undefined> = {
7
7
  [Providers.OPENAI]: {
8
8
  provider: Providers.OPENAI,
9
9
  model: 'gpt-4.1',
@@ -68,7 +68,7 @@ export const llmConfigs: Record<string, t.LLMConfig | undefined> = {
68
68
  modelKwargs: {
69
69
  max_tokens: 10000,
70
70
  },
71
- } as or.ChatOpenRouterCallOptions & t.LLMConfig,
71
+ } as or.ChatOpenRouterCallOptions & t.BuiltInLLMConfig,
72
72
  [Providers.AZURE]: {
73
73
  provider: Providers.AZURE,
74
74
  temperature: 0.7,
@@ -159,7 +159,7 @@ export const llmConfigs: Record<string, t.LLMConfig | undefined> = {
159
159
  // location: 'global',
160
160
  // thinkingBudget: -1,
161
161
  // includeThoughts: true,
162
- } as t.VertexAIClientOptions & t.LLMConfig,
162
+ } as t.VertexAIClientOptions & t.BuiltInLLMConfig,
163
163
  [Providers.GOOGLE]: {
164
164
  provider: Providers.GOOGLE,
165
165
  model: 'gemini-2.5-flash',
@@ -194,7 +194,7 @@ export const llmConfigs: Record<string, t.LLMConfig | undefined> = {
194
194
  },
195
195
  };
196
196
 
197
- export function getLLMConfig(provider: string): t.LLMConfig {
197
+ export function getLLMConfig(provider: string): t.BuiltInLLMConfig {
198
198
  const config = llmConfigs[provider];
199
199
  if (config === undefined) {
200
200
  throw new Error(`Unsupported provider: ${provider}`);
@@ -1,4 +1,4 @@
1
- import { isProxy } from 'node:util/types';
1
+ import { isArrayBuffer, isDate, isProxy } from 'node:util/types';
2
2
  import { ToolMessage, type BaseMessage } from '@langchain/core/messages';
3
3
  import {
4
4
  HARD_MAX_TOTAL_TOOL_OUTPUT_SIZE,
@@ -151,11 +151,17 @@ function jsonStringLength(
151
151
 
152
152
  type NativeDateRead = { matched: true; time: number } | { matched: false };
153
153
 
154
+ /**
155
+ * `isArrayBuffer` reads the internal slot natively (no user code, cross-realm safe) and
156
+ * costs nothing for the plain objects that make up almost all content; the getter's
157
+ * throw path was the expensive part, so it only runs once the brand is already known.
158
+ */
154
159
  function readNativeArrayBufferByteLength(value: unknown): number | undefined {
155
160
  if (
156
161
  value == null ||
157
162
  typeof value !== 'object' ||
158
- NATIVE_ARRAY_BUFFER_BYTE_LENGTH_GETTER == null
163
+ NATIVE_ARRAY_BUFFER_BYTE_LENGTH_GETTER == null ||
164
+ !isArrayBuffer(value)
159
165
  ) {
160
166
  return undefined;
161
167
  }
@@ -167,7 +173,7 @@ function readNativeArrayBufferByteLength(value: unknown): number | undefined {
167
173
  }
168
174
 
169
175
  function readNativeDate(value: unknown): NativeDateRead {
170
- if (value == null || typeof value !== 'object') {
176
+ if (value == null || typeof value !== 'object' || !isDate(value)) {
171
177
  return { matched: false };
172
178
  }
173
179
  try {