openai 7.15.0 → 7.17.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 +62 -0
- package/README.md +6 -0
- package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.js +2 -0
- package/_vendor/zod-to-json-schema/Options.js.map +1 -1
- package/_vendor/zod-to-json-schema/Options.mjs +2 -0
- package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.js +1 -0
- package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
- package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/util.js +1 -0
- package/_vendor/zod-to-json-schema/util.js.map +1 -1
- package/_vendor/zod-to-json-schema/util.mjs +1 -0
- package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
- package/auth/subject-token-providers.d.mts.map +1 -1
- package/auth/subject-token-providers.d.ts.map +1 -1
- package/auth/subject-token-providers.js +6 -1
- package/auth/subject-token-providers.js.map +1 -1
- package/auth/subject-token-providers.mjs +6 -1
- package/auth/subject-token-providers.mjs.map +1 -1
- package/auth/workload-identity-auth.d.mts.map +1 -1
- package/auth/workload-identity-auth.d.ts.map +1 -1
- package/auth/workload-identity-auth.js +9 -0
- package/auth/workload-identity-auth.js.map +1 -1
- package/auth/workload-identity-auth.mjs +9 -0
- package/auth/workload-identity-auth.mjs.map +1 -1
- package/auth/x509-transport.d.mts.map +1 -1
- package/auth/x509-transport.d.ts.map +1 -1
- package/auth/x509-transport.js +11 -0
- package/auth/x509-transport.js.map +1 -1
- package/auth/x509-transport.mjs +11 -0
- package/auth/x509-transport.mjs.map +1 -1
- package/azure.d.mts.map +1 -1
- package/azure.d.ts.map +1 -1
- package/azure.js +3 -0
- package/azure.js.map +1 -1
- package/azure.mjs +3 -0
- package/azure.mjs.map +1 -1
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +14 -6
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +14 -6
- package/bedrock.mjs.map +1 -1
- package/beta/realtime/internal-base.d.mts.map +1 -1
- package/beta/realtime/internal-base.d.ts.map +1 -1
- package/beta/realtime/internal-base.js +1 -0
- package/beta/realtime/internal-base.js.map +1 -1
- package/beta/realtime/internal-base.mjs +1 -0
- package/beta/realtime/internal-base.mjs.map +1 -1
- package/beta/realtime/websocket.d.mts.map +1 -1
- package/beta/realtime/websocket.d.ts.map +1 -1
- package/beta/realtime/websocket.js +9 -1
- package/beta/realtime/websocket.js.map +1 -1
- package/beta/realtime/websocket.mjs +9 -1
- package/beta/realtime/websocket.mjs.map +1 -1
- package/beta/realtime/ws.d.mts.map +1 -1
- package/beta/realtime/ws.d.ts.map +1 -1
- package/beta/realtime/ws.js +3 -0
- package/beta/realtime/ws.js.map +1 -1
- package/beta/realtime/ws.mjs +3 -0
- package/beta/realtime/ws.mjs.map +1 -1
- package/client.d.mts +14 -3
- package/client.d.mts.map +1 -1
- package/client.d.ts +14 -3
- package/client.d.ts.map +1 -1
- package/client.js +64 -26
- package/client.js.map +1 -1
- package/client.mjs +64 -26
- package/client.mjs.map +1 -1
- package/core/EventEmitter.d.mts.map +1 -1
- package/core/EventEmitter.d.ts.map +1 -1
- package/core/EventEmitter.js +15 -0
- package/core/EventEmitter.js.map +1 -1
- package/core/EventEmitter.mjs +15 -0
- package/core/EventEmitter.mjs.map +1 -1
- package/core/streaming.d.mts +1 -0
- package/core/streaming.d.mts.map +1 -1
- package/core/streaming.d.ts +1 -0
- package/core/streaming.d.ts.map +1 -1
- package/core/streaming.js +28 -1
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +28 -1
- package/core/streaming.mjs.map +1 -1
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +2 -0
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +2 -0
- package/helpers/audio.mjs.map +1 -1
- package/helpers/standard-schema.d.mts.map +1 -1
- package/helpers/standard-schema.d.ts.map +1 -1
- package/helpers/standard-schema.js +28 -18
- package/helpers/standard-schema.js.map +1 -1
- package/helpers/standard-schema.mjs +28 -18
- package/helpers/standard-schema.mjs.map +1 -1
- package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
- package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
- package/helpers/zod-v3-strict-schema.js +5 -0
- package/helpers/zod-v3-strict-schema.js.map +1 -1
- package/helpers/zod-v3-strict-schema.mjs +5 -0
- package/helpers/zod-v3-strict-schema.mjs.map +1 -1
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +16 -1
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +17 -2
- package/helpers/zod.mjs.map +1 -1
- package/internal/assistant-stream-delta.d.mts.map +1 -1
- package/internal/assistant-stream-delta.d.ts.map +1 -1
- package/internal/assistant-stream-delta.js +8 -1
- package/internal/assistant-stream-delta.js.map +1 -1
- package/internal/assistant-stream-delta.mjs +8 -1
- package/internal/assistant-stream-delta.mjs.map +1 -1
- package/internal/auth/x509-credential-options.d.mts.map +1 -1
- package/internal/auth/x509-credential-options.d.ts.map +1 -1
- package/internal/auth/x509-credential-options.js +3 -0
- package/internal/auth/x509-credential-options.js.map +1 -1
- package/internal/auth/x509-credential-options.mjs +3 -0
- package/internal/auth/x509-credential-options.mjs.map +1 -1
- package/internal/auth/x509-token-exchange.d.mts.map +1 -1
- package/internal/auth/x509-token-exchange.d.ts.map +1 -1
- package/internal/auth/x509-token-exchange.js +2 -0
- package/internal/auth/x509-token-exchange.js.map +1 -1
- package/internal/auth/x509-token-exchange.mjs +2 -0
- package/internal/auth/x509-token-exchange.mjs.map +1 -1
- package/internal/auth/x509-transport-capability.d.mts.map +1 -1
- package/internal/auth/x509-transport-capability.d.ts.map +1 -1
- package/internal/auth/x509-transport-capability.js +1 -0
- package/internal/auth/x509-transport-capability.js.map +1 -1
- package/internal/auth/x509-transport-capability.mjs +1 -0
- package/internal/auth/x509-transport-capability.mjs.map +1 -1
- package/internal/auth/x509-transport-state.mjs +1 -0
- package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.js +11 -0
- package/internal/auth/x509-workload-identity-auth.js.map +1 -1
- package/internal/auth/x509-workload-identity-auth.mjs +11 -0
- package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
- package/internal/bedrock.d.mts.map +1 -1
- package/internal/bedrock.d.ts.map +1 -1
- package/internal/bedrock.js +17 -1
- package/internal/bedrock.js.map +1 -1
- package/internal/bedrock.mjs +17 -1
- package/internal/bedrock.mjs.map +1 -1
- package/internal/decoders/line.d.mts.map +1 -1
- package/internal/decoders/line.d.ts.map +1 -1
- package/internal/decoders/line.js +1 -0
- package/internal/decoders/line.js.map +1 -1
- package/internal/decoders/line.mjs +1 -0
- package/internal/decoders/line.mjs.map +1 -1
- package/internal/parse.d.mts +1 -0
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts +1 -0
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs.map +1 -1
- package/internal/provider.d.mts.map +1 -1
- package/internal/provider.d.ts.map +1 -1
- package/internal/provider.js +3 -0
- package/internal/provider.js.map +1 -1
- package/internal/provider.mjs +3 -0
- package/internal/provider.mjs.map +1 -1
- package/internal/qs/stringify.d.mts.map +1 -1
- package/internal/qs/stringify.d.ts.map +1 -1
- package/internal/qs/stringify.js +3 -0
- package/internal/qs/stringify.js.map +1 -1
- package/internal/qs/stringify.mjs +3 -0
- package/internal/qs/stringify.mjs.map +1 -1
- package/internal/qs/utils.d.mts.map +1 -1
- package/internal/qs/utils.d.ts.map +1 -1
- package/internal/qs/utils.js +15 -3
- package/internal/qs/utils.js.map +1 -1
- package/internal/qs/utils.mjs +15 -3
- package/internal/qs/utils.mjs.map +1 -1
- package/internal/realtime-credentials.d.mts +1 -1
- package/internal/realtime-credentials.d.ts +1 -1
- package/internal/realtime-credentials.js +1 -1
- package/internal/realtime-credentials.mjs +1 -1
- package/internal/responses/response-accumulator.d.mts.map +1 -1
- package/internal/responses/response-accumulator.d.ts.map +1 -1
- package/internal/responses/response-accumulator.js +20 -4
- package/internal/responses/response-accumulator.js.map +1 -1
- package/internal/responses/response-accumulator.mjs +20 -4
- package/internal/responses/response-accumulator.mjs.map +1 -1
- package/internal/to-file.js.map +1 -1
- package/internal/to-file.mjs.map +1 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +10 -0
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +10 -0
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/abort.d.mts +11 -0
- package/internal/utils/abort.d.mts.map +1 -0
- package/internal/utils/abort.d.ts +11 -0
- package/internal/utils/abort.d.ts.map +1 -0
- package/internal/utils/abort.js +94 -0
- package/internal/utils/abort.js.map +1 -0
- package/internal/utils/abort.mjs +90 -0
- package/internal/utils/abort.mjs.map +1 -0
- package/internal/utils/bytes.d.mts.map +1 -1
- package/internal/utils/bytes.d.ts.map +1 -1
- package/internal/utils/bytes.js +2 -0
- package/internal/utils/bytes.js.map +1 -1
- package/internal/utils/bytes.mjs +2 -0
- package/internal/utils/bytes.mjs.map +1 -1
- package/internal/utils/path.d.mts.map +1 -1
- package/internal/utils/path.d.ts.map +1 -1
- package/internal/utils/path.js +2 -0
- package/internal/utils/path.js.map +1 -1
- package/internal/utils/path.mjs +2 -0
- package/internal/utils/path.mjs.map +1 -1
- package/internal/utils/sleep.d.mts +1 -1
- package/internal/utils/sleep.d.mts.map +1 -1
- package/internal/utils/sleep.d.ts +1 -1
- package/internal/utils/sleep.d.ts.map +1 -1
- package/internal/utils/sleep.js +51 -1
- package/internal/utils/sleep.js.map +1 -1
- package/internal/utils/sleep.mjs +51 -1
- package/internal/utils/sleep.mjs.map +1 -1
- package/internal/ws-adapter-browser.d.mts.map +1 -1
- package/internal/ws-adapter-browser.d.ts.map +1 -1
- package/internal/ws-adapter-browser.js +2 -0
- package/internal/ws-adapter-browser.js.map +1 -1
- package/internal/ws-adapter-browser.mjs +2 -0
- package/internal/ws-adapter-browser.mjs.map +1 -1
- package/internal/ws.d.mts +22 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +22 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +46 -4
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +44 -4
- package/internal/ws.mjs.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
- package/lib/AbstractChatCompletionRunner.js +41 -16
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +42 -17
- package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
- package/lib/AssistantStream.d.mts.map +1 -1
- package/lib/AssistantStream.d.ts.map +1 -1
- package/lib/AssistantStream.js +19 -5
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +20 -6
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionRunner.d.mts.map +1 -1
- package/lib/ChatCompletionRunner.d.ts.map +1 -1
- package/lib/ChatCompletionRunner.js +1 -0
- package/lib/ChatCompletionRunner.js.map +1 -1
- package/lib/ChatCompletionRunner.mjs +1 -0
- package/lib/ChatCompletionRunner.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +6 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +6 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +63 -7
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +64 -8
- package/lib/ChatCompletionStream.mjs.map +1 -1
- package/lib/EventEmitter.d.mts.map +1 -1
- package/lib/EventEmitter.d.ts.map +1 -1
- package/lib/EventEmitter.js +15 -0
- package/lib/EventEmitter.js.map +1 -1
- package/lib/EventEmitter.mjs +15 -0
- package/lib/EventEmitter.mjs.map +1 -1
- package/lib/EventStream.d.mts +2 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +2 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +111 -14
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +111 -14
- package/lib/EventStream.mjs.map +1 -1
- package/lib/ResponsesParser.d.mts.map +1 -1
- package/lib/ResponsesParser.d.ts.map +1 -1
- package/lib/ResponsesParser.js +4 -0
- package/lib/ResponsesParser.js.map +1 -1
- package/lib/ResponsesParser.mjs +4 -0
- package/lib/ResponsesParser.mjs.map +1 -1
- package/lib/RunnableFunction.d.mts.map +1 -1
- package/lib/RunnableFunction.d.ts.map +1 -1
- package/lib/RunnableFunction.js.map +1 -1
- package/lib/RunnableFunction.mjs.map +1 -1
- package/lib/agents/agent-session-stream.d.mts.map +1 -1
- package/lib/agents/agent-session-stream.d.ts.map +1 -1
- package/lib/agents/agent-session-stream.js +5 -2
- package/lib/agents/agent-session-stream.js.map +1 -1
- package/lib/agents/agent-session-stream.mjs +5 -2
- package/lib/agents/agent-session-stream.mjs.map +1 -1
- package/lib/embeddings.d.mts.map +1 -1
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/embeddings.js +2 -0
- package/lib/embeddings.js.map +1 -1
- package/lib/embeddings.mjs +2 -0
- package/lib/embeddings.mjs.map +1 -1
- package/lib/live/transcript-grouper.d.mts.map +1 -1
- package/lib/live/transcript-grouper.d.ts.map +1 -1
- package/lib/live/transcript-grouper.js +8 -2
- package/lib/live/transcript-grouper.js.map +1 -1
- package/lib/live/transcript-grouper.mjs +8 -2
- package/lib/live/transcript-grouper.mjs.map +1 -1
- package/lib/live/transcript-grouping.d.mts +2 -2
- package/lib/live/transcript-grouping.d.mts.map +1 -1
- package/lib/live/transcript-grouping.d.ts +2 -2
- package/lib/live/transcript-grouping.d.ts.map +1 -1
- package/lib/live/transcript-grouping.js +44 -22
- package/lib/live/transcript-grouping.js.map +1 -1
- package/lib/live/transcript-grouping.mjs +44 -22
- package/lib/live/transcript-grouping.mjs.map +1 -1
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +13 -0
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +13 -0
- package/lib/parser.mjs.map +1 -1
- package/lib/responses/ResponseInputItems.d.mts.map +1 -1
- package/lib/responses/ResponseInputItems.d.ts.map +1 -1
- package/lib/responses/ResponseInputItems.js +11 -0
- package/lib/responses/ResponseInputItems.js.map +1 -1
- package/lib/responses/ResponseInputItems.mjs +11 -0
- package/lib/responses/ResponseInputItems.mjs.map +1 -1
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +7 -3
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +8 -4
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/lib/transform.d.mts.map +1 -1
- package/lib/transform.d.ts.map +1 -1
- package/lib/transform.js +69 -33
- package/lib/transform.js.map +1 -1
- package/lib/transform.mjs +69 -33
- package/lib/transform.mjs.map +1 -1
- package/lib/webrtc/connection.d.mts.map +1 -1
- package/lib/webrtc/connection.d.ts.map +1 -1
- package/lib/webrtc/connection.js +6 -1
- package/lib/webrtc/connection.js.map +1 -1
- package/lib/webrtc/connection.mjs +6 -1
- package/lib/webrtc/connection.mjs.map +1 -1
- package/lib/webrtc/data-channel.d.mts.map +1 -1
- package/lib/webrtc/data-channel.d.ts.map +1 -1
- package/lib/webrtc/data-channel.js +9 -1
- package/lib/webrtc/data-channel.js.map +1 -1
- package/lib/webrtc/data-channel.mjs +9 -1
- package/lib/webrtc/data-channel.mjs.map +1 -1
- package/lib/webrtc/subscriptions.d.mts.map +1 -1
- package/lib/webrtc/subscriptions.d.ts.map +1 -1
- package/lib/webrtc/subscriptions.js +2 -0
- package/lib/webrtc/subscriptions.js.map +1 -1
- package/lib/webrtc/subscriptions.mjs +2 -0
- package/lib/webrtc/subscriptions.mjs.map +1 -1
- package/lib/webrtc/types.d.mts.map +1 -1
- package/lib/webrtc/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/providers/bedrock/aws.d.mts.map +1 -1
- package/providers/bedrock/aws.d.ts.map +1 -1
- package/providers/bedrock/aws.js +4 -0
- package/providers/bedrock/aws.js.map +1 -1
- package/providers/bedrock/aws.mjs +4 -0
- package/providers/bedrock/aws.mjs.map +1 -1
- package/realtime/internal-base.d.mts.map +1 -1
- package/realtime/internal-base.d.ts.map +1 -1
- package/realtime/internal-base.js +1 -0
- package/realtime/internal-base.js.map +1 -1
- package/realtime/internal-base.mjs +1 -0
- package/realtime/internal-base.mjs.map +1 -1
- package/realtime/websocket.d.mts.map +1 -1
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/websocket.js +9 -1
- package/realtime/websocket.js.map +1 -1
- package/realtime/websocket.mjs +9 -1
- package/realtime/websocket.mjs.map +1 -1
- package/realtime/ws.d.mts.map +1 -1
- package/realtime/ws.d.ts.map +1 -1
- package/realtime/ws.js +3 -0
- package/realtime/ws.js.map +1 -1
- package/realtime/ws.mjs +3 -0
- package/realtime/ws.mjs.map +1 -1
- package/resources/beta/agents/agents.d.mts +2 -1
- package/resources/beta/agents/agents.d.mts.map +1 -1
- package/resources/beta/agents/agents.d.ts +2 -1
- package/resources/beta/agents/agents.d.ts.map +1 -1
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/beta.d.mts +2 -2
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +2 -2
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -1
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -1
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/responses/index.d.mts +1 -1
- package/resources/beta/responses/index.d.mts.map +1 -1
- package/resources/beta/responses/index.d.ts +1 -1
- package/resources/beta/responses/index.d.ts.map +1 -1
- package/resources/beta/responses/index.js.map +1 -1
- package/resources/beta/responses/index.mjs.map +1 -1
- package/resources/beta/responses/internal-base.d.mts +3 -0
- package/resources/beta/responses/internal-base.d.mts.map +1 -1
- package/resources/beta/responses/internal-base.d.ts +3 -0
- package/resources/beta/responses/internal-base.d.ts.map +1 -1
- package/resources/beta/responses/internal-base.js +21 -6
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +21 -6
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +51 -3
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +51 -3
- 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 +18 -9
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +18 -9
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +87 -18
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +89 -20
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts +3 -0
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts +3 -0
- package/resources/beta/responses/ws.d.ts.map +1 -1
- package/resources/beta/responses/ws.js +12 -3
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs +12 -3
- package/resources/beta/responses/ws.mjs.map +1 -1
- package/resources/live/forks/internal-base.d.mts +3 -0
- package/resources/live/forks/internal-base.d.mts.map +1 -1
- package/resources/live/forks/internal-base.d.ts +3 -0
- package/resources/live/forks/internal-base.d.ts.map +1 -1
- package/resources/live/forks/internal-base.js +21 -5
- package/resources/live/forks/internal-base.js.map +1 -1
- package/resources/live/forks/internal-base.mjs +21 -5
- package/resources/live/forks/internal-base.mjs.map +1 -1
- package/resources/live/forks/ws-base.d.mts +13 -8
- package/resources/live/forks/ws-base.d.mts.map +1 -1
- package/resources/live/forks/ws-base.d.ts +13 -8
- package/resources/live/forks/ws-base.d.ts.map +1 -1
- package/resources/live/forks/ws-base.js +85 -14
- package/resources/live/forks/ws-base.js.map +1 -1
- package/resources/live/forks/ws-base.mjs +87 -16
- package/resources/live/forks/ws-base.mjs.map +1 -1
- package/resources/live/forks/ws.d.mts +1 -0
- package/resources/live/forks/ws.d.mts.map +1 -1
- package/resources/live/forks/ws.d.ts +1 -0
- package/resources/live/forks/ws.d.ts.map +1 -1
- package/resources/live/forks/ws.js.map +1 -1
- package/resources/live/forks/ws.mjs.map +1 -1
- package/resources/live/internal-base.d.mts +3 -0
- package/resources/live/internal-base.d.mts.map +1 -1
- package/resources/live/internal-base.d.ts +3 -0
- package/resources/live/internal-base.d.ts.map +1 -1
- package/resources/live/internal-base.js +21 -5
- package/resources/live/internal-base.js.map +1 -1
- package/resources/live/internal-base.mjs +21 -5
- package/resources/live/internal-base.mjs.map +1 -1
- package/resources/live/sideband/internal-base.d.mts +3 -0
- package/resources/live/sideband/internal-base.d.mts.map +1 -1
- package/resources/live/sideband/internal-base.d.ts +3 -0
- package/resources/live/sideband/internal-base.d.ts.map +1 -1
- package/resources/live/sideband/internal-base.js +21 -5
- package/resources/live/sideband/internal-base.js.map +1 -1
- package/resources/live/sideband/internal-base.mjs +21 -5
- package/resources/live/sideband/internal-base.mjs.map +1 -1
- package/resources/live/sideband/ws-base.d.mts +13 -8
- package/resources/live/sideband/ws-base.d.mts.map +1 -1
- package/resources/live/sideband/ws-base.d.ts +13 -8
- package/resources/live/sideband/ws-base.d.ts.map +1 -1
- package/resources/live/sideband/ws-base.js +85 -14
- package/resources/live/sideband/ws-base.js.map +1 -1
- package/resources/live/sideband/ws-base.mjs +87 -16
- package/resources/live/sideband/ws-base.mjs.map +1 -1
- package/resources/live/sideband/ws.d.mts +1 -0
- package/resources/live/sideband/ws.d.mts.map +1 -1
- package/resources/live/sideband/ws.d.ts +1 -0
- package/resources/live/sideband/ws.d.ts.map +1 -1
- package/resources/live/sideband/ws.js.map +1 -1
- package/resources/live/sideband/ws.mjs.map +1 -1
- package/resources/live/ws-base.d.mts +13 -8
- package/resources/live/ws-base.d.mts.map +1 -1
- package/resources/live/ws-base.d.ts +13 -8
- package/resources/live/ws-base.d.ts.map +1 -1
- package/resources/live/ws-base.js +85 -14
- package/resources/live/ws-base.js.map +1 -1
- package/resources/live/ws-base.mjs +87 -16
- package/resources/live/ws-base.mjs.map +1 -1
- package/resources/live/ws.d.mts +1 -0
- package/resources/live/ws.d.mts.map +1 -1
- package/resources/live/ws.d.ts +1 -0
- package/resources/live/ws.d.ts.map +1 -1
- package/resources/live/ws.js.map +1 -1
- package/resources/live/ws.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts +3 -0
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts +3 -0
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +21 -6
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +21 -6
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/responses.d.mts +36 -3
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +36 -3
- 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 +18 -9
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +18 -9
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +87 -18
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +89 -20
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts +3 -0
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts +3 -0
- package/resources/responses/ws.d.ts.map +1 -1
- package/resources/responses/ws.js +12 -3
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs +12 -3
- package/resources/responses/ws.mjs.map +1 -1
- package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
- package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
- package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
- package/src/_vendor/zod-to-json-schema/util.ts +1 -0
- package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
- package/src/auth/subject-token-providers.ts +6 -1
- package/src/auth/workload-identity-auth.ts +10 -1
- package/src/auth/x509-transport.ts +13 -2
- package/src/azure.ts +3 -0
- package/src/bedrock.ts +23 -7
- package/src/beta/realtime/internal-base.ts +2 -0
- package/src/beta/realtime/websocket.ts +11 -1
- package/src/beta/realtime/ws.ts +3 -0
- package/src/client.ts +78 -22
- package/src/core/EventEmitter.ts +15 -0
- package/src/core/streaming.ts +30 -2
- package/src/helpers/audio.ts +2 -0
- package/src/helpers/standard-schema.ts +31 -19
- package/src/helpers/zod-v3-strict-schema.ts +8 -2
- package/src/helpers/zod.ts +32 -13
- package/src/internal/assistant-stream-delta.ts +7 -1
- package/src/internal/auth/x509-credential-options.ts +3 -0
- package/src/internal/auth/x509-token-exchange.ts +10 -1
- package/src/internal/auth/x509-transport-capability.ts +2 -1
- package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
- package/src/internal/bedrock.ts +15 -0
- package/src/internal/decoders/line.ts +1 -0
- package/src/internal/parse.ts +1 -0
- package/src/internal/provider.ts +3 -0
- package/src/internal/qs/stringify.ts +3 -0
- package/src/internal/qs/utils.ts +14 -3
- package/src/internal/realtime-credentials.ts +1 -1
- package/src/internal/responses/response-accumulator.ts +34 -4
- package/src/internal/to-file.ts +1 -1
- package/src/internal/uploads.ts +11 -1
- package/src/internal/utils/abort.ts +116 -0
- package/src/internal/utils/bytes.ts +2 -0
- package/src/internal/utils/path.ts +2 -0
- package/src/internal/utils/sleep.ts +52 -1
- package/src/internal/ws-adapter-browser.ts +2 -0
- package/src/internal/ws.ts +66 -4
- package/src/lib/AbstractChatCompletionRunner.ts +40 -17
- package/src/lib/AssistantStream.ts +31 -20
- package/src/lib/ChatCompletionRunner.ts +1 -0
- package/src/lib/ChatCompletionStream.ts +81 -14
- package/src/lib/EventEmitter.ts +15 -0
- package/src/lib/EventStream.ts +93 -3
- package/src/lib/ResponsesParser.ts +5 -0
- package/src/lib/RunnableFunction.ts +4 -1
- package/src/lib/agents/agent-session-stream.ts +5 -3
- package/src/lib/embeddings.ts +3 -1
- package/src/lib/live/transcript-grouper.ts +4 -0
- package/src/lib/live/transcript-grouping.ts +59 -27
- package/src/lib/parser.ts +16 -2
- package/src/lib/responses/ResponseInputItems.ts +11 -0
- package/src/lib/responses/ResponseStream.ts +6 -3
- package/src/lib/transform.ts +70 -35
- package/src/lib/webrtc/connection.ts +5 -1
- package/src/lib/webrtc/data-channel.ts +7 -0
- package/src/lib/webrtc/subscriptions.ts +3 -0
- package/src/lib/webrtc/types.ts +1 -0
- package/src/providers/bedrock/aws.ts +5 -1
- package/src/realtime/internal-base.ts +2 -0
- package/src/realtime/websocket.ts +11 -1
- package/src/realtime/ws.ts +3 -0
- package/src/resources/beta/agents/agents.ts +2 -0
- package/src/resources/beta/beta.ts +2 -0
- package/src/resources/beta/index.ts +1 -0
- package/src/resources/beta/responses/index.ts +1 -0
- package/src/resources/beta/responses/internal-base.ts +24 -6
- package/src/resources/beta/responses/responses.ts +58 -0
- package/src/resources/beta/responses/ws-base.ts +117 -26
- package/src/resources/beta/responses/ws.ts +23 -6
- package/src/resources/live/forks/internal-base.ts +24 -5
- package/src/resources/live/forks/ws-base.ts +110 -21
- package/src/resources/live/forks/ws.ts +2 -0
- package/src/resources/live/internal-base.ts +24 -5
- package/src/resources/live/sideband/internal-base.ts +24 -5
- package/src/resources/live/sideband/ws-base.ts +110 -21
- package/src/resources/live/sideband/ws.ts +2 -0
- package/src/resources/live/ws-base.ts +110 -21
- package/src/resources/live/ws.ts +2 -0
- package/src/resources/responses/api.md +1 -0
- package/src/resources/responses/internal-base.ts +24 -6
- package/src/resources/responses/responses.ts +41 -0
- package/src/resources/responses/ws-base.ts +117 -26
- package/src/resources/responses/ws.ts +23 -6
- 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
|
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
|
|
|
6
6
|
import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
|
|
7
7
|
import {
|
|
8
8
|
SendQueue,
|
|
9
|
+
getMaxBufferedEvents,
|
|
10
|
+
type WebSocketStreamOptions,
|
|
9
11
|
flattenRawData,
|
|
10
12
|
isRecoverableClose,
|
|
11
13
|
type RawWebSocketData,
|
|
@@ -51,11 +53,11 @@ export interface LiveWSBaseOptions {
|
|
|
51
53
|
reconnect?: LiveWSReconnectOptions | null | undefined;
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* Default: 1
|
|
56
|
+
* Byte budget for outgoing messages queued while the socket is connecting
|
|
57
|
+
* or reconnecting. An empty queue accepts one message even if it exceeds
|
|
58
|
+
* this budget. Further messages are discarded and an `error` event is emitted
|
|
59
|
+
* if the total queued size would exceed the budget.
|
|
60
|
+
* Default: 1 MiB (1,048,576 bytes).
|
|
59
61
|
*/
|
|
60
62
|
maxQueueSize?: number | undefined;
|
|
61
63
|
}
|
|
@@ -165,6 +167,11 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
165
167
|
* The iterator will exit if the socket closes but exiting the iterator
|
|
166
168
|
* does not close the socket.
|
|
167
169
|
*
|
|
170
|
+
* Pass `maxBufferedEvents` to limit queued records for this iterator, including
|
|
171
|
+
* lifecycle events. Overflow discards its backlog and rejects `next()` with a
|
|
172
|
+
* WebSocketError; the shared socket and other iterators remain active.
|
|
173
|
+
* Omitted means unlimited. This is an event-count limit, not a byte limit.
|
|
174
|
+
*
|
|
168
175
|
* @example
|
|
169
176
|
* ```ts
|
|
170
177
|
* for await (const event of client.stream()) {
|
|
@@ -182,26 +189,59 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
182
189
|
* }
|
|
183
190
|
* ```
|
|
184
191
|
*/
|
|
185
|
-
stream(): AsyncIterableIterator<LiveStreamMessage> {
|
|
186
|
-
return this[Symbol.asyncIterator]();
|
|
192
|
+
stream(options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
|
|
193
|
+
return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
|
|
187
194
|
}
|
|
188
195
|
|
|
189
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<LiveStreamMessage> {
|
|
196
|
+
[Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
|
|
190
197
|
if (!this.socket) {
|
|
191
198
|
throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
|
|
192
199
|
}
|
|
193
200
|
|
|
201
|
+
const maxBufferedEvents = getMaxBufferedEvents(options);
|
|
202
|
+
|
|
194
203
|
// Two-queue async iterator: `queue` buffers incoming messages,
|
|
195
204
|
// `resolvers` buffers waiting next() calls. A push wakes the
|
|
196
205
|
// oldest next(); a next() drains the oldest message.
|
|
197
|
-
const queue: LiveStreamMessage[] = [];
|
|
198
|
-
const resolvers: (() => void)[] = [];
|
|
206
|
+
const queue: (LiveStreamMessage | undefined)[] = [];
|
|
207
|
+
const resolvers: ((() => void) | undefined)[] = [];
|
|
208
|
+
let queueHead = 0;
|
|
209
|
+
let resolverHead = 0;
|
|
199
210
|
let done = false;
|
|
211
|
+
let failure: WebSocketError | undefined;
|
|
200
212
|
let currentSocket = this.socket;
|
|
201
213
|
|
|
214
|
+
const wakeResolver = () => {
|
|
215
|
+
if (resolverHead >= resolvers.length) return;
|
|
216
|
+
|
|
217
|
+
const resolver = resolvers[resolverHead];
|
|
218
|
+
resolvers[resolverHead] = undefined;
|
|
219
|
+
resolverHead += 1;
|
|
220
|
+
if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
|
|
221
|
+
resolvers.splice(0, resolverHead);
|
|
222
|
+
resolverHead = 0;
|
|
223
|
+
}
|
|
224
|
+
resolver?.();
|
|
225
|
+
};
|
|
226
|
+
|
|
202
227
|
const push = (msg: LiveStreamMessage) => {
|
|
228
|
+
if (done) return;
|
|
229
|
+
|
|
230
|
+
if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
|
|
231
|
+
failure = new WebSocketError(
|
|
232
|
+
`WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
|
|
233
|
+
null,
|
|
234
|
+
);
|
|
235
|
+
done = true;
|
|
236
|
+
queue.length = 0;
|
|
237
|
+
queueHead = 0;
|
|
238
|
+
cleanup();
|
|
239
|
+
flushResolvers();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
203
243
|
queue.push(msg);
|
|
204
|
-
|
|
244
|
+
wakeResolver();
|
|
205
245
|
};
|
|
206
246
|
|
|
207
247
|
const onEvent = (event: LiveAPI.ServerEvent) => {
|
|
@@ -231,9 +271,14 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
231
271
|
};
|
|
232
272
|
|
|
233
273
|
const flushResolvers = () => {
|
|
234
|
-
|
|
235
|
-
resolver
|
|
274
|
+
while (resolverHead < resolvers.length) {
|
|
275
|
+
const resolver = resolvers[resolverHead];
|
|
276
|
+
resolvers[resolverHead] = undefined;
|
|
277
|
+
resolverHead += 1;
|
|
278
|
+
resolver?.();
|
|
236
279
|
}
|
|
280
|
+
resolvers.length = 0;
|
|
281
|
+
resolverHead = 0;
|
|
237
282
|
};
|
|
238
283
|
|
|
239
284
|
const onClose = (code: number, reason: string, unsent: UnsentMessage<LiveAPI.ClientEvent>[]) => {
|
|
@@ -243,8 +288,9 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
243
288
|
cleanup();
|
|
244
289
|
};
|
|
245
290
|
|
|
246
|
-
const onSocketSwap = (
|
|
247
|
-
|
|
291
|
+
const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
|
|
292
|
+
if (currentSocket === newSocket) return;
|
|
293
|
+
currentSocket.off('open', onOpen);
|
|
248
294
|
newSocket.on('open', onOpen);
|
|
249
295
|
currentSocket = newSocket;
|
|
250
296
|
};
|
|
@@ -301,9 +347,21 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
301
347
|
}
|
|
302
348
|
}
|
|
303
349
|
|
|
304
|
-
const resolve = (
|
|
305
|
-
|
|
306
|
-
|
|
350
|
+
const resolve = (
|
|
351
|
+
res: (value: IteratorResult<LiveStreamMessage>) => void,
|
|
352
|
+
reject: (error: WebSocketError) => void,
|
|
353
|
+
) => {
|
|
354
|
+
if (failure) {
|
|
355
|
+
reject(failure);
|
|
356
|
+
} else if (queueHead < queue.length) {
|
|
357
|
+
const queued = queue[queueHead]!;
|
|
358
|
+
queue[queueHead] = undefined;
|
|
359
|
+
queueHead += 1;
|
|
360
|
+
if (queueHead >= 64 && queueHead * 2 >= queue.length) {
|
|
361
|
+
queue.splice(0, queueHead);
|
|
362
|
+
queueHead = 0;
|
|
363
|
+
}
|
|
364
|
+
res({ value: queued, done: false });
|
|
307
365
|
} else if (done) {
|
|
308
366
|
res({ value: undefined, done: true });
|
|
309
367
|
} else {
|
|
@@ -313,10 +371,10 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
313
371
|
};
|
|
314
372
|
|
|
315
373
|
const next = (): Promise<IteratorResult<LiveStreamMessage>> =>
|
|
316
|
-
new Promise((res) => {
|
|
317
|
-
if (resolve(res)) return;
|
|
374
|
+
new Promise((res, reject) => {
|
|
375
|
+
if (resolve(res, reject)) return;
|
|
318
376
|
resolvers.push(() => {
|
|
319
|
-
resolve(res);
|
|
377
|
+
resolve(res, reject);
|
|
320
378
|
});
|
|
321
379
|
});
|
|
322
380
|
|
|
@@ -324,6 +382,8 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
324
382
|
next,
|
|
325
383
|
return: (): Promise<IteratorReturnResult<undefined>> => {
|
|
326
384
|
done = true;
|
|
385
|
+
queue.length = 0;
|
|
386
|
+
queueHead = 0;
|
|
327
387
|
cleanup();
|
|
328
388
|
flushResolvers();
|
|
329
389
|
return Promise.resolve({ value: undefined, done: true });
|
|
@@ -356,6 +416,35 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
356
416
|
return;
|
|
357
417
|
}
|
|
358
418
|
|
|
419
|
+
if (
|
|
420
|
+
event === null ||
|
|
421
|
+
typeof event !== 'object' ||
|
|
422
|
+
Array.isArray(event) ||
|
|
423
|
+
!Object.prototype.hasOwnProperty.call(event, 'type') ||
|
|
424
|
+
typeof event.type !== 'string'
|
|
425
|
+
) {
|
|
426
|
+
this._onError(
|
|
427
|
+
null,
|
|
428
|
+
'received invalid WebSocket event: expected an object with an own string type',
|
|
429
|
+
undefined,
|
|
430
|
+
);
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
const eventType: string = event.type;
|
|
435
|
+
const reservedEventType =
|
|
436
|
+
eventType === 'raw' ||
|
|
437
|
+
eventType === 'close' ||
|
|
438
|
+
eventType === 'event' ||
|
|
439
|
+
eventType === 'reconnecting' ||
|
|
440
|
+
eventType === 'reconnected' ||
|
|
441
|
+
eventType === 'open' ||
|
|
442
|
+
eventType === 'error';
|
|
443
|
+
if (reservedEventType && eventType !== 'error') {
|
|
444
|
+
this._onError(null, 'received reserved WebSocket event type', undefined);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
359
448
|
this._emit('event', event);
|
|
360
449
|
|
|
361
450
|
if (event.type === 'error') {
|
package/src/resources/live/ws.ts
CHANGED
|
@@ -6,6 +6,8 @@ import { LiveWSBase, type LiveWSBaseOptions } from './ws-base';
|
|
|
6
6
|
import { OpenAI } from '../../client';
|
|
7
7
|
import { VERSION } from '../../version';
|
|
8
8
|
|
|
9
|
+
export type { WebSocketStreamOptions } from '../../internal/ws';
|
|
10
|
+
|
|
9
11
|
export type { LiveWSReconnectOptions } from './ws-base';
|
|
10
12
|
|
|
11
13
|
export interface LiveWSClientOptions extends WS.ClientOptions, LiveWSBaseOptions {}
|
|
@@ -38,6 +38,7 @@ Types:
|
|
|
38
38
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCodeInterpreterCallInProgressEvent</a></code>
|
|
39
39
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCodeInterpreterCallInterpretingEvent</a></code>
|
|
40
40
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCodeInterpreterToolCall</a></code>
|
|
41
|
+
- <code><a href="./src/resources/responses/responses.ts">ResponseCompactionCompactingEvent</a></code>
|
|
41
42
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCompactionItem</a></code>
|
|
42
43
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCompactionItemParam</a></code>
|
|
43
44
|
- <code><a href="./src/resources/responses/responses.ts">ResponseCompletedEvent</a></code>
|
|
@@ -27,13 +27,21 @@ type WebSocketErrorEvent = Extract<ResponsesAPI.ResponsesServerEvent, { type: 'e
|
|
|
27
27
|
export class WebSocketError extends OpenAIError {
|
|
28
28
|
/**
|
|
29
29
|
* The error data that the API sent back in an error event.
|
|
30
|
+
*
|
|
31
|
+
* This property is non-enumerable to avoid exposing the event through
|
|
32
|
+
* JSON serialization, object spread, or Object.assign.
|
|
30
33
|
*/
|
|
31
34
|
error?: WebSocketErrorEvent | undefined;
|
|
32
35
|
|
|
33
36
|
constructor(message: string, event: WebSocketErrorEvent | null) {
|
|
34
37
|
super(message);
|
|
35
38
|
|
|
36
|
-
this
|
|
39
|
+
Object.defineProperty(this, 'error', {
|
|
40
|
+
value: event ?? undefined,
|
|
41
|
+
writable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
enumerable: false,
|
|
44
|
+
});
|
|
37
45
|
}
|
|
38
46
|
}
|
|
39
47
|
|
|
@@ -73,8 +81,8 @@ export abstract class ResponsesEmitter extends EventEmitter<WebSocketEvents> {
|
|
|
73
81
|
protected _onError(event: null, message: string, cause: any): void;
|
|
74
82
|
protected _onError(event: WebSocketErrorEvent, message?: string | undefined): void;
|
|
75
83
|
protected _onError(event: WebSocketErrorEvent | null, message?: string | undefined, cause?: any): void {
|
|
76
|
-
const
|
|
77
|
-
message =
|
|
84
|
+
const safeMessage = safeWebSocketErrorMessage(event, message);
|
|
85
|
+
message = safeMessage ?? 'unknown error';
|
|
78
86
|
|
|
79
87
|
if (!this._hasListener('error')) {
|
|
80
88
|
const error = new WebSocketError(
|
|
@@ -105,10 +113,20 @@ export function buildURL(client: OpenAI, parameters: Record<string, unknown>): U
|
|
|
105
113
|
return url;
|
|
106
114
|
}
|
|
107
115
|
|
|
108
|
-
function
|
|
116
|
+
function safeWebSocketErrorMessage(event: unknown, message: unknown): string | undefined {
|
|
117
|
+
if (typeof message === 'string') return message;
|
|
118
|
+
if (typeof event !== 'object' || event === null) return undefined;
|
|
119
|
+
|
|
109
120
|
try {
|
|
110
|
-
|
|
121
|
+
const error = Object.getOwnPropertyDescriptor(event, 'error')?.value;
|
|
122
|
+
const nestedMessage =
|
|
123
|
+
typeof error === 'object' && error !== null
|
|
124
|
+
? Object.getOwnPropertyDescriptor(error, 'message')?.value
|
|
125
|
+
: undefined;
|
|
126
|
+
const eventMessage = Object.getOwnPropertyDescriptor(event, 'message')?.value;
|
|
127
|
+
const candidate = typeof nestedMessage === 'string' ? nestedMessage : eventMessage;
|
|
128
|
+
return typeof candidate === 'string' ? candidate : undefined;
|
|
111
129
|
} catch {
|
|
112
|
-
return
|
|
130
|
+
return undefined;
|
|
113
131
|
}
|
|
114
132
|
}
|
|
@@ -2026,6 +2026,32 @@ export namespace ResponseCodeInterpreterToolCall {
|
|
|
2026
2026
|
}
|
|
2027
2027
|
}
|
|
2028
2028
|
|
|
2029
|
+
/**
|
|
2030
|
+
* Emitted when new summary content is sampled for a compaction trigger. Contains
|
|
2031
|
+
* no summary content.
|
|
2032
|
+
*/
|
|
2033
|
+
export interface ResponseCompactionCompactingEvent {
|
|
2034
|
+
/**
|
|
2035
|
+
* The ID of the compaction output item.
|
|
2036
|
+
*/
|
|
2037
|
+
item_id: string;
|
|
2038
|
+
|
|
2039
|
+
/**
|
|
2040
|
+
* The index of the compaction output item.
|
|
2041
|
+
*/
|
|
2042
|
+
output_index: number;
|
|
2043
|
+
|
|
2044
|
+
/**
|
|
2045
|
+
* The sequence number of the event that was emitted.
|
|
2046
|
+
*/
|
|
2047
|
+
sequence_number: number;
|
|
2048
|
+
|
|
2049
|
+
/**
|
|
2050
|
+
* The type of the event, always `response.compaction.compacting`.
|
|
2051
|
+
*/
|
|
2052
|
+
type: 'response.compaction.compacting';
|
|
2053
|
+
}
|
|
2054
|
+
|
|
2029
2055
|
/**
|
|
2030
2056
|
* A compaction item generated by the
|
|
2031
2057
|
* [`v1/responses/compact` API](https://developers.openai.com/api/reference/resources/responses/methods/compact).
|
|
@@ -8136,6 +8162,7 @@ export type ResponseStreamEvent =
|
|
|
8136
8162
|
| ResponseCodeInterpreterCallCompletedEvent
|
|
8137
8163
|
| ResponseCodeInterpreterCallInProgressEvent
|
|
8138
8164
|
| ResponseCodeInterpreterCallInterpretingEvent
|
|
8165
|
+
| ResponseCompactionCompactingEvent
|
|
8139
8166
|
| ResponseCompletedEvent
|
|
8140
8167
|
| ResponseContentPartAddedEvent
|
|
8141
8168
|
| ResponseContentPartDoneEvent
|
|
@@ -9128,6 +9155,7 @@ export type ResponsesServerEvent =
|
|
|
9128
9155
|
| ResponsesServerEvent.ResponseCodeInterpreterCallWsCompleted
|
|
9129
9156
|
| ResponsesServerEvent.ResponseCodeInterpreterCallInWsProgress
|
|
9130
9157
|
| ResponsesServerEvent.ResponseCodeInterpreterCallWsInterpreting
|
|
9158
|
+
| ResponsesServerEvent.ResponseCompactionWsCompacting
|
|
9131
9159
|
| ResponsesServerEvent.ResponseWsCompleted
|
|
9132
9160
|
| ResponsesServerEvent.ResponseContentPartWsAdded
|
|
9133
9161
|
| ResponsesServerEvent.ResponseContentPartWsDone
|
|
@@ -9282,6 +9310,18 @@ export namespace ResponsesServerEvent {
|
|
|
9282
9310
|
stream_id?: string;
|
|
9283
9311
|
}
|
|
9284
9312
|
|
|
9313
|
+
/**
|
|
9314
|
+
* Emitted when new summary content is sampled for a compaction trigger. Contains
|
|
9315
|
+
* no summary content.
|
|
9316
|
+
*/
|
|
9317
|
+
export interface ResponseCompactionWsCompacting extends ResponseCompactionCompactingEvent {
|
|
9318
|
+
/**
|
|
9319
|
+
* The WebSocket lane that emitted this event. This field is present when the
|
|
9320
|
+
* originating `response.create` event supplied a `stream_id`.
|
|
9321
|
+
*/
|
|
9322
|
+
stream_id?: string;
|
|
9323
|
+
}
|
|
9324
|
+
|
|
9285
9325
|
/**
|
|
9286
9326
|
* Emitted when the model response is complete.
|
|
9287
9327
|
*/
|
|
@@ -11468,6 +11508,7 @@ export declare namespace Responses {
|
|
|
11468
11508
|
type ResponseCodeInterpreterCallInProgressEvent as ResponseCodeInterpreterCallInProgressEvent,
|
|
11469
11509
|
type ResponseCodeInterpreterCallInterpretingEvent as ResponseCodeInterpreterCallInterpretingEvent,
|
|
11470
11510
|
type ResponseCodeInterpreterToolCall as ResponseCodeInterpreterToolCall,
|
|
11511
|
+
type ResponseCompactionCompactingEvent as ResponseCompactionCompactingEvent,
|
|
11471
11512
|
type ResponseCompactionItem as ResponseCompactionItem,
|
|
11472
11513
|
type ResponseCompactionItemParam as ResponseCompactionItemParam,
|
|
11473
11514
|
type ResponseCompletedEvent as ResponseCompletedEvent,
|
|
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
|
|
|
6
6
|
import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
|
|
7
7
|
import {
|
|
8
8
|
SendQueue,
|
|
9
|
+
getMaxBufferedEvents,
|
|
10
|
+
type WebSocketStreamOptions,
|
|
9
11
|
flattenRawData,
|
|
10
12
|
isRecoverableClose,
|
|
11
13
|
type RawWebSocketData,
|
|
@@ -51,11 +53,11 @@ export interface ResponsesWSBaseOptions {
|
|
|
51
53
|
reconnect?: ResponsesWSReconnectOptions | null | undefined;
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* Default: 1
|
|
56
|
+
* Byte budget for outgoing messages queued while the socket is connecting
|
|
57
|
+
* or reconnecting. An empty queue accepts one message even if it exceeds
|
|
58
|
+
* this budget. Further messages are discarded and an `error` event is emitted
|
|
59
|
+
* if the total queued size would exceed the budget.
|
|
60
|
+
* Default: 1 MiB (1,048,576 bytes).
|
|
59
61
|
*/
|
|
60
62
|
maxQueueSize?: number | undefined;
|
|
61
63
|
}
|
|
@@ -97,7 +99,11 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
97
99
|
this.socket = this._connect();
|
|
98
100
|
}
|
|
99
101
|
|
|
100
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Creates a platform-specific WebSocket for the given URL and captured client auth headers.
|
|
104
|
+
* The transport must supply or validate its final credentials before connecting;
|
|
105
|
+
* these headers may be empty when authentication is managed by the transport.
|
|
106
|
+
*/
|
|
101
107
|
protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
|
|
102
108
|
|
|
103
109
|
send(event: ResponsesAPI.ResponsesClientEvent) {
|
|
@@ -165,6 +171,11 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
165
171
|
* The iterator will exit if the socket closes but exiting the iterator
|
|
166
172
|
* does not close the socket.
|
|
167
173
|
*
|
|
174
|
+
* Pass `maxBufferedEvents` to limit queued records for this iterator, including
|
|
175
|
+
* lifecycle events. Overflow discards its backlog and rejects `next()` with a
|
|
176
|
+
* WebSocketError; the shared socket and other iterators remain active.
|
|
177
|
+
* Omitted means unlimited. This is an event-count limit, not a byte limit.
|
|
178
|
+
*
|
|
168
179
|
* @example
|
|
169
180
|
* ```ts
|
|
170
181
|
* for await (const event of client.stream()) {
|
|
@@ -182,26 +193,59 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
182
193
|
* }
|
|
183
194
|
* ```
|
|
184
195
|
*/
|
|
185
|
-
stream(): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
186
|
-
return this[Symbol.asyncIterator]();
|
|
196
|
+
stream(options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
197
|
+
return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
|
|
187
198
|
}
|
|
188
199
|
|
|
189
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
200
|
+
[Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
190
201
|
if (!this.socket) {
|
|
191
202
|
throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
|
|
192
203
|
}
|
|
193
204
|
|
|
205
|
+
const maxBufferedEvents = getMaxBufferedEvents(options);
|
|
206
|
+
|
|
194
207
|
// Two-queue async iterator: `queue` buffers incoming messages,
|
|
195
208
|
// `resolvers` buffers waiting next() calls. A push wakes the
|
|
196
209
|
// oldest next(); a next() drains the oldest message.
|
|
197
|
-
const queue: ResponsesStreamMessage[] = [];
|
|
198
|
-
const resolvers: (() => void)[] = [];
|
|
210
|
+
const queue: (ResponsesStreamMessage | undefined)[] = [];
|
|
211
|
+
const resolvers: ((() => void) | undefined)[] = [];
|
|
212
|
+
let queueHead = 0;
|
|
213
|
+
let resolverHead = 0;
|
|
199
214
|
let done = false;
|
|
215
|
+
let failure: WebSocketError | undefined;
|
|
200
216
|
let currentSocket = this.socket;
|
|
201
217
|
|
|
218
|
+
const wakeResolver = () => {
|
|
219
|
+
if (resolverHead >= resolvers.length) return;
|
|
220
|
+
|
|
221
|
+
const resolver = resolvers[resolverHead];
|
|
222
|
+
resolvers[resolverHead] = undefined;
|
|
223
|
+
resolverHead += 1;
|
|
224
|
+
if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
|
|
225
|
+
resolvers.splice(0, resolverHead);
|
|
226
|
+
resolverHead = 0;
|
|
227
|
+
}
|
|
228
|
+
resolver?.();
|
|
229
|
+
};
|
|
230
|
+
|
|
202
231
|
const push = (msg: ResponsesStreamMessage) => {
|
|
232
|
+
if (done) return;
|
|
233
|
+
|
|
234
|
+
if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
|
|
235
|
+
failure = new WebSocketError(
|
|
236
|
+
`WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
|
|
237
|
+
null,
|
|
238
|
+
);
|
|
239
|
+
done = true;
|
|
240
|
+
queue.length = 0;
|
|
241
|
+
queueHead = 0;
|
|
242
|
+
cleanup();
|
|
243
|
+
flushResolvers();
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
203
247
|
queue.push(msg);
|
|
204
|
-
|
|
248
|
+
wakeResolver();
|
|
205
249
|
};
|
|
206
250
|
|
|
207
251
|
const onEvent = (event: ResponsesAPI.ResponsesServerEvent) => {
|
|
@@ -231,9 +275,14 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
231
275
|
};
|
|
232
276
|
|
|
233
277
|
const flushResolvers = () => {
|
|
234
|
-
|
|
235
|
-
resolver
|
|
278
|
+
while (resolverHead < resolvers.length) {
|
|
279
|
+
const resolver = resolvers[resolverHead];
|
|
280
|
+
resolvers[resolverHead] = undefined;
|
|
281
|
+
resolverHead += 1;
|
|
282
|
+
resolver?.();
|
|
236
283
|
}
|
|
284
|
+
resolvers.length = 0;
|
|
285
|
+
resolverHead = 0;
|
|
237
286
|
};
|
|
238
287
|
|
|
239
288
|
const onClose = (
|
|
@@ -247,8 +296,9 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
247
296
|
cleanup();
|
|
248
297
|
};
|
|
249
298
|
|
|
250
|
-
const onSocketSwap = (
|
|
251
|
-
|
|
299
|
+
const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
|
|
300
|
+
if (currentSocket === newSocket) return;
|
|
301
|
+
currentSocket.off('open', onOpen);
|
|
252
302
|
newSocket.on('open', onOpen);
|
|
253
303
|
currentSocket = newSocket;
|
|
254
304
|
};
|
|
@@ -305,9 +355,21 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
305
355
|
}
|
|
306
356
|
}
|
|
307
357
|
|
|
308
|
-
const resolve = (
|
|
309
|
-
|
|
310
|
-
|
|
358
|
+
const resolve = (
|
|
359
|
+
res: (value: IteratorResult<ResponsesStreamMessage>) => void,
|
|
360
|
+
reject: (error: WebSocketError) => void,
|
|
361
|
+
) => {
|
|
362
|
+
if (failure) {
|
|
363
|
+
reject(failure);
|
|
364
|
+
} else if (queueHead < queue.length) {
|
|
365
|
+
const queued = queue[queueHead]!;
|
|
366
|
+
queue[queueHead] = undefined;
|
|
367
|
+
queueHead += 1;
|
|
368
|
+
if (queueHead >= 64 && queueHead * 2 >= queue.length) {
|
|
369
|
+
queue.splice(0, queueHead);
|
|
370
|
+
queueHead = 0;
|
|
371
|
+
}
|
|
372
|
+
res({ value: queued, done: false });
|
|
311
373
|
} else if (done) {
|
|
312
374
|
res({ value: undefined, done: true });
|
|
313
375
|
} else {
|
|
@@ -317,10 +379,10 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
317
379
|
};
|
|
318
380
|
|
|
319
381
|
const next = (): Promise<IteratorResult<ResponsesStreamMessage>> =>
|
|
320
|
-
new Promise((res) => {
|
|
321
|
-
if (resolve(res)) return;
|
|
382
|
+
new Promise((res, reject) => {
|
|
383
|
+
if (resolve(res, reject)) return;
|
|
322
384
|
resolvers.push(() => {
|
|
323
|
-
resolve(res);
|
|
385
|
+
resolve(res, reject);
|
|
324
386
|
});
|
|
325
387
|
});
|
|
326
388
|
|
|
@@ -328,6 +390,8 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
328
390
|
next,
|
|
329
391
|
return: (): Promise<IteratorReturnResult<undefined>> => {
|
|
330
392
|
done = true;
|
|
393
|
+
queue.length = 0;
|
|
394
|
+
queueHead = 0;
|
|
331
395
|
cleanup();
|
|
332
396
|
flushResolvers();
|
|
333
397
|
return Promise.resolve({ value: undefined, done: true });
|
|
@@ -360,6 +424,35 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
360
424
|
return;
|
|
361
425
|
}
|
|
362
426
|
|
|
427
|
+
if (
|
|
428
|
+
event === null ||
|
|
429
|
+
typeof event !== 'object' ||
|
|
430
|
+
Array.isArray(event) ||
|
|
431
|
+
!Object.prototype.hasOwnProperty.call(event, 'type') ||
|
|
432
|
+
typeof event.type !== 'string'
|
|
433
|
+
) {
|
|
434
|
+
this._onError(
|
|
435
|
+
null,
|
|
436
|
+
'received invalid WebSocket event: expected an object with an own string type',
|
|
437
|
+
undefined,
|
|
438
|
+
);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
const eventType: string = event.type;
|
|
443
|
+
const reservedEventType =
|
|
444
|
+
eventType === 'raw' ||
|
|
445
|
+
eventType === 'close' ||
|
|
446
|
+
eventType === 'event' ||
|
|
447
|
+
eventType === 'reconnecting' ||
|
|
448
|
+
eventType === 'reconnected' ||
|
|
449
|
+
eventType === 'open' ||
|
|
450
|
+
eventType === 'error';
|
|
451
|
+
if (reservedEventType && eventType !== 'error') {
|
|
452
|
+
this._onError(null, 'received reserved WebSocket event type', undefined);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
|
|
363
456
|
this._emit('event', event);
|
|
364
457
|
|
|
365
458
|
if (event.type === 'error') {
|
|
@@ -603,9 +696,7 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
603
696
|
}
|
|
604
697
|
|
|
605
698
|
protected _authHeaders(): Record<string, string> {
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
}
|
|
609
|
-
return {};
|
|
699
|
+
const apiKey = this._client.apiKey;
|
|
700
|
+
return typeof apiKey === 'string' && apiKey ? { Authorization: `Bearer ${apiKey}` } : {};
|
|
610
701
|
}
|
|
611
702
|
}
|
|
@@ -5,10 +5,17 @@ import { NodeWebSocket } from '../../internal/ws-adapter-node';
|
|
|
5
5
|
import { ResponsesWSBase, type ResponsesWSBaseOptions } from './ws-base';
|
|
6
6
|
import { OpenAI } from '../../client';
|
|
7
7
|
import { VERSION } from '../../version';
|
|
8
|
+
import { OpenAIError } from '../../core/error';
|
|
9
|
+
import { snapshotWebSocketCredentials } from '../../internal/ws';
|
|
10
|
+
|
|
11
|
+
export type { WebSocketStreamOptions } from '../../internal/ws';
|
|
8
12
|
|
|
9
13
|
export type { ResponsesWSReconnectOptions } from './ws-base';
|
|
10
14
|
|
|
11
|
-
export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSBaseOptions {
|
|
15
|
+
export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSBaseOptions {
|
|
16
|
+
/** Basic authentication forwarded by the Node `ws` transport. */
|
|
17
|
+
auth?: string;
|
|
18
|
+
}
|
|
12
19
|
|
|
13
20
|
export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
|
|
14
21
|
private _wsOptions: WS.ClientOptions | null | undefined;
|
|
@@ -19,7 +26,6 @@ export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
|
|
|
19
26
|
'ResponsesWS from "openai/resources/responses/ws" requires the "ws" package but it could not be loaded.',
|
|
20
27
|
);
|
|
21
28
|
}
|
|
22
|
-
|
|
23
29
|
const { reconnect, maxQueueSize, ...wsOptions } = options ?? {};
|
|
24
30
|
super(client, { reconnect, maxQueueSize });
|
|
25
31
|
this._wsOptions = wsOptions;
|
|
@@ -27,16 +33,27 @@ export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
|
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
protected _createSocket(url: URL, authHeaders: Record<string, string>): NodeWebSocket {
|
|
30
|
-
const
|
|
36
|
+
const capturedAuthHeaders = { ...authHeaders };
|
|
37
|
+
const socketOptions: ResponsesWSClientOptions = {
|
|
31
38
|
...this._wsOptions,
|
|
32
39
|
headers: {
|
|
33
40
|
'User-Agent': `${this._client.constructor.name}/JS ${VERSION}`,
|
|
34
|
-
|
|
35
|
-
...authHeaders,
|
|
41
|
+
...capturedAuthHeaders,
|
|
36
42
|
...this._wsOptions?.headers,
|
|
37
43
|
},
|
|
38
44
|
followRedirects: false,
|
|
39
|
-
}
|
|
45
|
+
};
|
|
46
|
+
if (
|
|
47
|
+
this._client._hasApiKeyProvider() &&
|
|
48
|
+
!capturedAuthHeaders['Authorization'] &&
|
|
49
|
+
!snapshotWebSocketCredentials(socketOptions)
|
|
50
|
+
) {
|
|
51
|
+
throw new OpenAIError(
|
|
52
|
+
'Cannot open a Responses WebSocket with an unresolved function-based apiKey. Resolve it before constructing the WebSocket or provide explicit WebSocket credentials.',
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const ws = new WS.WebSocket(url, socketOptions);
|
|
40
57
|
return new NodeWebSocket(ws);
|
|
41
58
|
}
|
|
42
59
|
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Version of the installed OpenAI SDK package. */
|
|
2
|
-
export const VERSION = '7.
|
|
2
|
+
export const VERSION = '7.17.0'; // x-release-please-version
|
package/version.d.mts
CHANGED