openai 7.5.0 → 7.6.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 +105 -0
- package/README.md +46 -2
- package/auth/index.d.mts +1 -1
- package/auth/index.d.mts.map +1 -1
- package/auth/index.d.ts +1 -1
- package/auth/index.d.ts.map +1 -1
- package/auth/index.js.map +1 -1
- package/auth/index.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 +176 -4
- package/auth/subject-token-providers.js.map +1 -1
- package/auth/subject-token-providers.mjs +176 -4
- package/auth/subject-token-providers.mjs.map +1 -1
- package/auth/types.d.mts +17 -0
- package/auth/types.d.mts.map +1 -1
- package/auth/types.d.ts +17 -0
- package/auth/types.d.ts.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 +80 -7
- package/auth/workload-identity-auth.js.map +1 -1
- package/auth/workload-identity-auth.mjs +80 -7
- package/auth/workload-identity-auth.mjs.map +1 -1
- package/auth/x509-transport.d.mts +5 -0
- package/auth/x509-transport.d.mts.map +1 -0
- package/auth/x509-transport.d.ts +5 -0
- package/auth/x509-transport.d.ts.map +1 -0
- package/auth/x509-transport.js +39 -0
- package/auth/x509-transport.js.map +1 -0
- package/auth/x509-transport.mjs +36 -0
- package/auth/x509-transport.mjs.map +1 -0
- package/azure.d.mts +11 -2
- package/azure.d.mts.map +1 -1
- package/azure.d.ts +11 -2
- package/azure.d.ts.map +1 -1
- package/azure.js +7 -1
- package/azure.js.map +1 -1
- package/azure.mjs +7 -1
- package/azure.mjs.map +1 -1
- package/bedrock.d.mts +6 -2
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts +6 -2
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +34 -4
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +35 -5
- package/bedrock.mjs.map +1 -1
- package/beta/realtime/internal-base.d.mts +2 -0
- package/beta/realtime/internal-base.d.mts.map +1 -1
- package/beta/realtime/internal-base.d.ts +2 -0
- package/beta/realtime/internal-base.d.ts.map +1 -1
- package/beta/realtime/internal-base.js +15 -0
- package/beta/realtime/internal-base.js.map +1 -1
- package/beta/realtime/internal-base.mjs +14 -0
- package/beta/realtime/internal-base.mjs.map +1 -1
- package/beta/realtime/websocket.d.mts +11 -5
- package/beta/realtime/websocket.d.mts.map +1 -1
- package/beta/realtime/websocket.d.ts +11 -5
- package/beta/realtime/websocket.d.ts.map +1 -1
- package/beta/realtime/websocket.js +106 -31
- package/beta/realtime/websocket.js.map +1 -1
- package/beta/realtime/websocket.mjs +107 -32
- package/beta/realtime/websocket.mjs.map +1 -1
- package/beta/realtime/ws.d.mts +0 -2
- package/beta/realtime/ws.d.mts.map +1 -1
- package/beta/realtime/ws.d.ts +0 -2
- package/beta/realtime/ws.d.ts.map +1 -1
- package/beta/realtime/ws.js +24 -5
- package/beta/realtime/ws.js.map +1 -1
- package/beta/realtime/ws.mjs +25 -6
- package/beta/realtime/ws.mjs.map +1 -1
- package/client.d.mts +17 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +17 -2
- package/client.d.ts.map +1 -1
- package/client.js +422 -70
- package/client.js.map +1 -1
- package/client.mjs +423 -71
- 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 +67 -9
- package/core/EventEmitter.js.map +1 -1
- package/core/EventEmitter.mjs +68 -10
- 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 +58 -19
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +58 -19
- package/core/streaming.mjs.map +1 -1
- package/helpers/audio.d.mts +5 -5
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts +5 -5
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +93 -22
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +93 -22
- 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 +34 -14
- package/helpers/standard-schema.js.map +1 -1
- package/helpers/standard-schema.mjs +35 -15
- package/helpers/standard-schema.mjs.map +1 -1
- package/helpers/zod-v3-strict-schema.d.mts +7 -0
- package/helpers/zod-v3-strict-schema.d.mts.map +1 -0
- package/helpers/zod-v3-strict-schema.d.ts +7 -0
- package/helpers/zod-v3-strict-schema.d.ts.map +1 -0
- package/helpers/zod-v3-strict-schema.js +403 -0
- package/helpers/zod-v3-strict-schema.js.map +1 -0
- package/helpers/zod-v3-strict-schema.mjs +399 -0
- package/helpers/zod-v3-strict-schema.mjs.map +1 -0
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +11 -3
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +12 -4
- package/helpers/zod.mjs.map +1 -1
- package/index.d.mts +1 -1
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js.map +1 -1
- package/index.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 +28 -8
- package/internal/assistant-stream-delta.js.map +1 -1
- package/internal/assistant-stream-delta.mjs +28 -8
- package/internal/assistant-stream-delta.mjs.map +1 -1
- package/internal/auth/x509-token-exchange.d.mts +16 -0
- package/internal/auth/x509-token-exchange.d.mts.map +1 -0
- package/internal/auth/x509-token-exchange.d.ts +16 -0
- package/internal/auth/x509-token-exchange.d.ts.map +1 -0
- package/internal/auth/x509-token-exchange.js +246 -0
- package/internal/auth/x509-token-exchange.js.map +1 -0
- package/internal/auth/x509-token-exchange.mjs +243 -0
- package/internal/auth/x509-token-exchange.mjs.map +1 -0
- package/internal/auth/x509-transport-capability.d.mts +37 -0
- package/internal/auth/x509-transport-capability.d.mts.map +1 -0
- package/internal/auth/x509-transport-capability.d.ts +37 -0
- package/internal/auth/x509-transport-capability.d.ts.map +1 -0
- package/internal/auth/x509-transport-capability.js +169 -0
- package/internal/auth/x509-transport-capability.js.map +1 -0
- package/internal/auth/x509-transport-capability.mjs +164 -0
- package/internal/auth/x509-transport-capability.mjs.map +1 -0
- package/internal/auth/x509-transport-registry.d.mts +63 -0
- package/internal/auth/x509-transport-registry.d.mts.map +1 -0
- package/internal/auth/x509-transport-registry.d.ts +63 -0
- package/internal/auth/x509-transport-registry.d.ts.map +1 -0
- package/internal/auth/x509-transport-registry.js +53 -0
- package/internal/auth/x509-transport-registry.js.map +1 -0
- package/internal/auth/x509-transport-registry.mjs +48 -0
- package/internal/auth/x509-transport-registry.mjs.map +1 -0
- package/internal/auth/x509-transport-state-browser.d.mts +21 -0
- package/internal/auth/x509-transport-state-browser.d.mts.map +1 -0
- package/internal/auth/x509-transport-state-browser.d.ts +21 -0
- package/internal/auth/x509-transport-state-browser.d.ts.map +1 -0
- package/internal/auth/x509-transport-state-browser.js +30 -0
- package/internal/auth/x509-transport-state-browser.js.map +1 -0
- package/internal/auth/x509-transport-state-browser.mjs +27 -0
- package/internal/auth/x509-transport-state-browser.mjs.map +1 -0
- package/internal/auth/x509-transport-state.cjs +30 -0
- package/internal/auth/x509-transport-state.cjs.map +1 -0
- package/internal/auth/x509-transport-state.d.cts +21 -0
- package/internal/auth/x509-transport-state.d.cts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.d.mts +128 -0
- package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.d.ts +128 -0
- package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -0
- package/internal/auth/x509-workload-identity-auth.js +767 -0
- package/internal/auth/x509-workload-identity-auth.js.map +1 -0
- package/internal/auth/x509-workload-identity-auth.mjs +757 -0
- package/internal/auth/x509-workload-identity-auth.mjs.map +1 -0
- package/internal/bedrock.d.mts +2 -0
- package/internal/bedrock.d.mts.map +1 -1
- package/internal/bedrock.d.ts +2 -0
- package/internal/bedrock.d.ts.map +1 -1
- package/internal/bedrock.js +169 -5
- package/internal/bedrock.js.map +1 -1
- package/internal/bedrock.mjs +168 -5
- package/internal/bedrock.mjs.map +1 -1
- package/internal/data-residency.d.mts +12 -0
- package/internal/data-residency.d.mts.map +1 -0
- package/internal/data-residency.d.ts +12 -0
- package/internal/data-residency.d.ts.map +1 -0
- package/internal/data-residency.js +34 -0
- package/internal/data-residency.js.map +1 -0
- package/internal/data-residency.mjs +30 -0
- package/internal/data-residency.mjs.map +1 -0
- package/internal/multipart-encoding.d.mts +8 -0
- package/internal/multipart-encoding.d.mts.map +1 -0
- package/internal/multipart-encoding.d.ts +8 -0
- package/internal/multipart-encoding.d.ts.map +1 -0
- package/internal/multipart-encoding.js +51 -0
- package/internal/multipart-encoding.js.map +1 -0
- package/internal/multipart-encoding.mjs +48 -0
- package/internal/multipart-encoding.mjs.map +1 -0
- package/internal/qs/utils.d.mts.map +1 -1
- package/internal/qs/utils.d.ts.map +1 -1
- package/internal/qs/utils.js +307 -10
- package/internal/qs/utils.js.map +1 -1
- package/internal/qs/utils.mjs +307 -10
- package/internal/qs/utils.mjs.map +1 -1
- package/internal/request-options.d.mts +7 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +7 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js +43 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs +42 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/responses/canonical-output-text.js +3 -3
- package/internal/responses/canonical-output-text.js.map +1 -1
- package/internal/responses/canonical-output-text.mjs +3 -3
- package/internal/responses/canonical-output-text.mjs.map +1 -1
- package/internal/responses/response-accumulator.d.mts +1 -1
- package/internal/responses/response-accumulator.d.mts.map +1 -1
- package/internal/responses/response-accumulator.d.ts +1 -1
- package/internal/responses/response-accumulator.d.ts.map +1 -1
- package/internal/responses/response-accumulator.js +331 -25
- package/internal/responses/response-accumulator.js.map +1 -1
- package/internal/responses/response-accumulator.mjs +331 -25
- package/internal/responses/response-accumulator.mjs.map +1 -1
- package/internal/tslib.js +6 -0
- package/internal/tslib.mjs +6 -1
- package/internal/uploads.d.mts +10 -6
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts +10 -6
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +65 -24
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +65 -24
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/env.d.mts.map +1 -1
- package/internal/utils/env.d.ts.map +1 -1
- package/internal/utils/env.js +9 -4
- package/internal/utils/env.js.map +1 -1
- package/internal/utils/env.mjs +9 -4
- package/internal/utils/env.mjs.map +1 -1
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +23 -1
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +23 -1
- 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 +32 -7
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +34 -9
- 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 +211 -23
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +211 -23
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +1 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +1 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +1118 -67
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +1119 -68
- 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 +67 -9
- package/lib/EventEmitter.js.map +1 -1
- package/lib/EventEmitter.mjs +68 -10
- package/lib/EventEmitter.mjs.map +1 -1
- package/lib/EventStream.d.mts +4 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +4 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +1096 -11
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +1097 -12
- 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 +1 -1
- package/lib/ResponsesParser.js.map +1 -1
- package/lib/ResponsesParser.mjs +1 -1
- package/lib/ResponsesParser.mjs.map +1 -1
- package/lib/Util.d.mts +2 -0
- package/lib/Util.d.mts.map +1 -1
- package/lib/Util.d.ts +2 -0
- package/lib/Util.d.ts.map +1 -1
- package/lib/Util.js +7 -4
- package/lib/Util.js.map +1 -1
- package/lib/Util.mjs +7 -4
- package/lib/Util.mjs.map +1 -1
- package/lib/assistant-run-polling.d.mts +12 -0
- package/lib/assistant-run-polling.d.mts.map +1 -0
- package/lib/assistant-run-polling.d.ts +12 -0
- package/lib/assistant-run-polling.d.ts.map +1 -0
- package/lib/assistant-run-polling.js +17 -0
- package/lib/assistant-run-polling.js.map +1 -0
- package/lib/assistant-run-polling.mjs +14 -0
- package/lib/assistant-run-polling.mjs.map +1 -0
- package/lib/embeddings.d.mts +18 -0
- package/lib/embeddings.d.mts.map +1 -0
- package/lib/embeddings.d.ts +18 -0
- package/lib/embeddings.d.ts.map +1 -0
- package/lib/embeddings.js +50 -0
- package/lib/embeddings.js.map +1 -0
- package/lib/embeddings.mjs +47 -0
- package/lib/embeddings.mjs.map +1 -0
- package/lib/file-processing.d.mts +10 -0
- package/lib/file-processing.d.mts.map +1 -0
- package/lib/file-processing.d.ts +10 -0
- package/lib/file-processing.d.ts.map +1 -0
- package/lib/file-processing.js +30 -0
- package/lib/file-processing.js.map +1 -0
- package/lib/file-processing.mjs +27 -0
- package/lib/file-processing.mjs.map +1 -0
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +16 -4
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +16 -4
- package/lib/parser.mjs.map +1 -1
- package/lib/polling.d.mts +20 -0
- package/lib/polling.d.mts.map +1 -0
- package/lib/polling.d.ts +20 -0
- package/lib/polling.d.ts.map +1 -0
- package/lib/polling.js +130 -0
- package/lib/polling.js.map +1 -0
- package/lib/polling.mjs +127 -0
- package/lib/polling.mjs.map +1 -0
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +21 -11
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +21 -11
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/lib/vector-store-polling.d.mts +22 -0
- package/lib/vector-store-polling.d.mts.map +1 -0
- package/lib/vector-store-polling.d.ts +22 -0
- package/lib/vector-store-polling.d.ts.map +1 -0
- package/lib/vector-store-polling.js +24 -0
- package/lib/vector-store-polling.js.map +1 -0
- package/lib/vector-store-polling.mjs +20 -0
- package/lib/vector-store-polling.mjs.map +1 -0
- package/lib/vector-store-upload.d.mts +17 -0
- package/lib/vector-store-upload.d.mts.map +1 -0
- package/lib/vector-store-upload.d.ts +17 -0
- package/lib/vector-store-upload.d.ts.map +1 -0
- package/lib/vector-store-upload.js +37 -0
- package/lib/vector-store-upload.js.map +1 -0
- package/lib/vector-store-upload.mjs +34 -0
- package/lib/vector-store-upload.mjs.map +1 -0
- package/lib/webhook-signature.d.mts +15 -0
- package/lib/webhook-signature.d.mts.map +1 -0
- package/lib/webhook-signature.d.ts +15 -0
- package/lib/webhook-signature.d.ts.map +1 -0
- package/lib/webhook-signature.js +125 -0
- package/lib/webhook-signature.js.map +1 -0
- package/lib/webhook-signature.mjs +121 -0
- package/lib/webhook-signature.mjs.map +1 -0
- package/package.json +14 -1
- package/realtime/internal-base.d.mts +2 -0
- package/realtime/internal-base.d.mts.map +1 -1
- package/realtime/internal-base.d.ts +2 -0
- package/realtime/internal-base.d.ts.map +1 -1
- package/realtime/internal-base.js +15 -0
- package/realtime/internal-base.js.map +1 -1
- package/realtime/internal-base.mjs +14 -0
- package/realtime/internal-base.mjs.map +1 -1
- package/realtime/websocket.d.mts +3 -2
- package/realtime/websocket.d.mts.map +1 -1
- package/realtime/websocket.d.ts +3 -2
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/websocket.js +90 -26
- package/realtime/websocket.js.map +1 -1
- package/realtime/websocket.mjs +91 -27
- 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 +9 -1
- package/realtime/ws.js.map +1 -1
- package/realtime/ws.mjs +10 -2
- package/realtime/ws.mjs.map +1 -1
- package/resources/admin/organization/index.d.mts +2 -2
- package/resources/admin/organization/index.d.mts.map +1 -1
- package/resources/admin/organization/index.d.ts +2 -2
- package/resources/admin/organization/index.d.ts.map +1 -1
- package/resources/admin/organization/index.js.map +1 -1
- package/resources/admin/organization/index.mjs.map +1 -1
- package/resources/admin/organization/organization.d.mts +4 -4
- package/resources/admin/organization/organization.d.mts.map +1 -1
- package/resources/admin/organization/organization.d.ts +4 -4
- package/resources/admin/organization/organization.d.ts.map +1 -1
- package/resources/admin/organization/organization.js.map +1 -1
- package/resources/admin/organization/organization.mjs.map +1 -1
- package/resources/admin/organization/projects/index.d.mts +1 -1
- package/resources/admin/organization/projects/index.d.mts.map +1 -1
- package/resources/admin/organization/projects/index.d.ts +1 -1
- package/resources/admin/organization/projects/index.d.ts.map +1 -1
- package/resources/admin/organization/projects/index.js.map +1 -1
- package/resources/admin/organization/projects/index.mjs.map +1 -1
- package/resources/admin/organization/projects/projects.d.mts +22 -5
- package/resources/admin/organization/projects/projects.d.mts.map +1 -1
- package/resources/admin/organization/projects/projects.d.ts +22 -5
- package/resources/admin/organization/projects/projects.d.ts.map +1 -1
- package/resources/admin/organization/projects/projects.js.map +1 -1
- package/resources/admin/organization/projects/projects.mjs.map +1 -1
- package/resources/admin/organization/usage.d.mts +62 -1
- package/resources/admin/organization/usage.d.mts.map +1 -1
- package/resources/admin/organization/usage.d.ts +62 -1
- package/resources/admin/organization/usage.d.ts.map +1 -1
- package/resources/admin/organization/usage.js.map +1 -1
- package/resources/admin/organization/usage.mjs.map +1 -1
- package/resources/beta/responses/internal-base.d.mts.map +1 -1
- package/resources/beta/responses/internal-base.d.ts.map +1 -1
- package/resources/beta/responses/internal-base.js +2 -0
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +2 -0
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +9 -12
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +9 -12
- 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/threads/runs/index.d.mts +1 -1
- package/resources/beta/threads/runs/index.d.mts.map +1 -1
- package/resources/beta/threads/runs/index.d.ts +1 -1
- package/resources/beta/threads/runs/index.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.d.mts.map +1 -1
- package/resources/beta/threads/runs/runs.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.js +2 -43
- package/resources/beta/threads/runs/runs.js.map +1 -1
- package/resources/beta/threads/runs/runs.mjs +2 -43
- package/resources/beta/threads/runs/runs.mjs.map +1 -1
- package/resources/chat/completions/completions.d.mts +6 -0
- package/resources/chat/completions/completions.d.mts.map +1 -1
- package/resources/chat/completions/completions.d.ts +6 -0
- package/resources/chat/completions/completions.d.ts.map +1 -1
- package/resources/chat/completions/completions.js.map +1 -1
- package/resources/chat/completions/completions.mjs.map +1 -1
- package/resources/embeddings.d.mts.map +1 -1
- package/resources/embeddings.d.ts.map +1 -1
- package/resources/embeddings.js +2 -36
- package/resources/embeddings.js.map +1 -1
- package/resources/embeddings.mjs +2 -36
- package/resources/embeddings.mjs.map +1 -1
- package/resources/files.d.mts.map +1 -1
- package/resources/files.d.ts.map +1 -1
- package/resources/files.js +2 -15
- package/resources/files.js.map +1 -1
- package/resources/files.mjs +2 -15
- package/resources/files.mjs.map +1 -1
- package/resources/images.d.mts +12 -22
- package/resources/images.d.mts.map +1 -1
- package/resources/images.d.ts +12 -22
- package/resources/images.d.ts.map +1 -1
- package/resources/realtime/calls.d.mts +23 -1
- package/resources/realtime/calls.d.mts.map +1 -1
- package/resources/realtime/calls.d.ts +23 -1
- package/resources/realtime/calls.d.ts.map +1 -1
- package/resources/realtime/calls.js +24 -0
- package/resources/realtime/calls.js.map +1 -1
- package/resources/realtime/calls.mjs +24 -0
- package/resources/realtime/calls.mjs.map +1 -1
- package/resources/realtime/index.d.mts +1 -1
- package/resources/realtime/index.d.mts.map +1 -1
- package/resources/realtime/index.d.ts +1 -1
- package/resources/realtime/index.d.ts.map +1 -1
- package/resources/realtime/index.js.map +1 -1
- package/resources/realtime/index.mjs +1 -1
- package/resources/realtime/index.mjs.map +1 -1
- package/resources/realtime/realtime.d.mts +5 -4
- package/resources/realtime/realtime.d.mts.map +1 -1
- package/resources/realtime/realtime.d.ts +5 -4
- package/resources/realtime/realtime.d.ts.map +1 -1
- package/resources/realtime/realtime.js.map +1 -1
- package/resources/realtime/realtime.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +2 -0
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +2 -0
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/responses.d.mts +9 -12
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +9 -12
- 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/vector-stores/file-batches.d.mts.map +1 -1
- package/resources/vector-stores/file-batches.d.ts.map +1 -1
- package/resources/vector-stores/file-batches.js +4 -61
- package/resources/vector-stores/file-batches.js.map +1 -1
- package/resources/vector-stores/file-batches.mjs +4 -61
- package/resources/vector-stores/file-batches.mjs.map +1 -1
- package/resources/vector-stores/files.d.mts +1 -1
- package/resources/vector-stores/files.d.mts.map +1 -1
- package/resources/vector-stores/files.d.ts +1 -1
- package/resources/vector-stores/files.d.ts.map +1 -1
- package/resources/vector-stores/files.js +2 -35
- package/resources/vector-stores/files.js.map +1 -1
- package/resources/vector-stores/files.mjs +2 -35
- package/resources/vector-stores/files.mjs.map +1 -1
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/resources/webhooks/webhooks.js +5 -43
- package/resources/webhooks/webhooks.js.map +1 -1
- package/resources/webhooks/webhooks.mjs +5 -43
- package/resources/webhooks/webhooks.mjs.map +1 -1
- package/src/auth/index.ts +6 -1
- package/src/auth/subject-token-providers.ts +196 -4
- package/src/auth/types.ts +24 -0
- package/src/auth/workload-identity-auth.ts +104 -7
- package/src/auth/x509-transport.ts +49 -0
- package/src/azure.ts +22 -1
- package/src/bedrock.ts +49 -5
- package/src/beta/realtime/internal-base.ts +15 -0
- package/src/beta/realtime/websocket.ts +148 -40
- package/src/beta/realtime/ws.ts +31 -13
- package/src/client.ts +536 -92
- package/src/core/EventEmitter.ts +91 -7
- package/src/core/streaming.ts +71 -20
- package/src/helpers/audio.ts +93 -22
- package/src/helpers/standard-schema.ts +50 -16
- package/src/helpers/zod-v3-strict-schema.ts +514 -0
- package/src/helpers/zod.ts +17 -4
- package/src/index.ts +1 -1
- package/src/internal/assistant-stream-delta.ts +33 -10
- package/src/internal/auth/x509-token-exchange.ts +310 -0
- package/src/internal/auth/x509-transport-capability.ts +219 -0
- package/src/internal/auth/x509-transport-registry.ts +118 -0
- package/src/internal/auth/x509-transport-state-browser.ts +36 -0
- package/src/internal/auth/x509-transport-state.cts +36 -0
- package/src/internal/auth/x509-workload-identity-auth.ts +958 -0
- package/src/internal/bedrock.ts +182 -5
- package/src/internal/data-residency.ts +44 -0
- package/src/internal/multipart-encoding.ts +53 -0
- package/src/internal/qs/utils.ts +375 -13
- package/src/internal/request-options.ts +52 -1
- package/src/internal/responses/canonical-output-text.ts +3 -3
- package/src/internal/responses/response-accumulator.ts +411 -24
- package/src/internal/uploads.ts +81 -26
- package/src/internal/utils/env.ts +9 -5
- package/src/internal/ws.ts +24 -3
- package/src/lib/AbstractChatCompletionRunner.ts +33 -6
- package/src/lib/AssistantStream.ts +262 -22
- package/src/lib/ChatCompletionStream.ts +1467 -103
- package/src/lib/EventEmitter.ts +91 -7
- package/src/lib/EventStream.ts +1483 -10
- package/src/lib/ResponsesParser.ts +4 -1
- package/src/lib/Util.ts +7 -5
- package/src/lib/assistant-run-polling.ts +27 -0
- package/src/lib/embeddings.ts +65 -0
- package/src/lib/file-processing.ts +36 -0
- package/src/lib/parser.ts +19 -4
- package/src/lib/polling.ts +144 -0
- package/src/lib/responses/ResponseStream.ts +22 -10
- package/src/lib/vector-store-polling.ts +46 -0
- package/src/lib/vector-store-upload.ts +53 -0
- package/src/lib/webhook-signature.ts +164 -0
- package/src/realtime/internal-base.ts +15 -0
- package/src/realtime/websocket.ts +130 -27
- package/src/realtime/ws.ts +15 -2
- package/src/resources/admin/organization/index.ts +2 -0
- package/src/resources/admin/organization/organization.ts +4 -0
- package/src/resources/admin/organization/projects/index.ts +1 -0
- package/src/resources/admin/organization/projects/projects.ts +37 -4
- package/src/resources/admin/organization/usage.ts +83 -0
- package/src/resources/beta/responses/internal-base.ts +2 -0
- package/src/resources/beta/responses/responses.ts +9 -12
- package/src/resources/beta/threads/runs/index.ts +1 -1
- package/src/resources/beta/threads/runs/runs.ts +2 -45
- package/src/resources/chat/completions/completions.ts +7 -0
- package/src/resources/embeddings.ts +2 -42
- package/src/resources/files.ts +2 -19
- package/src/resources/images.ts +12 -22
- package/src/resources/realtime/api.md +1 -0
- package/src/resources/realtime/calls.ts +46 -0
- package/src/resources/realtime/index.ts +7 -1
- package/src/resources/realtime/realtime.ts +5 -3
- package/src/resources/responses/internal-base.ts +2 -0
- package/src/resources/responses/responses.ts +9 -12
- package/src/resources/vector-stores/file-batches.ts +8 -77
- package/src/resources/vector-stores/files.ts +3 -43
- package/src/resources/webhooks/webhooks.ts +5 -61
- 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
package/src/internal/uploads.ts
CHANGED
|
@@ -36,7 +36,10 @@ export interface StreamingFile {
|
|
|
36
36
|
/** Source chunks read incrementally as the multipart request body is transmitted. */
|
|
37
37
|
readonly data: StreamingFileInput;
|
|
38
38
|
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Logical source filename; ordinary uploads send its basename, while Skills can preserve
|
|
41
|
+
* a validated relative directory path.
|
|
42
|
+
*/
|
|
40
43
|
readonly name: string;
|
|
41
44
|
|
|
42
45
|
/** Optional MIME type; defaults to `application/octet-stream` when omitted. */
|
|
@@ -51,7 +54,8 @@ export interface StreamingFile {
|
|
|
51
54
|
* form data when the request is sent.
|
|
52
55
|
*
|
|
53
56
|
* @param data Async-iterable or readable-stream chunks containing text, binary data, or blobs.
|
|
54
|
-
* @param name Non-empty filename
|
|
57
|
+
* @param name Non-empty logical/source filename. Ordinary uploads send only its basename; Skills
|
|
58
|
+
* uploads may preserve a validated relative path with normalized forward slashes.
|
|
55
59
|
* @param options Optional MIME type for the streaming file.
|
|
56
60
|
* @throws {TypeError} If `name` is empty or the content type contains control characters.
|
|
57
61
|
*/
|
|
@@ -117,7 +121,7 @@ export const checkFileSupport = () => {
|
|
|
117
121
|
/**
|
|
118
122
|
* Values accepted by SDK methods that upload multipart files.
|
|
119
123
|
*
|
|
120
|
-
* Supports native files, fetch responses,
|
|
124
|
+
* Supports native files, fetch responses, blobs, Node.js filesystem read
|
|
121
125
|
* streams, async byte sources, web readable streams, and files created with
|
|
122
126
|
* {@link toStreamingFile}. Use {@link toFile} to materialize compatible content
|
|
123
127
|
* as a native `File` when buffering the complete upload is acceptable.
|
|
@@ -152,7 +156,7 @@ export function makeFile(
|
|
|
152
156
|
*
|
|
153
157
|
* Directory components separated by either `/` or `\\` are discarded unless an
|
|
154
158
|
* explicitly supplied `name` or `filename` opts into preserving its path. Preserved
|
|
155
|
-
* paths use forward slashes. Paths inferred from URLs and filesystem streams
|
|
159
|
+
* paths must be safe and relative, and use forward slashes. Paths inferred from URLs and filesystem streams
|
|
156
160
|
* discard their directories.
|
|
157
161
|
*/
|
|
158
162
|
export function getName(value: any, options?: { stripFilename?: boolean | undefined }): string | undefined {
|
|
@@ -160,9 +164,9 @@ export function getName(value: any, options?: { stripFilename?: boolean | undefi
|
|
|
160
164
|
return undefined;
|
|
161
165
|
}
|
|
162
166
|
|
|
167
|
+
const name = 'name' in value ? value.name : undefined;
|
|
163
168
|
const explicitName =
|
|
164
|
-
(
|
|
165
|
-
('filename' in value && value.filename && String(value.filename));
|
|
169
|
+
(name && String(name)) || ('filename' in value && value.filename && String(value.filename));
|
|
166
170
|
if (explicitName) {
|
|
167
171
|
return options?.stripFilename === false ? normalizeFilenamePath(explicitName) : basename(explicitName);
|
|
168
172
|
}
|
|
@@ -185,7 +189,11 @@ function basename(value: string): string | undefined {
|
|
|
185
189
|
}
|
|
186
190
|
|
|
187
191
|
function normalizeFilenamePath(value: string): string {
|
|
188
|
-
|
|
192
|
+
const normalized = value.replace(/\\/g, '/');
|
|
193
|
+
if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized) || normalized.split('/').includes('..')) {
|
|
194
|
+
throw new TypeError('Upload file name must be a safe relative path without parent directory segments');
|
|
195
|
+
}
|
|
196
|
+
return normalized;
|
|
189
197
|
}
|
|
190
198
|
|
|
191
199
|
/** Identifies objects that expose a callable `Symbol.asyncIterator` method. */
|
|
@@ -195,7 +203,7 @@ export const isAsyncIterable = (value: any): value is AsyncIterable<any> =>
|
|
|
195
203
|
/**
|
|
196
204
|
* Converts a request to multipart form data when its body contains an upload.
|
|
197
205
|
*
|
|
198
|
-
* Uploads include files,
|
|
206
|
+
* Uploads include files, blobs, responses, async iterables, readable
|
|
199
207
|
* streams, and {@link StreamingFile} values anywhere in a nested body. Bodies
|
|
200
208
|
* containing streaming values are encoded lazily; other uploads use `FormData`.
|
|
201
209
|
* Requests without uploads are returned unchanged.
|
|
@@ -287,7 +295,7 @@ export type CreateFormOptions = {
|
|
|
287
295
|
/**
|
|
288
296
|
* Materializes an object into platform `FormData` after verifying fetch support.
|
|
289
297
|
*
|
|
290
|
-
* Strings, numbers, and booleans become text fields; responses,
|
|
298
|
+
* Strings, numbers, and booleans become text fields; responses, blobs,
|
|
291
299
|
* and async byte sources become file fields. Arrays and nested objects use
|
|
292
300
|
* bracketed field names, while `undefined` values are omitted.
|
|
293
301
|
*
|
|
@@ -311,9 +319,8 @@ export const createForm = async <T = Record<string, unknown>>(
|
|
|
311
319
|
return form;
|
|
312
320
|
};
|
|
313
321
|
|
|
314
|
-
//
|
|
315
|
-
|
|
316
|
-
const isNamedBlob = (value: unknown): value is NamedBlob => value instanceof Blob && 'name' in value;
|
|
322
|
+
// Native files, Bun files, and unnamed upload values all inherit from Blob.
|
|
323
|
+
const isBlob = (value: unknown): value is Blob => value instanceof Blob;
|
|
317
324
|
|
|
318
325
|
const isReadableStream = (value: unknown): value is ReadableStream<BlobPart> =>
|
|
319
326
|
typeof value === 'object' &&
|
|
@@ -331,7 +338,7 @@ const isUploadable = (value: unknown): value is Uploadable =>
|
|
|
331
338
|
isAsyncIterable(value) ||
|
|
332
339
|
isReadableStream(value) ||
|
|
333
340
|
isStreamingFile(value) ||
|
|
334
|
-
|
|
341
|
+
isBlob(value));
|
|
335
342
|
|
|
336
343
|
const hasStreamingUploadableValue = (value: unknown): boolean => {
|
|
337
344
|
if (isStreamingFile(value) || isAsyncIterable(value) || isReadableStream(value)) {
|
|
@@ -340,7 +347,7 @@ const hasStreamingUploadableValue = (value: unknown): boolean => {
|
|
|
340
347
|
if (Array.isArray(value)) {
|
|
341
348
|
return value.some(hasStreamingUploadableValue);
|
|
342
349
|
}
|
|
343
|
-
if (value && typeof value === 'object' && !
|
|
350
|
+
if (value && typeof value === 'object' && !isBlob(value) && !(value instanceof Response)) {
|
|
344
351
|
for (const k in value) {
|
|
345
352
|
if (hasStreamingUploadableValue((value as Record<string, unknown>)[k])) {
|
|
346
353
|
return true;
|
|
@@ -369,12 +376,34 @@ const hasUploadableValue = (value: unknown): boolean => {
|
|
|
369
376
|
|
|
370
377
|
type FormEntry = { key: string; value: unknown };
|
|
371
378
|
|
|
379
|
+
const snapshotPreservedUploadEntries = (
|
|
380
|
+
entries: Iterable<FormEntry>,
|
|
381
|
+
filenames: WeakMap<object, string>,
|
|
382
|
+
): FormEntry[] => {
|
|
383
|
+
const snapshot: FormEntry[] = [];
|
|
384
|
+
for (const entry of entries) {
|
|
385
|
+
if (isUploadable(entry.value) && !filenames.has(entry.value)) {
|
|
386
|
+
filenames.set(entry.value, getStreamingFileName(entry.value, { stripFilenames: false }));
|
|
387
|
+
}
|
|
388
|
+
snapshot.push(entry);
|
|
389
|
+
}
|
|
390
|
+
return snapshot;
|
|
391
|
+
};
|
|
392
|
+
|
|
372
393
|
const createStreamingFormRequestOptions = (
|
|
373
394
|
opts: RequestOptions,
|
|
374
395
|
options: CreateFormOptions = {},
|
|
375
396
|
): RequestOptions => {
|
|
397
|
+
const entries = iterateFormEntries(opts.body);
|
|
398
|
+
const preservedFilenames = options.stripFilenames === false ? new WeakMap<object, string>() : undefined;
|
|
399
|
+
const multipartEntries = preservedFilenames
|
|
400
|
+
? snapshotPreservedUploadEntries(entries, preservedFilenames)
|
|
401
|
+
: entries;
|
|
402
|
+
|
|
376
403
|
const boundary = `openai-${Math.random().toString(36).slice(2)}`;
|
|
377
|
-
const body = ReadableStreamFrom(
|
|
404
|
+
const body = ReadableStreamFrom(
|
|
405
|
+
iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames),
|
|
406
|
+
);
|
|
378
407
|
|
|
379
408
|
return {
|
|
380
409
|
...opts,
|
|
@@ -384,13 +413,14 @@ const createStreamingFormRequestOptions = (
|
|
|
384
413
|
};
|
|
385
414
|
|
|
386
415
|
async function* iterateMultipartBody(
|
|
387
|
-
|
|
416
|
+
entries: Iterable<FormEntry>,
|
|
388
417
|
boundary: string,
|
|
389
418
|
options: CreateFormOptions,
|
|
419
|
+
preservedFilenames?: WeakMap<object, string>,
|
|
390
420
|
): AsyncGenerator<Uint8Array> {
|
|
391
|
-
for await (const { key, value } of
|
|
421
|
+
for await (const { key, value } of entries) {
|
|
392
422
|
if (isUploadable(value)) {
|
|
393
|
-
const filename = getStreamingFileName(value, options);
|
|
423
|
+
const filename = preservedFilenames?.get(value) ?? getStreamingFileName(value, options);
|
|
394
424
|
const type = getStreamingFileType(value);
|
|
395
425
|
yield encodeUTF8(`--${boundary}\r\n`);
|
|
396
426
|
yield encodeUTF8(
|
|
@@ -410,7 +440,7 @@ async function* iterateMultipartBody(
|
|
|
410
440
|
yield encodeUTF8(`--${boundary}--\r\n`);
|
|
411
441
|
}
|
|
412
442
|
|
|
413
|
-
|
|
443
|
+
function* iterateFormEntries(body: unknown): Generator<FormEntry> {
|
|
414
444
|
if (!body || typeof body !== 'object') {
|
|
415
445
|
return;
|
|
416
446
|
}
|
|
@@ -420,7 +450,7 @@ async function* iterateFormEntries(body: unknown): AsyncGenerator<FormEntry> {
|
|
|
420
450
|
}
|
|
421
451
|
}
|
|
422
452
|
|
|
423
|
-
|
|
453
|
+
function* iterateFormValue(key: string, value: unknown): Generator<FormEntry> {
|
|
424
454
|
if (value === undefined) {
|
|
425
455
|
return;
|
|
426
456
|
}
|
|
@@ -459,7 +489,9 @@ function getStreamingFileName(value: Uploadable, options: CreateFormOptions): st
|
|
|
459
489
|
throw new TypeError('Streaming upload file name must be a non-empty string');
|
|
460
490
|
}
|
|
461
491
|
|
|
462
|
-
return options.stripFilenames === false
|
|
492
|
+
return options.stripFilenames === false
|
|
493
|
+
? normalizeFilenamePath(name)
|
|
494
|
+
: (basename(name) ?? 'unknown_file');
|
|
463
495
|
}
|
|
464
496
|
|
|
465
497
|
return getName(value, { stripFilename: options.stripFilenames }) ?? 'unknown_file';
|
|
@@ -468,7 +500,7 @@ function getStreamingFileName(value: Uploadable, options: CreateFormOptions): st
|
|
|
468
500
|
function getStreamingFileType(value: Uploadable): string {
|
|
469
501
|
let type: string | undefined;
|
|
470
502
|
|
|
471
|
-
if (isStreamingFile(value) ||
|
|
503
|
+
if (isStreamingFile(value) || isBlob(value)) {
|
|
472
504
|
({ type } = value);
|
|
473
505
|
} else if (value instanceof Response) {
|
|
474
506
|
type = value.headers.get('content-type') ?? undefined;
|
|
@@ -555,9 +587,10 @@ const addFormValue = async (
|
|
|
555
587
|
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
556
588
|
form.append(key, String(value));
|
|
557
589
|
} else if (value instanceof Response) {
|
|
590
|
+
const blob = await value.blob();
|
|
558
591
|
form.append(
|
|
559
592
|
key,
|
|
560
|
-
makeFile([
|
|
593
|
+
makeFile([blob], getName(value, { stripFilename: options.stripFilenames }), { type: blob.type }),
|
|
561
594
|
);
|
|
562
595
|
} else if (isAsyncIterable(value)) {
|
|
563
596
|
form.append(
|
|
@@ -567,10 +600,32 @@ const addFormValue = async (
|
|
|
567
600
|
getName(value, { stripFilename: options.stripFilenames }),
|
|
568
601
|
),
|
|
569
602
|
);
|
|
570
|
-
} else if (
|
|
571
|
-
|
|
603
|
+
} else if (isBlob(value)) {
|
|
604
|
+
const filename = getName(value, { stripFilename: options.stripFilenames });
|
|
605
|
+
if (filename === undefined) {
|
|
606
|
+
form.append(key, value);
|
|
607
|
+
} else {
|
|
608
|
+
form.append(key, value, filename);
|
|
609
|
+
}
|
|
572
610
|
} else if (Array.isArray(value)) {
|
|
573
|
-
|
|
611
|
+
// Prepare array elements concurrently, then preserve their repeated-field order.
|
|
612
|
+
const entries = await Promise.all(
|
|
613
|
+
value.map(async (entry) => {
|
|
614
|
+
const entryForm = new FormData();
|
|
615
|
+
await addFormValue(entryForm, key + '[]', entry, options);
|
|
616
|
+
return entryForm;
|
|
617
|
+
}),
|
|
618
|
+
);
|
|
619
|
+
|
|
620
|
+
for (const entryForm of entries) {
|
|
621
|
+
if (!entryForm) {
|
|
622
|
+
continue;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
for (const [entryKey, entryValue] of entryForm.entries()) {
|
|
626
|
+
form.append(entryKey, entryValue);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
574
629
|
} else if (typeof value === 'object') {
|
|
575
630
|
await Promise.all(
|
|
576
631
|
Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, options)),
|
|
@@ -6,11 +6,15 @@
|
|
|
6
6
|
* Will return undefined if the environment variable doesn't exist or cannot be accessed.
|
|
7
7
|
*/
|
|
8
8
|
export const readEnv = (env: string): string | undefined => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
try {
|
|
10
|
+
if (typeof (globalThis as any).process !== 'undefined') {
|
|
11
|
+
return (globalThis as any).process.env?.[env]?.trim() || undefined;
|
|
12
|
+
}
|
|
13
|
+
if (typeof (globalThis as any).Deno !== 'undefined') {
|
|
14
|
+
return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;
|
|
15
|
+
}
|
|
16
|
+
} catch {
|
|
17
|
+
return undefined;
|
|
14
18
|
}
|
|
15
19
|
return undefined;
|
|
16
20
|
};
|
package/src/internal/ws.ts
CHANGED
|
@@ -44,13 +44,34 @@ interface CredentialedWebSocketOptions {
|
|
|
44
44
|
headers?: object | null | undefined;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
const REDIRECT_SAFE_WEBSOCKET_HEADERS = new Set([
|
|
48
|
+
'connection',
|
|
49
|
+
'host',
|
|
50
|
+
'openai-beta',
|
|
51
|
+
'origin',
|
|
52
|
+
'sec-websocket-extensions',
|
|
53
|
+
'sec-websocket-key',
|
|
54
|
+
'sec-websocket-version',
|
|
55
|
+
'upgrade',
|
|
56
|
+
'user-agent',
|
|
57
|
+
'x-access-level',
|
|
58
|
+
'x-auth-metadata',
|
|
59
|
+
'x-auth-tokenization',
|
|
60
|
+
'x-authentication-metadata',
|
|
61
|
+
'x-authentication-tokenization',
|
|
62
|
+
'x-security-policy',
|
|
63
|
+
'x-token-budget',
|
|
64
|
+
'x-trace-id',
|
|
65
|
+
]);
|
|
66
|
+
|
|
47
67
|
/** Prevents WebSocket redirects from forwarding caller or SDK credentials to another origin. */
|
|
48
68
|
export function protectWebSocketOptionsFromCredentialRedirects<Options extends CredentialedWebSocketOptions>(
|
|
49
69
|
options: Options,
|
|
50
70
|
): Options {
|
|
51
|
-
const hasSensitiveHeader = Object.keys(options.headers ?? {}).some(
|
|
52
|
-
|
|
53
|
-
|
|
71
|
+
const hasSensitiveHeader = Object.keys(options.headers ?? {}).some((name) => {
|
|
72
|
+
const normalized = name.toLowerCase().split('_').join('-');
|
|
73
|
+
return !REDIRECT_SAFE_WEBSOCKET_HEADERS.has(normalized);
|
|
74
|
+
});
|
|
54
75
|
|
|
55
76
|
if (!options.auth && !hasSensitiveHeader) {
|
|
56
77
|
return options;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OpenAIError } from '../error';
|
|
1
|
+
import { APIUserAbortError, OpenAIError } from '../error';
|
|
2
2
|
import type OpenAI from '../index';
|
|
3
3
|
import type { RequestOptions } from '../internal/request-options';
|
|
4
4
|
import { uuid4 } from '../internal/utils/uuid';
|
|
@@ -127,6 +127,7 @@ export class AbstractChatCompletionRunner<
|
|
|
127
127
|
ParsedT,
|
|
128
128
|
> extends EventStream<EventTypes> {
|
|
129
129
|
protected _chatCompletions: ParsedChatCompletion<ParsedT>[] = [];
|
|
130
|
+
#completionArrivedBeforeAbort = false;
|
|
130
131
|
/** Mutable conversation history, including initial input, assistant replies, and tool results. */
|
|
131
132
|
messages: ChatCompletionMessageParam[] = [];
|
|
132
133
|
|
|
@@ -134,6 +135,7 @@ export class AbstractChatCompletionRunner<
|
|
|
134
135
|
this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,
|
|
135
136
|
chatCompletion: ParsedChatCompletion<ParsedT>,
|
|
136
137
|
): ParsedChatCompletion<ParsedT> {
|
|
138
|
+
this.#completionArrivedBeforeAbort = !this.controller.signal.aborted;
|
|
137
139
|
normalizeToolCallIds(chatCompletion);
|
|
138
140
|
this._chatCompletions.push(chatCompletion);
|
|
139
141
|
this._emit('chatCompletion', chatCompletion);
|
|
@@ -439,7 +441,11 @@ export class AbstractChatCompletionRunner<
|
|
|
439
441
|
functionCalled: boolean;
|
|
440
442
|
};
|
|
441
443
|
|
|
444
|
+
let allowBufferedToolCall = false;
|
|
445
|
+
|
|
442
446
|
const runToolCall = async (toolCall: ChatCompletionMessageToolCall): Promise<ToolCallResult> => {
|
|
447
|
+
const bufferedToolCall = allowBufferedToolCall;
|
|
448
|
+
allowBufferedToolCall = false;
|
|
443
449
|
if (toolCall.type !== 'function') {
|
|
444
450
|
return { message: undefined, functionCalled: false };
|
|
445
451
|
}
|
|
@@ -472,11 +478,20 @@ export class AbstractChatCompletionRunner<
|
|
|
472
478
|
try {
|
|
473
479
|
parsed = await fn.parse(args);
|
|
474
480
|
} catch (error) {
|
|
481
|
+
if (this.controller.signal.aborted) {
|
|
482
|
+
throw new APIUserAbortError();
|
|
483
|
+
}
|
|
475
484
|
const content = error instanceof Error ? error.message : String(error);
|
|
476
485
|
return { message: { role, tool_call_id, content }, functionCalled: false };
|
|
477
486
|
}
|
|
487
|
+
if (this.controller.signal.aborted) {
|
|
488
|
+
throw new APIUserAbortError();
|
|
489
|
+
}
|
|
478
490
|
rawContent = await fn.function(parsed, runner, toolContext);
|
|
479
491
|
} else {
|
|
492
|
+
if (this.controller.signal.aborted && !bufferedToolCall) {
|
|
493
|
+
throw new APIUserAbortError();
|
|
494
|
+
}
|
|
480
495
|
rawContent = await fn.function(args, runner, toolContext);
|
|
481
496
|
}
|
|
482
497
|
|
|
@@ -495,6 +510,10 @@ export class AbstractChatCompletionRunner<
|
|
|
495
510
|
},
|
|
496
511
|
options,
|
|
497
512
|
);
|
|
513
|
+
// A completed buffered turn retains its first immediate callback for
|
|
514
|
+
// compatibility; delayed parsed callbacks never inherit this exception.
|
|
515
|
+
allowBufferedToolCall = this.controller.signal.aborted && this.#completionArrivedBeforeAbort;
|
|
516
|
+
|
|
498
517
|
const message = chatCompletion.choices[0]?.message;
|
|
499
518
|
if (!message) {
|
|
500
519
|
throw new OpenAIError(`missing message in ChatCompletion response`);
|
|
@@ -510,6 +529,9 @@ export class AbstractChatCompletionRunner<
|
|
|
510
529
|
if (result.message) {
|
|
511
530
|
this._addMessage(result.message);
|
|
512
531
|
}
|
|
532
|
+
if (this.controller.signal.aborted) {
|
|
533
|
+
throw new APIUserAbortError();
|
|
534
|
+
}
|
|
513
535
|
|
|
514
536
|
if (singleFunctionToCall && result.functionCalled) {
|
|
515
537
|
await afterCompletion?.(chatCompletion, runner);
|
|
@@ -519,11 +541,13 @@ export class AbstractChatCompletionRunner<
|
|
|
519
541
|
} else {
|
|
520
542
|
const results = await Promise.allSettled(message.tool_calls.map(runToolCall));
|
|
521
543
|
|
|
522
|
-
// Wait for
|
|
523
|
-
//
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
544
|
+
// Wait for all side effects. Ordinary failures retain their existing
|
|
545
|
+
// behavior; cancellation preserves every callback that already finished.
|
|
546
|
+
if (!this.controller.signal.aborted) {
|
|
547
|
+
for (const result of results) {
|
|
548
|
+
if (result.status === 'rejected') {
|
|
549
|
+
throw result.reason;
|
|
550
|
+
}
|
|
527
551
|
}
|
|
528
552
|
}
|
|
529
553
|
|
|
@@ -534,6 +558,9 @@ export class AbstractChatCompletionRunner<
|
|
|
534
558
|
this._addMessage(result.value.message);
|
|
535
559
|
}
|
|
536
560
|
}
|
|
561
|
+
if (this.controller.signal.aborted) {
|
|
562
|
+
throw new APIUserAbortError();
|
|
563
|
+
}
|
|
537
564
|
}
|
|
538
565
|
|
|
539
566
|
await afterCompletion?.(chatCompletion, runner);
|