@librechat/agents 3.1.56 → 3.1.60
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/agents/AgentContext.cjs +326 -62
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +13 -0
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +7 -27
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +303 -222
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +4 -4
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +6 -2
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +60 -0
- package/dist/cjs/llm/init.cjs.map +1 -0
- package/dist/cjs/llm/invoke.cjs +90 -0
- package/dist/cjs/llm/invoke.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +2 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/request.cjs +41 -0
- package/dist/cjs/llm/request.cjs.map +1 -0
- package/dist/cjs/main.cjs +40 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +76 -89
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +156 -0
- package/dist/cjs/messages/contextPruning.cjs.map +1 -0
- package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
- package/dist/cjs/messages/core.cjs +23 -37
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +156 -11
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +1161 -49
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +87 -0
- package/dist/cjs/messages/reducer.cjs.map +1 -0
- package/dist/cjs/run.cjs +81 -42
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +54 -7
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs +75 -0
- package/dist/cjs/summarization/index.cjs.map +1 -0
- package/dist/cjs/summarization/node.cjs +663 -0
- package/dist/cjs/summarization/node.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +16 -8
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +2 -0
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/utils/errors.cjs +115 -0
- package/dist/cjs/utils/errors.cjs.map +1 -0
- package/dist/cjs/utils/events.cjs +17 -0
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +16 -0
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs +10 -0
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +247 -14
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +107 -0
- package/dist/cjs/utils/truncation.cjs.map +1 -0
- package/dist/esm/agents/AgentContext.mjs +325 -61
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +13 -0
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +8 -28
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +307 -226
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +4 -4
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +6 -2
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +58 -0
- package/dist/esm/llm/init.mjs.map +1 -0
- package/dist/esm/llm/invoke.mjs +87 -0
- package/dist/esm/llm/invoke.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +2 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/request.mjs +38 -0
- package/dist/esm/llm/request.mjs.map +1 -0
- package/dist/esm/main.mjs +13 -3
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +76 -89
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +154 -0
- package/dist/esm/messages/contextPruning.mjs.map +1 -0
- package/dist/esm/messages/contextPruningSettings.mjs +50 -0
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
- package/dist/esm/messages/core.mjs +23 -37
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +156 -11
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +1158 -52
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +83 -0
- package/dist/esm/messages/reducer.mjs.map +1 -0
- package/dist/esm/run.mjs +82 -43
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +54 -7
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs +73 -0
- package/dist/esm/summarization/index.mjs.map +1 -0
- package/dist/esm/summarization/node.mjs +659 -0
- package/dist/esm/summarization/node.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +16 -8
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +2 -0
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/utils/errors.mjs +111 -0
- package/dist/esm/utils/errors.mjs.map +1 -0
- package/dist/esm/utils/events.mjs +17 -1
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +16 -0
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs +10 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +245 -15
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +102 -0
- package/dist/esm/utils/truncation.mjs.map +1 -0
- package/dist/types/agents/AgentContext.d.ts +124 -6
- package/dist/types/common/enum.d.ts +14 -1
- package/dist/types/graphs/Graph.d.ts +22 -27
- package/dist/types/index.d.ts +5 -0
- package/dist/types/llm/init.d.ts +18 -0
- package/dist/types/llm/invoke.d.ts +48 -0
- package/dist/types/llm/request.d.ts +14 -0
- package/dist/types/messages/contextPruning.d.ts +42 -0
- package/dist/types/messages/contextPruningSettings.d.ts +44 -0
- package/dist/types/messages/core.d.ts +1 -1
- package/dist/types/messages/format.d.ts +17 -1
- package/dist/types/messages/index.d.ts +3 -0
- package/dist/types/messages/prune.d.ts +162 -1
- package/dist/types/messages/reducer.d.ts +18 -0
- package/dist/types/run.d.ts +12 -1
- package/dist/types/summarization/index.d.ts +20 -0
- package/dist/types/summarization/node.d.ts +29 -0
- package/dist/types/tools/ToolNode.d.ts +3 -1
- package/dist/types/types/graph.d.ts +44 -6
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/run.d.ts +30 -0
- package/dist/types/types/stream.d.ts +31 -4
- package/dist/types/types/summarize.d.ts +47 -0
- package/dist/types/types/tools.d.ts +7 -0
- package/dist/types/utils/errors.d.ts +28 -0
- package/dist/types/utils/events.d.ts +13 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/llm.d.ts +4 -0
- package/dist/types/utils/tokens.d.ts +14 -1
- package/dist/types/utils/truncation.d.ts +49 -0
- package/package.json +2 -2
- package/src/agents/AgentContext.ts +388 -58
- package/src/agents/__tests__/AgentContext.test.ts +265 -5
- package/src/common/enum.ts +13 -0
- package/src/events.ts +9 -39
- package/src/graphs/Graph.ts +468 -331
- package/src/index.ts +7 -0
- package/src/llm/anthropic/llm.spec.ts +3 -3
- package/src/llm/anthropic/utils/message_inputs.ts +6 -4
- package/src/llm/bedrock/llm.spec.ts +1 -1
- package/src/llm/bedrock/utils/message_inputs.ts +6 -2
- package/src/llm/init.ts +63 -0
- package/src/llm/invoke.ts +144 -0
- package/src/llm/request.ts +55 -0
- package/src/messages/__tests__/observationMasking.test.ts +221 -0
- package/src/messages/cache.ts +77 -102
- package/src/messages/contextPruning.ts +191 -0
- package/src/messages/contextPruningSettings.ts +90 -0
- package/src/messages/core.ts +32 -53
- package/src/messages/ensureThinkingBlock.test.ts +39 -39
- package/src/messages/format.ts +227 -15
- package/src/messages/formatAgentMessages.test.ts +511 -1
- package/src/messages/index.ts +3 -0
- package/src/messages/prune.ts +1548 -62
- package/src/messages/reducer.ts +22 -0
- package/src/run.ts +104 -51
- package/src/scripts/bedrock-merge-test.ts +1 -1
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-thinking-handoff.ts +1 -1
- package/src/scripts/thinking-bedrock.ts +1 -1
- package/src/scripts/thinking.ts +1 -1
- package/src/specs/anthropic.simple.test.ts +1 -1
- package/src/specs/multi-agent-summarization.test.ts +396 -0
- package/src/specs/prune.test.ts +1196 -23
- package/src/specs/summarization-unit.test.ts +868 -0
- package/src/specs/summarization.test.ts +3810 -0
- package/src/specs/summarize-prune.test.ts +376 -0
- package/src/specs/thinking-handoff.test.ts +10 -10
- package/src/specs/thinking-prune.test.ts +7 -4
- package/src/specs/token-accounting-e2e.test.ts +1034 -0
- package/src/specs/token-accounting-pipeline.test.ts +882 -0
- package/src/specs/token-distribution-edge-case.test.ts +25 -26
- package/src/splitStream.test.ts +42 -33
- package/src/stream.ts +64 -11
- package/src/summarization/__tests__/aggregator.test.ts +153 -0
- package/src/summarization/__tests__/node.test.ts +708 -0
- package/src/summarization/__tests__/trigger.test.ts +50 -0
- package/src/summarization/index.ts +102 -0
- package/src/summarization/node.ts +982 -0
- package/src/tools/ToolNode.ts +25 -3
- package/src/types/graph.ts +62 -7
- package/src/types/index.ts +1 -0
- package/src/types/run.ts +32 -0
- package/src/types/stream.ts +45 -5
- package/src/types/summarize.ts +58 -0
- package/src/types/tools.ts +7 -0
- package/src/utils/errors.ts +117 -0
- package/src/utils/events.ts +31 -0
- package/src/utils/handlers.ts +18 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/llm.ts +12 -0
- package/src/utils/tokens.ts +336 -18
- package/src/utils/truncation.ts +124 -0
- package/src/scripts/image.ts +0 -180
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context overflow error detection utilities.
|
|
3
|
+
*
|
|
4
|
+
* Identifies provider-specific error messages that indicate the request
|
|
5
|
+
* exceeded the model's context window. Used by the overflow recovery loop
|
|
6
|
+
* to decide whether to retry with truncation/compaction vs. propagating
|
|
7
|
+
* the error.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Extracts a human-readable error message from an unknown error value.
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractErrorMessage(error: unknown): string;
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if the error message definitively indicates a context
|
|
15
|
+
* overflow / prompt-too-large error from the provider.
|
|
16
|
+
*
|
|
17
|
+
* This is the strict check: only matches known, unambiguous phrases.
|
|
18
|
+
* Use this when you want high confidence before taking recovery action.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isContextOverflowError(errorMessage?: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Returns true if the error message likely indicates a context overflow.
|
|
23
|
+
* Uses broader heuristic matching (regex) in addition to exact phrases.
|
|
24
|
+
*
|
|
25
|
+
* May produce false positives for unusual error messages. Use this when
|
|
26
|
+
* the cost of a false positive (one extra retry) is acceptable.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isLikelyContextOverflowError(errorMessage?: string): boolean;
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { RunnableConfig } from '@langchain/core/runnables';
|
|
2
|
+
import type { AgentLogEvent } from '@/types/graph';
|
|
2
3
|
/**
|
|
3
4
|
* Safely dispatches a custom event and properly awaits it to avoid
|
|
4
5
|
* race conditions where events are dispatched after run cleanup.
|
|
5
6
|
*/
|
|
6
7
|
export declare function safeDispatchCustomEvent(event: string, payload: unknown, config?: RunnableConfig): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Fire-and-forget diagnostic log event.
|
|
10
|
+
* Debug-level logs are gated behind AGENT_DEBUG_LOGGING=true to avoid
|
|
11
|
+
* overhead in production. Info/warn/error always flow through.
|
|
12
|
+
* Pass `force: true` to bypass the env-var gate (e.g. invoke timing).
|
|
13
|
+
*/
|
|
14
|
+
export declare function emitAgentLog(config: RunnableConfig | undefined, level: AgentLogEvent['level'], scope: AgentLogEvent['scope'], message: string, data?: Record<string, unknown>, meta?: {
|
|
15
|
+
runId?: string;
|
|
16
|
+
agentId?: string;
|
|
17
|
+
}, options?: {
|
|
18
|
+
force?: boolean;
|
|
19
|
+
}): void;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { Providers } from '@/common';
|
|
2
2
|
export declare function isOpenAILike(provider?: string | Providers): boolean;
|
|
3
3
|
export declare function isGoogleLike(provider?: string | Providers): boolean;
|
|
4
|
+
/** Returns true for native Anthropic or Bedrock running a Claude model. */
|
|
5
|
+
export declare function isAnthropicLike(provider?: string | Providers, clientOptions?: {
|
|
6
|
+
model?: string;
|
|
7
|
+
}): boolean;
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import type { BaseMessage } from '@langchain/core/messages';
|
|
2
2
|
export type EncodingName = 'o200k_base' | 'claude';
|
|
3
|
+
/**
|
|
4
|
+
* Extracts image dimensions from the first bytes of a base64-encoded
|
|
5
|
+
* PNG, JPEG, GIF, or WebP without decoding the full image.
|
|
6
|
+
* Returns null if the format is unrecognized or data is too short.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractImageDimensions(base64Data: string): {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
} | null;
|
|
12
|
+
/** Estimates image token cost for Anthropic/Bedrock (Claude). */
|
|
13
|
+
export declare function estimateAnthropicImageTokens(width: number, height: number): number;
|
|
14
|
+
/** Estimates image token cost for OpenAI (high detail). */
|
|
15
|
+
export declare function estimateOpenAIImageTokens(width: number, height: number, detail?: string): number;
|
|
3
16
|
export declare function encodingForModel(model: string): EncodingName;
|
|
4
|
-
export declare function getTokenCountForMessage(message: BaseMessage, getTokenCount: (text: string) => number): number;
|
|
17
|
+
export declare function getTokenCountForMessage(message: BaseMessage, getTokenCount: (text: string) => number, encoding?: EncodingName): number;
|
|
5
18
|
/**
|
|
6
19
|
* Creates a token counter function using the specified encoding.
|
|
7
20
|
* Lazily loads the encoding data on first use via dynamic import.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ingestion-time and pre-flight truncation utilities for tool results.
|
|
3
|
+
*
|
|
4
|
+
* Prevents oversized tool outputs from entering the message array and
|
|
5
|
+
* consuming the entire context window.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Absolute hard cap on tool result length (characters).
|
|
9
|
+
* Even if the model has a 1M-token context, a single tool result
|
|
10
|
+
* larger than this is almost certainly a bug (e.g., dumping a binary file).
|
|
11
|
+
*/
|
|
12
|
+
export declare const HARD_MAX_TOOL_RESULT_CHARS = 400000;
|
|
13
|
+
/**
|
|
14
|
+
* Computes the dynamic max tool result size based on the model's context window.
|
|
15
|
+
* Uses 30% of the context window (in estimated characters, ~4 chars/token)
|
|
16
|
+
* capped at HARD_MAX_TOOL_RESULT_CHARS.
|
|
17
|
+
*
|
|
18
|
+
* @param contextWindowTokens - The model's max context tokens (optional).
|
|
19
|
+
* @returns Maximum allowed characters for a single tool result.
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateMaxToolResultChars(contextWindowTokens?: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Truncates a tool-call input (the arguments/payload of a tool_use block)
|
|
24
|
+
* using head+tail strategy. Returns an object with `_truncated` (the
|
|
25
|
+
* truncated string) and `_originalChars` (for diagnostics).
|
|
26
|
+
*
|
|
27
|
+
* Accepts any type — objects are JSON-serialized before truncation.
|
|
28
|
+
*
|
|
29
|
+
* @param input - The tool input (string, object, etc.).
|
|
30
|
+
* @param maxChars - Maximum allowed characters.
|
|
31
|
+
*/
|
|
32
|
+
export declare function truncateToolInput(input: unknown, maxChars: number): {
|
|
33
|
+
_truncated: string;
|
|
34
|
+
_originalChars: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Truncates tool result content that exceeds `maxChars` using a head+tail
|
|
38
|
+
* strategy. Keeps the beginning (structure/headers) and end (return value /
|
|
39
|
+
* conclusion) of the content so the model retains both the opening context
|
|
40
|
+
* and the final outcome.
|
|
41
|
+
*
|
|
42
|
+
* Head gets ~70% of the budget, tail gets ~30%. Falls back to head-only
|
|
43
|
+
* when the budget is too small for a meaningful tail.
|
|
44
|
+
*
|
|
45
|
+
* @param content - The tool result string content.
|
|
46
|
+
* @param maxChars - Maximum allowed characters.
|
|
47
|
+
* @returns The (possibly truncated) content string.
|
|
48
|
+
*/
|
|
49
|
+
export declare function truncateToolResultContent(content: string, maxChars: number): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@librechat/agents",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.60",
|
|
4
4
|
"main": "./dist/cjs/main.cjs",
|
|
5
5
|
"module": "./dist/esm/main.mjs",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"@browserbasehq/stagehand": {
|
|
113
113
|
"openai": "$openai"
|
|
114
114
|
},
|
|
115
|
-
"fast-xml-parser": "5.
|
|
115
|
+
"fast-xml-parser": "5.5.6",
|
|
116
116
|
"ajv": "6.14.0",
|
|
117
117
|
"minimatch": "3.1.4"
|
|
118
118
|
},
|