@openclaw/ai 2026.7.1 → 2026.7.2-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/dist/{anthropic-B5gZQM5X.mjs → anthropic-Cvm71xlk.mjs} +19 -97
- package/dist/{api-registry-BXYnCOIR.d.mts → api-registry-Byvoz8Ha.d.mts} +1 -1
- package/dist/{azure-openai-responses-DNoSk8Uy.mjs → azure-openai-responses-b4lfJxYS.mjs} +6 -6
- package/dist/{azure-openai-responses-client-compat-a_O_GVQV.mjs → azure-openai-responses-client-compat-C7K7QfUE.mjs} +23 -2
- package/dist/{env-api-keys-CtMlqaQ4.mjs → env-api-keys-DnhYpc27.mjs} +4 -3
- package/dist/{event-stream-ReMmOTzX.mjs → event-stream-D8n2uFee.mjs} +14 -6
- package/dist/{event-stream-0nZeBKl2.d.mts → event-stream-uQspnL8S.d.mts} +1 -1
- package/dist/event-stream.d.mts +1 -1
- package/dist/event-stream.mjs +1 -1
- package/dist/{google-D6sIQ1bL.mjs → google-C7PoDjpW.mjs} +4 -4
- package/dist/{google-shared-ZPSl2qTi.mjs → google-shared-C7ohrmOI.mjs} +29 -20
- package/dist/{google-vertex-rDGwkoZK.mjs → google-vertex-L_ABazIA.mjs} +5 -18
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +3 -3
- package/dist/internal/anthropic.d.mts +1 -1
- package/dist/internal/anthropic.mjs +3 -3
- package/dist/internal/openai.d.mts +14 -3
- package/dist/internal/openai.mjs +7 -7
- package/dist/internal/retry-after.d.mts +5 -0
- package/dist/internal/retry-after.mjs +101 -0
- package/dist/internal/runtime.d.mts +2 -2
- package/dist/internal/runtime.mjs +6 -5
- package/dist/internal/shared.d.mts +2 -1
- package/dist/internal/shared.mjs +1 -1
- package/dist/{json-parse-DzNSIQBq.mjs → json-parse-BvXNt1-7.mjs} +4 -6
- package/dist/{mistral-CePVNdws.mjs → mistral-D-39Trax.mjs} +114 -31
- package/dist/{model-utils-DgmOla96.mjs → model-utils-Q1LSRIdo.mjs} +5 -12
- package/dist/{openai-chatgpt-responses-DVC4Bk_A.mjs → openai-chatgpt-responses-DCA0K85L.mjs} +40 -96
- package/dist/{openai-completions-B9QLIq2U.mjs → openai-completions-B2jr3vtJ.mjs} +24 -21
- package/dist/{openai-responses-B6LylGxM.mjs → openai-responses-DTpD8YVy.mjs} +6 -6
- package/dist/{openai-responses-shared-sj2YUPYc.mjs → openai-responses-shared-B9mtGvXq.mjs} +207 -46
- package/dist/{openai-tool-projection-BknoV11q.mjs → openai-tool-projection-cTLC4F65.mjs} +8 -3
- package/dist/providers.d.mts +1 -1
- package/dist/providers.mjs +9 -9
- package/dist/{reasoning-tag-text-partitioner-axhAdUwg.mjs → reasoning-tag-text-partitioner-BlVe67g6.mjs} +14 -8
- package/dist/{src-CZ503MYJ.mjs → src-CXno1H5g.mjs} +1 -1
- package/dist/{tool-schema-json-projection-BXtBc_mD.mjs → tool-schema-json-projection-BwNu3nDi.mjs} +22 -2
- package/dist/{transform-messages-BhGF_fF4.mjs → transform-messages-DNWpwvXA.mjs} +2 -2
- package/dist/{types-DRgdPqaZ.d.mts → types-Cx2zJtyz.d.mts} +5 -0
- package/dist/types.d.mts +3 -3
- package/dist/types.mjs +3 -3
- package/dist/{validation-BDMWOr8d.d.mts → validation-Cej7htKc.d.mts} +1 -1
- package/dist/{validation-FrchoOlv.mjs → validation-DAa_yFOM.mjs} +2 -7
- package/dist/validation.d.mts +1 -1
- package/dist/validation.mjs +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/{openai-chatgpt-responses-DVC4Bk_A.mjs → openai-chatgpt-responses-DCA0K85L.mjs}
RENAMED
|
@@ -1,14 +1,35 @@
|
|
|
1
|
-
import { n as getEnvApiKey } from "./env-api-keys-
|
|
1
|
+
import { n as getEnvApiKey } from "./env-api-keys-DnhYpc27.mjs";
|
|
2
2
|
import { i as formatThrownValue, n as createAssistantMessageDiagnostic, t as appendAssistantMessageDiagnostic } from "./diagnostics-COpOtRwq.mjs";
|
|
3
|
-
import { t as AssistantMessageEventStream } from "./event-stream-
|
|
3
|
+
import { t as AssistantMessageEventStream } from "./event-stream-D8n2uFee.mjs";
|
|
4
4
|
import { n as getAiTransportHost, r as resolveAiTransportHeaderSentinels } from "./host-4t713IeR.mjs";
|
|
5
5
|
import { t as headersToRecord } from "./headers-B_e4-1J0.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import { a as resolveResponsesReasoningEffort, i as processResponsesStream, n as convertResponsesMessages, s as convertResponsesToolPayload } from "./openai-responses-shared-
|
|
6
|
+
import { s as buildBaseOptions, x as stripSystemPromptCacheBoundary } from "./transform-messages-DNWpwvXA.mjs";
|
|
7
|
+
import { A as supportsOpenAITemperature, a as resolveResponsesReasoningEffort, i as processResponsesStream, n as convertResponsesMessages, s as convertResponsesToolPayload } from "./openai-responses-shared-B9mtGvXq.mjs";
|
|
8
8
|
import { i as getFirstStreamEventTimeoutMs, o as clampTimerTimeoutMs, r as getFirstStreamEventTimeoutHandler, s as resolveTimerTimeoutMs, t as createFirstStreamEventAbortController } from "./stream-first-event-timeout-RjWszj8c.mjs";
|
|
9
|
-
import { a as clampOpenAIPromptCacheKey } from "./openai-tool-projection-
|
|
9
|
+
import { a as clampOpenAIPromptCacheKey } from "./openai-tool-projection-cTLC4F65.mjs";
|
|
10
|
+
import { parseRetryAfterHttpDateMs } from "./internal/retry-after.mjs";
|
|
10
11
|
import { i as registerSessionResourceCleanup, n as resolveOpenAICodexAccountId } from "./openai-chatgpt-jwt-DhAAzLkj.mjs";
|
|
11
12
|
import { t as createSseByteGuard } from "./streaming-byte-guard-BrbkbwUu.mjs";
|
|
13
|
+
//#region packages/ai/src/internal/retry-sleep.ts
|
|
14
|
+
function sleepWithAbort(ms, signal) {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
if (signal?.aborted) {
|
|
17
|
+
reject(/* @__PURE__ */ new Error("Request was aborted"));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const onAbort = () => {
|
|
21
|
+
clearTimeout(timeout);
|
|
22
|
+
signal?.removeEventListener("abort", onAbort);
|
|
23
|
+
reject(/* @__PURE__ */ new Error("Request was aborted"));
|
|
24
|
+
};
|
|
25
|
+
const timeout = setTimeout(() => {
|
|
26
|
+
signal?.removeEventListener("abort", onAbort);
|
|
27
|
+
resolve();
|
|
28
|
+
}, ms);
|
|
29
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
12
33
|
//#region packages/ai/src/providers/openai-chatgpt-responses.ts
|
|
13
34
|
const dynamicImport = (specifier) => import(specifier);
|
|
14
35
|
function loadNodeOs() {
|
|
@@ -20,7 +41,6 @@ const DEFAULT_CODEX_BASE_URL = "https://chatgpt.com/backend-api";
|
|
|
20
41
|
const MAX_RETRIES = 3;
|
|
21
42
|
const BASE_DELAY_MS = 1e3;
|
|
22
43
|
const REQUEST_COMPRESSION_ZSTD_LEVEL = 3;
|
|
23
|
-
const RETRY_AFTER_HTTP_DATE_RE = /^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} GMT|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \d{2}-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2} \d{2}:\d{2}:\d{2} GMT|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ \d]\d \d{2}:\d{2}:\d{2} \d{4})$/;
|
|
24
44
|
const CODEX_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set(["openai", "opencode"]);
|
|
25
45
|
const WEBSOCKET_MESSAGE_TOO_BIG_CLOSE_CODE = 1009;
|
|
26
46
|
const WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE = "websocket_connection_limit_reached";
|
|
@@ -38,19 +58,6 @@ function isRetryableError(status, errorText) {
|
|
|
38
58
|
if (status === 429 || status === 500 || status === 502 || status === 503 || status === 504) return true;
|
|
39
59
|
return /rate.?limit|overloaded|service.?unavailable|upstream.?connect|connection.?refused/i.test(errorText);
|
|
40
60
|
}
|
|
41
|
-
function sleep(ms, signal) {
|
|
42
|
-
return new Promise((resolve, reject) => {
|
|
43
|
-
if (signal?.aborted) {
|
|
44
|
-
reject(/* @__PURE__ */ new Error("Request was aborted"));
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const timeout = setTimeout(resolve, ms);
|
|
48
|
-
signal?.addEventListener("abort", () => {
|
|
49
|
-
clearTimeout(timeout);
|
|
50
|
-
reject(/* @__PURE__ */ new Error("Request was aborted"));
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
61
|
function resolveRequestTimeoutMs(options) {
|
|
55
62
|
const timeoutMs = options?.timeoutMs;
|
|
56
63
|
return typeof timeoutMs === "number" && Number.isFinite(timeoutMs) && timeoutMs > 0 ? resolveTimerTimeoutMs(timeoutMs, 1) : void 0;
|
|
@@ -134,7 +141,6 @@ const streamOpenAICodexResponses = (model, context, options) => {
|
|
|
134
141
|
};
|
|
135
142
|
const transport = options?.transport || "auto";
|
|
136
143
|
const websocketDisabledForSession = transport === "auto" && isWebSocketSseFallbackActive(options?.sessionId);
|
|
137
|
-
if (websocketDisabledForSession) recordWebSocketSseFallback(options?.sessionId);
|
|
138
144
|
if (transport !== "sse" && !websocketDisabledForSession) {
|
|
139
145
|
let websocketStarted = false;
|
|
140
146
|
let retriedWebSocketConnectionLimit = false;
|
|
@@ -167,9 +173,8 @@ const streamOpenAICodexResponses = (model, context, options) => {
|
|
|
167
173
|
phase: websocketStarted ? "after_message_stream_start" : "before_message_stream_start",
|
|
168
174
|
requestBytes: new TextEncoder().encode(bodyJson).byteLength
|
|
169
175
|
}));
|
|
170
|
-
|
|
176
|
+
if (transport === "auto" && options?.sessionId) websocketSseFallbackSessions.add(options.sessionId);
|
|
171
177
|
if (websocketStarted || transport !== "auto") throw error;
|
|
172
|
-
recordWebSocketSseFallback(options?.sessionId);
|
|
173
178
|
break;
|
|
174
179
|
}
|
|
175
180
|
}
|
|
@@ -207,13 +212,13 @@ const streamOpenAICodexResponses = (model, context, options) => {
|
|
|
207
212
|
const trimmedRetryAfter = retryAfter.trim();
|
|
208
213
|
const seconds = Number(trimmedRetryAfter);
|
|
209
214
|
if (/^\d+$/.test(trimmedRetryAfter) && Number.isFinite(seconds)) delayMs = clampTimerTimeoutMs(seconds * 1e3, 0) ?? delayMs;
|
|
210
|
-
else
|
|
211
|
-
const
|
|
212
|
-
if (
|
|
215
|
+
else {
|
|
216
|
+
const retryAt = parseRetryAfterHttpDateMs(trimmedRetryAfter);
|
|
217
|
+
if (retryAt !== void 0) delayMs = clampTimerTimeoutMs(retryAt - Date.now(), 0) ?? delayMs;
|
|
213
218
|
}
|
|
214
219
|
}
|
|
215
220
|
}
|
|
216
|
-
await
|
|
221
|
+
await sleepWithAbort(delayMs, activeSignal);
|
|
217
222
|
continue;
|
|
218
223
|
}
|
|
219
224
|
const info = await parseErrorResponse(new Response(errorText, {
|
|
@@ -229,7 +234,7 @@ const streamOpenAICodexResponses = (model, context, options) => {
|
|
|
229
234
|
}
|
|
230
235
|
lastError = error instanceof Error ? error : new Error(String(error));
|
|
231
236
|
if (attempt < MAX_RETRIES && !lastError.message.includes("usage limit")) {
|
|
232
|
-
await
|
|
237
|
+
await sleepWithAbort(BASE_DELAY_MS * 2 ** attempt, activeSignal);
|
|
233
238
|
continue;
|
|
234
239
|
}
|
|
235
240
|
throw lastError;
|
|
@@ -292,7 +297,7 @@ function buildRequestBody(model, context, options) {
|
|
|
292
297
|
tool_choice: "auto",
|
|
293
298
|
parallel_tool_calls: true
|
|
294
299
|
};
|
|
295
|
-
if (options?.temperature !== void 0) body.temperature = options.temperature;
|
|
300
|
+
if (options?.temperature !== void 0 && supportsOpenAITemperature(model)) body.temperature = options.temperature;
|
|
296
301
|
if (options?.serviceTier !== void 0) body.service_tier = options.serviceTier;
|
|
297
302
|
if (context.tools) {
|
|
298
303
|
const converted = convertResponsesToolPayload(context.tools, { strict: null });
|
|
@@ -473,36 +478,10 @@ const OPENAI_BETA_RESPONSES_WEBSOCKETS = "responses_websockets=2026-02-06";
|
|
|
473
478
|
const SESSION_WEBSOCKET_CACHE_TTL_MS = 300 * 1e3;
|
|
474
479
|
const SESSION_WEBSOCKET_MAX_AGE_MS = 3300 * 1e3;
|
|
475
480
|
const websocketSessionCache = /* @__PURE__ */ new Map();
|
|
476
|
-
const websocketDebugStats = /* @__PURE__ */ new Map();
|
|
477
481
|
const websocketSseFallbackSessions = /* @__PURE__ */ new Set();
|
|
478
482
|
let cachedWebsocket = null;
|
|
479
|
-
function
|
|
480
|
-
let stats = websocketDebugStats.get(sessionId);
|
|
481
|
-
if (!stats) {
|
|
482
|
-
stats = {
|
|
483
|
-
requests: 0,
|
|
484
|
-
connectionsCreated: 0,
|
|
485
|
-
connectionsReused: 0,
|
|
486
|
-
cachedContextRequests: 0,
|
|
487
|
-
storeTrueRequests: 0,
|
|
488
|
-
fullContextRequests: 0,
|
|
489
|
-
deltaRequests: 0,
|
|
490
|
-
lastInputItems: 0,
|
|
491
|
-
websocketFailures: 0,
|
|
492
|
-
sseFallbacks: 0
|
|
493
|
-
};
|
|
494
|
-
websocketDebugStats.set(sessionId, stats);
|
|
495
|
-
}
|
|
496
|
-
return stats;
|
|
497
|
-
}
|
|
498
|
-
function resetOpenAICodexWebSocketDebugStats(sessionId) {
|
|
483
|
+
function resetOpenAICodexWebSocketStateForTest() {
|
|
499
484
|
cachedWebsocket = null;
|
|
500
|
-
if (sessionId) {
|
|
501
|
-
websocketDebugStats.delete(sessionId);
|
|
502
|
-
websocketSseFallbackSessions.delete(sessionId);
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
websocketDebugStats.clear();
|
|
506
485
|
websocketSseFallbackSessions.clear();
|
|
507
486
|
}
|
|
508
487
|
function closeOpenAICodexWebSocketSessions(sessionId) {
|
|
@@ -523,20 +502,6 @@ registerSessionResourceCleanup(closeOpenAICodexWebSocketSessions);
|
|
|
523
502
|
function isWebSocketSseFallbackActive(sessionId) {
|
|
524
503
|
return sessionId ? websocketSseFallbackSessions.has(sessionId) : false;
|
|
525
504
|
}
|
|
526
|
-
function recordWebSocketSseFallback(sessionId) {
|
|
527
|
-
if (!sessionId) return;
|
|
528
|
-
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
529
|
-
stats.sseFallbacks++;
|
|
530
|
-
stats.websocketFallbackActive = isWebSocketSseFallbackActive(sessionId);
|
|
531
|
-
}
|
|
532
|
-
function recordWebSocketFailure(sessionId, error, options) {
|
|
533
|
-
if (!sessionId) return;
|
|
534
|
-
if (options.activateSseFallback) websocketSseFallbackSessions.add(sessionId);
|
|
535
|
-
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
536
|
-
stats.websocketFailures++;
|
|
537
|
-
stats.lastWebSocketError = formatThrownValue(error);
|
|
538
|
-
stats.websocketFallbackActive = isWebSocketSseFallbackActive(sessionId);
|
|
539
|
-
}
|
|
540
505
|
async function getWebSocketConstructor() {
|
|
541
506
|
if (cachedWebsocket) return cachedWebsocket;
|
|
542
507
|
if (process?.versions?.bun && (process.env.HTTP_PROXY || process.env.HTTPS_PROXY || process.env.http_proxy || process.env.https_proxy)) {
|
|
@@ -654,7 +619,6 @@ async function acquireWebSocket(url, headers, sessionId, signal) {
|
|
|
654
619
|
const socket = await connectWebSocket(url, headers, signal);
|
|
655
620
|
return {
|
|
656
621
|
socket,
|
|
657
|
-
reused: false,
|
|
658
622
|
release: ({ keep } = {}) => {
|
|
659
623
|
if (keep === false) {
|
|
660
624
|
closeWebSocketSilently(socket);
|
|
@@ -678,7 +642,6 @@ async function acquireWebSocket(url, headers, sessionId, signal) {
|
|
|
678
642
|
return {
|
|
679
643
|
socket: cached.socket,
|
|
680
644
|
entry: cached,
|
|
681
|
-
reused: true,
|
|
682
645
|
release: ({ keep } = {}) => {
|
|
683
646
|
if (!keep || !isWebSocketReusable(cached.socket)) {
|
|
684
647
|
closeWebSocketSilently(cached.socket);
|
|
@@ -694,7 +657,6 @@ async function acquireWebSocket(url, headers, sessionId, signal) {
|
|
|
694
657
|
const socket = await connectWebSocket(url, headers, signal);
|
|
695
658
|
return {
|
|
696
659
|
socket,
|
|
697
|
-
reused: false,
|
|
698
660
|
release: () => {
|
|
699
661
|
closeWebSocketSilently(socket);
|
|
700
662
|
}
|
|
@@ -715,7 +677,6 @@ async function acquireWebSocket(url, headers, sessionId, signal) {
|
|
|
715
677
|
return {
|
|
716
678
|
socket,
|
|
717
679
|
entry,
|
|
718
|
-
reused: false,
|
|
719
680
|
release: ({ keep } = {}) => {
|
|
720
681
|
if (!keep || !isWebSocketReusable(entry.socket)) {
|
|
721
682
|
closeWebSocketSilently(entry.socket);
|
|
@@ -834,8 +795,9 @@ async function* parseWebSocket(socket, signal) {
|
|
|
834
795
|
try {
|
|
835
796
|
while (true) {
|
|
836
797
|
if (signal?.aborted) throw new Error("Request was aborted");
|
|
837
|
-
|
|
838
|
-
|
|
798
|
+
const next = queue.shift();
|
|
799
|
+
if (next !== void 0) {
|
|
800
|
+
yield next;
|
|
839
801
|
continue;
|
|
840
802
|
}
|
|
841
803
|
if (done) break;
|
|
@@ -899,29 +861,11 @@ async function* startWebSocketOutputOnFirstEvent(events, output, stream, onStart
|
|
|
899
861
|
}
|
|
900
862
|
}
|
|
901
863
|
async function processWebSocketStream(url, body, headers, output, stream, model, onStart, options, abortFirstEventStream) {
|
|
902
|
-
const { socket, entry,
|
|
864
|
+
const { socket, entry, release } = await acquireWebSocket(url, headers, options?.sessionId, options?.signal);
|
|
903
865
|
let keepConnection = true;
|
|
904
866
|
const useCachedContext = options?.transport === "websocket-cached" || options?.transport === "auto";
|
|
905
867
|
const fullBody = body;
|
|
906
868
|
const requestBody = useCachedContext && entry ? buildCachedWebSocketRequestBody(entry, fullBody) : fullBody;
|
|
907
|
-
const stats = options?.sessionId ? getOrCreateWebSocketDebugStats(options.sessionId) : void 0;
|
|
908
|
-
if (stats) {
|
|
909
|
-
stats.requests++;
|
|
910
|
-
if (reused) stats.connectionsReused++;
|
|
911
|
-
else stats.connectionsCreated++;
|
|
912
|
-
if (useCachedContext) stats.cachedContextRequests++;
|
|
913
|
-
if (requestBody.store === true) stats.storeTrueRequests++;
|
|
914
|
-
stats.lastInputItems = requestBody.input?.length ?? 0;
|
|
915
|
-
if (requestBody.previous_response_id) {
|
|
916
|
-
stats.deltaRequests++;
|
|
917
|
-
stats.lastDeltaInputItems = requestBody.input?.length ?? 0;
|
|
918
|
-
stats.lastPreviousResponseId = requestBody.previous_response_id;
|
|
919
|
-
} else {
|
|
920
|
-
stats.fullContextRequests++;
|
|
921
|
-
stats.lastDeltaInputItems = void 0;
|
|
922
|
-
stats.lastPreviousResponseId = void 0;
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
869
|
try {
|
|
926
870
|
if (options?.signal?.aborted) throw new Error("Request was aborted");
|
|
927
871
|
socket.send(JSON.stringify({
|
|
@@ -981,7 +925,7 @@ async function readChatGptResponsesErrorTextLimited(response) {
|
|
|
981
925
|
break;
|
|
982
926
|
}
|
|
983
927
|
}
|
|
984
|
-
text += decoder.decode();
|
|
928
|
+
if (!reachedLimit) text += decoder.decode();
|
|
985
929
|
} finally {
|
|
986
930
|
if (reachedLimit) await reader.cancel().catch(() => {});
|
|
987
931
|
try {
|
|
@@ -1065,4 +1009,4 @@ function toLintErrorObject(value, fallbackMessage) {
|
|
|
1065
1009
|
return error;
|
|
1066
1010
|
}
|
|
1067
1011
|
//#endregion
|
|
1068
|
-
export { closeOpenAICodexWebSocketSessions, extractOpenAICodexAccountId, parseSSEForTest,
|
|
1012
|
+
export { closeOpenAICodexWebSocketSessions, extractOpenAICodexAccountId, parseSSEForTest, resetOpenAICodexWebSocketStateForTest, streamOpenAICodexResponses, streamSimpleOpenAICodexResponses };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { n as getEnvApiKey, r as __exportAll } from "./env-api-keys-
|
|
2
|
-
import { t as AssistantMessageEventStream } from "./event-stream-
|
|
1
|
+
import { n as getEnvApiKey, r as __exportAll } from "./env-api-keys-DnhYpc27.mjs";
|
|
2
|
+
import { t as AssistantMessageEventStream } from "./event-stream-D8n2uFee.mjs";
|
|
3
3
|
import { n as getAiTransportHost } from "./host-4t713IeR.mjs";
|
|
4
|
-
import { n as calculateCost, r as clampThinkingLevel, t as applyProviderReportedUsageCost } from "./model-utils-
|
|
4
|
+
import { n as calculateCost, r as clampThinkingLevel, t as applyProviderReportedUsageCost } from "./model-utils-Q1LSRIdo.mjs";
|
|
5
5
|
import { t as headersToRecord } from "./headers-B_e4-1J0.mjs";
|
|
6
|
-
import { n as parseStreamingJson } from "./json-parse-
|
|
6
|
+
import { n as parseStreamingJson } from "./json-parse-BvXNt1-7.mjs";
|
|
7
7
|
import { t as sanitizeSurrogates } from "./sanitize-unicode-DT5o51ur.mjs";
|
|
8
|
-
import { b as
|
|
8
|
+
import { b as splitSystemPromptCacheBoundary, i as extractToolResultText, n as describeToolResultMediaPlaceholder, s as buildBaseOptions, t as transformMessages, x as stripSystemPromptCacheBoundary } from "./transform-messages-DNWpwvXA.mjs";
|
|
9
9
|
import { a as resolveCacheRetention, i as resolveCloudflareBaseUrl, n as hasCopilotVisionInput, r as isCloudflareProvider, t as buildCopilotDynamicHeaders } from "./github-copilot-headers-BsH5cqGj.mjs";
|
|
10
|
-
import { t as createReasoningTagTextPartitioner } from "./reasoning-tag-text-partitioner-
|
|
10
|
+
import { t as createReasoningTagTextPartitioner } from "./reasoning-tag-text-partitioner-BlVe67g6.mjs";
|
|
11
11
|
import { a as withFirstStreamEventTimeout, i as getFirstStreamEventTimeoutMs, r as getFirstStreamEventTimeoutHandler, t as createFirstStreamEventAbortController } from "./stream-first-event-timeout-RjWszj8c.mjs";
|
|
12
|
-
import { a as clampOpenAIPromptCacheKey, n as reconcileOpenAICompletionsToolChoice, t as projectOpenAITools } from "./openai-tool-projection-
|
|
12
|
+
import { a as clampOpenAIPromptCacheKey, n as reconcileOpenAICompletionsToolChoice, t as projectOpenAITools } from "./openai-tool-projection-cTLC4F65.mjs";
|
|
13
13
|
import OpenAI from "openai";
|
|
14
14
|
//#region packages/ai/src/providers/openai-stop-reason.ts
|
|
15
15
|
function mapOpenAIStopReason(reason, options) {
|
|
@@ -160,7 +160,6 @@ const streamOpenAICompletions = (model, context, options) => {
|
|
|
160
160
|
partial: output
|
|
161
161
|
});
|
|
162
162
|
else if (block.type === "toolCall") {
|
|
163
|
-
block.arguments = parseStreamingJson(block.partialArgs);
|
|
164
163
|
delete block.partialArgs;
|
|
165
164
|
delete block.streamIndex;
|
|
166
165
|
stream.push({
|
|
@@ -533,7 +532,7 @@ function addCacheControlToSystemPrompt(messages, cacheControl) {
|
|
|
533
532
|
function addCacheControlToLastConversationMessage(messages, cacheControl, cacheOptOutIndexes) {
|
|
534
533
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
535
534
|
const message = messages[i];
|
|
536
|
-
if (cacheOptOutIndexes.has(i)) continue;
|
|
535
|
+
if (!message || cacheOptOutIndexes.has(i)) continue;
|
|
537
536
|
if (message.role === "user" || message.role === "assistant") {
|
|
538
537
|
if (addCacheControlToMessage(message, cacheControl)) return;
|
|
539
538
|
}
|
|
@@ -541,7 +540,8 @@ function addCacheControlToLastConversationMessage(messages, cacheControl, cacheO
|
|
|
541
540
|
}
|
|
542
541
|
function addCacheControlToLastTool(tools, cacheControl) {
|
|
543
542
|
if (!tools || tools.length === 0) return;
|
|
544
|
-
const lastTool = tools
|
|
543
|
+
const lastTool = tools.at(-1);
|
|
544
|
+
if (!lastTool) return;
|
|
545
545
|
lastTool.cache_control = cacheControl;
|
|
546
546
|
}
|
|
547
547
|
function addCacheControlToInstructionMessage(message, cacheControl) {
|
|
@@ -594,10 +594,7 @@ function buildCacheControlledTextParts(text, cacheControl) {
|
|
|
594
594
|
function convertMessages(model, context, compat, options = {}) {
|
|
595
595
|
const params = [];
|
|
596
596
|
const normalizeToolCallId = (id) => {
|
|
597
|
-
if (id.includes("|"))
|
|
598
|
-
const [callId] = id.split("|");
|
|
599
|
-
return callId.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 40);
|
|
600
|
-
}
|
|
597
|
+
if (id.includes("|")) return id.slice(0, id.indexOf("|")).replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 40);
|
|
601
598
|
if (model.provider === "openai") return id.length > 40 ? id.slice(0, 40) : id;
|
|
602
599
|
return id;
|
|
603
600
|
};
|
|
@@ -613,6 +610,7 @@ function convertMessages(model, context, compat, options = {}) {
|
|
|
613
610
|
let lastRole = null;
|
|
614
611
|
for (let i = 0; i < transformedMessages.length; i++) {
|
|
615
612
|
const msg = transformedMessages[i];
|
|
613
|
+
if (!msg) continue;
|
|
616
614
|
if (compat.requiresAssistantAfterToolResult && lastRole === "toolResult" && msg.role === "user") params.push({
|
|
617
615
|
role: "assistant",
|
|
618
616
|
content: "I have processed the tool results."
|
|
@@ -662,7 +660,7 @@ function convertMessages(model, context, compat, options = {}) {
|
|
|
662
660
|
}, ...assistantTextParts];
|
|
663
661
|
else {
|
|
664
662
|
if (assistantText.length > 0) assistantMsg.content = assistantText;
|
|
665
|
-
let signature = nonEmptyThinkingBlocks
|
|
663
|
+
let signature = nonEmptyThinkingBlocks.at(0)?.thinkingSignature;
|
|
666
664
|
if (model.provider === "opencode-go" && signature === "reasoning") signature = "reasoning_content";
|
|
667
665
|
if (signature && signature.length > 0) assistantMsg[signature] = nonEmptyThinkingBlocks.map((block) => block.thinking).join("\n");
|
|
668
666
|
}
|
|
@@ -677,13 +675,16 @@ function convertMessages(model, context, compat, options = {}) {
|
|
|
677
675
|
arguments: JSON.stringify(tc.arguments)
|
|
678
676
|
}
|
|
679
677
|
}));
|
|
680
|
-
const reasoningDetails = toolCalls.
|
|
678
|
+
const reasoningDetails = toolCalls.flatMap((tc) => {
|
|
679
|
+
const signature = tc.thoughtSignature;
|
|
680
|
+
if (!signature) return [];
|
|
681
681
|
try {
|
|
682
|
-
|
|
682
|
+
const parsed = JSON.parse(signature);
|
|
683
|
+
return parsed ? [parsed] : [];
|
|
683
684
|
} catch {
|
|
684
|
-
return
|
|
685
|
+
return [];
|
|
685
686
|
}
|
|
686
|
-
})
|
|
687
|
+
});
|
|
687
688
|
if (reasoningDetails.length > 0) assistantMsg.reasoning_details = reasoningDetails;
|
|
688
689
|
}
|
|
689
690
|
if (compat.requiresReasoningContentOnAssistantMessages && model.reasoning && assistantMsg.reasoning_content === void 0) assistantMsg.reasoning_content = "";
|
|
@@ -693,8 +694,9 @@ function convertMessages(model, context, compat, options = {}) {
|
|
|
693
694
|
} else if (msg.role === "toolResult") {
|
|
694
695
|
const imageBlocks = [];
|
|
695
696
|
let j = i;
|
|
696
|
-
|
|
697
|
-
const toolMsg = transformedMessages
|
|
697
|
+
while (j < transformedMessages.length) {
|
|
698
|
+
const toolMsg = transformedMessages.at(j);
|
|
699
|
+
if (toolMsg?.role !== "toolResult") break;
|
|
698
700
|
const textResult = extractToolResultText(toolMsg.content);
|
|
699
701
|
const mediaPlaceholder = describeToolResultMediaPlaceholder(toolMsg.content);
|
|
700
702
|
const hasImages = toolMsg.content.some((c) => c.type === "image");
|
|
@@ -711,6 +713,7 @@ function convertMessages(model, context, compat, options = {}) {
|
|
|
711
713
|
image_url: { url: `data:${block.mimeType};base64,${block.data}` }
|
|
712
714
|
});
|
|
713
715
|
}
|
|
716
|
+
j += 1;
|
|
714
717
|
}
|
|
715
718
|
i = j - 1;
|
|
716
719
|
if (imageBlocks.length > 0) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { n as getEnvApiKey, r as __exportAll } from "./env-api-keys-
|
|
2
|
-
import { t as AssistantMessageEventStream } from "./event-stream-
|
|
1
|
+
import { n as getEnvApiKey, r as __exportAll } from "./env-api-keys-DnhYpc27.mjs";
|
|
2
|
+
import { t as AssistantMessageEventStream } from "./event-stream-D8n2uFee.mjs";
|
|
3
3
|
import { n as getAiTransportHost } from "./host-4t713IeR.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { s as buildBaseOptions } from "./transform-messages-DNWpwvXA.mjs";
|
|
5
5
|
import { a as resolveCacheRetention, i as resolveCloudflareBaseUrl, n as hasCopilotVisionInput, r as isCloudflareProvider, t as buildCopilotDynamicHeaders } from "./github-copilot-headers-BsH5cqGj.mjs";
|
|
6
|
-
import { a as resolveResponsesReasoningEffort, n as convertResponsesMessages, o as runResponsesStreamLifecycle, r as createResponsesAssistantOutput, t as applyCommonResponsesParams } from "./openai-responses-shared-
|
|
7
|
-
import { a as clampOpenAIPromptCacheKey } from "./openai-tool-projection-
|
|
6
|
+
import { A as supportsOpenAITemperature, a as resolveResponsesReasoningEffort, n as convertResponsesMessages, o as runResponsesStreamLifecycle, r as createResponsesAssistantOutput, t as applyCommonResponsesParams } from "./openai-responses-shared-B9mtGvXq.mjs";
|
|
7
|
+
import { a as clampOpenAIPromptCacheKey } from "./openai-tool-projection-cTLC4F65.mjs";
|
|
8
8
|
import OpenAI from "openai";
|
|
9
9
|
//#region packages/ai/src/providers/openai-responses.ts
|
|
10
10
|
var openai_responses_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -111,7 +111,7 @@ function buildParams(model, context, options) {
|
|
|
111
111
|
store: false
|
|
112
112
|
};
|
|
113
113
|
if (options?.maxTokens) params.max_output_tokens = options?.maxTokens;
|
|
114
|
-
if (options?.temperature !== void 0) params.temperature = options?.temperature;
|
|
114
|
+
if (options?.temperature !== void 0 && supportsOpenAITemperature(model)) params.temperature = options?.temperature;
|
|
115
115
|
if (options?.serviceTier !== void 0) params.service_tier = options.serviceTier;
|
|
116
116
|
applyCommonResponsesParams(params, model, context, options, { setDefaultReasoningOff: model.provider !== "github-copilot" });
|
|
117
117
|
return params;
|