@openclaw/ai 2026.10.5-beta.4 → 2026.10.10-beta.1
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/README.md +11 -0
- package/dist/{anthropic-BalhAzs-.mjs → anthropic-D6spfBri.mjs} +16 -18
- package/dist/{anthropic-payload-policy-DGblkHL5.d.mts → anthropic-payload-policy-Cr8xjazC.d.mts} +6 -3
- package/dist/{anthropic-stream-reducer-DkKeXXx4.mjs → anthropic-stream-reducer-CzPXOaLM.mjs} +59 -226
- package/dist/anthropic-tool-projection-BdAS3rtJ.mjs +165 -0
- package/dist/anthropic-tool-projection-DKH-aEWU.d.mts +51 -0
- package/dist/{api-registry-BhXXYdRA.d.mts → api-registry-gDt0faai.d.mts} +2 -2
- package/dist/{assistant-output-BuhRpLeD.mjs → assistant-output-6iFA1nbC.mjs} +2 -2
- package/dist/{azure-openai-responses-DfT9Ndd8.mjs → azure-openai-responses-0TqHwnlD.mjs} +8 -8
- package/dist/{cloudflare-5qSGvIUH.mjs → cloudflare-Dttf8jKq.mjs} +1 -1
- package/dist/{credential-redaction-BHxruEH6.d.mts → credential-redaction-XvsPf7Yi.d.mts} +1 -0
- package/dist/{diagnostics-tQasYct1.mjs → diagnostics-Cv7cW3pS.mjs} +3 -3
- package/dist/diagnostics.d.mts +6 -6
- package/dist/diagnostics.mjs +2 -2
- package/dist/{env-api-keys-CrxwdylR.mjs → env-api-keys-Xd8dm_aV.mjs} +10 -34
- package/dist/event-stream-CDpFza-M.d.mts +1 -0
- package/dist/{event-stream-BcqWLo_u.d.mts → event-stream-CzpE1g_o.d.mts} +1 -1
- package/dist/event-stream.d.mts +2 -2
- package/dist/{github-copilot-request-facts-DEE6gcB9.mjs → github-copilot-request-facts-F-EmvkpW.mjs} +1 -1
- package/dist/{google-interactions-9SSqsJg9.mjs → google-interactions-CTEBy9od.mjs} +19 -37
- package/dist/{google-messages-DsB7fmoQ.mjs → google-messages-DfpHVTaD.mjs} +18 -6
- package/dist/{google-provider-stream-CcEI2-MC.mjs → google-provider-stream-DJ8ANfsS.mjs} +6 -6
- package/dist/{google-shared-zGR0QUyS.mjs → google-shared-VTcCJLW3.mjs} +28 -41
- package/dist/{google-vertex-Dw_abY1w.mjs → google-vertex-Bkfizj7M.mjs} +3 -3
- package/dist/{google-sYI2wnY6.mjs → google-zWpkDSeN.mjs} +4 -4
- package/dist/{host-Bf3NjYNj.mjs → host-B2gk-d1H.mjs} +5 -11
- package/dist/{host-CTDz7LXD.d.mts → host-jJOffdlW.d.mts} +4 -6
- package/dist/{host-policy-BzZluO6_.mjs → host-policy-mpqGhbeM.mjs} +1 -1
- package/dist/{index-BYDvopUB.d.mts → index-DSprYWaz.d.mts} +7 -5
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +6 -6
- package/dist/internal/anthropic.d.mts +7 -53
- package/dist/internal/anthropic.mjs +6 -5
- package/dist/internal/google-model-family.d.mts +2 -0
- package/dist/internal/google-model-family.mjs +7 -3
- package/dist/internal/openai-completions-compat.d.mts +1 -1
- package/dist/internal/openai-completions-compat.mjs +1 -1
- package/dist/internal/openai-responses-payload-policy.d.mts +3 -3
- package/dist/internal/openai-responses-payload-policy.mjs +3 -3
- package/dist/internal/openai.d.mts +17 -26
- package/dist/internal/openai.mjs +10 -10
- package/dist/internal/retry-after.d.mts +1 -1
- package/dist/internal/retry-after.mjs +80 -55
- package/dist/internal/runtime.d.mts +9 -31
- package/dist/internal/runtime.mjs +10 -116
- package/dist/internal/shared.d.mts +9 -7
- package/dist/internal/shared.mjs +8 -6
- package/dist/internal/tool-schema.d.mts +83 -5
- package/dist/internal/tool-schema.mjs +4 -3
- package/dist/{mistral-dCDCR5ur.mjs → mistral-CATJrwne.mjs} +32 -35
- package/dist/model-request-body-BD5vy4rP.d.mts +17 -0
- package/dist/{number-coercion-C3hztWoY.mjs → number-coercion-37gmNkuA.mjs} +1 -1
- package/dist/{openai-chatgpt-responses-BHI3uCcA.mjs → openai-chatgpt-responses-CtdnpWwe.mjs} +95 -63
- package/dist/{openai-completions-CrVgnFrV.mjs → openai-completions-B6sET3oI.mjs} +10 -8
- package/dist/{openai-completions-compat-i-nLZxFy.d.mts → openai-completions-compat-1gsjP-KO.d.mts} +6 -3
- package/dist/{openai-completions-compat-CYX18uDk.mjs → openai-completions-compat-CFhQ3UVU.mjs} +7 -2
- package/dist/{openai-completions-transport-Dy4CZo9Q.mjs → openai-completions-transport-DviPEqw3.mjs} +370 -237
- package/dist/{openai-prompt-cache-r93BJhjm.mjs → openai-prompt-cache-DJ_P143P.mjs} +1 -1
- package/dist/{openai-prompt-cache-DIPMrMFy.d.mts → openai-prompt-cache-DgjD-UL5.d.mts} +2 -2
- package/dist/{openai-responses-D5oiAUOG.mjs → openai-responses-BXsJK-mD.mjs} +13 -15
- package/dist/{openai-responses-compaction-replay-B2FE4Nw8.d.mts → openai-responses-compaction-replay-Cvnl_nCq.d.mts} +5 -5
- package/dist/{openai-responses-contracts-DlKMMTxK.mjs → openai-responses-contracts-Bx-16mnf.mjs} +45 -6
- package/dist/{openai-responses-contracts-DKqMJ1Ct.d.mts → openai-responses-contracts-CQ4_AWjL.d.mts} +20 -8
- package/dist/{openai-responses-endpoint-CinGh4VZ.mjs → openai-responses-endpoint-D4v-eeYy.mjs} +55 -22
- package/dist/{openai-responses-payload-policy-C7GsA1y0.d.mts → openai-responses-payload-policy-BzM52TTH.d.mts} +9 -3
- package/dist/openai-responses-request-lifecycle-CTdAb2v1.mjs +246 -0
- package/dist/{openai-responses-shared-D-aDYAkJ.mjs → openai-responses-shared-Bv_1NtH9.mjs} +284 -160
- package/dist/{openai-responses-terminal-usage-BygjiAdi.d.mts → openai-responses-terminal-usage-CpVjkqn-.d.mts} +2 -2
- package/dist/{openai-tool-schema-DDPXsvJP.mjs → openai-tool-schema-Buv0GXFb.mjs} +170 -237
- package/dist/overflow-DJHXTNBQ.mjs +117 -0
- package/dist/{positive-integer-CqWjqSi9.mjs → positive-integer-Bb4Evc7L.mjs} +1 -1
- package/dist/prompt-cache-stability-D_MeCQFI.mjs +32 -0
- package/dist/{provider-error-xumb1V3F.d.mts → provider-error-CnaWYTRY.d.mts} +1 -0
- package/dist/{provider-error-CF9GWCs2.mjs → provider-error-qtZD2inE.mjs} +75 -13
- package/dist/{provider-options-CVrXZBtA.d.mts → provider-options-DeYeaflL.d.mts} +52 -6
- package/dist/{text-signature-Drb4Erb8.mjs → provider-replay-context-J6CfU3m1.mjs} +5 -14
- package/dist/{provider-transport-turn-state-BOpxgm-J.mjs → provider-transport-turn-state-Jxppzuc2.mjs} +5 -5
- package/dist/{provider-types-CHtRx0dI.d.mts → provider-types-ODq57rG_.d.mts} +3 -3
- package/dist/provider-types.d.mts +6 -6
- package/dist/providers.d.mts +2 -2
- package/dist/providers.mjs +11 -11
- package/dist/{reasoning-tag-text-partitioner-CpOy9-IQ.mjs → reasoning-tag-text-partitioner-DzlRubwU.mjs} +134 -47
- package/dist/{required-api-key-CFJvcFy_.mjs → required-api-key-D088S4Cd.mjs} +1 -1
- package/dist/{retry-after-CdCURCVg.d.mts → retry-after-sw-XX8aC.d.mts} +1 -1
- package/dist/sanitize-unicode-CRGuMONI.mjs +8 -0
- package/dist/sanitize-unicode-ZqVLLEKC.d.mts +27 -0
- package/dist/{session-resources-D1wgDQ8C.mjs → session-resources-vKvGIE3J.mjs} +1 -10
- package/dist/{simple-options-BAu4B54D.mjs → simple-options-BYgC6kse.mjs} +68 -79
- package/dist/{src-C44MKrW5.mjs → src-CyA0zJnt.mjs} +6 -2
- package/dist/{stream-Dd8DwRFL.mjs → stream-DLBirT0e.mjs} +8 -47
- package/dist/{stream-first-event-timeout-Dc42hKv6.mjs → stream-first-event-timeout-D_TfJHRJ.mjs} +1 -1
- package/dist/{string-coerce-CtgOVOSv.mjs → string-coerce-Cj8sqWHx.mjs} +26 -1
- package/dist/tool-schema-json-projection-B0hHDV7N.mjs +492 -0
- package/dist/{transport-stream-shared-BmpzDtdQ.d.mts → transport-stream-shared-8ru8eX4s.d.mts} +5 -5
- package/dist/{transport-stream-shared-CWGOuLcA.mjs → transport-stream-shared-CzQlAzJH.mjs} +27 -75
- package/dist/transports.d.mts +34 -28
- package/dist/transports.mjs +42 -48
- package/dist/{types-CQc6JNG4.mjs → types-BXd0kI8-.mjs} +1 -1
- package/dist/types-CBJthzJX.d.mts +1 -0
- package/dist/{types-Bd2T86VJ.d.mts → types-CVYzKrMl.d.mts} +20 -3
- package/dist/types.d.mts +6 -6
- package/dist/types.mjs +4 -4
- package/dist/{validation-ZX_sPVV0.mjs → validation-9FSkE8T-.mjs} +22 -3
- package/dist/{validation-DdGB1yy3.d.mts → validation-BQ5u20Ru.d.mts} +1 -1
- package/dist/validation.d.mts +1 -1
- package/dist/validation.mjs +1 -1
- package/package.json +3 -3
- package/dist/assistant-text-phase-Bn1hbvK9.mjs +0 -50
- package/dist/event-stream-6UNs-AhN.d.mts +0 -1
- package/dist/expect-lbe3Hgrh.mjs +0 -8
- package/dist/json-schema-Bp07Qui3.mjs +0 -22
- package/dist/openai-responses-request-lifecycle-NSIJo9jY.mjs +0 -67
- package/dist/openai-tool-projection-793cE3QX.d.mts +0 -37
- package/dist/openai-tool-schema-a5ysBBga.d.mts +0 -32
- package/dist/rolldown-runtime-BhDjJH2R.mjs +0 -15
- package/dist/sanitize-unicode-CjDG6jJx.d.mts +0 -5
- package/dist/string-normalization-I3ux50s9.mjs +0 -28
- package/dist/tool-schema-json-projection-B8sG1I9v.mjs +0 -180
- package/dist/types-Kdfw_04V.d.mts +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as isNativeOpenAIEndpoint } from "./openai-completions-compat-
|
|
1
|
+
import { n as isNativeOpenAIEndpoint } from "./openai-completions-compat-CFhQ3UVU.mjs";
|
|
2
2
|
//#region packages/normalization-core/src/code-points.ts
|
|
3
3
|
/** Truncates to a nonnegative code-point budget; grapheme clusters may be split. */
|
|
4
4
|
function truncateCodePoints(text, maxCodePoints) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as OpenAICompletionsCompat, k as Model, l as CacheRetention } from "./types-
|
|
2
|
-
import "./types-
|
|
1
|
+
import { N as OpenAICompletionsCompat, k as Model, l as CacheRetention } from "./types-CVYzKrMl.mjs";
|
|
2
|
+
import "./types-CBJthzJX.mjs";
|
|
3
3
|
//#region packages/ai/src/providers/openai-prompt-cache.d.ts
|
|
4
4
|
/** Selects documented lifetime fields shared by Responses and Chat Completions. */
|
|
5
5
|
declare function resolveOpenAIPromptCacheParams(model: Pick<Model, "id" | "provider" | "baseUrl">, cacheRetention: CacheRetention, compat: Required<Pick<OpenAICompletionsCompat, "supportsPromptCacheKey" | "supportsLongCacheRetention">>): {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as __exportAll } from "./reasoning-tag-text-partitioner-DzlRubwU.mjs";
|
|
2
2
|
import { t as AssistantMessageEventStream } from "./event-stream-X2gmsUWv.mjs";
|
|
3
|
-
import { n as clampOpenAIPromptCacheKey, r as resolveOpenAIPromptCacheParams } from "./openai-prompt-cache-
|
|
4
|
-
import { i as resolveOpenAICompletionsCompat } from "./openai-completions-compat-
|
|
5
|
-
import { i as resolveCacheRetention, r as buildCopilotDynamicHeaders } from "./cloudflare-
|
|
6
|
-
import { n as buildBaseOptions } from "./simple-options-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { t as
|
|
10
|
-
import { i as createOpenAIProviderClient, n as resolveProviderSimpleCompletionHeaders } from "./provider-transport-turn-state-
|
|
11
|
-
import { t as requireApiKey } from "./required-api-key-
|
|
3
|
+
import { n as clampOpenAIPromptCacheKey, r as resolveOpenAIPromptCacheParams } from "./openai-prompt-cache-DJ_P143P.mjs";
|
|
4
|
+
import { i as resolveOpenAICompletionsCompat } from "./openai-completions-compat-CFhQ3UVU.mjs";
|
|
5
|
+
import { i as resolveCacheRetention, r as buildCopilotDynamicHeaders } from "./cloudflare-Dttf8jKq.mjs";
|
|
6
|
+
import { n as buildBaseOptions } from "./simple-options-BYgC6kse.mjs";
|
|
7
|
+
import { n as getEnvApiKey } from "./env-api-keys-Xd8dm_aV.mjs";
|
|
8
|
+
import { t as createAssistantOutput } from "./assistant-output-6iFA1nbC.mjs";
|
|
9
|
+
import { F as convertProviderResponsesMessages, n as applyResponsesServiceTierPricing, r as runResponsesStreamLifecycle, t as applyCommonResponsesParams, vt as resolveOpenAISimpleReasoningEffort } from "./openai-responses-shared-Bv_1NtH9.mjs";
|
|
10
|
+
import { i as createOpenAIProviderClient, n as resolveProviderSimpleCompletionHeaders } from "./provider-transport-turn-state-Jxppzuc2.mjs";
|
|
11
|
+
import { t as requireApiKey } from "./required-api-key-D088S4Cd.mjs";
|
|
12
12
|
//#region packages/ai/src/providers/openai-responses.ts
|
|
13
13
|
var openai_responses_exports = /* @__PURE__ */ __exportAll({
|
|
14
14
|
streamOpenAIResponses: () => streamOpenAIResponses,
|
|
@@ -30,9 +30,7 @@ const streamOpenAIResponses = (model, context, options) => {
|
|
|
30
30
|
output,
|
|
31
31
|
options,
|
|
32
32
|
createClient: () => {
|
|
33
|
-
|
|
34
|
-
const cacheSessionId = resolveCacheRetention(options?.cacheRetention) === "none" ? void 0 : options?.sessionId;
|
|
35
|
-
return createClient(model, context, apiKey, resolveProviderSimpleCompletionHeaders(model, options), cacheSessionId);
|
|
33
|
+
return createClient(model, context, options?.apiKey || getEnvApiKey(model.provider) || "", options, resolveCacheRetention(options?.cacheRetention) === "none" ? void 0 : options?.sessionId);
|
|
36
34
|
},
|
|
37
35
|
buildParams: (_requestModel, replayMode) => buildParams(model, context, options, replayMode),
|
|
38
36
|
processStreamOptions: {
|
|
@@ -53,7 +51,7 @@ const streamSimpleOpenAIResponses = (model, context, options) => {
|
|
|
53
51
|
replayResponsesItemIds: replayOptions?.replayResponsesItemIds
|
|
54
52
|
});
|
|
55
53
|
};
|
|
56
|
-
function createClient(model, context, apiKey,
|
|
54
|
+
function createClient(model, context, apiKey, options, sessionId) {
|
|
57
55
|
if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
|
|
58
56
|
const compat = getCompat(model);
|
|
59
57
|
const headers = { ...model.headers };
|
|
@@ -62,7 +60,7 @@ function createClient(model, context, apiKey, optionsHeaders, sessionId) {
|
|
|
62
60
|
if (compat.sendSessionIdHeader) headers.session_id = sessionId;
|
|
63
61
|
headers["x-client-request-id"] = sessionId;
|
|
64
62
|
}
|
|
65
|
-
return createOpenAIProviderClient(model, apiKey, headers,
|
|
63
|
+
return createOpenAIProviderClient(model, apiKey, headers, resolveProviderSimpleCompletionHeaders(model, options), options?.onResponse);
|
|
66
64
|
}
|
|
67
65
|
function buildParams(model, context, options, replayMode = "checkpoint") {
|
|
68
66
|
const messages = convertProviderResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import "./index-
|
|
2
|
-
import { a as AssistantMessage, k as Model } from "./types-
|
|
3
|
-
import "./provider-options-
|
|
4
|
-
import { i as ReplayableResponseCompactionItem,
|
|
1
|
+
import "./index-DSprYWaz.mjs";
|
|
2
|
+
import { a as AssistantMessage, k as Model } from "./types-CVYzKrMl.mjs";
|
|
3
|
+
import "./provider-options-DeYeaflL.mjs";
|
|
4
|
+
import { i as ReplayableResponseCompactionItem, r as OpenAIResponsesReasoningReplayMetadata, u as OpenAIResponsesCompactionOutput } from "./openai-responses-contracts-CQ4_AWjL.mjs";
|
|
5
5
|
import "openai/resources/responses/responses.js";
|
|
6
6
|
//#region packages/ai/src/transports/openai-responses-compaction-replay.d.ts
|
|
7
|
-
declare function captureOpenAIResponsesCompaction(output: Pick<AssistantMessage, "providerReplay">, item: ReplayableResponseCompactionItem, boundary: number | "retained-users", model: Model, captureMetadata?: OpenAIResponsesReasoningReplayMetadata, compactedOutput?: OpenAIResponsesCompactionOutput): void;
|
|
7
|
+
declare function captureOpenAIResponsesCompaction(output: Pick<AssistantMessage, "providerReplay">, item: ReplayableResponseCompactionItem, boundary: number | "retained-users", model: Model, captureMetadata?: OpenAIResponsesReasoningReplayMetadata, compactedOutput?: OpenAIResponsesCompactionOutput, outputTokens?: number): void;
|
|
8
8
|
declare class CompactionReplayRefreshRequiredError extends Error {
|
|
9
9
|
constructor();
|
|
10
10
|
}
|
package/dist/{openai-responses-contracts-DlKMMTxK.mjs → openai-responses-contracts-Bx-16mnf.mjs}
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { i as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE } from "./types-
|
|
1
|
+
import { i as PROVIDER_POST_DISPATCH_AMBIGUITY_ERROR_CODE } from "./types-BXd0kI8-.mjs";
|
|
2
2
|
import { i as asOptionalRecord, o as isRecord } from "./record-coerce-CNDovvft.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { n as normalizeUniqueTrimmedStringList } from "./string-normalization-I3ux50s9.mjs";
|
|
3
|
+
import { o as normalizeOptionalString, r as normalizeLowercaseStringOrEmpty } from "./string-coerce-Cj8sqWHx.mjs";
|
|
5
4
|
//#region packages/llm-core/src/model-data.ts
|
|
6
5
|
const MODEL_DATA_APIS = [
|
|
7
6
|
"openai-completions",
|
|
@@ -35,6 +34,13 @@ const MODEL_DATA_THINKING_LEVELS = [
|
|
|
35
34
|
"xhigh",
|
|
36
35
|
"max"
|
|
37
36
|
];
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region packages/model-catalog-core/src/model-catalog-types.ts
|
|
39
|
+
const OPENAI_ULTRAFAST_CONTEXT_TOKENS = 26e4;
|
|
40
|
+
/** Prompt capacity for models served through a context-limited processing tier. */
|
|
41
|
+
function resolveModelServiceTierContextTokens(provider, serviceTier) {
|
|
42
|
+
return provider === "openai" && serviceTier === "ultrafast" ? OPENAI_ULTRAFAST_CONTEXT_TOKENS : void 0;
|
|
43
|
+
}
|
|
38
44
|
[...MODEL_DATA_APIS];
|
|
39
45
|
[...MODEL_DATA_THINKING_FORMATS];
|
|
40
46
|
const MODEL_CATALOG_THINKING_LEVELS = [...MODEL_DATA_THINKING_LEVELS];
|
|
@@ -62,6 +68,32 @@ function listMappedModelThinkingLevels(model) {
|
|
|
62
68
|
return MODEL_CATALOG_THINKING_LEVELS.filter((level) => mapped.has(level));
|
|
63
69
|
}
|
|
64
70
|
//#endregion
|
|
71
|
+
//#region packages/normalization-core/src/string-normalization.ts
|
|
72
|
+
/** Coerces entries to strings, trims them, and drops empty results. */
|
|
73
|
+
function normalizeStringEntries(list) {
|
|
74
|
+
return (list ?? []).map((entry) => String(entry).trim()).filter(Boolean);
|
|
75
|
+
}
|
|
76
|
+
/** Returns first-seen unique values while preserving insertion order. */
|
|
77
|
+
function uniqueValues(values) {
|
|
78
|
+
return [...new Set(values)];
|
|
79
|
+
}
|
|
80
|
+
/** Returns first-seen unique strings while preserving insertion order. */
|
|
81
|
+
function uniqueStrings(values) {
|
|
82
|
+
return uniqueValues(values);
|
|
83
|
+
}
|
|
84
|
+
/** Normalizes array-backed string lists and rejects non-array input as empty. */
|
|
85
|
+
function normalizeTrimmedStringList(value) {
|
|
86
|
+
if (!Array.isArray(value)) return [];
|
|
87
|
+
return value.flatMap((entry) => {
|
|
88
|
+
const normalized = normalizeOptionalString(entry);
|
|
89
|
+
return normalized ? [normalized] : [];
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/** Normalizes an array-backed string list and removes duplicates. */
|
|
93
|
+
function normalizeUniqueTrimmedStringList(value) {
|
|
94
|
+
return uniqueStrings(normalizeTrimmedStringList(value));
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
65
97
|
//#region packages/ai/src/providers/openai-reasoning-effort.ts
|
|
66
98
|
/**
|
|
67
99
|
* OpenAI-compatible reasoning-effort normalization. Different GPT families
|
|
@@ -262,6 +294,7 @@ const AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS = 3e4;
|
|
|
262
294
|
const RESPONSE_FAILED_NO_DETAILS_MESSAGE = "Unknown error (no error details in response)";
|
|
263
295
|
const OPENAI_RESPONSES_REASONING_REPLAY_META_KEY = "__openclaw_replay";
|
|
264
296
|
const OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY = "openclawReasoningReplay";
|
|
297
|
+
const RESPONSES_RETAINED_USER = Symbol("responsesRetainedUser");
|
|
265
298
|
const OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE = "openai-responses-compaction";
|
|
266
299
|
const OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE = "openai-responses-retained-compaction";
|
|
267
300
|
const OPENAI_RESPONSES_APIS = /* @__PURE__ */ new Set([
|
|
@@ -351,13 +384,19 @@ const responsesServiceTierObserver = {
|
|
|
351
384
|
rejected: true
|
|
352
385
|
});
|
|
353
386
|
},
|
|
354
|
-
observe(options, requestedTier, responseTier) {
|
|
387
|
+
observe(options, requestedTier, responseTier, response) {
|
|
355
388
|
const observer = options && responsesServiceTierObserver.get(options);
|
|
356
389
|
if (observer && typeof requestedTier === "string" && /^[a-z0-9_-]{1,64}$/i.test(requestedTier) && typeof responseTier === "string" && /^[a-z0-9_-]{1,64}$/i.test(responseTier)) observer({
|
|
357
390
|
requestedTier,
|
|
358
|
-
responseTier
|
|
391
|
+
responseTier,
|
|
392
|
+
...response && {
|
|
393
|
+
responseId: response.id,
|
|
394
|
+
responseModel: response.model,
|
|
395
|
+
inputTokens: response.usage?.input_tokens,
|
|
396
|
+
cachedTokens: response.usage?.input_tokens_details?.cached_tokens
|
|
397
|
+
}
|
|
359
398
|
});
|
|
360
399
|
}
|
|
361
400
|
};
|
|
362
401
|
//#endregion
|
|
363
|
-
export {
|
|
402
|
+
export { supportsOpenAITemperature as A, isOpenAIGpt6Model as C, resolveOpenAIReasoningEffortMapping as D, resolveOpenAIReasoningEffortForModel as E, listMappedModelThinkingLevels as F, resolveModelServiceTierContextTokens as I, resolveOpenAIThinkingApi as L, uniqueStrings as M, uniqueValues as N, resolveOpenAISupportedReasoningEfforts as O, MODEL_CATALOG_THINKING_LEVELS as P, isOpenAIGpt56Model as S, resolveOpenAIModelReasoningEfforts as T, responsesServiceTierObserver as _, OPENAI_RESPONSES_COMPACTION_REPLAY_TYPE as a, isOpenAIGpt54MiniModel as b, OPENAI_RESPONSES_RETAINED_COMPACTION_REPLAY_TYPE as c, OpenAIResponsesWebSocketSafeRetryError as d, RESPONSES_RETAINED_USER as f, responsesPromptObserver as g, parseOpenAIResponsesWebSocketServerError as h, OPENAI_RESPONSES_APIS as i, normalizeStringEntries as j, supportsOpenAIReasoningEffort as k, OpenAIResponsesWebSocketPostDispatchError as l, isPreviousResponseRejection as m, DEFAULT_AZURE_OPENAI_API_VERSION as n, OPENAI_RESPONSES_REASONING_REPLAY_BLOCK_META_KEY as o, RESPONSE_FAILED_NO_DETAILS_MESSAGE as p, OPENAI_CODEX_RESPONSES_DEFAULT_INSTRUCTIONS as r, OPENAI_RESPONSES_REASONING_REPLAY_META_KEY as s, AZURE_RESPONSES_FIRST_EVENT_TIMEOUT_MS as t, OpenAIResponsesWebSocketPreDispatchError as u, isResponsesServiceTierRejection as v, normalizeOpenAIReasoningEffort as w, isOpenAIGpt55Model as x, nextResponsesServiceTier as y };
|
package/dist/{openai-responses-contracts-DKqMJ1Ct.d.mts → openai-responses-contracts-CQ4_AWjL.d.mts}
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import "./index-
|
|
2
|
-
import { M as ModelThinkingLevel, k as Model, n as Api } from "./types-
|
|
3
|
-
import { a as BaseOpenAIStreamOptions,
|
|
4
|
-
import "./types-
|
|
5
|
-
import { ResponseCompactionItem, ResponseCreateParamsStreaming, ResponseInputItem } from "openai/resources/responses/responses.js";
|
|
1
|
+
import "./index-DSprYWaz.mjs";
|
|
2
|
+
import { M as ModelThinkingLevel, k as Model, n as Api } from "./types-CVYzKrMl.mjs";
|
|
3
|
+
import { a as BaseOpenAIStreamOptions, y as OpenAIReasoningEffort } from "./provider-options-DeYeaflL.mjs";
|
|
4
|
+
import "./types-CBJthzJX.mjs";
|
|
5
|
+
import { Response, ResponseCompactionItem, ResponseCreateParamsStreaming, ResponseInputItem, ResponseOutputMessage, ResponseReasoningItem } from "openai/resources/responses/responses.js";
|
|
6
6
|
//#region packages/ai/src/providers/openai-request-reasoning.d.ts
|
|
7
7
|
type OpenAIRequestReasoningEffort = ModelThinkingLevel | "none";
|
|
8
8
|
//#endregion
|
|
9
9
|
//#region packages/ai/src/transports/openai-responses-compaction-window.d.ts
|
|
10
|
-
type OpenAIResponsesCompactionOutput = Array<ResponseInputItem.Message | ReplayableResponseCompactionItem>;
|
|
10
|
+
type OpenAIResponsesCompactionOutput = Array<ResponseInputItem.Message | ReplayableResponseOutputMessage | ReplayableResponseCompactionItem>;
|
|
11
11
|
/** Read the saved canonical window only when it still matches its opaque checkpoint. */
|
|
12
12
|
declare function readOpenAIResponsesCompactionWindow(replay: {
|
|
13
13
|
data: string;
|
|
@@ -16,7 +16,11 @@ declare function readOpenAIResponsesCompactionWindow(replay: {
|
|
|
16
16
|
}, model?: Model): OpenAIResponsesCompactionOutput | undefined;
|
|
17
17
|
//#endregion
|
|
18
18
|
//#region packages/ai/src/transports/openai-responses-contracts.d.ts
|
|
19
|
+
declare const OPENAI_RESPONSES_REASONING_REPLAY_META_KEY = "__openclaw_replay";
|
|
19
20
|
declare const OPENAI_RESPONSES_APIS: ReadonlySet<Api>;
|
|
21
|
+
type ReplayableResponseOutputMessage = Omit<ResponseOutputMessage, "id"> & {
|
|
22
|
+
id?: string;
|
|
23
|
+
};
|
|
20
24
|
type ReplayableResponseCompactionItem = Omit<ResponseCompactionItem, "id"> & {
|
|
21
25
|
id?: string;
|
|
22
26
|
};
|
|
@@ -30,6 +34,10 @@ type OpenAIResponsesReasoningReplayMetadata = {
|
|
|
30
34
|
sessionHash?: string;
|
|
31
35
|
authProfileHash?: string;
|
|
32
36
|
};
|
|
37
|
+
type ReplayableResponseReasoningItem = Omit<ResponseReasoningItem, "id"> & {
|
|
38
|
+
id?: string;
|
|
39
|
+
[OPENAI_RESPONSES_REASONING_REPLAY_META_KEY]?: OpenAIResponsesReasoningReplayMetadata;
|
|
40
|
+
};
|
|
33
41
|
type OpenAIResponsesOptions = BaseOpenAIStreamOptions & {
|
|
34
42
|
reasoning?: OpenAIRequestReasoningEffort;
|
|
35
43
|
reasoningEffort?: OpenAIReasoningEffort;
|
|
@@ -56,6 +64,10 @@ type ResponsesServiceTierObservation = {
|
|
|
56
64
|
requestedTier: string;
|
|
57
65
|
responseTier: string;
|
|
58
66
|
rejected?: false;
|
|
67
|
+
responseId?: string;
|
|
68
|
+
responseModel?: string;
|
|
69
|
+
inputTokens?: number;
|
|
70
|
+
cachedTokens?: number;
|
|
59
71
|
} | {
|
|
60
72
|
requestedTier: string;
|
|
61
73
|
rejected: true;
|
|
@@ -66,7 +78,7 @@ declare const responsesServiceTierObserver: {
|
|
|
66
78
|
get(options: object): ResponsesServiceTierObserver | undefined;
|
|
67
79
|
copy(source: object | undefined, target: object): void;
|
|
68
80
|
reject(options: object | undefined, requestedTier: string): void;
|
|
69
|
-
observe(options: object | undefined, requestedTier: unknown, responseTier: unknown): void;
|
|
81
|
+
observe(options: object | undefined, requestedTier: unknown, responseTier: unknown, response?: Pick<Response, "id" | "model" | "usage">): void;
|
|
70
82
|
};
|
|
71
83
|
//#endregion
|
|
72
|
-
export {
|
|
84
|
+
export { ReplayableResponseReasoningItem as a, responsesPromptObserver as c, readOpenAIResponsesCompactionWindow as d, OpenAIRequestReasoningEffort as f, ReplayableResponseCompactionItem as i, responsesServiceTierObserver as l, OpenAIResponsesOptions as n, ResponsesPromptObservation as o, OpenAIResponsesReasoningReplayMetadata as r, ResponsesServiceTierObservation as s, OPENAI_RESPONSES_APIS as t, OpenAIResponsesCompactionOutput as u };
|
package/dist/{openai-responses-endpoint-CinGh4VZ.mjs → openai-responses-endpoint-D4v-eeYy.mjs}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { o as isRecord } from "./record-coerce-CNDovvft.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { a as normalizeOptionalLowercaseString, l as readStringValue, n as normalizeFastMode, r as normalizeLowercaseStringOrEmpty } from "./string-coerce-Cj8sqWHx.mjs";
|
|
3
|
+
import { I as resolveModelServiceTierContextTokens, i as OPENAI_RESPONSES_APIS, k as supportsOpenAIReasoningEffort } from "./openai-responses-contracts-Bx-16mnf.mjs";
|
|
4
4
|
import { t as canonicalizeBase64 } from "./base64-C8CdcsjU.mjs";
|
|
5
|
-
import { t as parsePositiveInteger } from "./positive-integer-
|
|
5
|
+
import { t as parsePositiveInteger } from "./positive-integer-Bb4Evc7L.mjs";
|
|
6
6
|
import { n as createSseByteGuard } from "./streaming-byte-guard-DBXr1XYn.mjs";
|
|
7
7
|
//#region packages/model-catalog-core/src/provider-id.ts
|
|
8
8
|
function normalizeProviderId(provider) {
|
|
@@ -83,24 +83,38 @@ function resolveOpenAIResponsesCompactThreshold(model) {
|
|
|
83
83
|
if (effectiveBudget) return Math.max(1e3, Math.floor(effectiveBudget * .7));
|
|
84
84
|
return 8e4;
|
|
85
85
|
}
|
|
86
|
+
function normalizeOpenAIServiceTier(value) {
|
|
87
|
+
const normalized = normalizeOptionalLowercaseString(value);
|
|
88
|
+
return normalized === "auto" || normalized === "default" || normalized === "flex" || normalized === "priority" || normalized === "ultrafast" ? normalized : void 0;
|
|
89
|
+
}
|
|
90
|
+
function resolveOpenAIRequestedServiceTier(extraParams, serviceTiers) {
|
|
91
|
+
const explicitTier = normalizeOpenAIServiceTier(extraParams?.serviceTier ?? extraParams?.service_tier);
|
|
92
|
+
const rawFastMode = extraParams?.fastMode ?? extraParams?.fast_mode;
|
|
93
|
+
const fastMode = normalizeFastMode(typeof rawFastMode === "function" ? rawFastMode() : rawFastMode);
|
|
94
|
+
return fastMode === void 0 || fastMode === "auto" ? explicitTier : fastMode === "ultrafast" && (!serviceTiers || serviceTiers.includes("ultrafast")) ? "ultrafast" : fastMode ? "priority" : explicitTier ? "default" : void 0;
|
|
95
|
+
}
|
|
96
|
+
/** Resolve the same speed-override-before-default-tier precedence used at request egress. */
|
|
97
|
+
function resolveOpenAIResponsesRequestContextTokens(model, extraParams, serviceTiers) {
|
|
98
|
+
return resolveOpenAIResponsesPayloadCapabilities(model).allowsOpenAIServiceTier ? resolveModelServiceTierContextTokens(normalizeOptionalLowercaseString(model.provider), resolveOpenAIRequestedServiceTier(extraParams, serviceTiers)) : void 0;
|
|
99
|
+
}
|
|
86
100
|
/** Resolve the server-compaction gate and effective threshold for a Responses route. */
|
|
87
101
|
function resolveOpenAIResponsesServerCompactionPlan(model, extraParams) {
|
|
88
102
|
const provider = normalizeOptionalLowercaseString(model.provider);
|
|
89
|
-
const
|
|
103
|
+
const capabilities = resolveOpenAIResponsesPayloadCapabilities(model);
|
|
90
104
|
const configured = extraParams?.responsesServerCompaction;
|
|
91
|
-
const enabled = configured !== false && allowsResponsesStore && (configured === true || provider === "openai");
|
|
105
|
+
const enabled = configured !== false && capabilities.allowsResponsesStore && (configured === true || provider === "openai");
|
|
92
106
|
return {
|
|
93
107
|
enabled,
|
|
94
|
-
threshold: enabled ? parsePositiveInteger(extraParams?.responsesCompactThreshold) ?? resolveOpenAIResponsesCompactThreshold(model) : void 0
|
|
108
|
+
threshold: enabled ? Math.min(parsePositiveInteger(extraParams?.responsesCompactThreshold) ?? resolveOpenAIResponsesCompactThreshold(model), (capabilities.allowsOpenAIServiceTier ? resolveModelServiceTierContextTokens(provider, resolveOpenAIRequestedServiceTier(extraParams)) : void 0) ?? Infinity) : void 0
|
|
95
109
|
};
|
|
96
110
|
}
|
|
97
|
-
/** Resolve the Responses compact-endpoint gate for one route
|
|
98
|
-
function resolveOpenAIResponsesCompactEndpointPlan(model, extraParams,
|
|
111
|
+
/** Resolve the Responses compact-endpoint gate for one route. */
|
|
112
|
+
function resolveOpenAIResponsesCompactEndpointPlan(model, extraParams, _purpose) {
|
|
99
113
|
const configured = extraParams?.responsesCompactEndpoint;
|
|
100
114
|
const provider = typeof model.provider === "string" ? normalizeProviderId(model.provider) : "";
|
|
101
115
|
const api = normalizeOptionalLowercaseString(model.api);
|
|
102
116
|
const endpointClass = resolveOpenAIResponsesEndpointClass(model.baseUrl);
|
|
103
|
-
const enabledByDefault = (provider === "xai" || provider === "x-ai") && endpointClass === "xai-native" ||
|
|
117
|
+
const enabledByDefault = (provider === "xai" || provider === "x-ai") && endpointClass === "xai-native" || provider === "openai" && api === "openai-responses" && endpointClass === "openai-public";
|
|
104
118
|
return { enabled: isOpenAIResponsesApi(api) && configured !== false && (configured === true || enabledByDefault) };
|
|
105
119
|
}
|
|
106
120
|
function stripDisabledOpenAIReasoningPayload(payloadObj) {
|
|
@@ -268,6 +282,7 @@ function isInputContent(value) {
|
|
|
268
282
|
if (breakpoint !== void 0 && (!isRecord(breakpoint) || breakpoint.mode !== "explicit")) return false;
|
|
269
283
|
switch (value.type) {
|
|
270
284
|
case "input_text": return typeof value.text === "string";
|
|
285
|
+
case "output_text": return typeof value.text === "string" && Array.isArray(value.annotations);
|
|
271
286
|
case "input_image": return typeof value.detail === "string" && [
|
|
272
287
|
"auto",
|
|
273
288
|
"low",
|
|
@@ -288,32 +303,50 @@ function isInputContent(value) {
|
|
|
288
303
|
}
|
|
289
304
|
/** Validate without projecting: accepted provider fields must survive replay unchanged. */
|
|
290
305
|
function isOpenAIResponsesCompactionOutput(value, model) {
|
|
291
|
-
|
|
306
|
+
return getOpenAIResponsesCompactionOutputError(value, model) === void 0;
|
|
307
|
+
}
|
|
308
|
+
/** Return a safe rule failure, never provider content or encrypted checkpoint bytes. */
|
|
309
|
+
function getOpenAIResponsesCompactionOutputError(value, model) {
|
|
310
|
+
if (!Array.isArray(value) || value.length === 0) return "output must be a nonempty array";
|
|
311
|
+
if (!isBoundedJson(value)) return "output must contain finite JSON values nested at most 64 levels";
|
|
292
312
|
const item = value.at(-1);
|
|
293
|
-
if (!
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
"
|
|
299
|
-
"
|
|
300
|
-
|
|
301
|
-
|
|
313
|
+
if (!isRecord(item) || item.type !== "compaction") return "output must end with a compaction item";
|
|
314
|
+
if (typeof item.encrypted_content !== "string" || item.encrypted_content.length === 0) return "trailing compaction item must have nonempty encrypted_content";
|
|
315
|
+
if (!isOptionalCompactionString(item.id) || !isOptionalCompactionString(item.created_by)) return "trailing compaction item metadata must be strings";
|
|
316
|
+
for (let index = 0; index < value.length - 1; index += 1) {
|
|
317
|
+
const message = value[index];
|
|
318
|
+
if (isRecord(message) && message.type === "compaction") return "output must contain exactly one compaction item";
|
|
319
|
+
if (!isRecord(message) || message.type !== "message" || typeof message.role !== "string" || ![
|
|
320
|
+
"user",
|
|
321
|
+
"developer",
|
|
322
|
+
"system",
|
|
323
|
+
"assistant"
|
|
324
|
+
].includes(message.role)) return `output item ${index} must be a user, developer, system, or assistant message`;
|
|
325
|
+
if (!isOptionalCompactionString(message.id) || message.status !== void 0 && (typeof message.status !== "string" || ![
|
|
326
|
+
"in_progress",
|
|
327
|
+
"completed",
|
|
328
|
+
"incomplete"
|
|
329
|
+
].includes(message.status))) return `output message ${index} has invalid metadata`;
|
|
330
|
+
if (!Array.isArray(message.content) || !message.content.every(isInputContent)) return `output message ${index} has unsupported content`;
|
|
331
|
+
}
|
|
302
332
|
const payload = sanitizeResponsesImagePayload({ input: value });
|
|
303
333
|
if (model) applyOpenAIResponsesPayloadPolicy(payload, resolveOpenAIResponsesPayloadPolicy(model));
|
|
304
|
-
|
|
334
|
+
if (JSON.stringify(payload.input) !== JSON.stringify(value)) return "output would be rewritten by the Responses payload policy";
|
|
305
335
|
}
|
|
306
336
|
/** Read the saved canonical window only when it still matches its opaque checkpoint. */
|
|
307
337
|
function readOpenAIResponsesCompactionWindow(replay, model) {
|
|
308
338
|
const window = replay.compactedWindow;
|
|
309
339
|
if (!isRecord(window) || window.state !== "ready" || typeof window.output !== "string") return;
|
|
340
|
+
if (window.outputTokens !== void 0 && (!Number.isSafeInteger(window.outputTokens) || typeof window.outputTokens !== "number" || window.outputTokens < 0)) return;
|
|
310
341
|
if (Buffer.byteLength(window.output, "utf8") + Buffer.byteLength(replay.data, "utf8") > COMPACTION_WINDOW_MAX_BYTES) return;
|
|
311
342
|
try {
|
|
312
343
|
if (Buffer.byteLength(JSON.stringify(replay), "utf8") > COMPACTION_WINDOW_MAX_BYTES) return;
|
|
313
344
|
const output = JSON.parse(window.output);
|
|
314
345
|
if (!isOpenAIResponsesCompactionOutput(output, model)) return;
|
|
315
346
|
const item = output.at(-1);
|
|
316
|
-
|
|
347
|
+
if (item?.type !== "compaction" || item.encrypted_content !== replay.data || item.id !== replay.id) return;
|
|
348
|
+
for (const message of output) if (message.type === "message" && message.role === "assistant") delete message.id;
|
|
349
|
+
return output;
|
|
317
350
|
} catch {
|
|
318
351
|
return;
|
|
319
352
|
}
|
|
@@ -364,4 +397,4 @@ function supportsNativeOpenAIResponsesEndpoint(params) {
|
|
|
364
397
|
return params.provider.trim().toLowerCase() === "openai" && params.api === "openai-responses" && isOfficialOpenAIResponsesBaseUrl(params.baseUrl);
|
|
365
398
|
}
|
|
366
399
|
//#endregion
|
|
367
|
-
export {
|
|
400
|
+
export { isOpenAIResponsesCompactionOutput as a, applyOpenAIResponsesPayloadPolicy as c, resolveOpenAIResponsesPayloadPolicy as d, resolveOpenAIResponsesRequestContextTokens as f, getOpenAIResponsesCompactionOutputError as i, normalizeOpenAIServiceTier as l, supportsNativeOpenAIResponsesEndpoint as n, readOpenAIResponsesCompactionWindow as o, resolveOpenAIResponsesServerCompactionPlan as p, createBoundedOpenAIResponsesCompactionFetch as r, sanitizeResponsesImagePayload as s, isOfficialOpenAIResponsesBaseUrl as t, resolveOpenAIResponsesCompactEndpointPlan as u };
|
|
@@ -27,13 +27,19 @@ type OpenAIResponsesPayloadPolicy = {
|
|
|
27
27
|
useServerCompaction: boolean;
|
|
28
28
|
usesInstructionsField: boolean;
|
|
29
29
|
};
|
|
30
|
+
type OpenAIServiceTier = "auto" | "default" | "flex" | "priority" | "ultrafast";
|
|
31
|
+
declare function normalizeOpenAIServiceTier(value: unknown): OpenAIServiceTier | undefined;
|
|
32
|
+
/** Resolve the same speed-override-before-default-tier precedence used at request egress. */
|
|
33
|
+
declare function resolveOpenAIResponsesRequestContextTokens(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>, serviceTiers?: readonly string[]): number | undefined;
|
|
30
34
|
/** Resolve the server-compaction gate and effective threshold for a Responses route. */
|
|
31
35
|
declare function resolveOpenAIResponsesServerCompactionPlan(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>): {
|
|
32
36
|
enabled: boolean;
|
|
33
37
|
threshold: number | undefined;
|
|
34
38
|
};
|
|
35
|
-
/** Resolve the Responses compact-endpoint gate for one route
|
|
36
|
-
declare function resolveOpenAIResponsesCompactEndpointPlan(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>,
|
|
39
|
+
/** Resolve the Responses compact-endpoint gate for one route. */
|
|
40
|
+
declare function resolveOpenAIResponsesCompactEndpointPlan(model: OpenAIResponsesPayloadModel, extraParams?: Record<string, unknown>,
|
|
41
|
+
/** @deprecated The policy no longer depends on purpose. */
|
|
42
|
+
_purpose?: "manual" | "budget"): {
|
|
37
43
|
enabled: boolean;
|
|
38
44
|
};
|
|
39
45
|
/** Resolve payload mutation policy for one OpenAI Responses-style model endpoint. */
|
|
@@ -41,4 +47,4 @@ declare function resolveOpenAIResponsesPayloadPolicy(model: OpenAIResponsesPaylo
|
|
|
41
47
|
/** Mutate a Responses request payload according to the resolved endpoint policy. */
|
|
42
48
|
declare function applyOpenAIResponsesPayloadPolicy(payloadObj: Record<string, unknown>, policy: OpenAIResponsesPayloadPolicy): void;
|
|
43
49
|
//#endregion
|
|
44
|
-
export {
|
|
50
|
+
export { resolveOpenAIResponsesPayloadPolicy as a, resolveOpenAIResponsesCompactEndpointPlan as i, applyOpenAIResponsesPayloadPolicy as n, resolveOpenAIResponsesRequestContextTokens as o, normalizeOpenAIServiceTier as r, resolveOpenAIResponsesServerCompactionPlan as s, OpenAIServiceTier as t };
|