openai 7.17.0 → 7.18.0
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/CHANGELOG.md +21 -0
- package/client.d.mts +2 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +2 -0
- package/client.d.ts.map +1 -1
- package/client.js +12 -0
- package/client.js.map +1 -1
- package/client.mjs +12 -0
- package/client.mjs.map +1 -1
- package/internal/ws.d.mts +7 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +7 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +36 -2
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +34 -3
- package/internal/ws.mjs.map +1 -1
- package/lib/responses/responses-websocket-lane.d.mts +63 -0
- package/lib/responses/responses-websocket-lane.d.mts.map +1 -0
- package/lib/responses/responses-websocket-lane.d.ts +63 -0
- package/lib/responses/responses-websocket-lane.d.ts.map +1 -0
- package/lib/responses/responses-websocket-lane.js +314 -0
- package/lib/responses/responses-websocket-lane.js.map +1 -0
- package/lib/responses/responses-websocket-lane.mjs +309 -0
- package/lib/responses/responses-websocket-lane.mjs.map +1 -0
- package/lib/responses/responses-websocket-session.d.mts +38 -0
- package/lib/responses/responses-websocket-session.d.mts.map +1 -0
- package/lib/responses/responses-websocket-session.d.ts +38 -0
- package/lib/responses/responses-websocket-session.d.ts.map +1 -0
- package/lib/responses/responses-websocket-session.js +268 -0
- package/lib/responses/responses-websocket-session.js.map +1 -0
- package/lib/responses/responses-websocket-session.mjs +263 -0
- package/lib/responses/responses-websocket-session.mjs.map +1 -0
- package/package.json +1 -1
- package/resources/beta/agents/sessions/sessions.d.mts +42 -1
- package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/agents/sessions/sessions.d.ts +42 -1
- package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/agents/sessions/sessions.js +2 -1
- package/resources/beta/agents/sessions/sessions.js.map +1 -1
- package/resources/beta/agents/sessions/sessions.mjs +2 -1
- package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +14 -4
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +14 -4
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/beta/responses/ws-base.d.mts +4 -0
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +4 -0
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +22 -1
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +21 -2
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts.map +1 -1
- package/resources/beta/responses/ws.js +10 -6
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs +10 -6
- package/resources/beta/responses/ws.mjs.map +1 -1
- package/resources/live/forks/ws.d.mts.map +1 -1
- package/resources/live/forks/ws.d.ts.map +1 -1
- package/resources/live/forks/ws.js +2 -4
- package/resources/live/forks/ws.js.map +1 -1
- package/resources/live/forks/ws.mjs +2 -4
- package/resources/live/forks/ws.mjs.map +1 -1
- package/resources/live/sideband/ws.d.mts.map +1 -1
- package/resources/live/sideband/ws.d.ts.map +1 -1
- package/resources/live/sideband/ws.js +2 -4
- package/resources/live/sideband/ws.js.map +1 -1
- package/resources/live/sideband/ws.mjs +2 -4
- package/resources/live/sideband/ws.mjs.map +1 -1
- package/resources/live/ws.d.mts.map +1 -1
- package/resources/live/ws.d.ts.map +1 -1
- package/resources/live/ws.js +2 -4
- package/resources/live/ws.js.map +1 -1
- package/resources/live/ws.mjs +2 -4
- package/resources/live/ws.mjs.map +1 -1
- package/resources/responses/responses.d.mts +11 -1
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +11 -1
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/responses/ws-base.d.mts +6 -0
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +6 -0
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +27 -4
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +26 -5
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts.map +1 -1
- package/resources/responses/ws.js +10 -6
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs +10 -6
- package/resources/responses/ws.mjs.map +1 -1
- package/resources/shared.d.mts +1 -1
- package/resources/shared.d.mts.map +1 -1
- package/resources/shared.d.ts +1 -1
- package/resources/shared.d.ts.map +1 -1
- package/resources/webhooks/webhooks.d.mts +3 -4
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts +3 -4
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/src/client.ts +15 -0
- package/src/internal/ws.ts +37 -3
- package/src/lib/responses/responses-websocket-lane.ts +388 -0
- package/src/lib/responses/responses-websocket-session.ts +317 -0
- package/src/resources/beta/agents/sessions/sessions.ts +47 -1
- package/src/resources/beta/responses/responses.ts +24 -4
- package/src/resources/beta/responses/ws-base.ts +24 -1
- package/src/resources/beta/responses/ws.ts +9 -6
- package/src/resources/live/forks/ws.ts +4 -5
- package/src/resources/live/sideband/ws.ts +4 -5
- package/src/resources/live/ws.ts +4 -5
- package/src/resources/responses/responses.ts +15 -1
- package/src/resources/responses/ws-base.ts +29 -4
- package/src/resources/responses/ws.ts +9 -6
- package/src/resources/shared.ts +4 -2
- package/src/resources/webhooks/webhooks.ts +3 -4
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/resources/webhooks/webhooks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/resources/webhooks/webhooks.ts"],"names":[],"mappings":"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"}
|
package/src/client.ts
CHANGED
|
@@ -739,6 +739,21 @@ export class OpenAI {
|
|
|
739
739
|
return this._options.defaultQuery;
|
|
740
740
|
}
|
|
741
741
|
|
|
742
|
+
/** @internal Client request headers for each new WebSocket handshake. */
|
|
743
|
+
_buildWebSocketHeaders(authHeaders: Record<string, string>): Record<string, string> {
|
|
744
|
+
return Object.fromEntries(
|
|
745
|
+
buildHeaders([
|
|
746
|
+
{
|
|
747
|
+
'User-Agent': this.getUserAgent(),
|
|
748
|
+
'OpenAI-Organization': this.organization,
|
|
749
|
+
'OpenAI-Project': this.project,
|
|
750
|
+
},
|
|
751
|
+
authHeaders,
|
|
752
|
+
this._options.defaultHeaders,
|
|
753
|
+
]).values,
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
|
|
742
757
|
protected validateHeaders(
|
|
743
758
|
{ values, nulls }: NullableHeaders,
|
|
744
759
|
schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {
|
package/src/internal/ws.ts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { concatBytes, encodeUTF8 } from './utils/bytes';
|
|
2
2
|
import { OpenAIError } from '../core/error';
|
|
3
|
+
import type { WebSocketLike } from './ws-adapter';
|
|
4
|
+
|
|
5
|
+
const webSocketErrors = new WeakMap<WebSocketLike, Error>();
|
|
6
|
+
|
|
7
|
+
/** Records physical failure before transport callbacks notify public observers. @internal */
|
|
8
|
+
export function recordWebSocketError(socket: WebSocketLike, error: Error): void {
|
|
9
|
+
webSocketErrors.set(socket, error);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Returns physical failure for this socket instance, never for a replacement. @internal */
|
|
13
|
+
export function getWebSocketError(socket: WebSocketLike): Error | undefined {
|
|
14
|
+
return webSocketErrors.get(socket);
|
|
15
|
+
}
|
|
3
16
|
|
|
4
17
|
/** Options for an independently buffered WebSocket stream iterator. */
|
|
5
18
|
export interface WebSocketStreamOptions {
|
|
@@ -105,7 +118,13 @@ export function snapshotWebSocketCredentials(options: {
|
|
|
105
118
|
const credentials = new Map<string, boolean>();
|
|
106
119
|
const headers = options.headers ?? {};
|
|
107
120
|
for (const [name, value] of Object.entries(headers)) {
|
|
108
|
-
|
|
121
|
+
const normalizedName = name.toLowerCase().split('_').join('-');
|
|
122
|
+
// Routing metadata is still protected on redirects, but cannot authenticate a socket.
|
|
123
|
+
if (
|
|
124
|
+
!isWebSocketCredentialHeader(name) ||
|
|
125
|
+
normalizedName === 'openai-organization' ||
|
|
126
|
+
normalizedName === 'openai-project'
|
|
127
|
+
) {
|
|
109
128
|
continue;
|
|
110
129
|
}
|
|
111
130
|
let snapshot = value;
|
|
@@ -196,9 +215,24 @@ function snapshotRawData(data: RawWebSocketData): Exclude<RawWebSocketData, Arra
|
|
|
196
215
|
return data.slice(0);
|
|
197
216
|
}
|
|
198
217
|
|
|
199
|
-
|
|
218
|
+
/** Counts wire bytes without allocating another payload-sized buffer. */
|
|
219
|
+
export function rawByteLength(data: RawWebSocketData): number {
|
|
200
220
|
if (typeof data === 'string') {
|
|
201
|
-
|
|
221
|
+
let bytes = 0;
|
|
222
|
+
for (let index = 0; index < data.length; index += 1) {
|
|
223
|
+
const code = data.codePointAt(index)!;
|
|
224
|
+
if (code < 128) {
|
|
225
|
+
bytes += 1;
|
|
226
|
+
} else if (code < 2048) {
|
|
227
|
+
bytes += 2;
|
|
228
|
+
} else if (code <= 65_535) {
|
|
229
|
+
bytes += 3;
|
|
230
|
+
} else {
|
|
231
|
+
bytes += 4;
|
|
232
|
+
index += 1;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return bytes;
|
|
202
236
|
}
|
|
203
237
|
if (Array.isArray(data)) {
|
|
204
238
|
return data.reduce((sum, buf) => sum + buf.byteLength, 0);
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Response,
|
|
3
|
+
ResponsesClientEvent,
|
|
4
|
+
ResponsesServerEvent,
|
|
5
|
+
} from '../../resources/responses/responses';
|
|
6
|
+
import { WebSocketError } from '../../resources/responses/internal-base';
|
|
7
|
+
import { OpenAIError } from '../../core/error';
|
|
8
|
+
import { hasOwn, isObj } from '../../internal/utils/values';
|
|
9
|
+
import {
|
|
10
|
+
cloneResponse,
|
|
11
|
+
createCanonicalResponseContext,
|
|
12
|
+
ensureCanonicalOutputText,
|
|
13
|
+
} from '../../internal/responses/canonical-output-text';
|
|
14
|
+
|
|
15
|
+
type WireResponse = Omit<Response, 'output' | 'output_text'> &
|
|
16
|
+
Partial<Pick<Response, 'output' | 'output_text'>>;
|
|
17
|
+
|
|
18
|
+
type WireEvent<Event> = Event extends { response: Response }
|
|
19
|
+
? Omit<Event, 'response'> & {
|
|
20
|
+
response: WireResponse;
|
|
21
|
+
}
|
|
22
|
+
: Event;
|
|
23
|
+
|
|
24
|
+
/** Raw lane events, including future types with unknown fields. Response output may be omitted. */
|
|
25
|
+
export type ResponsesWebSocketEvent =
|
|
26
|
+
| WireEvent<ResponsesServerEvent>
|
|
27
|
+
// oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type -- Future wire event fields have no SDK schema and must remain unknown to callers.
|
|
28
|
+
| {
|
|
29
|
+
/** The server's event tag, which may be newer than the SDK. */
|
|
30
|
+
type: string;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function isEventType<Type extends ResponsesServerEvent['type']>(
|
|
35
|
+
event: ResponsesWebSocketEvent,
|
|
36
|
+
...types: Type[]
|
|
37
|
+
): event is Extract<WireEvent<ResponsesServerEvent>, { type: Type }> {
|
|
38
|
+
return types.some((type) => event.type === type);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** @internal */
|
|
42
|
+
export function positiveInteger(value: number): number {
|
|
43
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
44
|
+
throw new OpenAIError('Responses WebSocket limits must be positive integers');
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** A single ordered local consumer. Canceling receive cancels only that wait. */
|
|
50
|
+
export class ResponsesWebSocketLane {
|
|
51
|
+
declare readonly streamID: string | undefined;
|
|
52
|
+
readonly #streamID: string | undefined;
|
|
53
|
+
readonly #send: (event: ResponsesClientEvent) => void;
|
|
54
|
+
readonly #release: (bytes: number) => void;
|
|
55
|
+
readonly #maxEvents: number;
|
|
56
|
+
readonly #maxBytes: number;
|
|
57
|
+
#bytes = 0;
|
|
58
|
+
readonly #queue: ({ event: ResponsesWebSocketEvent; bytes: number } | undefined)[] = [];
|
|
59
|
+
#queueHead = 0;
|
|
60
|
+
#wake: (() => void) | undefined;
|
|
61
|
+
#failure: Error | undefined;
|
|
62
|
+
#reading = false;
|
|
63
|
+
|
|
64
|
+
/** Created by ResponsesWebSocketSession.lane().
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
constructor(
|
|
68
|
+
streamID: string | undefined,
|
|
69
|
+
send: (event: ResponsesClientEvent) => void,
|
|
70
|
+
release: (bytes: number) => void,
|
|
71
|
+
maxEvents: number,
|
|
72
|
+
maxBytes: number,
|
|
73
|
+
) {
|
|
74
|
+
this.#streamID = streamID;
|
|
75
|
+
Object.defineProperty(this, 'streamID', {
|
|
76
|
+
value: streamID,
|
|
77
|
+
enumerable: true,
|
|
78
|
+
configurable: true,
|
|
79
|
+
writable: true,
|
|
80
|
+
});
|
|
81
|
+
this.#send = send;
|
|
82
|
+
this.#release = release;
|
|
83
|
+
this.#maxEvents = maxEvents;
|
|
84
|
+
this.#maxBytes = maxBytes;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Sends a request on this lane, omitting HTTP-only stream/background fields. previous_response_id remains caller-controlled. */
|
|
88
|
+
create(
|
|
89
|
+
request: Omit<
|
|
90
|
+
Extract<ResponsesClientEvent, { type: 'response.create' }>,
|
|
91
|
+
'type' | 'stream_id' | 'stream' | 'background'
|
|
92
|
+
>,
|
|
93
|
+
): void {
|
|
94
|
+
if (this.#failure) {
|
|
95
|
+
throw this.#failure;
|
|
96
|
+
}
|
|
97
|
+
const event: Extract<ResponsesClientEvent, { type: 'response.create' }> = {
|
|
98
|
+
...request,
|
|
99
|
+
type: 'response.create',
|
|
100
|
+
};
|
|
101
|
+
// The SDK owns this envelope; a top-level hook must not replace its routing.
|
|
102
|
+
Object.defineProperty(event, 'toJSON', { value: undefined });
|
|
103
|
+
delete event.stream;
|
|
104
|
+
delete event.background;
|
|
105
|
+
if (this.#streamID === undefined) {
|
|
106
|
+
delete event.stream_id;
|
|
107
|
+
} else {
|
|
108
|
+
Object.defineProperty(event, 'stream_id', { value: this.#streamID, enumerable: true });
|
|
109
|
+
}
|
|
110
|
+
this.#send(event);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Returns the next raw event without filling omitted output or computing output_text. */
|
|
114
|
+
async receive(options: { signal?: AbortSignal } = {}): Promise<ResponsesWebSocketEvent> {
|
|
115
|
+
this.#acquireReader();
|
|
116
|
+
try {
|
|
117
|
+
const item = await this.#receive(options);
|
|
118
|
+
return item.event;
|
|
119
|
+
} finally {
|
|
120
|
+
this.#reading = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
#acquireReader(): void {
|
|
125
|
+
if (this.#reading) {
|
|
126
|
+
throw new OpenAIError('Responses WebSocket lane already has a reader');
|
|
127
|
+
}
|
|
128
|
+
this.#reading = true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
async #receive(options: {
|
|
132
|
+
signal?: AbortSignal | undefined;
|
|
133
|
+
}): Promise<{ event: ResponsesWebSocketEvent; bytes: number }> {
|
|
134
|
+
const { signal } = options;
|
|
135
|
+
for (;;) {
|
|
136
|
+
if (signal?.aborted) {
|
|
137
|
+
throw signal.reason;
|
|
138
|
+
}
|
|
139
|
+
const item = this.#queue[this.#queueHead];
|
|
140
|
+
if (item) {
|
|
141
|
+
this.#queue[this.#queueHead] = undefined;
|
|
142
|
+
this.#queueHead += 1;
|
|
143
|
+
if (this.#queueHead >= 64 && this.#queueHead * 2 >= this.#queue.length) {
|
|
144
|
+
this.#queue.splice(0, this.#queueHead);
|
|
145
|
+
this.#queueHead = 0;
|
|
146
|
+
}
|
|
147
|
+
this.#release(item.bytes);
|
|
148
|
+
this.#bytes -= item.bytes;
|
|
149
|
+
return item;
|
|
150
|
+
}
|
|
151
|
+
if (this.#failure) {
|
|
152
|
+
throw this.#failure;
|
|
153
|
+
}
|
|
154
|
+
// oxlint-disable-next-line eslint/no-await-in-loop, promise/avoid-new -- A single ordered consumer waits for socket callbacks; canceling a wait must preserve queued events.
|
|
155
|
+
await new Promise<void>((resolve) => {
|
|
156
|
+
this.#wake = () => resolve();
|
|
157
|
+
signal?.addEventListener('abort', this.#wake, { once: true });
|
|
158
|
+
}).finally(() => {
|
|
159
|
+
if (this.#wake) {
|
|
160
|
+
signal?.removeEventListener('abort', this.#wake);
|
|
161
|
+
}
|
|
162
|
+
this.#wake = undefined;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Consumes the next response, returning completed, failed, or incomplete results.
|
|
169
|
+
* Collects finalized items and uses the existing Responses snapshot normalizer.
|
|
170
|
+
* Socket error events retain their nested data.
|
|
171
|
+
* Raw events remain observable on the original connection. maxResponseBytes
|
|
172
|
+
* optionally bounds the cumulative UTF-8 event bytes consumed for this result.
|
|
173
|
+
* There is no cumulative limit unless maxResponseBytes is supplied; the lane's
|
|
174
|
+
* queue budget only limits events waiting to be consumed. Exceeding the limit
|
|
175
|
+
* before a terminal event fails this lane, so the partial response cannot be
|
|
176
|
+
* consumed as a new result by a later call. Cancellation after consuming events
|
|
177
|
+
* also fails the lane; cancellation before consuming anything leaves it reusable.
|
|
178
|
+
* An invalid completed output item or terminal response fails only this lane.
|
|
179
|
+
*/
|
|
180
|
+
async finalResponse(options: { signal?: AbortSignal; maxResponseBytes?: number } = {}): Promise<Response> {
|
|
181
|
+
const { signal } = options;
|
|
182
|
+
const maxBytes =
|
|
183
|
+
options.maxResponseBytes === undefined ? Infinity : positiveInteger(options.maxResponseBytes);
|
|
184
|
+
const completedOutput = new Map<number, Response['output'][number]>();
|
|
185
|
+
let consumedBytes = 0;
|
|
186
|
+
this.#acquireReader();
|
|
187
|
+
try {
|
|
188
|
+
for (;;) {
|
|
189
|
+
// oxlint-disable-next-line eslint/no-await-in-loop -- Protocol order is required to accumulate one response.
|
|
190
|
+
const { event, bytes } = await this.#receive({ signal });
|
|
191
|
+
consumedBytes += bytes;
|
|
192
|
+
const terminal = isEventType(
|
|
193
|
+
event,
|
|
194
|
+
'error',
|
|
195
|
+
'response.completed',
|
|
196
|
+
'response.failed',
|
|
197
|
+
'response.incomplete',
|
|
198
|
+
);
|
|
199
|
+
if (consumedBytes > maxBytes) {
|
|
200
|
+
const error = new OpenAIError('Responses WebSocket accumulated response limit exceeded');
|
|
201
|
+
if (!terminal) {
|
|
202
|
+
this.fail(error);
|
|
203
|
+
}
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
if (isEventType(event, 'error')) {
|
|
207
|
+
throw new WebSocketError('Responses WebSocket request failed', event);
|
|
208
|
+
}
|
|
209
|
+
if (isEventType(event, 'response.created')) {
|
|
210
|
+
completedOutput.clear();
|
|
211
|
+
} else if (isEventType(event, 'response.output_item.done')) {
|
|
212
|
+
this.#validateOutputItem(event);
|
|
213
|
+
completedOutput.set(event.output_index, structuredClone(event.item));
|
|
214
|
+
}
|
|
215
|
+
if (terminal) {
|
|
216
|
+
this.#validateTerminalResponse(event);
|
|
217
|
+
return this.#finalizeResponse(event.response, completedOutput);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
} catch (error) {
|
|
221
|
+
if (consumedBytes > 0 && signal?.aborted) {
|
|
222
|
+
this.fail(new OpenAIError('Responses WebSocket final response canceled after consuming events'));
|
|
223
|
+
}
|
|
224
|
+
throw error;
|
|
225
|
+
} finally {
|
|
226
|
+
this.#reading = false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
#finalizeResponse(
|
|
231
|
+
response: WireResponse,
|
|
232
|
+
completedOutput: Map<number, Response['output'][number]>,
|
|
233
|
+
): Response {
|
|
234
|
+
const context = createCanonicalResponseContext();
|
|
235
|
+
try {
|
|
236
|
+
// Socket deltas need not include the setup events required by SSE.
|
|
237
|
+
// The terminal response is authoritative; finalized items fill an omitted output.
|
|
238
|
+
const completedEntries = [...completedOutput];
|
|
239
|
+
completedEntries.sort(([left], [right]) => left - right);
|
|
240
|
+
const output = hasOwn(response, 'output') ? response.output : undefined;
|
|
241
|
+
const outputText = hasOwn(response, 'output_text') ? response.output_text : undefined;
|
|
242
|
+
if (
|
|
243
|
+
(output !== undefined &&
|
|
244
|
+
output !== null &&
|
|
245
|
+
(!Array.isArray(output) ||
|
|
246
|
+
!output.every((item) => ResponsesWebSocketLane.#isValidOutputItem(item)))) ||
|
|
247
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Validate present wire fields before exposing a typed final response.
|
|
248
|
+
(outputText !== undefined && outputText !== null && typeof outputText !== 'string')
|
|
249
|
+
) {
|
|
250
|
+
throw new OpenAIError('Invalid Responses WebSocket terminal response');
|
|
251
|
+
}
|
|
252
|
+
const snapshot = cloneResponse(context, {
|
|
253
|
+
...response,
|
|
254
|
+
output: output ?? completedEntries.map(([, item]) => item),
|
|
255
|
+
output_text: outputText ?? '',
|
|
256
|
+
});
|
|
257
|
+
if (outputText === undefined || outputText === null) {
|
|
258
|
+
ensureCanonicalOutputText(context, snapshot);
|
|
259
|
+
}
|
|
260
|
+
return snapshot;
|
|
261
|
+
} catch {
|
|
262
|
+
const error = new OpenAIError('Invalid Responses WebSocket terminal response');
|
|
263
|
+
this.fail(error);
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
#validateOutputItem(event: { output_index: number; item: unknown }): void {
|
|
269
|
+
if (
|
|
270
|
+
!hasOwn(event, 'output_index') ||
|
|
271
|
+
!Number.isSafeInteger(event.output_index) ||
|
|
272
|
+
event.output_index < 0
|
|
273
|
+
) {
|
|
274
|
+
const error = new OpenAIError('Responses WebSocket output index must be a nonnegative integer');
|
|
275
|
+
this.fail(error);
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
278
|
+
if (!hasOwn(event, 'item')) {
|
|
279
|
+
const error = new OpenAIError('Responses WebSocket output item must be an own property');
|
|
280
|
+
this.fail(error);
|
|
281
|
+
throw error;
|
|
282
|
+
}
|
|
283
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Completed output items must be wire objects before they enter the typed response.
|
|
284
|
+
if (event.item === null || typeof event.item !== 'object' || Array.isArray(event.item)) {
|
|
285
|
+
const error = new OpenAIError('Responses WebSocket output item must be an object');
|
|
286
|
+
this.fail(error);
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
if (!ResponsesWebSocketLane.#isValidOutputItem(event.item)) {
|
|
290
|
+
const error = new OpenAIError('Invalid Responses WebSocket completed output item');
|
|
291
|
+
this.fail(error);
|
|
292
|
+
throw error;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- This is the wire boundary that validates untyped output items.
|
|
297
|
+
static #isValidOutputItem(item: unknown): boolean {
|
|
298
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Wire items require an own string discriminator, including unknown future variants.
|
|
299
|
+
if (!isObj(item) || !hasOwn(item, 'type') || typeof item['type'] !== 'string') {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
if (item['type'] !== 'message') {
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
return (
|
|
306
|
+
hasOwn(item, 'content') &&
|
|
307
|
+
Array.isArray(item['content']) &&
|
|
308
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters -- Validate untyped message parts before exposing the final response.
|
|
309
|
+
item['content'].every((content: unknown) => {
|
|
310
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Message parts use the same wire discriminator contract.
|
|
311
|
+
if (!isObj(content) || !hasOwn(content, 'type') || typeof content['type'] !== 'string') {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
return (
|
|
315
|
+
content['type'] !== 'output_text' ||
|
|
316
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Canonical text accumulation consumes this exact wire field.
|
|
317
|
+
(hasOwn(content, 'text') && typeof content['text'] === 'string')
|
|
318
|
+
);
|
|
319
|
+
})
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
#validateTerminalResponse(event: { response?: unknown }): void {
|
|
324
|
+
if (
|
|
325
|
+
!hasOwn(event, 'response') ||
|
|
326
|
+
event.response === null ||
|
|
327
|
+
// oxlint-disable-next-line anti-slop/no-runtime-typeof -- Validate the untrusted terminal envelope before normalizing a typed response snapshot.
|
|
328
|
+
typeof event.response !== 'object' ||
|
|
329
|
+
Array.isArray(event.response)
|
|
330
|
+
) {
|
|
331
|
+
const error = new OpenAIError('Responses WebSocket terminal response must be an object');
|
|
332
|
+
this.fail(error);
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Detaches this consumer without canceling remote work. Its ID remains reserved until reconnect. */
|
|
338
|
+
close(): void {
|
|
339
|
+
this.fail(new OpenAIError('Responses WebSocket lane is closed'));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/** Preserves already accepted events when the transport ends.
|
|
343
|
+
* @internal
|
|
344
|
+
*/
|
|
345
|
+
end(error: Error): void {
|
|
346
|
+
if (this.#failure) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
this.#failure = error;
|
|
350
|
+
// Keep queued events owned by the session until drain, close, or reconnect.
|
|
351
|
+
this.#wake?.();
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** @internal */
|
|
355
|
+
get ended(): boolean {
|
|
356
|
+
return this.#failure !== undefined;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** @internal */
|
|
360
|
+
push(event: ResponsesWebSocketEvent, bytes: number): void {
|
|
361
|
+
if (this.#failure) {
|
|
362
|
+
this.#release(bytes);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (this.#queue.length - this.#queueHead >= this.#maxEvents || bytes > this.#maxBytes - this.#bytes) {
|
|
366
|
+
this.#release(bytes);
|
|
367
|
+
this.fail(new OpenAIError('Responses WebSocket lane buffer limit exceeded'));
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
this.#bytes += bytes;
|
|
371
|
+
this.#queue.push({ event, bytes });
|
|
372
|
+
this.#wake?.();
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** @internal */
|
|
376
|
+
fail(error: Error): void {
|
|
377
|
+
this.#failure ??= error;
|
|
378
|
+
for (const item of this.#queue) {
|
|
379
|
+
if (item) {
|
|
380
|
+
this.#release(item.bytes);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
this.#queue.length = 0;
|
|
384
|
+
this.#queueHead = 0;
|
|
385
|
+
this.#bytes = 0;
|
|
386
|
+
this.#wake?.();
|
|
387
|
+
}
|
|
388
|
+
}
|