openai 7.5.0 → 7.7.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 +117 -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 +216 -26
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +216 -26
- 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 +17 -20
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +17 -20
- 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 +17 -20
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +17 -20
- 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 +226 -30
- 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 +19 -22
- 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 +19 -22
- 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
|
@@ -264,7 +264,10 @@ function parseToolCall<Params extends ResponseCreateParamsBase>(
|
|
|
264
264
|
if (isAutoParsableTool(inputTool)) {
|
|
265
265
|
parsedArguments = inputTool.$parseRaw(toolCall.arguments);
|
|
266
266
|
} else if (inputTool?.strict) {
|
|
267
|
-
parsedArguments =
|
|
267
|
+
parsedArguments = parseResponseFormatContent(
|
|
268
|
+
{ type: 'json_schema', $parseRaw: undefined },
|
|
269
|
+
toolCall.arguments,
|
|
270
|
+
);
|
|
268
271
|
}
|
|
269
272
|
|
|
270
273
|
return {
|
package/src/lib/Util.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Like `Promise.allSettled()` but throws an error if any promises are rejected.
|
|
3
|
+
* Rejection reasons remain available on the thrown error's non-enumerable `rejections`
|
|
4
|
+
* property without being written to the global console.
|
|
3
5
|
*/
|
|
4
6
|
export const allSettledWithThrow = async <R>(promises: Promise<R>[]): Promise<R[]> => {
|
|
5
7
|
const results = await Promise.allSettled(promises);
|
|
6
8
|
const rejected = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');
|
|
7
9
|
if (rejected.length) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
throw Object.defineProperty(new Error(`${rejected.length} promise(s) failed`), 'rejections', {
|
|
11
|
+
configurable: true,
|
|
12
|
+
value: rejected.map(({ reason }) => reason),
|
|
13
|
+
writable: true,
|
|
14
|
+
});
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
// Note: TS was complaining about using `.filter().map()` here for some reason
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RequestOptions } from '../internal/request-options';
|
|
2
|
+
import type { Run, RunRetrieveParams, Runs } from '../resources/beta/threads/runs/runs';
|
|
3
|
+
import { pollWithResponse } from './polling';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Polls an assistant run through the resource's retrieve method, preserving the
|
|
7
|
+
* original params object, request-header merge, and terminal run states.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function pollAssistantRun(
|
|
12
|
+
resource: Pick<Runs, 'retrieve'>,
|
|
13
|
+
runID: string,
|
|
14
|
+
params: RunRetrieveParams,
|
|
15
|
+
options?: RequestOptions & { pollIntervalMs?: number },
|
|
16
|
+
): Promise<Run> {
|
|
17
|
+
return pollWithResponse(
|
|
18
|
+
(headers) =>
|
|
19
|
+
resource.retrieve(runID, params, {
|
|
20
|
+
...options,
|
|
21
|
+
headers: { ...options?.headers, ...headers },
|
|
22
|
+
}),
|
|
23
|
+
['queued', 'in_progress', 'cancelling'],
|
|
24
|
+
['requires_action', 'incomplete', 'cancelled', 'completed', 'failed', 'expired'],
|
|
25
|
+
options,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { OpenAI } from '../client';
|
|
2
|
+
import type { APIPromise } from '../core/api-promise';
|
|
3
|
+
import type { RequestOptions } from '../internal/request-options';
|
|
4
|
+
import { loggerFor, toFloat32Array } from '../internal/utils';
|
|
5
|
+
import type { CreateEmbeddingResponse, Embedding, EmbeddingCreateParams } from '../resources/embeddings';
|
|
6
|
+
|
|
7
|
+
type Base64EmbeddingResponse = Omit<CreateEmbeddingResponse, 'data'> & {
|
|
8
|
+
data: (Omit<Embedding, 'embedding'> & { embedding: string })[];
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Sends the optimized embeddings request while preserving explicit encodings and
|
|
13
|
+
* the original APIPromise response accessors.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export function createEmbedding(
|
|
18
|
+
client: OpenAI,
|
|
19
|
+
body: EmbeddingCreateParams,
|
|
20
|
+
options?: RequestOptions,
|
|
21
|
+
): APIPromise<CreateEmbeddingResponse | Base64EmbeddingResponse> {
|
|
22
|
+
const hasUserProvidedEncodingFormat = !!body.encoding_format;
|
|
23
|
+
// No encoding_format specified, defaulting to base64 for performance reasons.
|
|
24
|
+
// See https://github.com/openai/openai-node/pull/1312.
|
|
25
|
+
const encodingFormat = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';
|
|
26
|
+
|
|
27
|
+
if (hasUserProvidedEncodingFormat) {
|
|
28
|
+
loggerFor(client).debug('embeddings/user defined encoding_format:', body.encoding_format);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const response: APIPromise<CreateEmbeddingResponse> = client.post('/embeddings', {
|
|
32
|
+
body: {
|
|
33
|
+
...body,
|
|
34
|
+
encoding_format: encodingFormat,
|
|
35
|
+
},
|
|
36
|
+
...options,
|
|
37
|
+
__security: { bearerAuth: true },
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Explicit encodings return the original response promise unchanged.
|
|
41
|
+
if (hasUserProvidedEncodingFormat) {
|
|
42
|
+
return response;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The default request uses base64 on the wire, but returns the API's default
|
|
46
|
+
// numeric embedding representation to the caller.
|
|
47
|
+
loggerFor(client).debug('embeddings/decoding base64 embeddings from base64');
|
|
48
|
+
|
|
49
|
+
return response._thenUnwrap((data) => {
|
|
50
|
+
if (data && data.data) {
|
|
51
|
+
const embeddings = data.data;
|
|
52
|
+
const { length } = embeddings;
|
|
53
|
+
// Preserve the original iteration length and skip sparse-array holes.
|
|
54
|
+
for (let index = 0; index < length; index += 1) {
|
|
55
|
+
if (index in embeddings) {
|
|
56
|
+
const embeddingBase64Obj = embeddings[index] as Embedding;
|
|
57
|
+
const embeddingBase64Str = embeddingBase64Obj.embedding as unknown as string;
|
|
58
|
+
embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return data;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { APIConnectionTimeoutError } from '../error';
|
|
2
|
+
import { sleep } from '../internal/utils/sleep';
|
|
3
|
+
import type { FileObject, Files } from '../resources/files';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Waits for file processing through the resource's retrieve method. The timeout
|
|
7
|
+
* is checked after each subsequent retrieval, preserving the existing behavior
|
|
8
|
+
* for an initially terminal file and for a terminal response received too late.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export async function waitForFileProcessing(
|
|
13
|
+
resource: Pick<Files, 'retrieve'>,
|
|
14
|
+
id: string,
|
|
15
|
+
pollInterval: number,
|
|
16
|
+
maxWait: number,
|
|
17
|
+
): Promise<FileObject> {
|
|
18
|
+
const terminalStates = new Set(['processed', 'error', 'deleted']);
|
|
19
|
+
const start = Date.now();
|
|
20
|
+
let file = await resource.retrieve(id);
|
|
21
|
+
|
|
22
|
+
while (!file.status || !terminalStates.has(file.status)) {
|
|
23
|
+
// oxlint-disable-next-line no-await-in-loop -- Wait before issuing the next processing-status request.
|
|
24
|
+
await sleep(pollInterval);
|
|
25
|
+
|
|
26
|
+
// oxlint-disable-next-line no-await-in-loop -- The timeout and next iteration depend on this response.
|
|
27
|
+
file = await resource.retrieve(id);
|
|
28
|
+
if (Date.now() - start > maxWait) {
|
|
29
|
+
throw new APIConnectionTimeoutError({
|
|
30
|
+
message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return file;
|
|
36
|
+
}
|
package/src/lib/parser.ts
CHANGED
|
@@ -75,7 +75,10 @@ export function makeParseableResponseFormat<ParsedT>(
|
|
|
75
75
|
response_format: ResponseFormatJSONSchema,
|
|
76
76
|
parser: (content: string) => ParsedT,
|
|
77
77
|
): AutoParseableResponseFormat<ParsedT> {
|
|
78
|
-
const obj = { ...response_format };
|
|
78
|
+
const obj = { ...response_format, type: 'json_schema' as const };
|
|
79
|
+
obj.json_schema = { ...obj.json_schema };
|
|
80
|
+
delete (obj as { toJSON?: unknown }).toJSON;
|
|
81
|
+
delete (obj.json_schema as { toJSON?: unknown }).toJSON;
|
|
79
82
|
|
|
80
83
|
Object.defineProperties(obj, {
|
|
81
84
|
$brand: {
|
|
@@ -107,7 +110,8 @@ export function makeParseableTextFormat<ParsedT>(
|
|
|
107
110
|
response_format: ResponseFormatTextJSONSchemaConfig,
|
|
108
111
|
parser: (content: string) => ParsedT,
|
|
109
112
|
): AutoParseableTextFormat<ParsedT> {
|
|
110
|
-
const obj = { ...response_format };
|
|
113
|
+
const obj = { ...response_format, type: 'json_schema' as const };
|
|
114
|
+
delete (obj as { toJSON?: unknown }).toJSON;
|
|
111
115
|
|
|
112
116
|
Object.defineProperties(obj, {
|
|
113
117
|
$brand: {
|
|
@@ -169,7 +173,15 @@ export function parseResponseFormatContent<ParsedT>(format: unknown, content: st
|
|
|
169
173
|
return format.$parseRaw(content) as ParsedT;
|
|
170
174
|
}
|
|
171
175
|
|
|
172
|
-
|
|
176
|
+
try {
|
|
177
|
+
return JSON.parse(content) as ParsedT;
|
|
178
|
+
} catch (error) {
|
|
179
|
+
if (error instanceof SyntaxError) {
|
|
180
|
+
throw new SyntaxError('Error reading response: invalid structured output JSON.');
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
173
185
|
}
|
|
174
186
|
|
|
175
187
|
/** Type-level details used to infer a chat function tool's parser and execution callback. */
|
|
@@ -344,7 +356,10 @@ function parseToolCall<Params extends ChatCompletionCreateParams>(
|
|
|
344
356
|
if (isAutoParsableTool(inputTool)) {
|
|
345
357
|
parsedArguments = inputTool.$parseRaw(toolCall.function.arguments);
|
|
346
358
|
} else if (inputTool?.function.strict) {
|
|
347
|
-
parsedArguments =
|
|
359
|
+
parsedArguments = parseResponseFormatContent(
|
|
360
|
+
{ type: 'json_schema', $parseRaw: undefined },
|
|
361
|
+
toolCall.function.arguments,
|
|
362
|
+
);
|
|
348
363
|
}
|
|
349
364
|
|
|
350
365
|
return {
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { APIPromise } from '../core/api-promise';
|
|
2
|
+
import { APIUserAbortError } from '../core/error';
|
|
3
|
+
import { buildHeaders } from '../internal/headers';
|
|
4
|
+
import type { NullableHeaders } from '../internal/headers';
|
|
5
|
+
import type { RequestOptions } from '../internal/request-options';
|
|
6
|
+
import { sleep } from '../internal/utils/sleep';
|
|
7
|
+
|
|
8
|
+
type PollOptions = RequestOptions & { pollIntervalMs?: number };
|
|
9
|
+
|
|
10
|
+
function sleepUntilAborted(milliseconds: number, signal: AbortSignal): Promise<void> {
|
|
11
|
+
// oxlint-disable-next-line promise/avoid-new -- Timer and abort callbacks need a portable Promise bridge.
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
14
|
+
let registered: (() => void) | undefined;
|
|
15
|
+
let settled = false;
|
|
16
|
+
|
|
17
|
+
const removeAbortListener = (listener: () => void) => {
|
|
18
|
+
try {
|
|
19
|
+
signal.removeEventListener('abort', listener);
|
|
20
|
+
} catch {
|
|
21
|
+
// Caller-controlled cleanup must never prevent the polling promise from settling.
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const cleanup = () => {
|
|
26
|
+
if (timer !== undefined) {
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
timer = undefined;
|
|
29
|
+
}
|
|
30
|
+
if (registered) {
|
|
31
|
+
const listener = registered;
|
|
32
|
+
registered = undefined;
|
|
33
|
+
removeAbortListener(listener);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const abort = () => {
|
|
38
|
+
if (settled) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
settled = true;
|
|
42
|
+
cleanup();
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const error = new APIUserAbortError();
|
|
46
|
+
Object.defineProperty(error, 'cause', {
|
|
47
|
+
value: signal.reason,
|
|
48
|
+
writable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
});
|
|
51
|
+
reject(error);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
reject(error);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
if (signal.aborted) {
|
|
58
|
+
abort();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
timer = setTimeout(() => {
|
|
63
|
+
if (settled) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
settled = true;
|
|
67
|
+
cleanup();
|
|
68
|
+
resolve();
|
|
69
|
+
}, milliseconds);
|
|
70
|
+
|
|
71
|
+
registered = abort;
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
75
|
+
|
|
76
|
+
if (settled) {
|
|
77
|
+
removeAbortListener(abort);
|
|
78
|
+
} else if (signal.aborted) {
|
|
79
|
+
abort();
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
if (settled) {
|
|
83
|
+
removeAbortListener(abort);
|
|
84
|
+
} else {
|
|
85
|
+
settled = true;
|
|
86
|
+
cleanup();
|
|
87
|
+
reject(error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Repeatedly retrieves a lifecycle resource using the existing polling-helper
|
|
95
|
+
* headers. Intermediate states wait for the explicit interval, server interval,
|
|
96
|
+
* or five-second default; terminal states return the same parsed object.
|
|
97
|
+
* The caller's signal interrupts intermediate waits, unknown states retry
|
|
98
|
+
* immediately, and retrieval errors propagate unchanged.
|
|
99
|
+
*
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
export async function pollWithResponse<T extends { status: string }>(
|
|
103
|
+
retrieve: (headers: NullableHeaders) => APIPromise<T>,
|
|
104
|
+
intermediateStatuses: readonly T['status'][],
|
|
105
|
+
terminalStatuses: readonly T['status'][],
|
|
106
|
+
options?: PollOptions,
|
|
107
|
+
): Promise<T> {
|
|
108
|
+
const headers = buildHeaders([
|
|
109
|
+
options?.headers,
|
|
110
|
+
{
|
|
111
|
+
'X-Stainless-Poll-Helper': 'true',
|
|
112
|
+
'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
|
|
116
|
+
while (true) {
|
|
117
|
+
// oxlint-disable-next-line no-await-in-loop -- Each poll depends on the previous response.
|
|
118
|
+
const { data, response } = await retrieve(headers).withResponse();
|
|
119
|
+
const { status } = data;
|
|
120
|
+
|
|
121
|
+
if (intermediateStatuses.includes(status)) {
|
|
122
|
+
let sleepInterval = 5000;
|
|
123
|
+
|
|
124
|
+
if (options?.pollIntervalMs) {
|
|
125
|
+
sleepInterval = options.pollIntervalMs;
|
|
126
|
+
} else {
|
|
127
|
+
const headerInterval = response.headers.get('openai-poll-after-ms');
|
|
128
|
+
if (headerInterval) {
|
|
129
|
+
// oxlint-disable-next-line radix -- Preserve the existing decimal and hexadecimal header parsing.
|
|
130
|
+
const headerIntervalMs = Number.parseInt(headerInterval);
|
|
131
|
+
if (!Number.isNaN(headerIntervalMs)) {
|
|
132
|
+
sleepInterval = headerIntervalMs;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const signal =
|
|
137
|
+
options && Object.prototype.propertyIsEnumerable.call(options, 'signal') ? options.signal : undefined;
|
|
138
|
+
// oxlint-disable-next-line no-await-in-loop -- Each poll waits or aborts before the next request.
|
|
139
|
+
await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep(sleepInterval));
|
|
140
|
+
} else if (terminalStatuses.includes(status)) {
|
|
141
|
+
return data;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -154,51 +154,63 @@ export class ResponseStream<ParsedT = null>
|
|
|
154
154
|
throw new APIError(undefined, error, event.message, undefined);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
let dispatchEvent: ResponseStreamEvent = event;
|
|
157
158
|
const response = accumulateResponseWithContext(
|
|
158
159
|
event,
|
|
159
160
|
this.#currentResponseSnapshot,
|
|
160
161
|
this.#accumulatorContext,
|
|
162
|
+
true,
|
|
163
|
+
(sanitizedEvent) => {
|
|
164
|
+
dispatchEvent = sanitizedEvent;
|
|
165
|
+
},
|
|
161
166
|
);
|
|
162
167
|
this.#currentResponseSnapshot = response;
|
|
163
168
|
maybeEmit('event', event);
|
|
164
169
|
|
|
165
|
-
switch (
|
|
170
|
+
switch (dispatchEvent.type) {
|
|
166
171
|
case 'response.output_text.delta': {
|
|
167
|
-
const output = response.output[
|
|
172
|
+
const output = response.output[dispatchEvent.output_index];
|
|
168
173
|
if (!output) {
|
|
169
|
-
throw new OpenAIError(`missing output at index ${
|
|
174
|
+
throw new OpenAIError(`missing output at index ${dispatchEvent.output_index}`);
|
|
170
175
|
}
|
|
171
176
|
if (output.type === 'message') {
|
|
172
|
-
const content = output.content[
|
|
177
|
+
const content = output.content[dispatchEvent.content_index];
|
|
173
178
|
if (!content) {
|
|
174
|
-
throw new OpenAIError(`missing content at index ${
|
|
179
|
+
throw new OpenAIError(`missing content at index ${dispatchEvent.content_index}`);
|
|
175
180
|
}
|
|
176
181
|
if (content.type !== 'output_text') {
|
|
177
182
|
throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);
|
|
178
183
|
}
|
|
179
184
|
|
|
180
185
|
maybeEmit('response.output_text.delta', {
|
|
181
|
-
...
|
|
186
|
+
...dispatchEvent,
|
|
187
|
+
type: dispatchEvent.type,
|
|
188
|
+
item_id: dispatchEvent.item_id,
|
|
189
|
+
output_index: dispatchEvent.output_index,
|
|
190
|
+
content_index: dispatchEvent.content_index,
|
|
182
191
|
snapshot: content.text,
|
|
183
192
|
});
|
|
184
193
|
}
|
|
185
194
|
break;
|
|
186
195
|
}
|
|
187
196
|
case 'response.function_call_arguments.delta': {
|
|
188
|
-
const output = response.output[
|
|
197
|
+
const output = response.output[dispatchEvent.output_index];
|
|
189
198
|
if (!output) {
|
|
190
|
-
throw new OpenAIError(`missing output at index ${
|
|
199
|
+
throw new OpenAIError(`missing output at index ${dispatchEvent.output_index}`);
|
|
191
200
|
}
|
|
192
201
|
if (output.type === 'function_call') {
|
|
193
202
|
maybeEmit('response.function_call_arguments.delta', {
|
|
194
|
-
...
|
|
203
|
+
...dispatchEvent,
|
|
204
|
+
type: dispatchEvent.type,
|
|
205
|
+
item_id: dispatchEvent.item_id,
|
|
206
|
+
output_index: dispatchEvent.output_index,
|
|
195
207
|
snapshot: output.arguments,
|
|
196
208
|
});
|
|
197
209
|
}
|
|
198
210
|
break;
|
|
199
211
|
}
|
|
200
212
|
default: {
|
|
201
|
-
maybeEmit(
|
|
213
|
+
maybeEmit(dispatchEvent.type, event);
|
|
202
214
|
break;
|
|
203
215
|
}
|
|
204
216
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { RequestOptions } from '../internal/request-options';
|
|
2
|
+
import type { FileBatches, VectorStoreFileBatch } from '../resources/vector-stores/file-batches';
|
|
3
|
+
import type { Files, VectorStoreFile } from '../resources/vector-stores/files';
|
|
4
|
+
import { pollWithResponse } from './polling';
|
|
5
|
+
|
|
6
|
+
type PollOptions = RequestOptions & { pollIntervalMs?: number };
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Polls an attached file through the resource's retrieve method. Failed files are
|
|
10
|
+
* returned to the caller, and cancelled files retain their existing retry behavior.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function pollVectorStoreFile(
|
|
15
|
+
resource: Pick<Files, 'retrieve'>,
|
|
16
|
+
vectorStoreID: string,
|
|
17
|
+
fileID: string,
|
|
18
|
+
options?: PollOptions,
|
|
19
|
+
): Promise<VectorStoreFile> {
|
|
20
|
+
return pollWithResponse(
|
|
21
|
+
(headers) => resource.retrieve(fileID, { vector_store_id: vectorStoreID }, { ...options, headers }),
|
|
22
|
+
['in_progress'],
|
|
23
|
+
['failed', 'completed'],
|
|
24
|
+
options,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Polls a file batch through the resource's retrieve method until it completes,
|
|
30
|
+
* fails, or is cancelled. Retrieval errors are propagated unchanged.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export function pollVectorStoreFileBatch(
|
|
35
|
+
resource: Pick<FileBatches, 'retrieve'>,
|
|
36
|
+
vectorStoreID: string,
|
|
37
|
+
batchID: string,
|
|
38
|
+
options?: PollOptions,
|
|
39
|
+
): Promise<VectorStoreFileBatch> {
|
|
40
|
+
return pollWithResponse(
|
|
41
|
+
(headers) => resource.retrieve(batchID, { vector_store_id: vectorStoreID }, { ...options, headers }),
|
|
42
|
+
['in_progress'],
|
|
43
|
+
['failed', 'cancelled', 'completed'],
|
|
44
|
+
options,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { OpenAI } from '../client';
|
|
2
|
+
import type { RequestOptions } from '../internal/request-options';
|
|
3
|
+
import type { FileBatches, VectorStoreFileBatch } from '../resources/vector-stores/file-batches';
|
|
4
|
+
import type { Uploadable } from '../uploads';
|
|
5
|
+
import { allSettledWithThrow } from './Util';
|
|
6
|
+
|
|
7
|
+
type UploadOptions = RequestOptions & { pollIntervalMs?: number; maxConcurrency?: number };
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Uploads files with a shared iterator, then creates and polls the batch. Every
|
|
11
|
+
* worker settles before upload failures are propagated.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export async function uploadAndPollVectorStoreFileBatch(
|
|
16
|
+
resource: Pick<FileBatches, 'createAndPoll'>,
|
|
17
|
+
client: Pick<OpenAI, 'files'>,
|
|
18
|
+
vectorStoreId: string,
|
|
19
|
+
files: Uploadable[],
|
|
20
|
+
fileIds: string[],
|
|
21
|
+
options?: UploadOptions,
|
|
22
|
+
): Promise<VectorStoreFileBatch> {
|
|
23
|
+
if (files === null || files === undefined || files.length === 0) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
"No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead",
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const configuredConcurrency = options?.maxConcurrency ?? 5;
|
|
30
|
+
const concurrencyLimit = Math.min(configuredConcurrency, files.length);
|
|
31
|
+
const fileIterator = files.values();
|
|
32
|
+
const allFileIds = [...fileIds];
|
|
33
|
+
|
|
34
|
+
// This code is based on this design. The libraries don't accommodate our environment limits.
|
|
35
|
+
// https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all
|
|
36
|
+
async function processFiles(iterator: IterableIterator<Uploadable>) {
|
|
37
|
+
for (const item of iterator) {
|
|
38
|
+
// oxlint-disable-next-line no-await-in-loop -- Each worker uploads one file at a time.
|
|
39
|
+
const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);
|
|
40
|
+
allFileIds.push(fileObj.id);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Assigning length preserves native validation of invalid concurrency values.
|
|
45
|
+
const workers: Promise<void>[] = [];
|
|
46
|
+
workers.length = concurrencyLimit;
|
|
47
|
+
for (let index = 0; index < workers.length; index += 1) {
|
|
48
|
+
workers[index] = processFiles(fileIterator);
|
|
49
|
+
}
|
|
50
|
+
await allSettledWithThrow(workers);
|
|
51
|
+
|
|
52
|
+
return await resource.createAndPoll(vectorStoreId, { file_ids: allFileIds }, options);
|
|
53
|
+
}
|