@openclaw/ai 2026.8.1 → 2026.8.33
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/{anthropic-Djj7L1rx.mjs → anthropic-BNeFhAh3.mjs} +197 -185
- package/dist/{anthropic-compaction-replay-CY4tkD4V.mjs → anthropic-compaction-replay-B6sEzXhr.mjs} +24 -7
- package/dist/{anthropic-payload-policy-i_5_inWe.d.mts → anthropic-payload-policy-kkq8L7tJ.d.mts} +2 -2
- package/dist/{api-registry-C9-wZd_W.d.mts → api-registry-CAK4bNkq.d.mts} +2 -2
- package/dist/{azure-openai-responses-Bj3czHNa.mjs → azure-openai-responses-CPvqFff1.mjs} +6 -5
- package/dist/diagnostics.mjs +1 -1
- package/dist/event-stream-CDHaMazK.d.mts +1 -0
- package/dist/{event-stream-UhnxHuqt.d.mts → event-stream-DcQzYRWO.d.mts} +1 -1
- package/dist/event-stream.d.mts +2 -2
- package/dist/{google-0Ca6TYbw.mjs → google-B6pXyWB0.mjs} +7 -5
- package/dist/{google-shared-DVfL9COU.mjs → google-shared-C_3CT37v.mjs} +25 -23
- package/dist/{google-vertex-5dAMxprN.mjs → google-vertex-BA2c1toq.mjs} +7 -5
- package/dist/{host-DoPJJ1KD.d.mts → host-DL2Zd9ep.d.mts} +3 -3
- package/dist/{host-D51fmkH6.mjs → host-DhlhmyR6.mjs} +17 -2
- package/dist/index-DcGDVDnC.d.mts +118 -0
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +4 -4
- package/dist/internal/anthropic.d.mts +11 -6
- package/dist/internal/anthropic.mjs +5 -5
- package/dist/internal/openai-responses-payload-policy.d.mts +1 -1
- package/dist/internal/openai-responses-payload-policy.mjs +1 -1
- package/dist/internal/openai.d.mts +7 -7
- package/dist/internal/openai.mjs +10 -10
- package/dist/internal/runtime.d.mts +5 -5
- package/dist/internal/runtime.mjs +3 -3
- package/dist/internal/shared.d.mts +2 -2
- package/dist/internal/shared.mjs +3 -3
- package/dist/{mistral-BCnrI-kV.mjs → mistral-CTcM9TGz.mjs} +18 -13
- package/dist/{openai-chatgpt-responses-CGBGWSqr.mjs → openai-chatgpt-responses-QqHf1o9v.mjs} +17 -16
- package/dist/{openai-completions-BaTuwID7.mjs → openai-completions-BCmKwgsc.mjs} +17 -14
- package/dist/{openai-completions-compat-DB7FFq7k.d.mts → openai-completions-compat-BJE92duO.d.mts} +3 -3
- package/dist/{openai-completions-stream-Bpns6uNc.mjs → openai-completions-stream-0mm4YUag.mjs} +30 -27
- package/dist/openai-prompt-cache-BUJI5cW-.d.mts +16 -0
- package/dist/openai-prompt-cache-CGnVB74a.mjs +21 -0
- package/dist/{openai-responses-compaction-window-DwydGZI8.mjs → openai-responses-compaction-window-vuCaZYLS.mjs} +3 -3
- package/dist/{openai-responses-contracts-DgaR3t5T.d.mts → openai-responses-contracts-DFJOyjd1.d.mts} +6 -3
- package/dist/{openai-responses-1GBcQujk.mjs → openai-responses-pMJVxhHW.mjs} +11 -12
- package/dist/{openai-responses-prompt-observer-internal-_nhGTn2b.mjs → openai-responses-prompt-observer-internal-COaImuDp.mjs} +3 -3
- package/dist/{openai-responses-shared-zPmKnhF5.mjs → openai-responses-shared-CZTRmOFP.mjs} +27 -26
- package/dist/{openai-tool-schema-Dgl4H2MU.mjs → openai-tool-schema-DjS9-DHe.mjs} +14 -12
- package/dist/{provider-error-jZP5NMTZ.mjs → provider-error-BI8kIViN.mjs} +11 -11
- package/dist/{provider-options-HvA_slFa.d.mts → provider-options-CedgbINH.d.mts} +2 -2
- package/dist/{provider-transcript-transform-C01bQ5a3.mjs → provider-transcript-transform-BnsgCK8K.mjs} +1 -1
- package/dist/provider-types.d.mts +6 -6
- package/dist/providers.d.mts +2 -2
- package/dist/providers.mjs +10 -10
- package/dist/{reasoning-tag-text-partitioner-CwzKb0bA.mjs → reasoning-tag-text-partitioner-BsUX44Tq.mjs} +29 -19
- package/dist/{sanitize-unicode-DCkltN94.mjs → sanitize-unicode-Cfcaqa9V.mjs} +2 -8
- package/dist/{simple-options-DKx86yX9.mjs → simple-options-Bwi0x0bX.mjs} +2 -2
- package/dist/{src-Bu3FiFAG.mjs → src-BhgSqnbz.mjs} +88 -2
- package/dist/{tool-schema-json-projection-qvTEs5Am.mjs → tool-schema-json-projection-_gcOC21Y.mjs} +21 -31
- package/dist/{transport-stream-shared-NjwWNaRY.d.mts → transport-stream-shared-B38NWYTa.d.mts} +4 -4
- package/dist/{transport-stream-shared-CT5ycdzn.mjs → transport-stream-shared-y1YR1k5K.mjs} +2 -2
- package/dist/{transport-utils-BHx9z8Cl.mjs → transport-utils-DdLjoPMb.mjs} +2 -2
- package/dist/transports.d.mts +12 -9
- package/dist/transports.mjs +91 -73
- package/dist/types-DmdQ-xcq.d.mts +1 -0
- package/dist/{types-h38Azne1.d.mts → types-DmeScJQe.d.mts} +25 -13
- package/dist/types.d.mts +6 -6
- package/dist/types.mjs +3 -3
- package/dist/{validation-B61OhAio.mjs → validation-CJZtym2g.mjs} +7 -5
- package/dist/{validation-C68lP2uy.d.mts → validation-DPDgbaD3.d.mts} +1 -1
- package/dist/validation.d.mts +1 -1
- package/dist/validation.mjs +1 -1
- package/package.json +2 -2
- package/dist/event-stream-C988TSLe.d.mts +0 -1
- package/dist/index-N3zr6__t.d.mts +0 -105
- package/dist/openai-prompt-cache-2uo_1OR1.d.mts +0 -7
- package/dist/openai-prompt-cache-mZTCdRPo.mjs +0 -12
- package/dist/types-DtGu2d3C.d.mts +0 -1
package/dist/transports.mjs
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as resolveClaudeSonnet5ModelIdentity, h as resolveClaudeOpus5ModelIdentity, v as supportsClaudeAdaptiveThinking, x as supportsClaudeNativeXhighEffort } from "./src-BhgSqnbz.mjs";
|
|
2
2
|
import { c as normalizeLowercaseStringOrEmpty, o as isRecord, s as hasNonEmptyString } from "./utf16-slice-qz3nsy87.mjs";
|
|
3
|
-
import { r as calculateCost } from "./sanitize-unicode-
|
|
4
|
-
import { S as usesClaudeStreamingRefusalContract, _ as prepareClaudeNoPrefillRequestContext, a as describeToolResultMediaPlaceholder, c as extractToolResultText, d as isImageWithMediaPayload, f as ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, g as mapAnthropicStopReason, h as defaultsClaudeAdaptiveThinking, m as applyClaudeRequestContract, n as getAiTransportHost, p as ANTHROPIC_CLAUDE_CODE_VERSION, r as resolveAiTransportHeaderSentinels, s as extractToolResultBlockText, v as requiresClaudeAdaptiveThinking, x as usesClaudeFable5MessagesContract, y as resolveAnthropicThinkingEffort } from "./host-
|
|
5
|
-
import { i as stableStringify } from "./provider-error-
|
|
6
|
-
import { n as toErrorObject, t as createResponsesPromptEgressObserver } from "./openai-responses-prompt-observer-internal-
|
|
3
|
+
import { r as calculateCost } from "./sanitize-unicode-Cfcaqa9V.mjs";
|
|
4
|
+
import { S as usesClaudeStreamingRefusalContract, _ as prepareClaudeNoPrefillRequestContext, a as describeToolResultMediaPlaceholder, c as extractToolResultText, d as isImageWithMediaPayload, f as ANTHROPIC_CLAUDE_CODE_BILLING_SYSTEM_BLOCK, g as mapAnthropicStopReason, h as defaultsClaudeAdaptiveThinking, m as applyClaudeRequestContract, n as getAiTransportHost, p as ANTHROPIC_CLAUDE_CODE_VERSION, r as resolveAiTransportHeaderSentinels, s as extractToolResultBlockText, v as requiresClaudeAdaptiveThinking, x as usesClaudeFable5MessagesContract, y as resolveAnthropicThinkingEffort } from "./host-DhlhmyR6.mjs";
|
|
5
|
+
import { i as stableStringify } from "./provider-error-BI8kIViN.mjs";
|
|
6
|
+
import { n as toErrorObject, t as createResponsesPromptEgressObserver } from "./openai-responses-prompt-observer-internal-COaImuDp.mjs";
|
|
7
7
|
import { a as asNonNegativeFiniteNumber } from "./base64-CEFBpSkN.mjs";
|
|
8
8
|
import { n as uniqueStrings } from "./string-normalization--fwJ4S2q.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { r as resolveOpenAIResponsesCacheParams } from "./openai-prompt-cache-CGnVB74a.mjs";
|
|
10
|
+
import { A as createAnthropicInlineImageBudget, B as omitFoundryBearerCredentialHeaders, C as ANTHROPIC_SERVER_SIDE_FALLBACKS, D as readAnthropicFallbackBoundary, E as applyAnthropicFallbackBoundary, F as applyAnthropicPayloadPolicyToParams, I as resolveAnthropicEphemeralCacheControl, L as resolveAnthropicPayloadPolicy, M as resolveAnthropicImageMediaType, N as applyAnthropicCacheControlToMessages, O as resolveAnthropicFallbackServingModelCost, P as applyAnthropicEphemeralCacheControlMarkers, R as resolveAnthropicServerCompactionPlan, S as readAnthropicInputTransformations, V as usesFoundryBearerAuth, _ as toClaudeCodeToolName, a as suppressAnthropicCompaction, b as findActiveAnthropicToolTurnAssistantIndex, f as normalizeAnthropicToolCallId, g as resolveOriginalAnthropicToolName, h as reconcileAnthropicToolChoice, i as resolveNewestAnthropicCompaction, j as normalizeAnthropicInlineContent, k as applyAnthropicRefusal, m as projectAnthropicTools, n as createCompactionCapture, o as applyAnthropicMessageDeltaUsage, p as normalizeAnthropicToolChoice, r as isAnthropicReplayRejection, s as applyAnthropicMessageStartUsage, t as buildAnthropicReplayPlan, v as ANTHROPIC_OMITTED_REASONING_TEXT, w as ANTHROPIC_SERVER_SIDE_FALLBACK_BETA, x as logAnthropicThinkingDrops, y as applyAnthropicThinkingBindingControls, z as isAnthropicOAuthApiKey } from "./anthropic-compaction-replay-B6sEzXhr.mjs";
|
|
10
11
|
import { t as resolveCacheRetention } from "./cache-retention-0x979a5V.mjs";
|
|
11
|
-
import { a as codeModeToolSurfaceObserver, d as stripSystemPromptCacheBoundary, m as sortPromptCacheToolsByName, o as reasoningTagTextPolicy, t as adjustMaxTokensForThinking } from "./simple-options-
|
|
12
|
-
import { a as resolveProviderEndpoint, c as transformTransportMessages, i as resolveOpenAIStrictToolSetting, n as buildGuardedModelFetch } from "./tool-schema-json-projection-
|
|
13
|
-
import { a as isGoogleGemini3FlashModel, c as parseRetryAfterSeconds, f as resolveModelHeaderSentinels$1, i as isCodeModeModelVisibleToolName, l as readResponseTextSnippet, m as supportsModelTools, n as createAbortError$1, o as isGoogleGemini3ProModel, p as sha256Hex, r as estimateStringChars, t as MALFORMED_STREAMING_FRAGMENT_ERROR_MESSAGE, u as redactIdentifier } from "./transport-utils-
|
|
12
|
+
import { a as codeModeToolSurfaceObserver, d as stripSystemPromptCacheBoundary, m as sortPromptCacheToolsByName, o as reasoningTagTextPolicy, t as adjustMaxTokensForThinking } from "./simple-options-Bwi0x0bX.mjs";
|
|
13
|
+
import { a as resolveProviderEndpoint, c as transformTransportMessages, i as resolveOpenAIStrictToolSetting, n as buildGuardedModelFetch } from "./tool-schema-json-projection-_gcOC21Y.mjs";
|
|
14
|
+
import { a as isGoogleGemini3FlashModel, c as parseRetryAfterSeconds, f as resolveModelHeaderSentinels$1, i as isCodeModeModelVisibleToolName, l as readResponseTextSnippet, m as supportsModelTools, n as createAbortError$1, o as isGoogleGemini3ProModel, p as sha256Hex, r as estimateStringChars, t as MALFORMED_STREAMING_FRAGMENT_ERROR_MESSAGE, u as redactIdentifier } from "./transport-utils-DdLjoPMb.mjs";
|
|
14
15
|
import { n as getEnvApiKey } from "./env-api-keys-bktO00EJ.mjs";
|
|
15
|
-
import { S as quoteUnsafeIntegerLiterals, _ as transportAbortError, a as createWritableTransportEventStream, b as parseJsonObjectPreservingUnsafeIntegers, c as finalizeTransportStream, d as notifyProviderHttpMetadata, f as notifyProviderHttpResponse, g as sanitizeTransportPayloadText, h as sanitizeNonEmptyTransportPayloadText, i as createEmptyTransportUsage, l as mergeTransportHeaders, m as parseTerminalToolCallArguments, n as coerceTransportToolCallArguments, o as failTransportStream, p as notifyProviderStreamOpened, r as copyProviderAcceptanceObserver, s as finalizeTerminalToolCallArguments, t as assignTransportErrorDetails, u as mergeTransportMetadata, v as withProviderAcceptanceObserver, x as parseJsonPreservingUnsafeIntegers, y as withProviderResponseHook } from "./transport-stream-shared-
|
|
16
|
-
import { C as createDeepSeekTextFilter, E as tagUnresolvedTextAsCommentary, S as shouldOmitOllamaCompatResponseFormat, T as tagPendingCommentaryText, _ as hasToolCallHistory, a as buildOpenAISdkClientOptions, b as resolveOpenAICompletionsCompat, c as filterCodeModePayloadTools, d as readCodeModePayloadToolName, f as resolveCodeModeResponsesVisibleToolNames, g as convertMessages, h as resolveOpenAIReasoningEffortMap, i as buildOpenAIClientHeaders, l as getCompat, m as usesNativeOpenAICodexResponsesBackend, n as shouldEmitOpenAICompletionsReasoning, o as buildOpenAISdkRequestOptions, p as resolveOpenAIStrictToolFlagWithDiagnostics, r as assertCodeModeResponsesToolSurface, s as enforceCodeModeResponsesToolSurface, t as processCompletionsStream, u as isOpenAICodexResponsesModel, v as finalizeOpenAICompletionsToolCalls, x as resolveOpenAICompletionsResponseFormat, y as detectOpenAICompletionsCompat } from "./openai-completions-stream-
|
|
16
|
+
import { S as quoteUnsafeIntegerLiterals, _ as transportAbortError, a as createWritableTransportEventStream, b as parseJsonObjectPreservingUnsafeIntegers, c as finalizeTransportStream, d as notifyProviderHttpMetadata, f as notifyProviderHttpResponse, g as sanitizeTransportPayloadText, h as sanitizeNonEmptyTransportPayloadText, i as createEmptyTransportUsage, l as mergeTransportHeaders, m as parseTerminalToolCallArguments, n as coerceTransportToolCallArguments, o as failTransportStream, p as notifyProviderStreamOpened, r as copyProviderAcceptanceObserver, s as finalizeTerminalToolCallArguments, t as assignTransportErrorDetails, u as mergeTransportMetadata, v as withProviderAcceptanceObserver, x as parseJsonPreservingUnsafeIntegers, y as withProviderResponseHook } from "./transport-stream-shared-y1YR1k5K.mjs";
|
|
17
|
+
import { C as createDeepSeekTextFilter, E as tagUnresolvedTextAsCommentary, S as shouldOmitOllamaCompatResponseFormat, T as tagPendingCommentaryText, _ as hasToolCallHistory, a as buildOpenAISdkClientOptions, b as resolveOpenAICompletionsCompat, c as filterCodeModePayloadTools, d as readCodeModePayloadToolName, f as resolveCodeModeResponsesVisibleToolNames, g as convertMessages, h as resolveOpenAIReasoningEffortMap, i as buildOpenAIClientHeaders, l as getCompat, m as usesNativeOpenAICodexResponsesBackend, n as shouldEmitOpenAICompletionsReasoning, o as buildOpenAISdkRequestOptions, p as resolveOpenAIStrictToolFlagWithDiagnostics, r as assertCodeModeResponsesToolSurface, s as enforceCodeModeResponsesToolSurface, t as processCompletionsStream, u as isOpenAICodexResponsesModel, v as finalizeOpenAICompletionsToolCalls, x as resolveOpenAICompletionsResponseFormat, y as detectOpenAICompletionsCompat } from "./openai-completions-stream-0mm4YUag.mjs";
|
|
17
18
|
import { t as createDeferredEventBuffer } from "./deferred-event-buffer-DAvyP7qA.mjs";
|
|
18
19
|
import { r as parseStreamingJson, t as createToolArgumentPreviewSchedule } from "./json-parse-BuAJEbdW.mjs";
|
|
19
20
|
import { t as notifyLlmRequestActivity } from "./llm-request-activity-BjtkplhG.mjs";
|
|
20
21
|
import { t as googleFlashSupportsMinimalThinking } from "./google-thinking-level-C-V3tecN.mjs";
|
|
21
|
-
import { B as buildResponsesInputMessage, C as summarizeResponsesTools, G as captureOpenAIResponsesCompaction, H as createOpenAIResponsesAssistantOutput, I as createResponsesStreamWithEncryptedContentRetry, J as resolveReplayableResponsesMessageId, K as resolveNewestOpenAIResponsesCompactionReplay, L as isInvalidEncryptedContentError, R as resolveAzureOpenAIApiVersion, S as summarizeResponsesPayload, U as CompactionReplayRefreshRequiredError, V as convertResponsesMessages, W as buildOpenAIResponsesReasoningReplayMetadata, X as resolveModelPayloadDebugMode, Y as emitModelTransportDebug, Z as resolveModelSseDebugMode, _ as safeDebugValue, b as summarizeOpenAITransportError, c as processResponsesStream, f as observeResponsesStream, g as normalizeResponsesFailedEvent, h as logResponsesFailedNoDetails, m as buildResponsesFailedNoDetailsObservation, n as applyResponsesServiceTierPricing, p as ResponsesStreamFailure, q as suppressOpenAIResponsesCompaction, v as stringifyRedactedEvent, x as summarizeResponsesFailedNoDetailsObservation, y as stringifyRedactedPayload, z as resolveNextResponsesEncryptedContentAttempt } from "./openai-responses-shared-
|
|
22
|
-
import { A as readOpenAICompletionsReasoningBatch, C as createOpenAIProviderAcceptanceHook, D as measureUtf8AppendBytes, E as log, M as resolvePromptCacheKey, N as throwIfModelStreamAborted, O as parseOpenAICompletionsUsage, S as createModelStreamCooperativeScheduler, T as isOpenAICompletionsThinkingEnabled, b as reconcileOpenAIResponsesToolChoice, j as resolveOpenAIClientBaseUrl, k as readOpenAICompletionsContentDeltas, r as normalizeOpenAIStrictToolParameters, v as projectOpenAITools, w as createOpenAIResponseHook, x as GEMINI_THOUGHT_SIGNATURE_VALIDATOR_SKIP, y as reconcileOpenAICompletionsToolChoice } from "./openai-tool-schema-
|
|
22
|
+
import { B as buildResponsesInputMessage, C as summarizeResponsesTools, G as captureOpenAIResponsesCompaction, H as createOpenAIResponsesAssistantOutput, I as createResponsesStreamWithEncryptedContentRetry, J as resolveReplayableResponsesMessageId, K as resolveNewestOpenAIResponsesCompactionReplay, L as isInvalidEncryptedContentError, R as resolveAzureOpenAIApiVersion, S as summarizeResponsesPayload, U as CompactionReplayRefreshRequiredError, V as convertResponsesMessages, W as buildOpenAIResponsesReasoningReplayMetadata, X as resolveModelPayloadDebugMode, Y as emitModelTransportDebug, Z as resolveModelSseDebugMode, _ as safeDebugValue, b as summarizeOpenAITransportError, c as processResponsesStream, f as observeResponsesStream, g as normalizeResponsesFailedEvent, h as logResponsesFailedNoDetails, m as buildResponsesFailedNoDetailsObservation, n as applyResponsesServiceTierPricing, p as ResponsesStreamFailure, q as suppressOpenAIResponsesCompaction, v as stringifyRedactedEvent, x as summarizeResponsesFailedNoDetailsObservation, y as stringifyRedactedPayload, z as resolveNextResponsesEncryptedContentAttempt } from "./openai-responses-shared-CZTRmOFP.mjs";
|
|
23
|
+
import { A as readOpenAICompletionsReasoningBatch, C as createOpenAIProviderAcceptanceHook, D as measureUtf8AppendBytes, E as log, M as resolvePromptCacheKey, N as throwIfModelStreamAborted, O as parseOpenAICompletionsUsage, S as createModelStreamCooperativeScheduler, T as isOpenAICompletionsThinkingEnabled, b as reconcileOpenAIResponsesToolChoice, j as resolveOpenAIClientBaseUrl, k as readOpenAICompletionsContentDeltas, r as normalizeOpenAIStrictToolParameters, v as projectOpenAITools, w as createOpenAIResponseHook, x as GEMINI_THOUGHT_SIGNATURE_VALIDATOR_SKIP, y as reconcileOpenAICompletionsToolChoice } from "./openai-tool-schema-DjS9-DHe.mjs";
|
|
23
24
|
import { i as getFirstStreamEventTimeoutMs, r as getFirstStreamEventTimeoutHandler, t as createFirstStreamEventAbortController } from "./stream-first-event-timeout-DcNjoFQE.mjs";
|
|
24
|
-
import { C as isOpenAIGpt54MiniModel, D as resolveOpenAIReasoningEffortForModel, E as normalizeOpenAIReasoningEffort, T as isOpenAIGpt56Model, _ as OpenAIResponsesWebSocketPostDispatchError, a as applyOpenAIResponsesPayloadPolicy, c as resolveOpenAIResponsesServerCompactionPlan, d as OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS, f as OPENAI_RESPONSES_APIS, i as sanitizeResponsesImagePayload, l as AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS, n as isOpenAIResponsesCompactionOutput, o as resolveOpenAIResponsesCompactEndpointPlan, s as resolveOpenAIResponsesPayloadPolicy, t as createBoundedOpenAIResponsesCompactionFetch, v as OpenAIResponsesWebSocketPreDispatchError, w as isOpenAIGpt55Model, x as parseOpenAIResponsesWebSocketServerError, y as OpenAIResponsesWebSocketSafeRetryError } from "./openai-responses-compaction-window-
|
|
25
|
+
import { A as supportsOpenAITemperature, C as isOpenAIGpt54MiniModel, D as resolveOpenAIReasoningEffortForModel, E as normalizeOpenAIReasoningEffort, T as isOpenAIGpt56Model, _ as OpenAIResponsesWebSocketPostDispatchError, a as applyOpenAIResponsesPayloadPolicy, c as resolveOpenAIResponsesServerCompactionPlan, d as OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS, f as OPENAI_RESPONSES_APIS, i as sanitizeResponsesImagePayload, l as AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS, n as isOpenAIResponsesCompactionOutput, o as resolveOpenAIResponsesCompactEndpointPlan, s as resolveOpenAIResponsesPayloadPolicy, t as createBoundedOpenAIResponsesCompactionFetch, v as OpenAIResponsesWebSocketPreDispatchError, w as isOpenAIGpt55Model, x as parseOpenAIResponsesWebSocketServerError, y as OpenAIResponsesWebSocketSafeRetryError } from "./openai-responses-compaction-window-vuCaZYLS.mjs";
|
|
25
26
|
import { i as resolveAzureDeploymentNameFromMap, t as isOpenAICompatibleAzureResponsesBaseUrl } from "./azure-openai-responses-client-compat-C7K7QfUE.mjs";
|
|
26
27
|
import { n as registerSessionResourceCleanup } from "./session-resources-CkR4WWy1.mjs";
|
|
27
28
|
import { randomUUID } from "node:crypto";
|
|
@@ -33,12 +34,12 @@ import { ResponsesWS } from "openai/resources/responses/ws.js";
|
|
|
33
34
|
* Converts OpenClaw contexts/tools into Anthropic payloads, streams SSE events
|
|
34
35
|
* back into runtime output blocks, and applies provider request policy.
|
|
35
36
|
*/
|
|
36
|
-
const ANTHROPIC_MESSAGES_ERROR_BODY_MAX_BYTES =
|
|
37
|
+
const ANTHROPIC_MESSAGES_ERROR_BODY_MAX_BYTES = 8192;
|
|
37
38
|
const ANTHROPIC_MESSAGES_ERROR_BODY_MAX_CHARS = 400;
|
|
38
39
|
const ANTHROPIC_MESSAGES_ERROR_BODY_READ_IDLE_TIMEOUT_MS = 1e4;
|
|
39
40
|
const ANTHROPIC_MESSAGES_DEFAULT_MAX_TOKENS = 4096;
|
|
40
41
|
const ANTHROPIC_MESSAGES_FALLBACK_CONTEXT_DIVISOR = 4;
|
|
41
|
-
const ANTHROPIC_MESSAGES_SSE_PENDING_BUFFER_MAX_CHARS =
|
|
42
|
+
const ANTHROPIC_MESSAGES_SSE_PENDING_BUFFER_MAX_CHARS = 16777216;
|
|
42
43
|
function resolveAnthropicRequestModelId(model) {
|
|
43
44
|
if (isDirectAnthropicModel(model) && /^anthropic\//i.test(model.id)) return model.id.replace(/^anthropic\//i, "");
|
|
44
45
|
return model.id;
|
|
@@ -132,14 +133,13 @@ async function convertAnthropicMessages(messages, model, isOAuthToken, options)
|
|
|
132
133
|
const msg = transformedMessages[i];
|
|
133
134
|
if (!msg) continue;
|
|
134
135
|
if (msg.role === "user") {
|
|
135
|
-
const isRuntimeContextCarrier = msg.runtimeContextCarrier === true;
|
|
136
136
|
if (typeof msg.content === "string") {
|
|
137
137
|
if (msg.content.trim().length > 0) {
|
|
138
|
+
if (msg.runtimeContextCarrier && !msg.runtimeContextCarrierRetained) options.cacheBreakpointOptOutMessageIndexes?.add(params.length);
|
|
138
139
|
const userParam = {
|
|
139
140
|
role: "user",
|
|
140
141
|
content: sanitizeTransportPayloadText(msg.content)
|
|
141
142
|
};
|
|
142
|
-
if (isRuntimeContextCarrier) options.cacheBreakpointOptOutMessageIndexes.add(params.length);
|
|
143
143
|
params.push(userParam);
|
|
144
144
|
}
|
|
145
145
|
continue;
|
|
@@ -161,11 +161,11 @@ async function convertAnthropicMessages(messages, model, isOAuthToken, options)
|
|
|
161
161
|
let filteredBlocks = model.input.includes("image") ? blocks : blocks.filter((block) => block.type !== "image");
|
|
162
162
|
filteredBlocks = filteredBlocks.filter((block) => block.type !== "text" || block.text.trim().length > 0);
|
|
163
163
|
if (filteredBlocks.length === 0) continue;
|
|
164
|
+
if (msg.runtimeContextCarrier && !msg.runtimeContextCarrierRetained) options.cacheBreakpointOptOutMessageIndexes?.add(params.length);
|
|
164
165
|
const userParam = {
|
|
165
166
|
role: "user",
|
|
166
167
|
content: filteredBlocks
|
|
167
168
|
};
|
|
168
|
-
if (isRuntimeContextCarrier) options.cacheBreakpointOptOutMessageIndexes.add(params.length);
|
|
169
169
|
params.push(userParam);
|
|
170
170
|
continue;
|
|
171
171
|
}
|
|
@@ -401,12 +401,13 @@ async function* parseAnthropicSseBody(body, signal) {
|
|
|
401
401
|
function createAnthropicMessagesClient(params) {
|
|
402
402
|
const url = resolveAnthropicMessagesUrl(params.baseURL);
|
|
403
403
|
return { messages: { async stream(body, options) {
|
|
404
|
-
const headers = mergeTransportHeaders({
|
|
404
|
+
const headers = new Headers(mergeTransportHeaders({
|
|
405
405
|
"content-type": "application/json",
|
|
406
406
|
"anthropic-version": "2023-06-01",
|
|
407
407
|
...params.apiKey ? { "x-api-key": params.apiKey } : {},
|
|
408
408
|
...params.authToken ? { authorization: `Bearer ${params.authToken}` } : {}
|
|
409
|
-
}, params.defaultHeaders);
|
|
409
|
+
}, params.defaultHeaders));
|
|
410
|
+
for (const [name, value] of Object.entries(options?.headers ?? {})) headers.set(name, value);
|
|
410
411
|
const response = await params.fetch(url, {
|
|
411
412
|
method: "POST",
|
|
412
413
|
headers,
|
|
@@ -498,18 +499,20 @@ function createAnthropicTransportClient(params) {
|
|
|
498
499
|
}
|
|
499
500
|
if (useAnthropicServerSideFallback(model)) betaFeatures.push(ANTHROPIC_SERVER_SIDE_FALLBACK_BETA);
|
|
500
501
|
const betaHeader = buildAnthropicBetaHeader(model, betaFeatures, { oauth: false });
|
|
502
|
+
const defaultHeaders = mergeTransportHeaders({
|
|
503
|
+
accept: "application/json",
|
|
504
|
+
"anthropic-dangerous-direct-browser-access": "true",
|
|
505
|
+
...betaHeader ? { "anthropic-beta": betaHeader } : {}
|
|
506
|
+
}, model.headers, options?.headers);
|
|
501
507
|
return {
|
|
502
508
|
client: createAnthropicMessagesClient({
|
|
503
509
|
apiKey,
|
|
504
510
|
baseURL: model.baseUrl,
|
|
505
|
-
defaultHeaders
|
|
506
|
-
accept: "application/json",
|
|
507
|
-
"anthropic-dangerous-direct-browser-access": "true",
|
|
508
|
-
...betaHeader ? { "anthropic-beta": betaHeader } : {}
|
|
509
|
-
}, model.headers, options?.headers),
|
|
511
|
+
defaultHeaders,
|
|
510
512
|
fetch
|
|
511
513
|
}),
|
|
512
|
-
isOAuthToken: false
|
|
514
|
+
isOAuthToken: false,
|
|
515
|
+
directApiKeyBetaHeader: isDirectAnthropicModel(model) ? new Headers(defaultHeaders).get("anthropic-beta") ?? "" : void 0
|
|
513
516
|
};
|
|
514
517
|
}
|
|
515
518
|
async function buildAnthropicParams(model, context, isOAuthToken, options) {
|
|
@@ -528,17 +531,17 @@ async function buildAnthropicParams(model, context, isOAuthToken, options) {
|
|
|
528
531
|
cacheRetention: options?.cacheRetention,
|
|
529
532
|
enableCacheControl: true
|
|
530
533
|
}, model);
|
|
531
|
-
const cacheBreakpointOptOutMessageIndexes = /* @__PURE__ */ new Set();
|
|
532
534
|
const replayPlan = buildAnthropicReplayPlan(context.messages, model, {
|
|
533
535
|
enabled: !isOAuthToken && options?.anthropicServerCompaction === true,
|
|
534
536
|
authProfileId: options?.authProfileId,
|
|
535
537
|
sessionId: options?.sessionId
|
|
536
538
|
});
|
|
539
|
+
const cacheBreakpointOptOutMessageIndexes = /* @__PURE__ */ new Set();
|
|
537
540
|
const messages = await convertAnthropicMessages(replayPlan.messages, model, isOAuthToken, {
|
|
538
541
|
allowReasoningContentReplay: supportsReasoningContentReplay(model),
|
|
539
|
-
cacheBreakpointOptOutMessageIndexes,
|
|
540
542
|
compaction: replayPlan.compaction,
|
|
541
|
-
replayThinkingEnabled
|
|
543
|
+
replayThinkingEnabled,
|
|
544
|
+
cacheBreakpointOptOutMessageIndexes
|
|
542
545
|
});
|
|
543
546
|
const params = {
|
|
544
547
|
model: resolveAnthropicRequestModelId(model),
|
|
@@ -574,18 +577,19 @@ async function buildAnthropicParams(model, context, isOAuthToken, options) {
|
|
|
574
577
|
if (convertedTools.tools.length > 0) params.tools = convertedTools.tools;
|
|
575
578
|
}
|
|
576
579
|
if (mandatoryAdaptiveThinking || model.reasoning || supportsClaudeAdaptiveThinking(model)) {
|
|
577
|
-
if (mandatoryAdaptiveThinking || options?.thinkingEnabled)
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
580
|
+
if (mandatoryAdaptiveThinking || options?.thinkingEnabled) {
|
|
581
|
+
if (supportsClaudeAdaptiveThinking(model)) {
|
|
582
|
+
params.thinking = {
|
|
583
|
+
type: "adaptive",
|
|
584
|
+
display: options?.thinkingDisplay ?? "summarized"
|
|
585
|
+
};
|
|
586
|
+
const effort = options?.effort ?? (mandatoryAdaptiveThinking ? "high" : void 0);
|
|
587
|
+
if (effort) params.output_config = { effort };
|
|
588
|
+
} else params.thinking = {
|
|
589
|
+
type: "enabled",
|
|
590
|
+
budget_tokens: options?.thinkingBudgetTokens ?? 1024
|
|
581
591
|
};
|
|
582
|
-
|
|
583
|
-
if (effort) params.output_config = { effort };
|
|
584
|
-
} else params.thinking = {
|
|
585
|
-
type: "enabled",
|
|
586
|
-
budget_tokens: options?.thinkingBudgetTokens ?? 1024
|
|
587
|
-
};
|
|
588
|
-
else if (options?.thinkingEnabled === false) params.thinking = { type: "disabled" };
|
|
592
|
+
} else if (options?.thinkingEnabled === false) params.thinking = { type: "disabled" };
|
|
589
593
|
}
|
|
590
594
|
if (options?.metadata && typeof options.metadata.user_id === "string") params.metadata = { user_id: options.metadata.user_id };
|
|
591
595
|
if (options?.toolChoice) {
|
|
@@ -674,12 +678,13 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
674
678
|
let costModel = model;
|
|
675
679
|
let messageStartPromptUsage;
|
|
676
680
|
let usedCompactionReplay = false;
|
|
681
|
+
let inputTransformations;
|
|
677
682
|
try {
|
|
678
683
|
const apiKey = options?.apiKey ?? getEnvApiKey(model.provider) ?? "";
|
|
679
684
|
if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
|
|
680
685
|
const transportOptions = resolveAnthropicTransportOptions(model, options, apiKey);
|
|
681
686
|
const requestContext = prepareClaudeNoPrefillRequestContext(model, context);
|
|
682
|
-
const { client, isOAuthToken } = createAnthropicTransportClient({
|
|
687
|
+
const { client, isOAuthToken, directApiKeyBetaHeader } = createAnthropicTransportClient({
|
|
683
688
|
model,
|
|
684
689
|
context: requestContext,
|
|
685
690
|
apiKey,
|
|
@@ -692,10 +697,14 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
692
697
|
const nextParams = await transportOptions.onPayload?.(params, model);
|
|
693
698
|
if (nextParams !== void 0) params = nextParams;
|
|
694
699
|
applyClaudeRequestContract(params, model);
|
|
700
|
+
const bindingHeaders = applyAnthropicThinkingBindingControls(params, directApiKeyBetaHeader);
|
|
695
701
|
const { response, stream: anthropicStream } = await client.messages.stream({
|
|
696
702
|
...params,
|
|
697
703
|
stream: true
|
|
698
|
-
},
|
|
704
|
+
}, {
|
|
705
|
+
signal: transportOptions.signal,
|
|
706
|
+
headers: bindingHeaders
|
|
707
|
+
});
|
|
699
708
|
await notifyProviderHttpResponse({
|
|
700
709
|
options: transportOptions,
|
|
701
710
|
response,
|
|
@@ -810,6 +819,7 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
810
819
|
});
|
|
811
820
|
};
|
|
812
821
|
for await (const event of anthropicStream) {
|
|
822
|
+
inputTransformations = readAnthropicInputTransformations(event) ?? inputTransformations;
|
|
813
823
|
if (event.type === "error") {
|
|
814
824
|
const error = event.error;
|
|
815
825
|
throw new Error(error?.message || "Anthropic Messages stream failed");
|
|
@@ -982,16 +992,18 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
982
992
|
let appendedContent = false;
|
|
983
993
|
if (!hasNativeAnthropicDelta && typeof delta?.content === "string" && delta.content.length > 0) {
|
|
984
994
|
const text = sanitizeTransportPayloadText(delta.content);
|
|
985
|
-
if (text.length > 0)
|
|
986
|
-
block
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
+
if (text.length > 0) {
|
|
996
|
+
if (block?.type === "text" && index !== void 0) {
|
|
997
|
+
block.text += text;
|
|
998
|
+
eventSink.push({
|
|
999
|
+
type: "text_delta",
|
|
1000
|
+
contentIndex: index,
|
|
1001
|
+
delta: text,
|
|
1002
|
+
partial: output
|
|
1003
|
+
});
|
|
1004
|
+
appendedContent = true;
|
|
1005
|
+
} else appendedContent = appendReasoningContentTextDelta(event.index, text);
|
|
1006
|
+
}
|
|
995
1007
|
}
|
|
996
1008
|
if ((appendedThinking || appendedContent) && !hasNativeAnthropicDelta) continue;
|
|
997
1009
|
}
|
|
@@ -1099,8 +1111,10 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
1099
1111
|
if (event.type === "message_delta") {
|
|
1100
1112
|
const delta = event.delta;
|
|
1101
1113
|
const usage = event.usage;
|
|
1102
|
-
if (delta?.stop_reason)
|
|
1103
|
-
|
|
1114
|
+
if (delta?.stop_reason) {
|
|
1115
|
+
if (delta.stop_reason === "refusal") applyAnthropicRefusal(output, delta.stop_details, model.provider);
|
|
1116
|
+
else output.stopReason = mapAnthropicStopReason(delta.stop_reason);
|
|
1117
|
+
}
|
|
1104
1118
|
applyAnthropicMessageDeltaUsage(output.usage, usage, messageStartPromptUsage);
|
|
1105
1119
|
calculateCost(costModel, output.usage);
|
|
1106
1120
|
if (output.stopReason === "toolUse" || output.content.some((block) => block.type === "toolCall")) tagPendingCommentaryText(output.content);
|
|
@@ -1143,6 +1157,8 @@ function createAnthropicMessagesTransportStreamFn() {
|
|
|
1143
1157
|
for (const block of output.content) delete block.index;
|
|
1144
1158
|
}
|
|
1145
1159
|
});
|
|
1160
|
+
} finally {
|
|
1161
|
+
logAnthropicThinkingDrops(inputTransformations);
|
|
1146
1162
|
}
|
|
1147
1163
|
})();
|
|
1148
1164
|
return eventStream;
|
|
@@ -1590,10 +1606,11 @@ function convertTools(tools, compat, model) {
|
|
|
1590
1606
|
function buildOpenAICompletionsParams(model, context, options) {
|
|
1591
1607
|
const compat = getCompat(model);
|
|
1592
1608
|
const compatDetection = detectOpenAICompletionsCompat(model);
|
|
1593
|
-
|
|
1609
|
+
const completionsContext = context.systemPrompt ? {
|
|
1594
1610
|
...context,
|
|
1595
1611
|
systemPrompt: stripSystemPromptCacheBoundary(context.systemPrompt)
|
|
1596
|
-
} : context
|
|
1612
|
+
} : context;
|
|
1613
|
+
let messages = convertMessages(model, completionsContext, compat);
|
|
1597
1614
|
applyCompletionsReplay(messages, context, model, compat);
|
|
1598
1615
|
if (compat.strictMessageKeys) messages = stripCompletionMessagesToRoleContent(messages);
|
|
1599
1616
|
const cacheRetention = resolveCacheRetention(options?.cacheRetention);
|
|
@@ -1654,8 +1671,10 @@ function buildOpenAICompletionsParams(model, context, options) {
|
|
|
1654
1671
|
emitModelTransportDebug(log, `[completions] clamp_max_tokens provider=${model.provider} api=${model.api} model=${model.id} requested=${effectiveMaxTokens} output=${clampedMaxTokens} effectiveContext=${effectiveContextTokens} estimatedInput=${estimatedInputTokens}`);
|
|
1655
1672
|
}
|
|
1656
1673
|
}
|
|
1657
|
-
if (clampedMaxTokens)
|
|
1658
|
-
|
|
1674
|
+
if (clampedMaxTokens) {
|
|
1675
|
+
if (compat.maxTokensField === "max_tokens") params.max_tokens = clampedMaxTokens;
|
|
1676
|
+
else params.max_completion_tokens = clampedMaxTokens;
|
|
1677
|
+
}
|
|
1659
1678
|
}
|
|
1660
1679
|
const completionsReasoningEffort = resolveOpenAICompletionsReasoningEffort(options);
|
|
1661
1680
|
const resolvedCompletionsReasoningEffort = completionsReasoningEffort ? resolveOpenAIReasoningEffortForModel({
|
|
@@ -1830,7 +1849,7 @@ function createOpenAICompletionsTransportStreamFn() {
|
|
|
1830
1849
|
timeoutMs: options?.timeoutMs,
|
|
1831
1850
|
maxRetries: options?.maxRetries
|
|
1832
1851
|
})).withResponse();
|
|
1833
|
-
|
|
1852
|
+
const hookedResponseStream = withProviderResponseHook({
|
|
1834
1853
|
stream: responseStream,
|
|
1835
1854
|
signal: firstEventAbort.signal,
|
|
1836
1855
|
abort: firstEventAbort.abort,
|
|
@@ -1839,7 +1858,8 @@ function createOpenAICompletionsTransportStreamFn() {
|
|
|
1839
1858
|
type: "start",
|
|
1840
1859
|
partial: output
|
|
1841
1860
|
})
|
|
1842
|
-
})
|
|
1861
|
+
});
|
|
1862
|
+
await processCompletionsStream(hookedResponseStream, output, model, stream, {
|
|
1843
1863
|
signal: options?.signal,
|
|
1844
1864
|
emitReasoning,
|
|
1845
1865
|
strictReasoningTags: reasoningTagTextPolicy.isStrict(options),
|
|
@@ -1907,7 +1927,7 @@ async function requestPreparedOpenAIResponsesCompaction(streamFn, model, context
|
|
|
1907
1927
|
}
|
|
1908
1928
|
//#endregion
|
|
1909
1929
|
//#region packages/ai/src/transports/openai-responses-continuation.ts
|
|
1910
|
-
const HTTP_CONTINUATION_IDLE_TTL_MS =
|
|
1930
|
+
const HTTP_CONTINUATION_IDLE_TTL_MS = 3e5;
|
|
1911
1931
|
const TURN_HEADERS = /* @__PURE__ */ new Set([
|
|
1912
1932
|
"traceparent",
|
|
1913
1933
|
"x-openclaw-turn-id",
|
|
@@ -2054,10 +2074,6 @@ function convertResponsesTools(tools, model, options) {
|
|
|
2054
2074
|
})
|
|
2055
2075
|
};
|
|
2056
2076
|
}
|
|
2057
|
-
function getPromptCacheRetention(baseUrl, cacheRetention) {
|
|
2058
|
-
if (cacheRetention !== "long") return;
|
|
2059
|
-
return baseUrl?.includes("api.openai.com") ? "24h" : void 0;
|
|
2060
|
-
}
|
|
2061
2077
|
function resolveOpenAIReasoningEffort(options) {
|
|
2062
2078
|
return normalizeOpenAIReasoningEffort(options?.reasoningEffort ?? options?.reasoning ?? "high");
|
|
2063
2079
|
}
|
|
@@ -2121,7 +2137,8 @@ function resolveOpenAIResponsesInstructions(model, context, usesInstructionsFiel
|
|
|
2121
2137
|
function buildOpenAIResponsesCompactSystemMessage(model, instructions) {
|
|
2122
2138
|
const compat = getCompat(model);
|
|
2123
2139
|
const supportsDeveloperRole = typeof compat.supportsDeveloperRole === "boolean" ? compat.supportsDeveloperRole : void 0;
|
|
2124
|
-
|
|
2140
|
+
const role = model.reasoning && supportsDeveloperRole !== false ? "developer" : "system";
|
|
2141
|
+
return buildResponsesInputMessage(role, [{
|
|
2125
2142
|
type: "input_text",
|
|
2126
2143
|
text: instructions
|
|
2127
2144
|
}]);
|
|
@@ -2167,14 +2184,14 @@ function buildOpenAIResponsesParams(model, context, options, metadata, replayMod
|
|
|
2167
2184
|
input: messages,
|
|
2168
2185
|
stream: true,
|
|
2169
2186
|
prompt_cache_key: promptCacheKey,
|
|
2170
|
-
|
|
2187
|
+
...resolveOpenAIResponsesCacheParams(model, cacheRetention, model.baseUrl?.includes("api.openai.com")),
|
|
2171
2188
|
...instructions ? { instructions } : {},
|
|
2172
2189
|
...metadata ? { metadata } : {}
|
|
2173
2190
|
};
|
|
2174
2191
|
const effectiveMaxTokens = options?.maxTokens || model.maxTokens;
|
|
2175
2192
|
if (effectiveMaxTokens) params.max_output_tokens = effectiveMaxTokens;
|
|
2176
|
-
if (options?.temperature !== void 0) params.temperature = options.temperature;
|
|
2177
|
-
if (options?.topP !== void 0) params.top_p = options.topP;
|
|
2193
|
+
if (options?.temperature !== void 0 && supportsOpenAITemperature(model)) params.temperature = options.temperature;
|
|
2194
|
+
if (options?.topP !== void 0 && model.id !== "gpt-6-astra") params.top_p = options.topP;
|
|
2178
2195
|
if (options?.responseFormat !== void 0) params.text = {
|
|
2179
2196
|
...params.text,
|
|
2180
2197
|
format: resolveOpenAIResponsesTextFormat(options.responseFormat)
|
|
@@ -2190,9 +2207,10 @@ function buildOpenAIResponsesParams(model, context, options, metadata, replayMod
|
|
|
2190
2207
|
}
|
|
2191
2208
|
if (model.reasoning) {
|
|
2192
2209
|
if (options?.reasoningEffort || options?.reasoning || options?.reasoningSummary) {
|
|
2210
|
+
const requestedReasoningEffort = resolveOpenAIReasoningEffort(options);
|
|
2193
2211
|
const resolvedReasoningEffort = resolveOpenAIReasoningEffortForModel({
|
|
2194
2212
|
model,
|
|
2195
|
-
effort:
|
|
2213
|
+
effort: requestedReasoningEffort
|
|
2196
2214
|
});
|
|
2197
2215
|
const reasoningEffort = resolvedReasoningEffort ? raiseMinimalReasoningForResponsesWebSearch({
|
|
2198
2216
|
model,
|
|
@@ -2219,8 +2237,8 @@ function buildOpenAIResponsesParams(model, context, options, metadata, replayMod
|
|
|
2219
2237
|
}
|
|
2220
2238
|
//#endregion
|
|
2221
2239
|
//#region packages/ai/src/transports/openai-responses-websocket.ts
|
|
2222
|
-
const SESSION_WEBSOCKET_CACHE_TTL_MS =
|
|
2223
|
-
const SESSION_WEBSOCKET_MAX_AGE_MS =
|
|
2240
|
+
const SESSION_WEBSOCKET_CACHE_TTL_MS = 3e5;
|
|
2241
|
+
const SESSION_WEBSOCKET_MAX_AGE_MS = 33e5;
|
|
2224
2242
|
const WEBSOCKET_OPEN_STATE = 1;
|
|
2225
2243
|
const websocketSessionCache = /* @__PURE__ */ new Map();
|
|
2226
2244
|
const degradedWebSocketConnections = /* @__PURE__ */ new Map();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./index-DcGDVDnC.mjs";
|
|
@@ -255,6 +255,24 @@ interface Usage {
|
|
|
255
255
|
totalOrigin?: "provider-billed";
|
|
256
256
|
};
|
|
257
257
|
}
|
|
258
|
+
/** Per-million-token rates for separately billed token buckets. */
|
|
259
|
+
type ModelCostRates = Pick<Usage["cost"], "input" | "output" | "cacheRead" | "cacheWrite">;
|
|
260
|
+
/** One whole-request tier on the cache-inclusive prompt-token axis. */
|
|
261
|
+
type PricingTier = ModelCostRates & {
|
|
262
|
+
/** Half-open prompt-token interval `[start, end)`. */
|
|
263
|
+
range: [number, number];
|
|
264
|
+
};
|
|
265
|
+
type RawPricingTier = ModelCostRates & {
|
|
266
|
+
/** `[start]` is an open-ended upper tier. */
|
|
267
|
+
range: [number, number] | [number];
|
|
268
|
+
};
|
|
269
|
+
/** Normalized pricing used by token accounting and usage summaries. */
|
|
270
|
+
type ModelCostConfig = ModelCostRates & {
|
|
271
|
+
tieredPricing?: PricingTier[];
|
|
272
|
+
};
|
|
273
|
+
type RawModelCostConfig = ModelCostRates & {
|
|
274
|
+
tieredPricing?: RawPricingTier[];
|
|
275
|
+
};
|
|
258
276
|
/** Normalized assistant stop reasons across text providers. */
|
|
259
277
|
type StopReason = "stop" | "length" | "toolUse" | "error" | "aborted";
|
|
260
278
|
/** Stable error codes for provider outcomes that cannot be replayed safely. */
|
|
@@ -266,14 +284,13 @@ interface UserMessage {
|
|
|
266
284
|
content: string | (TextContent | ImageContent)[];
|
|
267
285
|
timestamp: number;
|
|
268
286
|
/**
|
|
269
|
-
* Marks a user message
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* and stripped on replay — so providers must NOT anchor a prompt-cache
|
|
273
|
-
* breakpoint on them, or the breakpoint would land on bytes that change every
|
|
274
|
-
* turn. Anchoring stays on the last stable (non-carrier) user message.
|
|
287
|
+
* Marks a user message carrying runtime context. Provider replay policy decides
|
|
288
|
+
* whether the carrier is transient or retained append-only; only retained
|
|
289
|
+
* carriers are stable prompt-cache anchors.
|
|
275
290
|
*/
|
|
276
291
|
runtimeContextCarrier?: boolean;
|
|
292
|
+
/** True when the owning replay policy retains this carrier across turns. */
|
|
293
|
+
runtimeContextCarrierRetained?: boolean;
|
|
277
294
|
}
|
|
278
295
|
/** Assistant turn, including provider identity and final stop state. */
|
|
279
296
|
type AssistantDeliveryTtsFacts = {
|
|
@@ -620,12 +637,7 @@ interface Model<TApi extends Api = Api> {
|
|
|
620
637
|
*/
|
|
621
638
|
thinkingLevelMap?: ThinkingLevelMap;
|
|
622
639
|
input: ("text" | "image")[];
|
|
623
|
-
cost:
|
|
624
|
-
input: number;
|
|
625
|
-
output: number;
|
|
626
|
-
cacheRead: number;
|
|
627
|
-
cacheWrite: number;
|
|
628
|
-
};
|
|
640
|
+
cost: RawModelCostConfig;
|
|
629
641
|
contextWindow?: number;
|
|
630
642
|
/**
|
|
631
643
|
* Optional effective runtime cap used for compaction/session budgeting.
|
|
@@ -661,4 +673,4 @@ type StreamFn = (model: Model, context: Context, options?: SimpleStreamOptions)
|
|
|
661
673
|
type CompleteSimpleFn = (model: Model, context: Pick<Context, "systemPrompt" | "messages">, options?: SimpleStreamOptions) => Promise<AssistantMessage>;
|
|
662
674
|
type ValidateToolArgumentsFn = (tool: Tool, toolCall: ToolCall) => unknown;
|
|
663
675
|
//#endregion
|
|
664
|
-
export {
|
|
676
|
+
export { ThinkingLevel as $, ModelThinkingLevel as A, ProviderResponse as B, KnownImagesApi as C, Model as D, Message as E, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE as F, StopReason as G, RawModelCostConfig as H, PricingTier as I, StreamOptions as J, StreamFn as K, Provider as L, OpenAIResponsesCompat as M, OpenRouterRouting as N, ModelCostConfig as O, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE as P, ThinkingContent as Q, ProviderImagesOptions as R, KnownApi as S, MaybePromise as T, RawPricingTier as U, ProviderStreamOptions as V, SimpleStreamOptions as W, TextSignatureV1 as X, TextContent as Y, ThinkingBudgets as Z, ImagesModel as _, AssistantMessage as a, Usage as at, ImagesProvider as b, AssistantMessageEventStreamLike as c, VercelGatewayRouting as ct, Context as d, ThinkingLevelMap as et, ImageContent as f, ImagesInputContent as g, ImagesFunction as h, AssistantImages as i, Transport as it, OpenAICompletionsCompat as j, ModelCostRates as k, CacheRetention as l, ImagesContext as m, Api as n, ToolCall as nt, AssistantMessageEvent as o, UserMessage as ot, ImagesApi as p, StreamFunction as q, AssistantDeliveryTtsFacts as r, ToolResultMessage as rt, AssistantMessageEventStreamContract as s, ValidateToolArgumentsFn as st, AnthropicMessagesCompat as t, Tool as tt, CompleteSimpleFn as u, ImagesOptions as v, KnownImagesProvider as w, ImagesStopReason as x, ImagesOutputContent as y, ProviderReplayState as z };
|
package/dist/types.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as supportsClaudeNativeXhighEffort, _ as resolveClaudeSonnet5ModelIdentity, a as CLAUDE_FABLE_5_THINKING_PROFILE, b as supportsClaudeFastMode, c as bindsClaudeThinkingPrefix, d as resolveClaudeFable5ModelIdentity, f as resolveClaudeModelIdentity, g as resolveClaudeOpus5ModelIdentity, h as resolveClaudeOpus55ModelIdentity, i as normalizeResolvedPricing, l as requiresClaudeDefaultSampling, m as resolveClaudeNativeThinkingLevelMap, n as calculateUsageCost, o as CLAUDE_OPUS_5_THINKING_PROFILE, p as resolveClaudeMythos5ModelIdentity, r as normalizeModelCostConfig, s as CLAUDE_SONNET_5_THINKING_PROFILE, u as requiresClaudeMandatoryAdaptiveThinking, v as supportsClaude1MContext, x as supportsClaudeNativeMaxEffort, y as supportsClaudeAdaptiveThinking } from "./index-DcGDVDnC.mjs";
|
|
2
2
|
import { a as extractDiagnosticError, i as createAssistantMessageDiagnostic, n as DiagnosticErrorInfo, o as formatThrownValue, r as appendAssistantMessageDiagnostic, t as AssistantMessageDiagnostic } from "./diagnostics-BaTA9eVl.mjs";
|
|
3
|
-
import { $ as
|
|
4
|
-
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-
|
|
5
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
6
|
-
import "./types-
|
|
7
|
-
export { AnthropicMessagesCompat, Api, AssistantDeliveryTtsFacts, AssistantImages, AssistantMessage, AssistantMessageDiagnostic, AssistantMessageEvent, AssistantMessageEventStream, AssistantMessageEventStreamContract, AssistantMessageEventStreamLike, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, CacheRetention, CompleteSimpleFn, Context, DiagnosticErrorInfo, EventStream, ImageContent, ImagesApi, ImagesContext, ImagesFunction, ImagesInputContent, ImagesModel, ImagesOptions, ImagesOutputContent, ImagesProvider, ImagesStopReason, KnownApi, KnownImagesApi, KnownImagesProvider, MaybePromise, Message, Model, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, Provider, ProviderImagesOptions, ProviderReplayState, ProviderResponse, ProviderStreamOptions, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
|
|
3
|
+
import { $ as ThinkingLevel, A as ModelThinkingLevel, B as ProviderResponse, C as KnownImagesApi, D as Model, E as Message, F as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, G as StopReason, H as RawModelCostConfig, I as PricingTier, J as StreamOptions, K as StreamFn, L as Provider, M as OpenAIResponsesCompat, N as OpenRouterRouting, O as ModelCostConfig, P as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, Q as ThinkingContent, R as ProviderImagesOptions, S as KnownApi, T as MaybePromise, U as RawPricingTier, V as ProviderStreamOptions, W as SimpleStreamOptions, X as TextSignatureV1, Y as TextContent, Z as ThinkingBudgets, _ as ImagesModel, a as AssistantMessage, at as Usage, b as ImagesProvider, c as AssistantMessageEventStreamLike, ct as VercelGatewayRouting, d as Context, et as ThinkingLevelMap, f as ImageContent, g as ImagesInputContent, h as ImagesFunction, i as AssistantImages, it as Transport, j as OpenAICompletionsCompat, k as ModelCostRates, l as CacheRetention, m as ImagesContext, n as Api, nt as ToolCall, o as AssistantMessageEvent, ot as UserMessage, p as ImagesApi, q as StreamFunction, r as AssistantDeliveryTtsFacts, rt as ToolResultMessage, s as AssistantMessageEventStreamContract, st as ValidateToolArgumentsFn, t as AnthropicMessagesCompat, tt as Tool, u as CompleteSimpleFn, v as ImagesOptions, w as KnownImagesProvider, x as ImagesStopReason, y as ImagesOutputContent, z as ProviderReplayState } from "./types-DmeScJQe.mjs";
|
|
4
|
+
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-DcQzYRWO.mjs";
|
|
5
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-DPDgbaD3.mjs";
|
|
6
|
+
import "./types-DmdQ-xcq.mjs";
|
|
7
|
+
export { AnthropicMessagesCompat, Api, AssistantDeliveryTtsFacts, AssistantImages, AssistantMessage, AssistantMessageDiagnostic, AssistantMessageEvent, AssistantMessageEventStream, AssistantMessageEventStreamContract, AssistantMessageEventStreamLike, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, CacheRetention, CompleteSimpleFn, Context, DiagnosticErrorInfo, EventStream, ImageContent, ImagesApi, ImagesContext, ImagesFunction, ImagesInputContent, ImagesModel, ImagesOptions, ImagesOutputContent, ImagesProvider, ImagesStopReason, KnownApi, KnownImagesApi, KnownImagesProvider, MaybePromise, Message, Model, ModelCostConfig, ModelCostRates, ModelThinkingLevel, OpenAICompletionsCompat, OpenAIResponsesCompat, OpenRouterRouting, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, PricingTier, Provider, ProviderImagesOptions, ProviderReplayState, ProviderResponse, ProviderStreamOptions, RawModelCostConfig, RawPricingTier, SimpleStreamOptions, StopReason, StreamFn, StreamFunction, StreamOptions, TextContent, TextSignatureV1, ThinkingBudgets, ThinkingContent, ThinkingLevel, ThinkingLevelMap, Tool, ToolCall, ToolResultMessage, Transport, Usage, UserMessage, ValidateToolArgumentsFn, VercelGatewayRouting, appendAssistantMessageDiagnostic, bindsClaudeThinkingPrefix, calculateUsageCost, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, normalizeModelCostConfig, normalizeResolvedPricing, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus55ModelIdentity, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
|
package/dist/types.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { _ as supportsClaude1MContext, a as CLAUDE_OPUS_5_THINKING_PROFILE, b as supportsClaudeNativeMaxEffort, c as requiresClaudeDefaultSampling, d as resolveClaudeModelIdentity, f as resolveClaudeMythos5ModelIdentity, g as resolveClaudeSonnet5ModelIdentity, h as resolveClaudeOpus5ModelIdentity, i as CLAUDE_FABLE_5_THINKING_PROFILE, l as requiresClaudeMandatoryAdaptiveThinking, m as resolveClaudeOpus55ModelIdentity, n as normalizeModelCostConfig, o as CLAUDE_SONNET_5_THINKING_PROFILE, p as resolveClaudeNativeThinkingLevelMap, r as normalizeResolvedPricing, s as bindsClaudeThinkingPrefix, t as calculateUsageCost, u as resolveClaudeFable5ModelIdentity, v as supportsClaudeAdaptiveThinking, x as supportsClaudeNativeXhighEffort, y as supportsClaudeFastMode } from "./src-BhgSqnbz.mjs";
|
|
2
2
|
import { n as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, t as PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE } from "./types-BDdaOVi2.mjs";
|
|
3
3
|
import { i as formatThrownValue, n as createAssistantMessageDiagnostic, r as extractDiagnosticError, t as appendAssistantMessageDiagnostic } from "./diagnostics-COpOtRwq.mjs";
|
|
4
4
|
import { n as EventStream, r as createAssistantMessageEventStream, t as AssistantMessageEventStream } from "./event-stream-uSMZJ3FA.mjs";
|
|
5
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
6
|
-
export { AssistantMessageEventStream, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, EventStream, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
|
|
5
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-CJZtym2g.mjs";
|
|
6
|
+
export { AssistantMessageEventStream, CLAUDE_FABLE_5_THINKING_PROFILE, CLAUDE_OPUS_5_THINKING_PROFILE, CLAUDE_SONNET_5_THINKING_PROFILE, EventStream, PROVIDER_FAILURE_WITH_OUTPUT_ERROR_CODE, PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE, appendAssistantMessageDiagnostic, bindsClaudeThinkingPrefix, calculateUsageCost, createAssistantMessageDiagnostic, createAssistantMessageEventStream, extractDiagnosticError, formatThrownValue, normalizeModelCostConfig, normalizeResolvedPricing, requiresClaudeDefaultSampling, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeNativeThinkingLevelMap, resolveClaudeOpus55ModelIdentity, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaude1MContext, supportsClaudeAdaptiveThinking, supportsClaudeFastMode, supportsClaudeNativeMaxEffort, supportsClaudeNativeXhighEffort, validateToolArguments, validateToolCall };
|
|
@@ -2,7 +2,7 @@ import { Compile } from "typebox/compile";
|
|
|
2
2
|
//#region packages/llm-core/src/validation.ts
|
|
3
3
|
const validatorCache = /* @__PURE__ */ new WeakMap();
|
|
4
4
|
/** Maximum string length accepted for schema-gated JSON coercion. */
|
|
5
|
-
const MAX_JSON_COERCE_LENGTH =
|
|
5
|
+
const MAX_JSON_COERCE_LENGTH = 65536;
|
|
6
6
|
function isObjectBackedRecord(value) {
|
|
7
7
|
return typeof value === "object" && value !== null;
|
|
8
8
|
}
|
|
@@ -181,10 +181,12 @@ function validateToolArguments(tool, toolCall) {
|
|
|
181
181
|
validator.Convert(args);
|
|
182
182
|
if (isJsonSchemaObject(tool.parameters)) {
|
|
183
183
|
const coerced = coerceWithJsonSchema(args, tool.parameters);
|
|
184
|
-
if (coerced !== args)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
184
|
+
if (coerced !== args) {
|
|
185
|
+
if (isObjectBackedRecord(args) && isObjectBackedRecord(coerced)) {
|
|
186
|
+
for (const key of Object.keys(args)) delete args[key];
|
|
187
|
+
Object.assign(args, coerced);
|
|
188
|
+
} else return validator.Check(coerced) ? coerced : args;
|
|
189
|
+
}
|
|
188
190
|
}
|
|
189
191
|
if (validator.Check(args)) return args;
|
|
190
192
|
const errors = validator.Errors(args).map((error) => ` - ${formatValidationPath(error)}: ${error.message}`).join("\n") || "Unknown validation error";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { nt as ToolCall, tt as Tool } from "./types-DmeScJQe.mjs";
|
|
2
2
|
//#region packages/llm-core/src/validation.d.ts
|
|
3
3
|
/** Finds the target tool and validates/coerces a model-emitted tool call. */
|
|
4
4
|
declare function validateToolCall(tools: Tool[], toolCall: ToolCall): unknown;
|
package/dist/validation.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
1
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-DPDgbaD3.mjs";
|
|
2
2
|
export { validateToolArguments, validateToolCall };
|
package/dist/validation.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as validateToolCall, t as validateToolArguments } from "./validation-
|
|
1
|
+
import { n as validateToolCall, t as validateToolArguments } from "./validation-CJZtym2g.mjs";
|
|
2
2
|
export { validateToolArguments, validateToolCall };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/ai",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.33",
|
|
4
4
|
"description": "Reusable model provider adapters and streaming runtime from OpenClaw",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"@mistralai/mistralai": "2.6.4",
|
|
109
109
|
"openai": "7.5.0",
|
|
110
110
|
"partial-json": "0.1.7",
|
|
111
|
-
"typebox": "1.3.
|
|
111
|
+
"typebox": "1.3.17"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
114
|
"@openclaw/model-catalog-core": "0.0.0-private",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "./event-stream-UhnxHuqt.mjs";
|