@librechat/agents 3.3.12 → 3.4.0
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 +10 -0
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +1 -0
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langfuseSpanRegistry.cjs +6 -3
- package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +35 -206
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +121 -241
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +19 -12
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/mistral/index.cjs +26 -0
- package/dist/cjs/llm/mistral/index.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +82 -80
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +19 -19
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/stream/chunkAdapters.cjs +198 -0
- package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -0
- package/dist/cjs/llm/stream/smoother.cjs +369 -0
- package/dist/cjs/llm/stream/smoother.cjs.map +1 -0
- package/dist/cjs/llm/vertexai/index.cjs +13 -1
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +18 -10
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +34 -2
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +76 -29
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +10 -0
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +1 -0
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langfuseSpanRegistry.mjs +6 -3
- package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +34 -205
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +120 -240
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +19 -12
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/mistral/index.mjs +26 -0
- package/dist/esm/llm/mistral/index.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +82 -80
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +3 -3
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/stream/chunkAdapters.mjs +195 -0
- package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -0
- package/dist/esm/llm/stream/smoother.mjs +365 -0
- package/dist/esm/llm/stream/smoother.mjs.map +1 -0
- package/dist/esm/llm/vertexai/index.mjs +13 -1
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +4 -2
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +34 -2
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +76 -30
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/graphs/Graph.d.ts +3 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/llm/google/index.d.ts +2 -0
- package/dist/types/llm/mistral/index.d.ts +11 -0
- package/dist/types/llm/openai/index.d.ts +20 -4
- package/dist/types/llm/openrouter/index.d.ts +4 -1
- package/dist/types/llm/stream/chunkAdapters.d.ts +48 -0
- package/dist/types/llm/stream/smoother.d.ts +95 -0
- package/dist/types/llm/vertexai/index.d.ts +2 -0
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +3 -0
- package/dist/types/types/graph.d.ts +5 -0
- package/dist/types/types/llm.d.ts +21 -14
- package/dist/types/utils/tokens.d.ts +10 -0
- package/package.json +2 -2
- package/src/graphs/Graph.ts +11 -0
- package/src/index.ts +8 -0
- package/src/instrumentation.ts +1 -0
- package/src/langfuseSpanRegistry.ts +9 -0
- package/src/llm/anthropic/index.ts +85 -354
- package/src/llm/bedrock/index.ts +174 -390
- package/src/llm/bedrock/llm.spec.ts +2 -0
- package/src/llm/bedrock/streamSealDispatch.test.ts +76 -0
- package/src/llm/custom-chat-models.smoke.test.ts +16 -1
- package/src/llm/google/index.ts +17 -18
- package/src/llm/google/streamSmoothing.test.ts +121 -0
- package/src/llm/mistral/index.ts +33 -0
- package/src/llm/mistral/streamSmoothing.test.ts +97 -0
- package/src/llm/openai/deepseek.test.ts +56 -0
- package/src/llm/openai/index.ts +119 -126
- package/src/llm/openrouter/index.ts +4 -1
- package/src/llm/providers.ts +3 -3
- package/src/llm/stream/chunkAdapters.test.ts +202 -0
- package/src/llm/stream/chunkAdapters.ts +317 -0
- package/src/llm/stream/reassembly.test.ts +241 -0
- package/src/llm/stream/smoother.bench.test.ts +155 -0
- package/src/llm/stream/smoother.test.ts +519 -0
- package/src/llm/stream/smoother.ts +574 -0
- package/src/llm/vertexai/index.ts +17 -1
- package/src/llm/vertexai/streamSmoothing.test.ts +109 -0
- package/src/specs/langfuse-instrumentation.test.ts +26 -0
- package/src/specs/langfuse-span-registry.test.ts +17 -0
- package/src/specs/subagent.test.ts +44 -0
- package/src/specs/summarization.test.ts +5 -2
- package/src/specs/tokens.test.ts +159 -14
- package/src/tools/__tests__/SubagentExecutor.test.ts +48 -1
- package/src/tools/subagent/SubagentExecutor.ts +69 -5
- package/src/types/graph.ts +5 -0
- package/src/types/llm.ts +53 -36
- package/src/utils/tokens.ts +115 -30
|
@@ -28,7 +28,7 @@ export type AzureClientOptions = Partial<OpenAIChatInput> & Partial<AzureOpenAII
|
|
|
28
28
|
deploymentName?: string;
|
|
29
29
|
} & BaseChatModelParams & {
|
|
30
30
|
configuration?: OAIClientOptions;
|
|
31
|
-
} & ManagedRequestOptions;
|
|
31
|
+
} & ManagedRequestOptions & StreamSmoothingOptions;
|
|
32
32
|
/**
|
|
33
33
|
* Controls whether Claude's reasoning content is returned in adaptive
|
|
34
34
|
* thinking responses. Added for Claude Opus 4.7, which omits thinking by
|
|
@@ -58,8 +58,19 @@ export type ManagedRequestOptions = {
|
|
|
58
58
|
promptCacheExplicit?: boolean;
|
|
59
59
|
safety_identifier?: string;
|
|
60
60
|
};
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Adaptive stream-smoothing configuration shared by every provider client.
|
|
63
|
+
*/
|
|
64
|
+
export type StreamSmoothingOptions = {
|
|
65
|
+
/**
|
|
66
|
+
* Minimum delay in milliseconds between visible streamed content deltas.
|
|
67
|
+
* Defaults to 25; piece sizes adapt to the backlog so render lag stays
|
|
68
|
+
* bounded regardless of provider chunk size. Set 0 to disable smoothing.
|
|
69
|
+
*/
|
|
70
|
+
_lc_stream_delay?: number;
|
|
71
|
+
};
|
|
72
|
+
export type OpenAIClientOptions = ChatOpenAIFields & ManagedRequestOptions & StreamSmoothingOptions;
|
|
73
|
+
export type AnthropicClientOptions = Omit<AnthropicInput, 'thinking'> & StreamSmoothingOptions & {
|
|
63
74
|
thinking?: ThinkingConfig;
|
|
64
75
|
promptCache?: boolean;
|
|
65
76
|
/**
|
|
@@ -69,12 +80,12 @@ export type AnthropicClientOptions = Omit<AnthropicInput, 'thinking'> & {
|
|
|
69
80
|
*/
|
|
70
81
|
promptCacheTtl?: PromptCacheTtl;
|
|
71
82
|
};
|
|
72
|
-
export type MistralAIClientOptions = ChatMistralAIInput;
|
|
73
|
-
export type VertexAIClientOptions = ChatVertexAIInput & {
|
|
83
|
+
export type MistralAIClientOptions = ChatMistralAIInput & StreamSmoothingOptions;
|
|
84
|
+
export type VertexAIClientOptions = ChatVertexAIInput & StreamSmoothingOptions & {
|
|
74
85
|
includeThoughts?: boolean;
|
|
75
86
|
thinkingConfig?: GoogleThinkingConfig;
|
|
76
87
|
};
|
|
77
|
-
export type BedrockAnthropicInput = ChatBedrockConverseInput & {
|
|
88
|
+
export type BedrockAnthropicInput = ChatBedrockConverseInput & StreamSmoothingOptions & {
|
|
78
89
|
additionalModelRequestFields?: ChatBedrockConverseInput['additionalModelRequestFields'] & AnthropicReasoning;
|
|
79
90
|
promptCache?: boolean;
|
|
80
91
|
/**
|
|
@@ -84,20 +95,16 @@ export type BedrockAnthropicInput = ChatBedrockConverseInput & {
|
|
|
84
95
|
* server-side, so the default is safe to leave on.
|
|
85
96
|
*/
|
|
86
97
|
promptCacheTtl?: PromptCacheTtl;
|
|
87
|
-
/**
|
|
88
|
-
* Minimum delay in milliseconds between visible streamed content deltas.
|
|
89
|
-
*/
|
|
90
|
-
_lc_stream_delay?: number;
|
|
91
98
|
};
|
|
92
99
|
export type BedrockConverseClientOptions = BedrockAnthropicInput;
|
|
93
100
|
export type BedrockAnthropicClientOptions = BedrockAnthropicInput;
|
|
94
|
-
export type GoogleClientOptions = GoogleGenerativeAIChatInput & {
|
|
101
|
+
export type GoogleClientOptions = GoogleGenerativeAIChatInput & StreamSmoothingOptions & {
|
|
95
102
|
customHeaders?: RequestOptions['customHeaders'];
|
|
96
103
|
thinkingConfig?: GoogleThinkingConfig;
|
|
97
104
|
includeServerSideToolInvocations?: boolean;
|
|
98
105
|
};
|
|
99
|
-
export type DeepSeekClientOptions = Partial<ChatDeepSeekInput
|
|
100
|
-
export type XAIClientOptions = ChatXAIInput;
|
|
106
|
+
export type DeepSeekClientOptions = Partial<ChatDeepSeekInput> & StreamSmoothingOptions;
|
|
107
|
+
export type XAIClientOptions = ChatXAIInput & StreamSmoothingOptions;
|
|
101
108
|
export type ClientOptions = OpenAIClientOptions | AzureClientOptions | AnthropicClientOptions | MistralAIClientOptions | VertexAIClientOptions | BedrockConverseClientOptions | GoogleClientOptions | DeepSeekClientOptions | XAIClientOptions;
|
|
102
109
|
export type SharedLLMConfig = {
|
|
103
110
|
provider: Providers;
|
|
@@ -122,7 +129,7 @@ export type ProviderOptionsMap = {
|
|
|
122
129
|
[Providers.ANTHROPIC]: AnthropicClientOptions;
|
|
123
130
|
[Providers.MISTRALAI]: MistralAIClientOptions;
|
|
124
131
|
[Providers.MISTRAL]: MistralAIClientOptions;
|
|
125
|
-
[Providers.OPENROUTER]: ChatOpenRouterCallOptions;
|
|
132
|
+
[Providers.OPENROUTER]: ChatOpenRouterCallOptions & StreamSmoothingOptions;
|
|
126
133
|
[Providers.BEDROCK]: BedrockAnthropicClientOptions;
|
|
127
134
|
[Providers.XAI]: XAIClientOptions;
|
|
128
135
|
[Providers.MOONSHOT]: OpenAIClientOptions;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import type { BaseMessage } from '@langchain/core/messages';
|
|
2
2
|
export type EncodingName = 'o200k_base' | 'claude';
|
|
3
|
+
export type UnsafeTokenMeasurementReason = 'message_proxy' | 'content_proxy' | 'metadata_proxy' | 'metadata_accessor' | 'invalid_count';
|
|
4
|
+
export declare class UnsafeTokenMeasurementError extends Error {
|
|
5
|
+
readonly type = "unsafe_token_measurement";
|
|
6
|
+
readonly reason: UnsafeTokenMeasurementReason;
|
|
7
|
+
readonly path: string;
|
|
8
|
+
constructor({ reason, path, }: {
|
|
9
|
+
reason: UnsafeTokenMeasurementReason;
|
|
10
|
+
path: string;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
3
13
|
/** Safety margin for image and document token estimates (5% overestimate). */
|
|
4
14
|
export declare const IMAGE_TOKEN_SAFETY_MARGIN = 1.05;
|
|
5
15
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@librechat/agents",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"main": "./dist/cjs/main.cjs",
|
|
5
5
|
"module": "./dist/esm/main.mjs",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
"nanoid": "^3.3.7",
|
|
249
249
|
"okapibm25": "^1.4.1",
|
|
250
250
|
"openai": "^6.46.0",
|
|
251
|
-
"reo-census": "^1.2.
|
|
251
|
+
"reo-census": "^1.2.10",
|
|
252
252
|
"socks-proxy-agent": "^8.0.5",
|
|
253
253
|
"uuid": "^11.1.1"
|
|
254
254
|
},
|
package/src/graphs/Graph.ts
CHANGED
|
@@ -998,6 +998,7 @@ export abstract class Graph<
|
|
|
998
998
|
|
|
999
999
|
export class StandardGraph extends Graph<t.BaseGraphState, t.GraphNode> {
|
|
1000
1000
|
overrideModel?: t.ChatModel;
|
|
1001
|
+
private subagentModelOverride?: t.ChatModel;
|
|
1001
1002
|
/** Optional compile options passed into workflow.compile() */
|
|
1002
1003
|
compileOptions?: t.CompileOptions | undefined;
|
|
1003
1004
|
/** Whether the workflow was actually compiled with a checkpointer. */
|
|
@@ -1320,6 +1321,7 @@ export class StandardGraph extends Graph<t.BaseGraphState, t.GraphNode> {
|
|
|
1320
1321
|
super.clearHeavyState();
|
|
1321
1322
|
this.messages = [];
|
|
1322
1323
|
this.overrideModel = undefined;
|
|
1324
|
+
this.subagentModelOverride = undefined;
|
|
1323
1325
|
/** Stream-limit accounting (argument tallies, event counts, charge
|
|
1324
1326
|
* credits) deliberately SURVIVES cleanup: this runs in `processStream`'s
|
|
1325
1327
|
* finally, which an ordinary parallel-branch failure reaches while
|
|
@@ -1944,6 +1946,11 @@ export class StandardGraph extends Graph<t.BaseGraphState, t.GraphNode> {
|
|
|
1944
1946
|
});
|
|
1945
1947
|
}
|
|
1946
1948
|
|
|
1949
|
+
/** Explicitly overrides the model used by isolated descendant subagent graphs. */
|
|
1950
|
+
setSubagentModelOverride(model: t.ChatModel): void {
|
|
1951
|
+
this.subagentModelOverride = model;
|
|
1952
|
+
}
|
|
1953
|
+
|
|
1947
1954
|
getUsageMetadata(
|
|
1948
1955
|
finalMessage?: BaseMessage
|
|
1949
1956
|
): Partial<UsageMetadata> | undefined {
|
|
@@ -4057,6 +4064,10 @@ export class StandardGraph extends Graph<t.BaseGraphState, t.GraphNode> {
|
|
|
4057
4064
|
maxDepth: effectiveSubagentDepth,
|
|
4058
4065
|
createChildGraph: (input): StandardGraph => {
|
|
4059
4066
|
const childGraph = new StandardGraph(input);
|
|
4067
|
+
if (this.subagentModelOverride != null) {
|
|
4068
|
+
childGraph.overrideModel = this.subagentModelOverride;
|
|
4069
|
+
childGraph.setSubagentModelOverride(this.subagentModelOverride);
|
|
4070
|
+
}
|
|
4060
4071
|
const toolHandlerRegistry = createToolHandlerRegistry(
|
|
4061
4072
|
getParentHandlerRegistry()
|
|
4062
4073
|
);
|
package/src/index.ts
CHANGED
|
@@ -77,6 +77,14 @@ export type {
|
|
|
77
77
|
ChatOpenRouterCallOptions,
|
|
78
78
|
} from './llm/openrouter';
|
|
79
79
|
export { getChatModelClass } from './llm/providers';
|
|
80
|
+
export { CustomChatMistralAI } from './llm/mistral';
|
|
81
|
+
export {
|
|
82
|
+
smoothStream,
|
|
83
|
+
resolveStreamDelay,
|
|
84
|
+
DEFAULT_STREAM_DELAY,
|
|
85
|
+
computeAdaptivePieceSize,
|
|
86
|
+
} from './llm/stream/smoother';
|
|
87
|
+
export type { SmoothItem, SmoothPiece } from './llm/stream/smoother';
|
|
80
88
|
export { FakeChatModel, createFakeStreamingLLM } from './llm/fake';
|
|
81
89
|
export { initializeModel } from './llm/init';
|
|
82
90
|
export { attemptInvoke, tryFallbackProviders } from './llm/invoke';
|
package/src/instrumentation.ts
CHANGED
|
@@ -72,6 +72,9 @@ export function getLangfuseSpanProcessorParams(
|
|
|
72
72
|
secretKey: langfuse.secretKey,
|
|
73
73
|
...(isPresent(langfuse.baseUrl) ? { baseUrl: langfuse.baseUrl } : {}),
|
|
74
74
|
...(isPresent(environment) ? { environment } : {}),
|
|
75
|
+
...(langfuse.mediaUploadEnabled != null
|
|
76
|
+
? { mediaUploadEnabled: langfuse.mediaUploadEnabled }
|
|
77
|
+
: {}),
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
80
|
if (hasLangfuseEnvConfig()) {
|
|
@@ -84,6 +87,9 @@ export function getLangfuseSpanProcessorParams(
|
|
|
84
87
|
secretKey: process.env.LANGFUSE_SECRET_KEY as string,
|
|
85
88
|
...(isPresent(baseUrl) ? { baseUrl } : {}),
|
|
86
89
|
...(isPresent(environment) ? { environment } : {}),
|
|
90
|
+
...(langfuse?.mediaUploadEnabled != null
|
|
91
|
+
? { mediaUploadEnabled: langfuse.mediaUploadEnabled }
|
|
92
|
+
: {}),
|
|
87
93
|
};
|
|
88
94
|
}
|
|
89
95
|
if (isPresent(langfuse?.baseUrl) && hasLangfuseEnvCredentials()) {
|
|
@@ -92,6 +98,9 @@ export function getLangfuseSpanProcessorParams(
|
|
|
92
98
|
secretKey: process.env.LANGFUSE_SECRET_KEY as string,
|
|
93
99
|
baseUrl: langfuse.baseUrl,
|
|
94
100
|
...(isPresent(environment) ? { environment } : {}),
|
|
101
|
+
...(langfuse.mediaUploadEnabled != null
|
|
102
|
+
? { mediaUploadEnabled: langfuse.mediaUploadEnabled }
|
|
103
|
+
: {}),
|
|
95
104
|
};
|
|
96
105
|
}
|
|
97
106
|
return undefined;
|