@code-yeongyu/senpi-ai 2026.7.31-2 → 2026.8.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/api/openai-codex-responses/fallback-state.d.ts +24 -0
- package/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -0
- package/dist/api/openai-codex-responses/fallback-state.js +70 -0
- package/dist/api/openai-codex-responses/fallback-state.js.map +1 -0
- package/dist/api/openai-codex-responses.d.ts +2 -16
- package/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +8 -56
- package/dist/api/openai-codex-responses.js.map +1 -1
- package/dist/api/openai-prompt-cache.d.ts +1 -0
- package/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/dist/api/openai-prompt-cache.js +7 -0
- package/dist/api/openai-prompt-cache.js.map +1 -1
- package/dist/model.d.ts +2 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js.map +1 -1
- package/dist/models.d.ts +13 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +71 -45
- package/dist/models.js.map +1 -1
- package/dist/providers/data/.manifest.json +1 -1
- package/dist/providers/data/openrouter.json +1 -1
- package/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/dist/providers/data/zai-coding-cn.json +1 -1
- package/dist/providers/data/zai.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const CODEX_WEBSOCKET_FALLBACK_COOLDOWN_MS = 60000;
|
|
2
|
+
export interface OpenAICodexWebSocketDebugStats {
|
|
3
|
+
requests: number;
|
|
4
|
+
connectionsCreated: number;
|
|
5
|
+
connectionsReused: number;
|
|
6
|
+
cachedContextRequests: number;
|
|
7
|
+
storeTrueRequests: number;
|
|
8
|
+
fullContextRequests: number;
|
|
9
|
+
deltaRequests: number;
|
|
10
|
+
lastInputItems: number;
|
|
11
|
+
lastDeltaInputItems?: number;
|
|
12
|
+
lastPreviousResponseId?: string;
|
|
13
|
+
websocketFailures: number;
|
|
14
|
+
sseFallbacks: number;
|
|
15
|
+
websocketFallbackActive?: boolean;
|
|
16
|
+
lastWebSocketError?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function getOrCreateWebSocketDebugStats(sessionId: string): OpenAICodexWebSocketDebugStats;
|
|
19
|
+
export declare function getWebSocketDebugStats(sessionId: string): OpenAICodexWebSocketDebugStats | undefined;
|
|
20
|
+
export declare function clearWebSocketFallbackState(sessionId?: string): void;
|
|
21
|
+
export declare function isWebSocketSseFallbackActive(sessionId: string | undefined): boolean;
|
|
22
|
+
export declare function recordWebSocketSseFallback(sessionId: string | undefined): void;
|
|
23
|
+
export declare function recordWebSocketFailure(sessionId: string | undefined, error: unknown): void;
|
|
24
|
+
//# sourceMappingURL=fallback-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-state.d.ts","sourceRoot":"","sources":["../../../src/api/openai-codex-responses/fallback-state.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAE3D,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,8BAA8B,CAkBhG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,8BAA8B,GAAG,SAAS,CAGpG;AAED,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAQpE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAcnF;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAK9E;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAQ1F"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { formatThrownValue } from "../../utils/diagnostics.js";
|
|
2
|
+
export const CODEX_WEBSOCKET_FALLBACK_COOLDOWN_MS = 60_000;
|
|
3
|
+
const websocketDebugStats = new Map();
|
|
4
|
+
const websocketSseFallbackUntil = new Map();
|
|
5
|
+
export function getOrCreateWebSocketDebugStats(sessionId) {
|
|
6
|
+
let stats = websocketDebugStats.get(sessionId);
|
|
7
|
+
if (!stats) {
|
|
8
|
+
stats = {
|
|
9
|
+
requests: 0,
|
|
10
|
+
connectionsCreated: 0,
|
|
11
|
+
connectionsReused: 0,
|
|
12
|
+
cachedContextRequests: 0,
|
|
13
|
+
storeTrueRequests: 0,
|
|
14
|
+
fullContextRequests: 0,
|
|
15
|
+
deltaRequests: 0,
|
|
16
|
+
lastInputItems: 0,
|
|
17
|
+
websocketFailures: 0,
|
|
18
|
+
sseFallbacks: 0,
|
|
19
|
+
};
|
|
20
|
+
websocketDebugStats.set(sessionId, stats);
|
|
21
|
+
}
|
|
22
|
+
return stats;
|
|
23
|
+
}
|
|
24
|
+
export function getWebSocketDebugStats(sessionId) {
|
|
25
|
+
const stats = websocketDebugStats.get(sessionId);
|
|
26
|
+
return stats ? { ...stats } : undefined;
|
|
27
|
+
}
|
|
28
|
+
export function clearWebSocketFallbackState(sessionId) {
|
|
29
|
+
if (sessionId) {
|
|
30
|
+
websocketDebugStats.delete(sessionId);
|
|
31
|
+
websocketSseFallbackUntil.delete(sessionId);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
websocketDebugStats.clear();
|
|
35
|
+
websocketSseFallbackUntil.clear();
|
|
36
|
+
}
|
|
37
|
+
export function isWebSocketSseFallbackActive(sessionId) {
|
|
38
|
+
if (!sessionId)
|
|
39
|
+
return false;
|
|
40
|
+
const fallbackUntil = websocketSseFallbackUntil.get(sessionId);
|
|
41
|
+
if (fallbackUntil === undefined)
|
|
42
|
+
return false;
|
|
43
|
+
const stats = websocketDebugStats.get(sessionId);
|
|
44
|
+
if (fallbackUntil > Date.now()) {
|
|
45
|
+
if (stats)
|
|
46
|
+
stats.websocketFallbackActive = true;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
websocketSseFallbackUntil.delete(sessionId);
|
|
50
|
+
if (stats)
|
|
51
|
+
stats.websocketFallbackActive = false;
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
export function recordWebSocketSseFallback(sessionId) {
|
|
55
|
+
if (!sessionId)
|
|
56
|
+
return;
|
|
57
|
+
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
58
|
+
stats.sseFallbacks++;
|
|
59
|
+
stats.websocketFallbackActive = true;
|
|
60
|
+
}
|
|
61
|
+
export function recordWebSocketFailure(sessionId, error) {
|
|
62
|
+
if (!sessionId)
|
|
63
|
+
return;
|
|
64
|
+
websocketSseFallbackUntil.set(sessionId, Date.now() + CODEX_WEBSOCKET_FALLBACK_COOLDOWN_MS);
|
|
65
|
+
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
66
|
+
stats.websocketFailures++;
|
|
67
|
+
stats.lastWebSocketError = formatThrownValue(error);
|
|
68
|
+
stats.websocketFallbackActive = true;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=fallback-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-state.js","sourceRoot":"","sources":["../../../src/api/openai-codex-responses/fallback-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatThrownValue } from \"../../utils/diagnostics.ts\";\n\nexport const CODEX_WEBSOCKET_FALLBACK_COOLDOWN_MS = 60_000;\n\nexport interface OpenAICodexWebSocketDebugStats {\n\trequests: number;\n\tconnectionsCreated: number;\n\tconnectionsReused: number;\n\tcachedContextRequests: number;\n\tstoreTrueRequests: number;\n\tfullContextRequests: number;\n\tdeltaRequests: number;\n\tlastInputItems: number;\n\tlastDeltaInputItems?: number;\n\tlastPreviousResponseId?: string;\n\twebsocketFailures: number;\n\tsseFallbacks: number;\n\twebsocketFallbackActive?: boolean;\n\tlastWebSocketError?: string;\n}\n\nconst websocketDebugStats = new Map<string, OpenAICodexWebSocketDebugStats>();\nconst websocketSseFallbackUntil = new Map<string, number>();\n\nexport function getOrCreateWebSocketDebugStats(sessionId: string): OpenAICodexWebSocketDebugStats {\n\tlet stats = websocketDebugStats.get(sessionId);\n\tif (!stats) {\n\t\tstats = {\n\t\t\trequests: 0,\n\t\t\tconnectionsCreated: 0,\n\t\t\tconnectionsReused: 0,\n\t\t\tcachedContextRequests: 0,\n\t\t\tstoreTrueRequests: 0,\n\t\t\tfullContextRequests: 0,\n\t\t\tdeltaRequests: 0,\n\t\t\tlastInputItems: 0,\n\t\t\twebsocketFailures: 0,\n\t\t\tsseFallbacks: 0,\n\t\t};\n\t\twebsocketDebugStats.set(sessionId, stats);\n\t}\n\treturn stats;\n}\n\nexport function getWebSocketDebugStats(sessionId: string): OpenAICodexWebSocketDebugStats | undefined {\n\tconst stats = websocketDebugStats.get(sessionId);\n\treturn stats ? { ...stats } : undefined;\n}\n\nexport function clearWebSocketFallbackState(sessionId?: string): void {\n\tif (sessionId) {\n\t\twebsocketDebugStats.delete(sessionId);\n\t\twebsocketSseFallbackUntil.delete(sessionId);\n\t\treturn;\n\t}\n\twebsocketDebugStats.clear();\n\twebsocketSseFallbackUntil.clear();\n}\n\nexport function isWebSocketSseFallbackActive(sessionId: string | undefined): boolean {\n\tif (!sessionId) return false;\n\tconst fallbackUntil = websocketSseFallbackUntil.get(sessionId);\n\tif (fallbackUntil === undefined) return false;\n\n\tconst stats = websocketDebugStats.get(sessionId);\n\tif (fallbackUntil > Date.now()) {\n\t\tif (stats) stats.websocketFallbackActive = true;\n\t\treturn true;\n\t}\n\n\twebsocketSseFallbackUntil.delete(sessionId);\n\tif (stats) stats.websocketFallbackActive = false;\n\treturn false;\n}\n\nexport function recordWebSocketSseFallback(sessionId: string | undefined): void {\n\tif (!sessionId) return;\n\tconst stats = getOrCreateWebSocketDebugStats(sessionId);\n\tstats.sseFallbacks++;\n\tstats.websocketFallbackActive = true;\n}\n\nexport function recordWebSocketFailure(sessionId: string | undefined, error: unknown): void {\n\tif (!sessionId) return;\n\twebsocketSseFallbackUntil.set(sessionId, Date.now() + CODEX_WEBSOCKET_FALLBACK_COOLDOWN_MS);\n\n\tconst stats = getOrCreateWebSocketDebugStats(sessionId);\n\tstats.websocketFailures++;\n\tstats.lastWebSocketError = formatThrownValue(error);\n\tstats.websocketFallbackActive = true;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ResponseCreateParamsStreaming } from "openai/resources/responses/responses.js";
|
|
2
2
|
import type { SimpleStreamOptions, StreamFunction, StreamOptions } from "../types.ts";
|
|
3
|
+
import { type OpenAICodexWebSocketDebugStats } from "./openai-codex-responses/fallback-state.ts";
|
|
3
4
|
import { type CodexReasoningSummaryInput } from "./openai-codex-responses/reasoning.ts";
|
|
4
5
|
export interface OpenAICodexResponsesOptions extends StreamOptions {
|
|
5
6
|
reasoningEffort?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
@@ -10,22 +11,7 @@ export interface OpenAICodexResponsesOptions extends StreamOptions {
|
|
|
10
11
|
}
|
|
11
12
|
export declare const stream: StreamFunction<"openai-codex-responses", OpenAICodexResponsesOptions>;
|
|
12
13
|
export declare const streamSimple: StreamFunction<"openai-codex-responses", SimpleStreamOptions>;
|
|
13
|
-
export
|
|
14
|
-
requests: number;
|
|
15
|
-
connectionsCreated: number;
|
|
16
|
-
connectionsReused: number;
|
|
17
|
-
cachedContextRequests: number;
|
|
18
|
-
storeTrueRequests: number;
|
|
19
|
-
fullContextRequests: number;
|
|
20
|
-
deltaRequests: number;
|
|
21
|
-
lastInputItems: number;
|
|
22
|
-
lastDeltaInputItems?: number;
|
|
23
|
-
lastPreviousResponseId?: string;
|
|
24
|
-
websocketFailures: number;
|
|
25
|
-
sseFallbacks: number;
|
|
26
|
-
websocketFallbackActive?: boolean;
|
|
27
|
-
lastWebSocketError?: string;
|
|
28
|
-
}
|
|
14
|
+
export type { OpenAICodexWebSocketDebugStats } from "./openai-codex-responses/fallback-state.ts";
|
|
29
15
|
export declare function getOpenAICodexWebSocketDebugStats(sessionId: string): OpenAICodexWebSocketDebugStats | undefined;
|
|
30
16
|
export declare function resetOpenAICodexWebSocketDebugStats(sessionId?: string): void;
|
|
31
17
|
export declare function closeOpenAICodexWebSocketSessions(sessionId?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-codex-responses.d.ts","sourceRoot":"","sources":["../../src/api/openai-codex-responses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,6BAA6B,EAG7B,MAAM,yCAAyC,CAAC;AAkBjD,OAAO,KAAK,EAOX,mBAAmB,EACnB,cAAc,EACd,aAAa,EAEb,MAAM,aAAa,CAAC;AAerB,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAyC7G,MAAM,WAAW,2BAA4B,SAAQ,aAAa;IACjE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACnF,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CAC1C;AAmJD,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,wBAAwB,EAAE,2BAA2B,CAiQxF,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,wBAAwB,EAAE,mBAAmB,CAuBtF,CAAC;AA0WF,
|
|
1
|
+
{"version":3,"file":"openai-codex-responses.d.ts","sourceRoot":"","sources":["../../src/api/openai-codex-responses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,6BAA6B,EAG7B,MAAM,yCAAyC,CAAC;AAkBjD,OAAO,KAAK,EAOX,mBAAmB,EACnB,cAAc,EACd,aAAa,EAEb,MAAM,aAAa,CAAC;AAerB,OAAO,EAKN,KAAK,8BAA8B,EAGnC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAyC7G,MAAM,WAAW,2BAA4B,SAAQ,aAAa;IACjE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACnF,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;CAC1C;AAmJD,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,wBAAwB,EAAE,2BAA2B,CAiQxF,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,wBAAwB,EAAE,mBAAmB,CAuBtF,CAAC;AA0WF,YAAY,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAIjG,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,8BAA8B,GAAG,SAAS,CAE/G;AAED,wBAAgB,mCAAmC,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5E;AAED,wBAAgB,iCAAiC,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAiB1E"}
|
|
@@ -18,8 +18,9 @@ import { resolveHttpProxyUrlForTarget } from "../utils/node-http-proxy.js";
|
|
|
18
18
|
import { extractOpenAiCodexAccountId } from "../utils/openai-codex-auth.js";
|
|
19
19
|
import { uuidv7 } from "../utils/uuid.js";
|
|
20
20
|
import { createGrammarToolInputProperties } from "./constrained-sampling.js";
|
|
21
|
+
import { clearWebSocketFallbackState, getOrCreateWebSocketDebugStats, getWebSocketDebugStats, isWebSocketSseFallbackActive, recordWebSocketFailure, recordWebSocketSseFallback, } from "./openai-codex-responses/fallback-state.js";
|
|
21
22
|
import { buildCodexReasoning } from "./openai-codex-responses/reasoning.js";
|
|
22
|
-
import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
|
|
23
|
+
import { applyOpenAICodexCacheAffinityHeaders, clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
|
|
23
24
|
import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js";
|
|
24
25
|
import { applyExtraBody, buildBaseOptions, clampMaxForOpenAI, OPENAI_RESPONSES_RESERVED_BODY_KEYS, } from "./simple-options.js";
|
|
25
26
|
// ============================================================================
|
|
@@ -637,39 +638,11 @@ const OPENAI_BETA_RESPONSES_WEBSOCKETS = "responses_websockets=2026-02-06";
|
|
|
637
638
|
const SESSION_WEBSOCKET_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
638
639
|
const SESSION_WEBSOCKET_MAX_AGE_MS = 55 * 60 * 1000;
|
|
639
640
|
const websocketSessionCache = new Map();
|
|
640
|
-
const websocketDebugStats = new Map();
|
|
641
|
-
const websocketSseFallbackSessions = new Set();
|
|
642
|
-
function getOrCreateWebSocketDebugStats(sessionId) {
|
|
643
|
-
let stats = websocketDebugStats.get(sessionId);
|
|
644
|
-
if (!stats) {
|
|
645
|
-
stats = {
|
|
646
|
-
requests: 0,
|
|
647
|
-
connectionsCreated: 0,
|
|
648
|
-
connectionsReused: 0,
|
|
649
|
-
cachedContextRequests: 0,
|
|
650
|
-
storeTrueRequests: 0,
|
|
651
|
-
fullContextRequests: 0,
|
|
652
|
-
deltaRequests: 0,
|
|
653
|
-
lastInputItems: 0,
|
|
654
|
-
websocketFailures: 0,
|
|
655
|
-
sseFallbacks: 0,
|
|
656
|
-
};
|
|
657
|
-
websocketDebugStats.set(sessionId, stats);
|
|
658
|
-
}
|
|
659
|
-
return stats;
|
|
660
|
-
}
|
|
661
641
|
export function getOpenAICodexWebSocketDebugStats(sessionId) {
|
|
662
|
-
|
|
663
|
-
return stats ? { ...stats } : undefined;
|
|
642
|
+
return getWebSocketDebugStats(sessionId);
|
|
664
643
|
}
|
|
665
644
|
export function resetOpenAICodexWebSocketDebugStats(sessionId) {
|
|
666
|
-
|
|
667
|
-
websocketDebugStats.delete(sessionId);
|
|
668
|
-
websocketSseFallbackSessions.delete(sessionId);
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
websocketDebugStats.clear();
|
|
672
|
-
websocketSseFallbackSessions.clear();
|
|
645
|
+
clearWebSocketFallbackState(sessionId);
|
|
673
646
|
}
|
|
674
647
|
export function closeOpenAICodexWebSocketSessions(sessionId) {
|
|
675
648
|
const closeEntry = (entry) => {
|
|
@@ -682,33 +655,16 @@ export function closeOpenAICodexWebSocketSessions(sessionId) {
|
|
|
682
655
|
if (entry)
|
|
683
656
|
closeEntry(entry);
|
|
684
657
|
websocketSessionCache.delete(sessionId);
|
|
658
|
+
clearWebSocketFallbackState(sessionId);
|
|
685
659
|
return;
|
|
686
660
|
}
|
|
687
661
|
for (const entry of websocketSessionCache.values()) {
|
|
688
662
|
closeEntry(entry);
|
|
689
663
|
}
|
|
690
664
|
websocketSessionCache.clear();
|
|
665
|
+
clearWebSocketFallbackState();
|
|
691
666
|
}
|
|
692
667
|
registerSessionResourceCleanup(closeOpenAICodexWebSocketSessions);
|
|
693
|
-
function isWebSocketSseFallbackActive(sessionId) {
|
|
694
|
-
return sessionId ? websocketSseFallbackSessions.has(sessionId) : false;
|
|
695
|
-
}
|
|
696
|
-
function recordWebSocketSseFallback(sessionId) {
|
|
697
|
-
if (!sessionId)
|
|
698
|
-
return;
|
|
699
|
-
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
700
|
-
stats.sseFallbacks++;
|
|
701
|
-
stats.websocketFallbackActive = isWebSocketSseFallbackActive(sessionId);
|
|
702
|
-
}
|
|
703
|
-
function recordWebSocketFailure(sessionId, error) {
|
|
704
|
-
if (!sessionId)
|
|
705
|
-
return;
|
|
706
|
-
websocketSseFallbackSessions.add(sessionId);
|
|
707
|
-
const stats = getOrCreateWebSocketDebugStats(sessionId);
|
|
708
|
-
stats.websocketFailures++;
|
|
709
|
-
stats.lastWebSocketError = formatThrownValue(error);
|
|
710
|
-
stats.websocketFallbackActive = true;
|
|
711
|
-
}
|
|
712
668
|
let _cachedWebsocket = null;
|
|
713
669
|
async function getWebSocketConstructor(env) {
|
|
714
670
|
if (!env && _cachedWebsocket)
|
|
@@ -1298,10 +1254,7 @@ function buildSSEHeaders(initHeaders, additionalHeaders, accountId, token, sessi
|
|
|
1298
1254
|
headers.set("OpenAI-Beta", "responses=experimental");
|
|
1299
1255
|
headers.set("accept", "text/event-stream");
|
|
1300
1256
|
headers.set("content-type", "application/json");
|
|
1301
|
-
|
|
1302
|
-
headers.set("session-id", sessionId);
|
|
1303
|
-
headers.set("x-client-request-id", sessionId);
|
|
1304
|
-
}
|
|
1257
|
+
applyOpenAICodexCacheAffinityHeaders(headers, sessionId);
|
|
1305
1258
|
return headers;
|
|
1306
1259
|
}
|
|
1307
1260
|
function buildWebSocketHeaders(initHeaders, additionalHeaders, accountId, token, requestId) {
|
|
@@ -1311,8 +1264,7 @@ function buildWebSocketHeaders(initHeaders, additionalHeaders, accountId, token,
|
|
|
1311
1264
|
headers.delete("OpenAI-Beta");
|
|
1312
1265
|
headers.delete("openai-beta");
|
|
1313
1266
|
headers.set("OpenAI-Beta", OPENAI_BETA_RESPONSES_WEBSOCKETS);
|
|
1314
|
-
headers
|
|
1315
|
-
headers.set("session-id", requestId);
|
|
1267
|
+
applyOpenAICodexCacheAffinityHeaders(headers, requestId);
|
|
1316
1268
|
return headers;
|
|
1317
1269
|
}
|
|
1318
1270
|
//# sourceMappingURL=openai-codex-responses.js.map
|