@librechat/agents 4.0.1 → 4.0.3
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 +3 -2
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/decisions/deadline.cjs +52 -0
- package/dist/cjs/decisions/deadline.cjs.map +1 -0
- package/dist/cjs/decisions/dialect.cjs +88 -0
- package/dist/cjs/decisions/dialect.cjs.map +1 -0
- package/dist/cjs/decisions/http.cjs +77 -0
- package/dist/cjs/decisions/http.cjs.map +1 -0
- package/dist/cjs/decisions/index.cjs +7 -0
- package/dist/cjs/decisions/presets.cjs +82 -0
- package/dist/cjs/decisions/presets.cjs.map +1 -0
- package/dist/cjs/decisions/questions.cjs +70 -0
- package/dist/cjs/decisions/questions.cjs.map +1 -0
- package/dist/cjs/decisions/structuredChat.cjs +172 -0
- package/dist/cjs/decisions/structuredChat.cjs.map +1 -0
- package/dist/cjs/decisions/structuredOutput.cjs +18 -0
- package/dist/cjs/decisions/structuredOutput.cjs.map +1 -0
- package/dist/cjs/decisions/traceMarker.cjs +6 -0
- package/dist/cjs/decisions/traceMarker.cjs.map +1 -0
- package/dist/cjs/decisions/transport.cjs +166 -0
- package/dist/cjs/decisions/transport.cjs.map +1 -0
- package/dist/cjs/decisions/types.cjs +44 -0
- package/dist/cjs/decisions/types.cjs.map +1 -0
- package/dist/cjs/graphs/Graph.cjs +28 -9
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +6 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +1 -1
- package/dist/cjs/llm/invoke.cjs +34 -12
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +7 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/providerTextBoundary.cjs +355 -0
- package/dist/cjs/llm/providerTextBoundary.cjs.map +1 -0
- package/dist/cjs/llm/providerTextChunk.cjs +14 -0
- package/dist/cjs/llm/providerTextChunk.cjs.map +1 -0
- package/dist/cjs/llm/providerTextControls.cjs +236 -0
- package/dist/cjs/llm/providerTextControls.cjs.map +1 -0
- package/dist/cjs/llm/stream/smoother.cjs +2 -1
- package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
- package/dist/cjs/main.cjs +49 -1
- package/dist/cjs/protection/providerText.cjs +224 -0
- package/dist/cjs/protection/providerText.cjs.map +1 -0
- package/dist/cjs/protection/providerTextInput.cjs +25 -0
- package/dist/cjs/protection/providerTextInput.cjs.map +1 -0
- package/dist/cjs/rerank/index.cjs +2 -0
- package/dist/cjs/rerank/search.cjs +45 -0
- package/dist/cjs/rerank/search.cjs.map +1 -0
- package/dist/cjs/rerank/systemone.cjs +70 -0
- package/dist/cjs/rerank/systemone.cjs.map +1 -0
- package/dist/cjs/run.cjs +11 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/stream.cjs +42 -14
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +26 -8
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +11 -3
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +6 -5
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs +1 -0
- package/dist/cjs/tools/search/search.cjs +3 -3
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +4 -3
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +13 -2
- package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +149 -26
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentReplay.cjs +4 -2
- package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
- package/dist/cjs/tools/subagent/childGraphConfig.cjs +3 -1
- package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
- package/dist/cjs/tools/subagent/diagnostics.cjs +88 -2
- package/dist/cjs/tools/subagent/diagnostics.cjs.map +1 -1
- package/dist/cjs/tools/subagent/hostArgs.cjs +214 -0
- package/dist/cjs/tools/subagent/hostArgs.cjs.map +1 -0
- package/dist/cjs/tools/subagent/index.cjs +2 -0
- package/dist/cjs/tools/toolErrorContent.cjs +1 -1
- package/dist/esm/agents/AgentContext.mjs +3 -2
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/decisions/deadline.mjs +52 -0
- package/dist/esm/decisions/deadline.mjs.map +1 -0
- package/dist/esm/decisions/dialect.mjs +87 -0
- package/dist/esm/decisions/dialect.mjs.map +1 -0
- package/dist/esm/decisions/http.mjs +75 -0
- package/dist/esm/decisions/http.mjs.map +1 -0
- package/dist/esm/decisions/index.mjs +8 -0
- package/dist/esm/decisions/presets.mjs +77 -0
- package/dist/esm/decisions/presets.mjs.map +1 -0
- package/dist/esm/decisions/questions.mjs +67 -0
- package/dist/esm/decisions/questions.mjs.map +1 -0
- package/dist/esm/decisions/structuredChat.mjs +172 -0
- package/dist/esm/decisions/structuredChat.mjs.map +1 -0
- package/dist/esm/decisions/structuredOutput.mjs +18 -0
- package/dist/esm/decisions/structuredOutput.mjs.map +1 -0
- package/dist/esm/decisions/traceMarker.mjs +6 -0
- package/dist/esm/decisions/traceMarker.mjs.map +1 -0
- package/dist/esm/decisions/transport.mjs +164 -0
- package/dist/esm/decisions/transport.mjs.map +1 -0
- package/dist/esm/decisions/types.mjs +39 -0
- package/dist/esm/decisions/types.mjs.map +1 -0
- package/dist/esm/graphs/Graph.mjs +28 -9
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +6 -1
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +1 -1
- package/dist/esm/llm/invoke.mjs +34 -12
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +7 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/providerTextBoundary.mjs +355 -0
- package/dist/esm/llm/providerTextBoundary.mjs.map +1 -0
- package/dist/esm/llm/providerTextChunk.mjs +13 -0
- package/dist/esm/llm/providerTextChunk.mjs.map +1 -0
- package/dist/esm/llm/providerTextControls.mjs +230 -0
- package/dist/esm/llm/providerTextControls.mjs.map +1 -0
- package/dist/esm/llm/stream/smoother.mjs +2 -1
- package/dist/esm/llm/stream/smoother.mjs.map +1 -1
- package/dist/esm/main.mjs +16 -2
- package/dist/esm/protection/providerText.mjs +218 -0
- package/dist/esm/protection/providerText.mjs.map +1 -0
- package/dist/esm/protection/providerTextInput.mjs +24 -0
- package/dist/esm/protection/providerTextInput.mjs.map +1 -0
- package/dist/esm/rerank/index.mjs +3 -0
- package/dist/esm/rerank/search.mjs +45 -0
- package/dist/esm/rerank/search.mjs.map +1 -0
- package/dist/esm/rerank/systemone.mjs +70 -0
- package/dist/esm/rerank/systemone.mjs.map +1 -0
- package/dist/esm/run.mjs +11 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/stream.mjs +42 -14
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +26 -8
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +11 -3
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +6 -5
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs +1 -1
- package/dist/esm/tools/search/search.mjs +3 -3
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +4 -3
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +13 -2
- package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +149 -26
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs +4 -2
- package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
- package/dist/esm/tools/subagent/childGraphConfig.mjs +3 -1
- package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
- package/dist/esm/tools/subagent/diagnostics.mjs +84 -3
- package/dist/esm/tools/subagent/diagnostics.mjs.map +1 -1
- package/dist/esm/tools/subagent/hostArgs.mjs +207 -0
- package/dist/esm/tools/subagent/hostArgs.mjs.map +1 -0
- package/dist/esm/tools/subagent/index.mjs +2 -0
- package/dist/esm/tools/toolErrorContent.mjs +1 -1
- package/dist/types/decisions/deadline.d.ts +3 -0
- package/dist/types/decisions/dialect.d.ts +11 -0
- package/dist/types/decisions/http.d.ts +22 -0
- package/dist/types/decisions/index.d.ts +10 -0
- package/dist/types/decisions/presets.d.ts +17 -0
- package/dist/types/decisions/questions.d.ts +8 -0
- package/dist/types/decisions/structuredChat.d.ts +17 -0
- package/dist/types/decisions/structuredOutput.d.ts +4 -0
- package/dist/types/decisions/traceMarker.d.ts +2 -0
- package/dist/types/decisions/transport.d.ts +29 -0
- package/dist/types/decisions/types.d.ts +119 -0
- package/dist/types/graphs/Graph.d.ts +7 -3
- package/dist/types/index.d.ts +4 -0
- package/dist/types/llm/invoke.d.ts +4 -1
- package/dist/types/llm/providerTextBoundary.d.ts +4 -0
- package/dist/types/llm/providerTextChunk.d.ts +7 -0
- package/dist/types/llm/providerTextControls.d.ts +18 -0
- package/dist/types/protection/providerText.d.ts +77 -0
- package/dist/types/protection/providerTextInput.d.ts +3 -0
- package/dist/types/rerank/index.d.ts +4 -0
- package/dist/types/rerank/search.d.ts +7 -0
- package/dist/types/rerank/systemone.d.ts +13 -0
- package/dist/types/rerank/types.d.ts +24 -0
- package/dist/types/run.d.ts +2 -0
- package/dist/types/tools/BashExecutor.d.ts +4 -0
- package/dist/types/tools/CodeExecutor.d.ts +4 -0
- package/dist/types/tools/ReadFile.d.ts +4 -0
- package/dist/types/tools/SkillTool.d.ts +4 -0
- package/dist/types/tools/SubagentTool.d.ts +2 -0
- package/dist/types/tools/ToolSearch.d.ts +4 -0
- package/dist/types/tools/search/schema.d.ts +4 -0
- package/dist/types/tools/search/types.d.ts +3 -1
- package/dist/types/tools/subagent/SubagentExecutionRegistry.d.ts +6 -0
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +22 -1
- package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -1
- package/dist/types/tools/subagent/diagnostics.d.ts +56 -8
- package/dist/types/tools/subagent/hostArgs.d.ts +57 -0
- package/dist/types/tools/subagent/index.d.ts +3 -0
- package/dist/types/types/graph.d.ts +39 -0
- package/dist/types/types/run.d.ts +6 -2
- package/dist/types/types/tools.d.ts +2 -0
- package/package.json +4 -4
- package/src/agents/AgentContext.ts +3 -2
- package/src/decisions/deadline.ts +92 -0
- package/src/decisions/dialect.ts +200 -0
- package/src/decisions/http.ts +175 -0
- package/src/decisions/index.ts +14 -0
- package/src/decisions/presets.ts +111 -0
- package/src/decisions/questions.ts +128 -0
- package/src/decisions/structuredChat.ts +358 -0
- package/src/decisions/structuredOutput.ts +25 -0
- package/src/decisions/traceMarker.ts +2 -0
- package/src/decisions/transport.ts +335 -0
- package/src/decisions/types.ts +193 -0
- package/src/graphs/Graph.ts +57 -9
- package/src/index.ts +9 -0
- package/src/langfuseToolOutputTracing.ts +8 -1
- package/src/llm/invoke.ts +48 -7
- package/src/llm/openai/index.ts +8 -0
- package/src/llm/providerTextBoundary.ts +446 -0
- package/src/llm/providerTextChunk.ts +15 -0
- package/src/llm/providerTextControls.ts +173 -0
- package/src/llm/stream/smoother.ts +4 -2
- package/src/protection/providerText.ts +325 -0
- package/src/protection/providerTextInput.ts +21 -0
- package/src/rerank/index.ts +4 -0
- package/src/rerank/search.ts +85 -0
- package/src/rerank/systemone.ts +140 -0
- package/src/rerank/types.ts +28 -0
- package/src/run.ts +13 -0
- package/src/stream.ts +33 -7
- package/src/summarization/node.ts +32 -14
- package/src/tools/SubagentTool.ts +14 -3
- package/src/tools/ToolNode.ts +7 -3
- package/src/tools/search/search.ts +4 -4
- package/src/tools/search/tool.ts +27 -25
- package/src/tools/search/types.ts +4 -1
- package/src/tools/subagent/SubagentExecutionRegistry.ts +27 -2
- package/src/tools/subagent/SubagentExecutor.ts +323 -28
- package/src/tools/subagent/SubagentReplay.ts +10 -3
- package/src/tools/subagent/childGraphConfig.ts +12 -1
- package/src/tools/subagent/diagnostics.ts +180 -9
- package/src/tools/subagent/hostArgs.ts +413 -0
- package/src/tools/subagent/index.ts +20 -0
- package/src/types/graph.ts +44 -0
- package/src/types/run.ts +6 -2
- package/src/types/tools.ts +6 -1
package/src/index.ts
CHANGED
|
@@ -119,3 +119,12 @@ export type {
|
|
|
119
119
|
StreamLimitState,
|
|
120
120
|
StreamLimitKind,
|
|
121
121
|
} from './llm/streamLimits';
|
|
122
|
+
export * from './decisions';
|
|
123
|
+
export * from './rerank';
|
|
124
|
+
|
|
125
|
+
export { PROVIDER_TEXT_PROTECTION_VERSION, ProviderTextProtectionError } from './protection/providerText';
|
|
126
|
+
export type {
|
|
127
|
+
ProviderTextProtection,
|
|
128
|
+
ProviderTextProtectionResult,
|
|
129
|
+
ProviderTextProtectionErrorCode,
|
|
130
|
+
} from './protection/providerText';
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
shouldDropLangfuseSpan,
|
|
22
22
|
} from '@/langfuseTraceShaping';
|
|
23
23
|
import { resolveToolOutputTracingConfigForSpan } from '@/langfuseRuntimeScope';
|
|
24
|
+
import { DECISION_PROMPT_PREFIX } from '@/decisions/traceMarker';
|
|
24
25
|
|
|
25
26
|
export { LANGFUSE_TOOL_OUTPUT_REDACTION_TEXT, resolveLangfuseConfig };
|
|
26
27
|
|
|
@@ -603,6 +604,10 @@ function redactValue(
|
|
|
603
604
|
return changed ? { value: next, changed } : { value, changed };
|
|
604
605
|
}
|
|
605
606
|
|
|
607
|
+
if (typeof value === 'string' && value.startsWith(DECISION_PROMPT_PREFIX)) {
|
|
608
|
+
return { value: config.redactionText, changed: true };
|
|
609
|
+
}
|
|
610
|
+
|
|
606
611
|
if (!isRecord(value)) {
|
|
607
612
|
return { value, changed: false };
|
|
608
613
|
}
|
|
@@ -686,7 +691,9 @@ function redactSerializedValue(
|
|
|
686
691
|
|
|
687
692
|
const trimmed = value.trim();
|
|
688
693
|
if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
|
|
689
|
-
return
|
|
694
|
+
return trimmed.startsWith(DECISION_PROMPT_PREFIX)
|
|
695
|
+
? redactValue(trimmed, config, redactionContext)
|
|
696
|
+
: { value, changed: false };
|
|
690
697
|
}
|
|
691
698
|
|
|
692
699
|
try {
|
package/src/llm/invoke.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type { ToolCall } from '@langchain/core/messages/tool';
|
|
|
14
14
|
import type { BaseMessage } from '@langchain/core/messages';
|
|
15
15
|
import type { ToolOutputReferenceRegistry } from '@/tools/toolOutputReferences';
|
|
16
16
|
import type { PreparedProviderRequest } from '@/llm/prepareProviderRequest';
|
|
17
|
+
import type { ProviderTextProtection } from '@/protection/providerText';
|
|
17
18
|
import type { ContextOverflowContext } from '@/utils/errors';
|
|
18
19
|
import type { StreamLimitState } from '@/llm/streamLimits';
|
|
19
20
|
import type { PreemptAction } from '@/llm/preempt';
|
|
@@ -28,6 +29,12 @@ import {
|
|
|
28
29
|
STREAM_LIMIT_REDISPATCH_KEY,
|
|
29
30
|
STREAM_LIMIT_ATTEMPT_KEY,
|
|
30
31
|
} from '@/llm/streamLimits';
|
|
32
|
+
import {
|
|
33
|
+
validateProviderTextProtection,
|
|
34
|
+
ProviderTextProtectionError,
|
|
35
|
+
createProviderTextRestartCancellation,
|
|
36
|
+
isProviderTextRestartCancellation,
|
|
37
|
+
} from '@/protection/providerText';
|
|
31
38
|
import {
|
|
32
39
|
inspectProviderMessageProjection,
|
|
33
40
|
ProviderMessageProjectionInvariantError,
|
|
@@ -56,6 +63,7 @@ import {
|
|
|
56
63
|
} from '@/llm/providers';
|
|
57
64
|
import { ChatModelStreamHandler, dispatchesChatModelStream } from '@/stream';
|
|
58
65
|
import { Constants, ContentTypes, GraphEvents, Providers } from '@/common';
|
|
66
|
+
import { withProviderTextBoundary } from '@/llm/providerTextBoundary';
|
|
59
67
|
import { PreparedSubagentError } from '@/tools/preparedSubagents';
|
|
60
68
|
import { assertNotTruncatedToolCall } from '@/llm/truncation';
|
|
61
69
|
import { resolveClientOptionsModel } from '@/llm/request';
|
|
@@ -623,6 +631,7 @@ function appendStreamChunk({
|
|
|
623
631
|
*/
|
|
624
632
|
interface AttemptInvokeCommonParams {
|
|
625
633
|
context?: InvokeContext;
|
|
634
|
+
providerTextProtection?: ProviderTextProtection;
|
|
626
635
|
onChunk?: OnChunk;
|
|
627
636
|
/**
|
|
628
637
|
* The agent lane this attempt belongs to, as the model node names it. Only
|
|
@@ -697,6 +706,9 @@ export async function attemptInvoke(
|
|
|
697
706
|
params: AttemptInvokeParams,
|
|
698
707
|
config?: RunnableConfig
|
|
699
708
|
): Promise<Partial<t.BaseGraphState>> {
|
|
709
|
+
const policy =
|
|
710
|
+
params.providerTextProtection ?? params.context?.providerTextProtection;
|
|
711
|
+
if (policy != null) validateProviderTextProtection(policy);
|
|
700
712
|
const provider = resolveAttemptProvider(params);
|
|
701
713
|
const providerStampedConfig: RunnableConfig = {
|
|
702
714
|
...config,
|
|
@@ -707,7 +719,14 @@ export async function attemptInvoke(
|
|
|
707
719
|
resolvedProvider: provider,
|
|
708
720
|
},
|
|
709
721
|
};
|
|
710
|
-
const
|
|
722
|
+
const preparedRequest = resolveAttemptRequest(params, providerStampedConfig);
|
|
723
|
+
const request =
|
|
724
|
+
policy == null
|
|
725
|
+
? preparedRequest
|
|
726
|
+
: {
|
|
727
|
+
...preparedRequest,
|
|
728
|
+
model: withProviderTextBoundary(preparedRequest.model, policy, provider),
|
|
729
|
+
};
|
|
711
730
|
const configuredModel =
|
|
712
731
|
providerStampedConfig.metadata?.[Constants.INVOKED_MODEL];
|
|
713
732
|
const modelId =
|
|
@@ -763,6 +782,7 @@ export async function attemptInvoke(
|
|
|
763
782
|
context: params.context,
|
|
764
783
|
onChunk: params.onChunk,
|
|
765
784
|
preemptAgentId: params.preemptAgentId,
|
|
785
|
+
providerTextProtection: policy,
|
|
766
786
|
},
|
|
767
787
|
stampedConfig
|
|
768
788
|
);
|
|
@@ -775,6 +795,16 @@ export async function attemptInvoke(
|
|
|
775
795
|
prepared?.finish(preparedAttempt, calls);
|
|
776
796
|
return result;
|
|
777
797
|
} catch (error) {
|
|
798
|
+
if (policy != null && config?.signal?.aborted === true) {
|
|
799
|
+
const reason: unknown = config.signal.reason;
|
|
800
|
+
if (reason instanceof StreamLimitExceededError || reason instanceof PreparedSubagentError) {
|
|
801
|
+
prepared?.finish(preparedAttempt, undefined, reason);
|
|
802
|
+
throw reason;
|
|
803
|
+
}
|
|
804
|
+
const cancelled = new ProviderTextProtectionError(reason instanceof ProviderTextProtectionError ? reason.code : 'cancelled');
|
|
805
|
+
prepared?.finish(preparedAttempt, undefined, cancelled);
|
|
806
|
+
throw cancelled;
|
|
807
|
+
}
|
|
778
808
|
prepared?.finish(preparedAttempt, undefined, error);
|
|
779
809
|
throw error;
|
|
780
810
|
} finally {
|
|
@@ -799,9 +829,10 @@ async function attemptInvokeBody(
|
|
|
799
829
|
context,
|
|
800
830
|
onChunk,
|
|
801
831
|
preemptAgentId,
|
|
832
|
+
providerTextProtection,
|
|
802
833
|
}: Pick<
|
|
803
834
|
AttemptInvokeCommonParams,
|
|
804
|
-
'context' | 'onChunk' | 'preemptAgentId'
|
|
835
|
+
'context' | 'onChunk' | 'preemptAgentId' | 'providerTextProtection'
|
|
805
836
|
> & {
|
|
806
837
|
request: PreparedProviderRequest;
|
|
807
838
|
},
|
|
@@ -1068,7 +1099,7 @@ async function attemptInvokeBody(
|
|
|
1068
1099
|
notePreemptRestartedRun(sealedRunId, finalChunk);
|
|
1069
1100
|
}
|
|
1070
1101
|
restartRoute = 'aborted';
|
|
1071
|
-
restartController.abort();
|
|
1102
|
+
restartController.abort(providerTextProtection == null ? undefined : createProviderTextRestartCancellation());
|
|
1072
1103
|
return true;
|
|
1073
1104
|
};
|
|
1074
1105
|
const unsubscribeWake =
|
|
@@ -1085,7 +1116,8 @@ async function attemptInvokeBody(
|
|
|
1085
1116
|
if (
|
|
1086
1117
|
signal?.aborted === true &&
|
|
1087
1118
|
(signal.reason instanceof StreamLimitExceededError ||
|
|
1088
|
-
signal.reason instanceof PreparedSubagentError
|
|
1119
|
+
signal.reason instanceof PreparedSubagentError ||
|
|
1120
|
+
signal.reason instanceof ProviderTextProtectionError)
|
|
1089
1121
|
) {
|
|
1090
1122
|
throw signal.reason;
|
|
1091
1123
|
}
|
|
@@ -1334,6 +1366,7 @@ async function attemptInvokeBody(
|
|
|
1334
1366
|
restartRoute === 'aborted' &&
|
|
1335
1367
|
!(error instanceof StreamLimitExceededError) &&
|
|
1336
1368
|
!(error instanceof PreparedSubagentError) &&
|
|
1369
|
+
(!(error instanceof ProviderTextProtectionError) || isProviderTextRestartCancellation(error)) &&
|
|
1337
1370
|
config.signal?.aborted !== true;
|
|
1338
1371
|
if (!ownAbort) {
|
|
1339
1372
|
throw error;
|
|
@@ -1561,6 +1594,7 @@ export async function tryFallbackProviders({
|
|
|
1561
1594
|
context,
|
|
1562
1595
|
onChunk,
|
|
1563
1596
|
streamLimitState,
|
|
1597
|
+
providerTextProtection,
|
|
1564
1598
|
preemptAgentId,
|
|
1565
1599
|
overflowContext,
|
|
1566
1600
|
prepareProviderRequest: prepareFallbackRequest,
|
|
@@ -1576,6 +1610,7 @@ export async function tryFallbackProviders({
|
|
|
1576
1610
|
/** Accounting-lease owner forwarded to each fallback attempt (see
|
|
1577
1611
|
* `AttemptInvokeParams.streamLimitState`). */
|
|
1578
1612
|
streamLimitState?: StreamLimitState;
|
|
1613
|
+
providerTextProtection?: ProviderTextProtection;
|
|
1579
1614
|
/** Forwarded so a fallback-served attempt records a discarded turn in the
|
|
1580
1615
|
* SAME lane the primary would have (see
|
|
1581
1616
|
* `AttemptInvokeParams.preemptAgentId`). Dropping it here would leave the
|
|
@@ -1610,6 +1645,7 @@ export async function tryFallbackProviders({
|
|
|
1610
1645
|
config?: RunnableConfig;
|
|
1611
1646
|
}) => BaseMessage[] | Promise<BaseMessage[]>;
|
|
1612
1647
|
}): Promise<Partial<t.BaseGraphState> | undefined> {
|
|
1648
|
+
if (primaryError instanceof ProviderTextProtectionError) throw primaryError;
|
|
1613
1649
|
const isOverflow = (
|
|
1614
1650
|
error: unknown,
|
|
1615
1651
|
contextOverride = overflowContext
|
|
@@ -1686,7 +1722,8 @@ export async function tryFallbackProviders({
|
|
|
1686
1722
|
if (
|
|
1687
1723
|
config?.signal?.aborted === true &&
|
|
1688
1724
|
(config.signal.reason instanceof StreamLimitExceededError ||
|
|
1689
|
-
config.signal.reason instanceof PreparedSubagentError
|
|
1725
|
+
config.signal.reason instanceof PreparedSubagentError ||
|
|
1726
|
+
config.signal.reason instanceof ProviderTextProtectionError)
|
|
1690
1727
|
) {
|
|
1691
1728
|
throw config.signal.reason;
|
|
1692
1729
|
}
|
|
@@ -1697,6 +1734,7 @@ export async function tryFallbackProviders({
|
|
|
1697
1734
|
context,
|
|
1698
1735
|
onChunk,
|
|
1699
1736
|
streamLimitState,
|
|
1737
|
+
providerTextProtection,
|
|
1700
1738
|
preemptAgentId,
|
|
1701
1739
|
},
|
|
1702
1740
|
fbConfig
|
|
@@ -1710,6 +1748,7 @@ export async function tryFallbackProviders({
|
|
|
1710
1748
|
context,
|
|
1711
1749
|
onChunk,
|
|
1712
1750
|
streamLimitState,
|
|
1751
|
+
providerTextProtection,
|
|
1713
1752
|
preemptAgentId,
|
|
1714
1753
|
},
|
|
1715
1754
|
fbConfig
|
|
@@ -1723,7 +1762,8 @@ export async function tryFallbackProviders({
|
|
|
1723
1762
|
if (
|
|
1724
1763
|
e instanceof StreamLimitExceededError ||
|
|
1725
1764
|
e instanceof PreparedSubagentError ||
|
|
1726
|
-
e instanceof InvalidModelToolCallError
|
|
1765
|
+
e instanceof InvalidModelToolCallError ||
|
|
1766
|
+
e instanceof ProviderTextProtectionError
|
|
1727
1767
|
) {
|
|
1728
1768
|
throw e;
|
|
1729
1769
|
}
|
|
@@ -1734,7 +1774,8 @@ export async function tryFallbackProviders({
|
|
|
1734
1774
|
if (
|
|
1735
1775
|
config?.signal?.aborted === true &&
|
|
1736
1776
|
(config.signal.reason instanceof StreamLimitExceededError ||
|
|
1737
|
-
config.signal.reason instanceof PreparedSubagentError
|
|
1777
|
+
config.signal.reason instanceof PreparedSubagentError ||
|
|
1778
|
+
config.signal.reason instanceof ProviderTextProtectionError)
|
|
1738
1779
|
) {
|
|
1739
1780
|
throw config.signal.reason;
|
|
1740
1781
|
}
|
package/src/llm/openai/index.ts
CHANGED
|
@@ -63,6 +63,7 @@ import {
|
|
|
63
63
|
hasToolCallChunks,
|
|
64
64
|
getReasoningKwargsText,
|
|
65
65
|
} from '@/llm/stream/chunkAdapters';
|
|
66
|
+
import { registerProviderTextChunkConstructor } from '@/llm/providerTextChunk';
|
|
66
67
|
import { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';
|
|
67
68
|
import { smoothStream, resolveStreamDelay } from '@/llm/stream/smoother';
|
|
68
69
|
import { INTENT_ARG, isIntentLabelProperty } from '@/tools/intentArg';
|
|
@@ -855,6 +856,8 @@ class ResponsesReplayAIMessageChunk extends AIMessageChunk {
|
|
|
855
856
|
}
|
|
856
857
|
}
|
|
857
858
|
|
|
859
|
+
registerProviderTextChunkConstructor(ResponsesReplayAIMessageChunk);
|
|
860
|
+
|
|
858
861
|
function makeResponsesReplayAggregationSafe(
|
|
859
862
|
chunk: ChatGenerationChunk
|
|
860
863
|
): ChatGenerationChunk {
|
|
@@ -2923,6 +2926,11 @@ export class AzureChatOpenAI extends OriginalAzureChatOpenAI {
|
|
|
2923
2926
|
super(fields);
|
|
2924
2927
|
this.completions = new LibreChatAzureOpenAICompletions(fields);
|
|
2925
2928
|
this.responses = new LibreChatAzureOpenAIResponses(fields);
|
|
2929
|
+
this.fields = {
|
|
2930
|
+
...this.fields,
|
|
2931
|
+
completions: this.completions,
|
|
2932
|
+
responses: this.responses,
|
|
2933
|
+
};
|
|
2926
2934
|
this._lc_stream_delay = resolveStreamDelay(fields?._lc_stream_delay);
|
|
2927
2935
|
this.firstPartyEndpoint = fields?.firstPartyEndpoint;
|
|
2928
2936
|
}
|