openai 7.14.0 → 7.16.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 +41 -0
- package/README.md +6 -0
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +9 -6
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +9 -6
- package/bedrock.mjs.map +1 -1
- package/client.d.mts +16 -4
- package/client.d.mts.map +1 -1
- package/client.d.ts +16 -4
- package/client.d.ts.map +1 -1
- package/client.js +37 -20
- package/client.js.map +1 -1
- package/client.mjs +37 -20
- package/client.mjs.map +1 -1
- package/core/pagination.d.mts +19 -1
- package/core/pagination.d.mts.map +1 -1
- package/core/pagination.d.ts +19 -1
- package/core/pagination.d.ts.map +1 -1
- package/core/pagination.js +32 -1
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +30 -0
- package/core/pagination.mjs.map +1 -1
- package/internal/realtime-credentials.d.mts +1 -1
- package/internal/realtime-credentials.d.ts +1 -1
- package/internal/realtime-credentials.js +1 -1
- package/internal/realtime-credentials.mjs +1 -1
- package/internal/utils/abort.d.mts +11 -0
- package/internal/utils/abort.d.mts.map +1 -0
- package/internal/utils/abort.d.ts +11 -0
- package/internal/utils/abort.d.ts.map +1 -0
- package/internal/utils/abort.js +87 -0
- package/internal/utils/abort.js.map +1 -0
- package/internal/utils/abort.mjs +83 -0
- package/internal/utils/abort.mjs.map +1 -0
- package/internal/ws.d.mts +13 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +13 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +10 -0
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +9 -0
- package/internal/ws.mjs.map +1 -1
- package/lib/agents/agent-session-stream.d.mts +41 -0
- package/lib/agents/agent-session-stream.d.mts.map +1 -0
- package/lib/agents/agent-session-stream.d.ts +41 -0
- package/lib/agents/agent-session-stream.d.ts.map +1 -0
- package/lib/agents/agent-session-stream.js +271 -0
- package/lib/agents/agent-session-stream.js.map +1 -0
- package/lib/agents/agent-session-stream.mjs +267 -0
- package/lib/agents/agent-session-stream.mjs.map +1 -0
- package/lib/agents/output-text.d.mts +4 -0
- package/lib/agents/output-text.d.mts.map +1 -0
- package/lib/agents/output-text.d.ts +4 -0
- package/lib/agents/output-text.d.ts.map +1 -0
- package/lib/agents/output-text.js +8 -0
- package/lib/agents/output-text.js.map +1 -0
- package/lib/agents/output-text.mjs +5 -0
- package/lib/agents/output-text.mjs.map +1 -0
- package/lib/agents/turn-state.d.mts +14 -0
- package/lib/agents/turn-state.d.mts.map +1 -0
- package/lib/agents/turn-state.d.ts +14 -0
- package/lib/agents/turn-state.d.ts.map +1 -0
- package/lib/agents/turn-state.js +62 -0
- package/lib/agents/turn-state.js.map +1 -0
- package/lib/agents/turn-state.mjs +58 -0
- package/lib/agents/turn-state.mjs.map +1 -0
- package/lib/live/transcript-grouping.d.mts +2 -2
- package/lib/live/transcript-grouping.d.mts.map +1 -1
- package/lib/live/transcript-grouping.d.ts +2 -2
- package/lib/live/transcript-grouping.d.ts.map +1 -1
- package/lib/live/transcript-grouping.js +44 -22
- package/lib/live/transcript-grouping.js.map +1 -1
- package/lib/live/transcript-grouping.mjs +44 -22
- package/lib/live/transcript-grouping.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/beta/agents/agents.d.mts +3678 -0
- package/resources/beta/agents/agents.d.mts.map +1 -0
- package/resources/beta/agents/agents.d.ts +3678 -0
- package/resources/beta/agents/agents.d.ts.map +1 -0
- package/resources/beta/agents/agents.js +118 -0
- package/resources/beta/agents/agents.js.map +1 -0
- package/resources/beta/agents/agents.mjs +113 -0
- package/resources/beta/agents/agents.mjs.map +1 -0
- package/resources/beta/agents/environments/environments.d.mts +65 -0
- package/resources/beta/agents/environments/environments.d.mts.map +1 -0
- package/resources/beta/agents/environments/environments.d.ts +65 -0
- package/resources/beta/agents/environments/environments.d.ts.map +1 -0
- package/resources/beta/agents/environments/environments.js +43 -0
- package/resources/beta/agents/environments/environments.js.map +1 -0
- package/resources/beta/agents/environments/environments.mjs +38 -0
- package/resources/beta/agents/environments/environments.mjs.map +1 -0
- package/resources/beta/agents/environments/files.d.mts +111 -0
- package/resources/beta/agents/environments/files.d.mts.map +1 -0
- package/resources/beta/agents/environments/files.d.ts +111 -0
- package/resources/beta/agents/environments/files.d.ts.map +1 -0
- package/resources/beta/agents/environments/files.js +61 -0
- package/resources/beta/agents/environments/files.js.map +1 -0
- package/resources/beta/agents/environments/files.mjs +57 -0
- package/resources/beta/agents/environments/files.mjs.map +1 -0
- package/resources/beta/agents/environments/index.d.mts +4 -0
- package/resources/beta/agents/environments/index.d.mts.map +1 -0
- package/resources/beta/agents/environments/index.d.ts +4 -0
- package/resources/beta/agents/environments/index.d.ts.map +1 -0
- package/resources/beta/agents/environments/index.js +11 -0
- package/resources/beta/agents/environments/index.js.map +1 -0
- package/resources/beta/agents/environments/index.mjs +5 -0
- package/resources/beta/agents/environments/index.mjs.map +1 -0
- package/resources/beta/agents/environments/templates.d.mts +415 -0
- package/resources/beta/agents/environments/templates.d.mts.map +1 -0
- package/resources/beta/agents/environments/templates.d.ts +415 -0
- package/resources/beta/agents/environments/templates.d.ts.map +1 -0
- package/resources/beta/agents/environments/templates.js +112 -0
- package/resources/beta/agents/environments/templates.js.map +1 -0
- package/resources/beta/agents/environments/templates.mjs +108 -0
- package/resources/beta/agents/environments/templates.mjs.map +1 -0
- package/resources/beta/agents/environments.d.mts +2 -0
- package/resources/beta/agents/environments.d.mts.map +1 -0
- package/resources/beta/agents/environments.d.ts +2 -0
- package/resources/beta/agents/environments.d.ts.map +1 -0
- package/resources/beta/agents/environments.js +6 -0
- package/resources/beta/agents/environments.js.map +1 -0
- package/resources/beta/agents/environments.mjs +3 -0
- package/resources/beta/agents/environments.mjs.map +1 -0
- package/resources/beta/agents/index.d.mts +5 -0
- package/resources/beta/agents/index.d.mts.map +1 -0
- package/resources/beta/agents/index.d.ts +5 -0
- package/resources/beta/agents/index.d.ts.map +1 -0
- package/resources/beta/agents/index.js +13 -0
- package/resources/beta/agents/index.js.map +1 -0
- package/resources/beta/agents/index.mjs +6 -0
- package/resources/beta/agents/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/artifacts.d.mts +158 -0
- package/resources/beta/agents/sessions/artifacts.d.mts.map +1 -0
- package/resources/beta/agents/sessions/artifacts.d.ts +158 -0
- package/resources/beta/agents/sessions/artifacts.d.ts.map +1 -0
- package/resources/beta/agents/sessions/artifacts.js +106 -0
- package/resources/beta/agents/sessions/artifacts.js.map +1 -0
- package/resources/beta/agents/sessions/artifacts.mjs +102 -0
- package/resources/beta/agents/sessions/artifacts.mjs.map +1 -0
- package/resources/beta/agents/sessions/events.d.mts +61 -0
- package/resources/beta/agents/sessions/events.d.mts.map +1 -0
- package/resources/beta/agents/sessions/events.d.ts +61 -0
- package/resources/beta/agents/sessions/events.d.ts.map +1 -0
- package/resources/beta/agents/sessions/events.js +72 -0
- package/resources/beta/agents/sessions/events.js.map +1 -0
- package/resources/beta/agents/sessions/events.mjs +68 -0
- package/resources/beta/agents/sessions/events.mjs.map +1 -0
- package/resources/beta/agents/sessions/index.d.mts +7 -0
- package/resources/beta/agents/sessions/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/index.d.ts +7 -0
- package/resources/beta/agents/sessions/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/index.js +17 -0
- package/resources/beta/agents/sessions/index.js.map +1 -0
- package/resources/beta/agents/sessions/index.mjs +8 -0
- package/resources/beta/agents/sessions/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/items.d.mts +37 -0
- package/resources/beta/agents/sessions/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/items.d.ts +37 -0
- package/resources/beta/agents/sessions/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/items.js +35 -0
- package/resources/beta/agents/sessions/items.js.map +1 -0
- package/resources/beta/agents/sessions/items.mjs +31 -0
- package/resources/beta/agents/sessions/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/sessions.d.mts +220 -0
- package/resources/beta/agents/sessions/sessions.d.mts.map +1 -0
- package/resources/beta/agents/sessions/sessions.d.ts +220 -0
- package/resources/beta/agents/sessions/sessions.d.ts.map +1 -0
- package/resources/beta/agents/sessions/sessions.js +124 -0
- package/resources/beta/agents/sessions/sessions.js.map +1 -0
- package/resources/beta/agents/sessions/sessions.mjs +119 -0
- package/resources/beta/agents/sessions/sessions.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.d.mts +4 -0
- package/resources/beta/agents/sessions/subagents/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.d.ts +4 -0
- package/resources/beta/agents/sessions/subagents/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.js +11 -0
- package/resources/beta/agents/sessions/subagents/index.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/index.mjs +5 -0
- package/resources/beta/agents/sessions/subagents/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.d.mts +41 -0
- package/resources/beta/agents/sessions/subagents/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.d.ts +41 -0
- package/resources/beta/agents/sessions/subagents/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.js +36 -0
- package/resources/beta/agents/sessions/subagents/items.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/items.mjs +32 -0
- package/resources/beta/agents/sessions/subagents/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.mts +65 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.ts +65 -0
- package/resources/beta/agents/sessions/subagents/subagents.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.js +67 -0
- package/resources/beta/agents/sessions/subagents/subagents.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/subagents.mjs +62 -0
- package/resources/beta/agents/sessions/subagents/subagents.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.mts +3 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.ts +3 -0
- package/resources/beta/agents/sessions/subagents/turns/index.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.js +9 -0
- package/resources/beta/agents/sessions/subagents/turns/index.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/index.mjs +4 -0
- package/resources/beta/agents/sessions/subagents/turns/index.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.mts +45 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.ts +45 -0
- package/resources/beta/agents/sessions/subagents/turns/items.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.js +36 -0
- package/resources/beta/agents/sessions/subagents/turns/items.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/items.mjs +32 -0
- package/resources/beta/agents/sessions/subagents/turns/items.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.mts +73 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.ts +73 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.js +68 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.mjs +63 -0
- package/resources/beta/agents/sessions/subagents/turns/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.d.mts +2 -0
- package/resources/beta/agents/sessions/subagents/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.d.ts +2 -0
- package/resources/beta/agents/sessions/subagents/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.js +6 -0
- package/resources/beta/agents/sessions/subagents/turns.js.map +1 -0
- package/resources/beta/agents/sessions/subagents/turns.mjs +3 -0
- package/resources/beta/agents/sessions/subagents/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions/subagents.d.mts +2 -0
- package/resources/beta/agents/sessions/subagents.d.mts.map +1 -0
- package/resources/beta/agents/sessions/subagents.d.ts +2 -0
- package/resources/beta/agents/sessions/subagents.d.ts.map +1 -0
- package/resources/beta/agents/sessions/subagents.js +6 -0
- package/resources/beta/agents/sessions/subagents.js.map +1 -0
- package/resources/beta/agents/sessions/subagents.mjs +3 -0
- package/resources/beta/agents/sessions/subagents.mjs.map +1 -0
- package/resources/beta/agents/sessions/turns.d.mts +116 -0
- package/resources/beta/agents/sessions/turns.d.mts.map +1 -0
- package/resources/beta/agents/sessions/turns.d.ts +116 -0
- package/resources/beta/agents/sessions/turns.d.ts.map +1 -0
- package/resources/beta/agents/sessions/turns.js +57 -0
- package/resources/beta/agents/sessions/turns.js.map +1 -0
- package/resources/beta/agents/sessions/turns.mjs +53 -0
- package/resources/beta/agents/sessions/turns.mjs.map +1 -0
- package/resources/beta/agents/sessions.d.mts +2 -0
- package/resources/beta/agents/sessions.d.mts.map +1 -0
- package/resources/beta/agents/sessions.d.ts +2 -0
- package/resources/beta/agents/sessions.d.ts.map +1 -0
- package/resources/beta/agents/sessions.js +6 -0
- package/resources/beta/agents/sessions.js.map +1 -0
- package/resources/beta/agents/sessions.mjs +3 -0
- package/resources/beta/agents/sessions.mjs.map +1 -0
- package/resources/beta/agents/vaults/credentials.d.mts +526 -0
- package/resources/beta/agents/vaults/credentials.d.mts.map +1 -0
- package/resources/beta/agents/vaults/credentials.d.ts +526 -0
- package/resources/beta/agents/vaults/credentials.d.ts.map +1 -0
- package/resources/beta/agents/vaults/credentials.js +132 -0
- package/resources/beta/agents/vaults/credentials.js.map +1 -0
- package/resources/beta/agents/vaults/credentials.mjs +128 -0
- package/resources/beta/agents/vaults/credentials.mjs.map +1 -0
- package/resources/beta/agents/vaults/index.d.mts +3 -0
- package/resources/beta/agents/vaults/index.d.mts.map +1 -0
- package/resources/beta/agents/vaults/index.d.ts +3 -0
- package/resources/beta/agents/vaults/index.d.ts.map +1 -0
- package/resources/beta/agents/vaults/index.js +9 -0
- package/resources/beta/agents/vaults/index.js.map +1 -0
- package/resources/beta/agents/vaults/index.mjs +4 -0
- package/resources/beta/agents/vaults/index.mjs.map +1 -0
- package/resources/beta/agents/vaults/vaults.d.mts +145 -0
- package/resources/beta/agents/vaults/vaults.d.mts.map +1 -0
- package/resources/beta/agents/vaults/vaults.d.ts +145 -0
- package/resources/beta/agents/vaults/vaults.d.ts.map +1 -0
- package/resources/beta/agents/vaults/vaults.js +93 -0
- package/resources/beta/agents/vaults/vaults.js.map +1 -0
- package/resources/beta/agents/vaults/vaults.mjs +88 -0
- package/resources/beta/agents/vaults/vaults.mjs.map +1 -0
- package/resources/beta/agents/vaults.d.mts +2 -0
- package/resources/beta/agents/vaults.d.mts.map +1 -0
- package/resources/beta/agents/vaults.d.ts +2 -0
- package/resources/beta/agents/vaults.d.ts.map +1 -0
- package/resources/beta/agents/vaults.js +6 -0
- package/resources/beta/agents/vaults.js.map +1 -0
- package/resources/beta/agents/vaults.mjs +3 -0
- package/resources/beta/agents/vaults.mjs.map +1 -0
- package/resources/beta/agents.d.mts +2 -0
- package/resources/beta/agents.d.mts.map +1 -0
- package/resources/beta/agents.d.ts +2 -0
- package/resources/beta/agents.d.ts.map +1 -0
- package/resources/beta/agents.js +6 -0
- package/resources/beta/agents.js.map +1 -0
- package/resources/beta/agents.mjs +3 -0
- package/resources/beta/agents.mjs.map +1 -0
- package/resources/beta/beta.d.mts +4 -1
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +4 -1
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +4 -0
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +4 -0
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -0
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -0
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js +11 -9
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs +1 -0
- package/resources/beta/index.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 +6 -0
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +6 -0
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/ws-base.d.mts +13 -8
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +13 -8
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +85 -14
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +87 -16
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts +1 -0
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts +1 -0
- package/resources/beta/responses/ws.d.ts.map +1 -1
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs.map +1 -1
- package/resources/live/forks/ws-base.d.mts +13 -8
- package/resources/live/forks/ws-base.d.mts.map +1 -1
- package/resources/live/forks/ws-base.d.ts +13 -8
- package/resources/live/forks/ws-base.d.ts.map +1 -1
- package/resources/live/forks/ws-base.js +85 -14
- package/resources/live/forks/ws-base.js.map +1 -1
- package/resources/live/forks/ws-base.mjs +87 -16
- package/resources/live/forks/ws-base.mjs.map +1 -1
- package/resources/live/forks/ws.d.mts +1 -0
- package/resources/live/forks/ws.d.mts.map +1 -1
- package/resources/live/forks/ws.d.ts +1 -0
- package/resources/live/forks/ws.d.ts.map +1 -1
- package/resources/live/forks/ws.js.map +1 -1
- package/resources/live/forks/ws.mjs.map +1 -1
- package/resources/live/sessions.d.mts +10 -4
- package/resources/live/sessions.d.mts.map +1 -1
- package/resources/live/sessions.d.ts +10 -4
- package/resources/live/sessions.d.ts.map +1 -1
- package/resources/live/sessions.js +10 -4
- package/resources/live/sessions.js.map +1 -1
- package/resources/live/sessions.mjs +10 -4
- package/resources/live/sessions.mjs.map +1 -1
- package/resources/live/sideband/ws-base.d.mts +13 -8
- package/resources/live/sideband/ws-base.d.mts.map +1 -1
- package/resources/live/sideband/ws-base.d.ts +13 -8
- package/resources/live/sideband/ws-base.d.ts.map +1 -1
- package/resources/live/sideband/ws-base.js +85 -14
- package/resources/live/sideband/ws-base.js.map +1 -1
- package/resources/live/sideband/ws-base.mjs +87 -16
- package/resources/live/sideband/ws-base.mjs.map +1 -1
- package/resources/live/sideband/ws.d.mts +1 -0
- package/resources/live/sideband/ws.d.mts.map +1 -1
- package/resources/live/sideband/ws.d.ts +1 -0
- package/resources/live/sideband/ws.d.ts.map +1 -1
- package/resources/live/sideband/ws.js.map +1 -1
- package/resources/live/sideband/ws.mjs.map +1 -1
- package/resources/live/ws-base.d.mts +13 -8
- package/resources/live/ws-base.d.mts.map +1 -1
- package/resources/live/ws-base.d.ts +13 -8
- package/resources/live/ws-base.d.ts.map +1 -1
- package/resources/live/ws-base.js +85 -14
- package/resources/live/ws-base.js.map +1 -1
- package/resources/live/ws-base.mjs +87 -16
- package/resources/live/ws-base.mjs.map +1 -1
- package/resources/live/ws.d.mts +1 -0
- package/resources/live/ws.d.mts.map +1 -1
- package/resources/live/ws.d.ts +1 -0
- package/resources/live/ws.d.ts.map +1 -1
- package/resources/live/ws.js.map +1 -1
- package/resources/live/ws.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +6 -0
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +6 -0
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/ws-base.d.mts +13 -8
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +13 -8
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +85 -14
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +87 -16
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts +1 -0
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts +1 -0
- package/resources/responses/ws.d.ts.map +1 -1
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs.map +1 -1
- package/src/bedrock.ts +18 -7
- package/src/client.ts +48 -19
- package/src/core/pagination.ts +63 -1
- package/src/internal/realtime-credentials.ts +1 -1
- package/src/internal/utils/abort.ts +111 -0
- package/src/internal/ws.ts +22 -0
- package/src/lib/agents/agent-session-stream.ts +326 -0
- package/src/lib/agents/output-text.ts +6 -0
- package/src/lib/agents/turn-state.ts +61 -0
- package/src/lib/live/transcript-grouping.ts +59 -27
- package/src/resources/beta/agents/agents.ts +4621 -0
- package/src/resources/beta/agents/environments/environments.ts +111 -0
- package/src/resources/beta/agents/environments/files.ts +164 -0
- package/src/resources/beta/agents/environments/index.ts +19 -0
- package/src/resources/beta/agents/environments/templates.ts +537 -0
- package/src/resources/beta/agents/environments.ts +3 -0
- package/src/resources/beta/agents/index.ts +127 -0
- package/src/resources/beta/agents/sessions/artifacts.ts +239 -0
- package/src/resources/beta/agents/sessions/events.ts +91 -0
- package/src/resources/beta/agents/sessions/index.ts +24 -0
- package/src/resources/beta/agents/sessions/items.ts +59 -0
- package/src/resources/beta/agents/sessions/sessions.ts +350 -0
- package/src/resources/beta/agents/sessions/subagents/index.ts +5 -0
- package/src/resources/beta/agents/sessions/subagents/items.ts +65 -0
- package/src/resources/beta/agents/sessions/subagents/subagents.ts +113 -0
- package/src/resources/beta/agents/sessions/subagents/turns/index.ts +4 -0
- package/src/resources/beta/agents/sessions/subagents/turns/items.ts +70 -0
- package/src/resources/beta/agents/sessions/subagents/turns/turns.ts +111 -0
- package/src/resources/beta/agents/sessions/subagents/turns.ts +3 -0
- package/src/resources/beta/agents/sessions/subagents.ts +3 -0
- package/src/resources/beta/agents/sessions/turns.ts +159 -0
- package/src/resources/beta/agents/sessions.ts +3 -0
- package/src/resources/beta/agents/vaults/credentials.ts +687 -0
- package/src/resources/beta/agents/vaults/index.ts +29 -0
- package/src/resources/beta/agents/vaults/vaults.ts +237 -0
- package/src/resources/beta/agents/vaults.ts +3 -0
- package/src/resources/beta/agents.ts +3 -0
- package/src/resources/beta/beta.ts +207 -0
- package/src/resources/beta/index.ts +106 -0
- package/src/resources/beta/responses/internal-base.ts +5 -0
- package/src/resources/beta/responses/ws-base.ts +110 -21
- package/src/resources/beta/responses/ws.ts +2 -0
- package/src/resources/live/forks/ws-base.ts +110 -21
- package/src/resources/live/forks/ws.ts +2 -0
- package/src/resources/live/sessions.ts +10 -4
- package/src/resources/live/sideband/ws-base.ts +110 -21
- package/src/resources/live/sideband/ws.ts +2 -0
- package/src/resources/live/ws-base.ts +110 -21
- package/src/resources/live/ws.ts +2 -0
- package/src/resources/responses/internal-base.ts +5 -0
- package/src/resources/responses/ws-base.ts +110 -21
- package/src/resources/responses/ws.ts +2 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -6,6 +6,8 @@ import { sleep } from '../../../internal/utils/sleep';
|
|
|
6
6
|
import { type WebSocketLike, ReadyState } from '../../../internal/ws-adapter';
|
|
7
7
|
import {
|
|
8
8
|
SendQueue,
|
|
9
|
+
getMaxBufferedEvents,
|
|
10
|
+
type WebSocketStreamOptions,
|
|
9
11
|
flattenRawData,
|
|
10
12
|
isRecoverableClose,
|
|
11
13
|
type RawWebSocketData,
|
|
@@ -61,11 +63,11 @@ export interface SidebandWSBaseOptions {
|
|
|
61
63
|
reconnect?: SidebandWSReconnectOptions | null | undefined;
|
|
62
64
|
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* Default: 1
|
|
66
|
+
* Byte budget for outgoing messages queued while the socket is connecting
|
|
67
|
+
* or reconnecting. An empty queue accepts one message even if it exceeds
|
|
68
|
+
* this budget. Further messages are discarded and an `error` event is emitted
|
|
69
|
+
* if the total queued size would exceed the budget.
|
|
70
|
+
* Default: 1 MiB (1,048,576 bytes).
|
|
69
71
|
*/
|
|
70
72
|
maxQueueSize?: number | undefined;
|
|
71
73
|
}
|
|
@@ -175,6 +177,11 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
175
177
|
* The iterator will exit if the socket closes but exiting the iterator
|
|
176
178
|
* does not close the socket.
|
|
177
179
|
*
|
|
180
|
+
* Pass `maxBufferedEvents` to limit queued records for this iterator, including
|
|
181
|
+
* lifecycle events. Overflow discards its backlog and rejects `next()` with a
|
|
182
|
+
* WebSocketError; the shared socket and other iterators remain active.
|
|
183
|
+
* Omitted means unlimited. This is an event-count limit, not a byte limit.
|
|
184
|
+
*
|
|
178
185
|
* @example
|
|
179
186
|
* ```ts
|
|
180
187
|
* for await (const event of client.stream()) {
|
|
@@ -192,26 +199,59 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
192
199
|
* }
|
|
193
200
|
* ```
|
|
194
201
|
*/
|
|
195
|
-
stream(): AsyncIterableIterator<SidebandStreamMessage> {
|
|
196
|
-
return this[Symbol.asyncIterator]();
|
|
202
|
+
stream(options?: WebSocketStreamOptions): AsyncIterableIterator<SidebandStreamMessage> {
|
|
203
|
+
return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
|
|
197
204
|
}
|
|
198
205
|
|
|
199
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<SidebandStreamMessage> {
|
|
206
|
+
[Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<SidebandStreamMessage> {
|
|
200
207
|
if (!this.socket) {
|
|
201
208
|
throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
|
|
202
209
|
}
|
|
203
210
|
|
|
211
|
+
const maxBufferedEvents = getMaxBufferedEvents(options);
|
|
212
|
+
|
|
204
213
|
// Two-queue async iterator: `queue` buffers incoming messages,
|
|
205
214
|
// `resolvers` buffers waiting next() calls. A push wakes the
|
|
206
215
|
// oldest next(); a next() drains the oldest message.
|
|
207
|
-
const queue: SidebandStreamMessage[] = [];
|
|
208
|
-
const resolvers: (() => void)[] = [];
|
|
216
|
+
const queue: (SidebandStreamMessage | undefined)[] = [];
|
|
217
|
+
const resolvers: ((() => void) | undefined)[] = [];
|
|
218
|
+
let queueHead = 0;
|
|
219
|
+
let resolverHead = 0;
|
|
209
220
|
let done = false;
|
|
221
|
+
let failure: WebSocketError | undefined;
|
|
210
222
|
let currentSocket = this.socket;
|
|
211
223
|
|
|
224
|
+
const wakeResolver = () => {
|
|
225
|
+
if (resolverHead >= resolvers.length) return;
|
|
226
|
+
|
|
227
|
+
const resolver = resolvers[resolverHead];
|
|
228
|
+
resolvers[resolverHead] = undefined;
|
|
229
|
+
resolverHead += 1;
|
|
230
|
+
if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
|
|
231
|
+
resolvers.splice(0, resolverHead);
|
|
232
|
+
resolverHead = 0;
|
|
233
|
+
}
|
|
234
|
+
resolver?.();
|
|
235
|
+
};
|
|
236
|
+
|
|
212
237
|
const push = (msg: SidebandStreamMessage) => {
|
|
238
|
+
if (done) return;
|
|
239
|
+
|
|
240
|
+
if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
|
|
241
|
+
failure = new WebSocketError(
|
|
242
|
+
`WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
|
|
243
|
+
null,
|
|
244
|
+
);
|
|
245
|
+
done = true;
|
|
246
|
+
queue.length = 0;
|
|
247
|
+
queueHead = 0;
|
|
248
|
+
cleanup();
|
|
249
|
+
flushResolvers();
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
|
|
213
253
|
queue.push(msg);
|
|
214
|
-
|
|
254
|
+
wakeResolver();
|
|
215
255
|
};
|
|
216
256
|
|
|
217
257
|
const onEvent = (event: SidebandAPI.ConnectServerEvent) => {
|
|
@@ -241,9 +281,14 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
241
281
|
};
|
|
242
282
|
|
|
243
283
|
const flushResolvers = () => {
|
|
244
|
-
|
|
245
|
-
resolver
|
|
284
|
+
while (resolverHead < resolvers.length) {
|
|
285
|
+
const resolver = resolvers[resolverHead];
|
|
286
|
+
resolvers[resolverHead] = undefined;
|
|
287
|
+
resolverHead += 1;
|
|
288
|
+
resolver?.();
|
|
246
289
|
}
|
|
290
|
+
resolvers.length = 0;
|
|
291
|
+
resolverHead = 0;
|
|
247
292
|
};
|
|
248
293
|
|
|
249
294
|
const onClose = (
|
|
@@ -257,8 +302,9 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
257
302
|
cleanup();
|
|
258
303
|
};
|
|
259
304
|
|
|
260
|
-
const onSocketSwap = (
|
|
261
|
-
|
|
305
|
+
const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
|
|
306
|
+
if (currentSocket === newSocket) return;
|
|
307
|
+
currentSocket.off('open', onOpen);
|
|
262
308
|
newSocket.on('open', onOpen);
|
|
263
309
|
currentSocket = newSocket;
|
|
264
310
|
};
|
|
@@ -315,9 +361,21 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
315
361
|
}
|
|
316
362
|
}
|
|
317
363
|
|
|
318
|
-
const resolve = (
|
|
319
|
-
|
|
320
|
-
|
|
364
|
+
const resolve = (
|
|
365
|
+
res: (value: IteratorResult<SidebandStreamMessage>) => void,
|
|
366
|
+
reject: (error: WebSocketError) => void,
|
|
367
|
+
) => {
|
|
368
|
+
if (failure) {
|
|
369
|
+
reject(failure);
|
|
370
|
+
} else if (queueHead < queue.length) {
|
|
371
|
+
const queued = queue[queueHead]!;
|
|
372
|
+
queue[queueHead] = undefined;
|
|
373
|
+
queueHead += 1;
|
|
374
|
+
if (queueHead >= 64 && queueHead * 2 >= queue.length) {
|
|
375
|
+
queue.splice(0, queueHead);
|
|
376
|
+
queueHead = 0;
|
|
377
|
+
}
|
|
378
|
+
res({ value: queued, done: false });
|
|
321
379
|
} else if (done) {
|
|
322
380
|
res({ value: undefined, done: true });
|
|
323
381
|
} else {
|
|
@@ -327,10 +385,10 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
327
385
|
};
|
|
328
386
|
|
|
329
387
|
const next = (): Promise<IteratorResult<SidebandStreamMessage>> =>
|
|
330
|
-
new Promise((res) => {
|
|
331
|
-
if (resolve(res)) return;
|
|
388
|
+
new Promise((res, reject) => {
|
|
389
|
+
if (resolve(res, reject)) return;
|
|
332
390
|
resolvers.push(() => {
|
|
333
|
-
resolve(res);
|
|
391
|
+
resolve(res, reject);
|
|
334
392
|
});
|
|
335
393
|
});
|
|
336
394
|
|
|
@@ -338,6 +396,8 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
338
396
|
next,
|
|
339
397
|
return: (): Promise<IteratorReturnResult<undefined>> => {
|
|
340
398
|
done = true;
|
|
399
|
+
queue.length = 0;
|
|
400
|
+
queueHead = 0;
|
|
341
401
|
cleanup();
|
|
342
402
|
flushResolvers();
|
|
343
403
|
return Promise.resolve({ value: undefined, done: true });
|
|
@@ -370,6 +430,35 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
|
|
|
370
430
|
return;
|
|
371
431
|
}
|
|
372
432
|
|
|
433
|
+
if (
|
|
434
|
+
event === null ||
|
|
435
|
+
typeof event !== 'object' ||
|
|
436
|
+
Array.isArray(event) ||
|
|
437
|
+
!Object.prototype.hasOwnProperty.call(event, 'type') ||
|
|
438
|
+
typeof event.type !== 'string'
|
|
439
|
+
) {
|
|
440
|
+
this._onError(
|
|
441
|
+
null,
|
|
442
|
+
'received invalid WebSocket event: expected an object with an own string type',
|
|
443
|
+
undefined,
|
|
444
|
+
);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
const eventType: string = event.type;
|
|
449
|
+
const reservedEventType =
|
|
450
|
+
eventType === 'raw' ||
|
|
451
|
+
eventType === 'close' ||
|
|
452
|
+
eventType === 'event' ||
|
|
453
|
+
eventType === 'reconnecting' ||
|
|
454
|
+
eventType === 'reconnected' ||
|
|
455
|
+
eventType === 'open' ||
|
|
456
|
+
eventType === 'error';
|
|
457
|
+
if (reservedEventType && eventType !== 'error') {
|
|
458
|
+
this._onError(null, 'received reserved WebSocket event type', undefined);
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
|
|
373
462
|
this._emit('event', event);
|
|
374
463
|
|
|
375
464
|
if (event.type === 'error') {
|
|
@@ -6,6 +6,8 @@ import { SidebandWSBase, type SidebandWSBaseOptions, type SidebandWSParameters }
|
|
|
6
6
|
import { OpenAI } from '../../../client';
|
|
7
7
|
import { VERSION } from '../../../version';
|
|
8
8
|
|
|
9
|
+
export type { WebSocketStreamOptions } from '../../../internal/ws';
|
|
10
|
+
|
|
9
11
|
export type { SidebandWSParameters, SidebandWSReconnectOptions } from './ws-base';
|
|
10
12
|
|
|
11
13
|
export interface SidebandWSClientOptions extends WS.ClientOptions, SidebandWSBaseOptions {}
|
|
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
|
|
|
6
6
|
import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
|
|
7
7
|
import {
|
|
8
8
|
SendQueue,
|
|
9
|
+
getMaxBufferedEvents,
|
|
10
|
+
type WebSocketStreamOptions,
|
|
9
11
|
flattenRawData,
|
|
10
12
|
isRecoverableClose,
|
|
11
13
|
type RawWebSocketData,
|
|
@@ -51,11 +53,11 @@ export interface LiveWSBaseOptions {
|
|
|
51
53
|
reconnect?: LiveWSReconnectOptions | null | undefined;
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* Default: 1
|
|
56
|
+
* Byte budget for outgoing messages queued while the socket is connecting
|
|
57
|
+
* or reconnecting. An empty queue accepts one message even if it exceeds
|
|
58
|
+
* this budget. Further messages are discarded and an `error` event is emitted
|
|
59
|
+
* if the total queued size would exceed the budget.
|
|
60
|
+
* Default: 1 MiB (1,048,576 bytes).
|
|
59
61
|
*/
|
|
60
62
|
maxQueueSize?: number | undefined;
|
|
61
63
|
}
|
|
@@ -165,6 +167,11 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
165
167
|
* The iterator will exit if the socket closes but exiting the iterator
|
|
166
168
|
* does not close the socket.
|
|
167
169
|
*
|
|
170
|
+
* Pass `maxBufferedEvents` to limit queued records for this iterator, including
|
|
171
|
+
* lifecycle events. Overflow discards its backlog and rejects `next()` with a
|
|
172
|
+
* WebSocketError; the shared socket and other iterators remain active.
|
|
173
|
+
* Omitted means unlimited. This is an event-count limit, not a byte limit.
|
|
174
|
+
*
|
|
168
175
|
* @example
|
|
169
176
|
* ```ts
|
|
170
177
|
* for await (const event of client.stream()) {
|
|
@@ -182,26 +189,59 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
182
189
|
* }
|
|
183
190
|
* ```
|
|
184
191
|
*/
|
|
185
|
-
stream(): AsyncIterableIterator<LiveStreamMessage> {
|
|
186
|
-
return this[Symbol.asyncIterator]();
|
|
192
|
+
stream(options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
|
|
193
|
+
return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
|
|
187
194
|
}
|
|
188
195
|
|
|
189
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<LiveStreamMessage> {
|
|
196
|
+
[Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
|
|
190
197
|
if (!this.socket) {
|
|
191
198
|
throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
|
|
192
199
|
}
|
|
193
200
|
|
|
201
|
+
const maxBufferedEvents = getMaxBufferedEvents(options);
|
|
202
|
+
|
|
194
203
|
// Two-queue async iterator: `queue` buffers incoming messages,
|
|
195
204
|
// `resolvers` buffers waiting next() calls. A push wakes the
|
|
196
205
|
// oldest next(); a next() drains the oldest message.
|
|
197
|
-
const queue: LiveStreamMessage[] = [];
|
|
198
|
-
const resolvers: (() => void)[] = [];
|
|
206
|
+
const queue: (LiveStreamMessage | undefined)[] = [];
|
|
207
|
+
const resolvers: ((() => void) | undefined)[] = [];
|
|
208
|
+
let queueHead = 0;
|
|
209
|
+
let resolverHead = 0;
|
|
199
210
|
let done = false;
|
|
211
|
+
let failure: WebSocketError | undefined;
|
|
200
212
|
let currentSocket = this.socket;
|
|
201
213
|
|
|
214
|
+
const wakeResolver = () => {
|
|
215
|
+
if (resolverHead >= resolvers.length) return;
|
|
216
|
+
|
|
217
|
+
const resolver = resolvers[resolverHead];
|
|
218
|
+
resolvers[resolverHead] = undefined;
|
|
219
|
+
resolverHead += 1;
|
|
220
|
+
if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
|
|
221
|
+
resolvers.splice(0, resolverHead);
|
|
222
|
+
resolverHead = 0;
|
|
223
|
+
}
|
|
224
|
+
resolver?.();
|
|
225
|
+
};
|
|
226
|
+
|
|
202
227
|
const push = (msg: LiveStreamMessage) => {
|
|
228
|
+
if (done) return;
|
|
229
|
+
|
|
230
|
+
if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
|
|
231
|
+
failure = new WebSocketError(
|
|
232
|
+
`WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
|
|
233
|
+
null,
|
|
234
|
+
);
|
|
235
|
+
done = true;
|
|
236
|
+
queue.length = 0;
|
|
237
|
+
queueHead = 0;
|
|
238
|
+
cleanup();
|
|
239
|
+
flushResolvers();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
203
243
|
queue.push(msg);
|
|
204
|
-
|
|
244
|
+
wakeResolver();
|
|
205
245
|
};
|
|
206
246
|
|
|
207
247
|
const onEvent = (event: LiveAPI.ServerEvent) => {
|
|
@@ -231,9 +271,14 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
231
271
|
};
|
|
232
272
|
|
|
233
273
|
const flushResolvers = () => {
|
|
234
|
-
|
|
235
|
-
resolver
|
|
274
|
+
while (resolverHead < resolvers.length) {
|
|
275
|
+
const resolver = resolvers[resolverHead];
|
|
276
|
+
resolvers[resolverHead] = undefined;
|
|
277
|
+
resolverHead += 1;
|
|
278
|
+
resolver?.();
|
|
236
279
|
}
|
|
280
|
+
resolvers.length = 0;
|
|
281
|
+
resolverHead = 0;
|
|
237
282
|
};
|
|
238
283
|
|
|
239
284
|
const onClose = (code: number, reason: string, unsent: UnsentMessage<LiveAPI.ClientEvent>[]) => {
|
|
@@ -243,8 +288,9 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
243
288
|
cleanup();
|
|
244
289
|
};
|
|
245
290
|
|
|
246
|
-
const onSocketSwap = (
|
|
247
|
-
|
|
291
|
+
const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
|
|
292
|
+
if (currentSocket === newSocket) return;
|
|
293
|
+
currentSocket.off('open', onOpen);
|
|
248
294
|
newSocket.on('open', onOpen);
|
|
249
295
|
currentSocket = newSocket;
|
|
250
296
|
};
|
|
@@ -301,9 +347,21 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
301
347
|
}
|
|
302
348
|
}
|
|
303
349
|
|
|
304
|
-
const resolve = (
|
|
305
|
-
|
|
306
|
-
|
|
350
|
+
const resolve = (
|
|
351
|
+
res: (value: IteratorResult<LiveStreamMessage>) => void,
|
|
352
|
+
reject: (error: WebSocketError) => void,
|
|
353
|
+
) => {
|
|
354
|
+
if (failure) {
|
|
355
|
+
reject(failure);
|
|
356
|
+
} else if (queueHead < queue.length) {
|
|
357
|
+
const queued = queue[queueHead]!;
|
|
358
|
+
queue[queueHead] = undefined;
|
|
359
|
+
queueHead += 1;
|
|
360
|
+
if (queueHead >= 64 && queueHead * 2 >= queue.length) {
|
|
361
|
+
queue.splice(0, queueHead);
|
|
362
|
+
queueHead = 0;
|
|
363
|
+
}
|
|
364
|
+
res({ value: queued, done: false });
|
|
307
365
|
} else if (done) {
|
|
308
366
|
res({ value: undefined, done: true });
|
|
309
367
|
} else {
|
|
@@ -313,10 +371,10 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
313
371
|
};
|
|
314
372
|
|
|
315
373
|
const next = (): Promise<IteratorResult<LiveStreamMessage>> =>
|
|
316
|
-
new Promise((res) => {
|
|
317
|
-
if (resolve(res)) return;
|
|
374
|
+
new Promise((res, reject) => {
|
|
375
|
+
if (resolve(res, reject)) return;
|
|
318
376
|
resolvers.push(() => {
|
|
319
|
-
resolve(res);
|
|
377
|
+
resolve(res, reject);
|
|
320
378
|
});
|
|
321
379
|
});
|
|
322
380
|
|
|
@@ -324,6 +382,8 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
324
382
|
next,
|
|
325
383
|
return: (): Promise<IteratorReturnResult<undefined>> => {
|
|
326
384
|
done = true;
|
|
385
|
+
queue.length = 0;
|
|
386
|
+
queueHead = 0;
|
|
327
387
|
cleanup();
|
|
328
388
|
flushResolvers();
|
|
329
389
|
return Promise.resolve({ value: undefined, done: true });
|
|
@@ -356,6 +416,35 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
|
|
|
356
416
|
return;
|
|
357
417
|
}
|
|
358
418
|
|
|
419
|
+
if (
|
|
420
|
+
event === null ||
|
|
421
|
+
typeof event !== 'object' ||
|
|
422
|
+
Array.isArray(event) ||
|
|
423
|
+
!Object.prototype.hasOwnProperty.call(event, 'type') ||
|
|
424
|
+
typeof event.type !== 'string'
|
|
425
|
+
) {
|
|
426
|
+
this._onError(
|
|
427
|
+
null,
|
|
428
|
+
'received invalid WebSocket event: expected an object with an own string type',
|
|
429
|
+
undefined,
|
|
430
|
+
);
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
const eventType: string = event.type;
|
|
435
|
+
const reservedEventType =
|
|
436
|
+
eventType === 'raw' ||
|
|
437
|
+
eventType === 'close' ||
|
|
438
|
+
eventType === 'event' ||
|
|
439
|
+
eventType === 'reconnecting' ||
|
|
440
|
+
eventType === 'reconnected' ||
|
|
441
|
+
eventType === 'open' ||
|
|
442
|
+
eventType === 'error';
|
|
443
|
+
if (reservedEventType && eventType !== 'error') {
|
|
444
|
+
this._onError(null, 'received reserved WebSocket event type', undefined);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
359
448
|
this._emit('event', event);
|
|
360
449
|
|
|
361
450
|
if (event.type === 'error') {
|
package/src/resources/live/ws.ts
CHANGED
|
@@ -6,6 +6,8 @@ import { LiveWSBase, type LiveWSBaseOptions } from './ws-base';
|
|
|
6
6
|
import { OpenAI } from '../../client';
|
|
7
7
|
import { VERSION } from '../../version';
|
|
8
8
|
|
|
9
|
+
export type { WebSocketStreamOptions } from '../../internal/ws';
|
|
10
|
+
|
|
9
11
|
export type { LiveWSReconnectOptions } from './ws-base';
|
|
10
12
|
|
|
11
13
|
export interface LiveWSClientOptions extends WS.ClientOptions, LiveWSBaseOptions {}
|
|
@@ -75,6 +75,11 @@ export abstract class ResponsesEmitter extends EventEmitter<WebSocketEvents> {
|
|
|
75
75
|
protected _onError(event: WebSocketErrorEvent | null, message?: string | undefined, cause?: any): void {
|
|
76
76
|
const eventMessage = event && ('error' in event ? event.error?.message : event.message);
|
|
77
77
|
message = message ?? eventMessage ?? safeJSONStringify(event) ?? 'unknown error';
|
|
78
|
+
try {
|
|
79
|
+
message = String(message);
|
|
80
|
+
} catch {
|
|
81
|
+
message = '[unserializable error value]';
|
|
82
|
+
}
|
|
78
83
|
|
|
79
84
|
if (!this._hasListener('error')) {
|
|
80
85
|
const error = new WebSocketError(
|
|
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
|
|
|
6
6
|
import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
|
|
7
7
|
import {
|
|
8
8
|
SendQueue,
|
|
9
|
+
getMaxBufferedEvents,
|
|
10
|
+
type WebSocketStreamOptions,
|
|
9
11
|
flattenRawData,
|
|
10
12
|
isRecoverableClose,
|
|
11
13
|
type RawWebSocketData,
|
|
@@ -51,11 +53,11 @@ export interface ResponsesWSBaseOptions {
|
|
|
51
53
|
reconnect?: ResponsesWSReconnectOptions | null | undefined;
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* Default: 1
|
|
56
|
+
* Byte budget for outgoing messages queued while the socket is connecting
|
|
57
|
+
* or reconnecting. An empty queue accepts one message even if it exceeds
|
|
58
|
+
* this budget. Further messages are discarded and an `error` event is emitted
|
|
59
|
+
* if the total queued size would exceed the budget.
|
|
60
|
+
* Default: 1 MiB (1,048,576 bytes).
|
|
59
61
|
*/
|
|
60
62
|
maxQueueSize?: number | undefined;
|
|
61
63
|
}
|
|
@@ -165,6 +167,11 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
165
167
|
* The iterator will exit if the socket closes but exiting the iterator
|
|
166
168
|
* does not close the socket.
|
|
167
169
|
*
|
|
170
|
+
* Pass `maxBufferedEvents` to limit queued records for this iterator, including
|
|
171
|
+
* lifecycle events. Overflow discards its backlog and rejects `next()` with a
|
|
172
|
+
* WebSocketError; the shared socket and other iterators remain active.
|
|
173
|
+
* Omitted means unlimited. This is an event-count limit, not a byte limit.
|
|
174
|
+
*
|
|
168
175
|
* @example
|
|
169
176
|
* ```ts
|
|
170
177
|
* for await (const event of client.stream()) {
|
|
@@ -182,26 +189,59 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
182
189
|
* }
|
|
183
190
|
* ```
|
|
184
191
|
*/
|
|
185
|
-
stream(): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
186
|
-
return this[Symbol.asyncIterator]();
|
|
192
|
+
stream(options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
193
|
+
return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
|
|
187
194
|
}
|
|
188
195
|
|
|
189
|
-
[Symbol.asyncIterator](): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
196
|
+
[Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
|
|
190
197
|
if (!this.socket) {
|
|
191
198
|
throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
|
|
192
199
|
}
|
|
193
200
|
|
|
201
|
+
const maxBufferedEvents = getMaxBufferedEvents(options);
|
|
202
|
+
|
|
194
203
|
// Two-queue async iterator: `queue` buffers incoming messages,
|
|
195
204
|
// `resolvers` buffers waiting next() calls. A push wakes the
|
|
196
205
|
// oldest next(); a next() drains the oldest message.
|
|
197
|
-
const queue: ResponsesStreamMessage[] = [];
|
|
198
|
-
const resolvers: (() => void)[] = [];
|
|
206
|
+
const queue: (ResponsesStreamMessage | undefined)[] = [];
|
|
207
|
+
const resolvers: ((() => void) | undefined)[] = [];
|
|
208
|
+
let queueHead = 0;
|
|
209
|
+
let resolverHead = 0;
|
|
199
210
|
let done = false;
|
|
211
|
+
let failure: WebSocketError | undefined;
|
|
200
212
|
let currentSocket = this.socket;
|
|
201
213
|
|
|
214
|
+
const wakeResolver = () => {
|
|
215
|
+
if (resolverHead >= resolvers.length) return;
|
|
216
|
+
|
|
217
|
+
const resolver = resolvers[resolverHead];
|
|
218
|
+
resolvers[resolverHead] = undefined;
|
|
219
|
+
resolverHead += 1;
|
|
220
|
+
if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
|
|
221
|
+
resolvers.splice(0, resolverHead);
|
|
222
|
+
resolverHead = 0;
|
|
223
|
+
}
|
|
224
|
+
resolver?.();
|
|
225
|
+
};
|
|
226
|
+
|
|
202
227
|
const push = (msg: ResponsesStreamMessage) => {
|
|
228
|
+
if (done) return;
|
|
229
|
+
|
|
230
|
+
if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
|
|
231
|
+
failure = new WebSocketError(
|
|
232
|
+
`WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
|
|
233
|
+
null,
|
|
234
|
+
);
|
|
235
|
+
done = true;
|
|
236
|
+
queue.length = 0;
|
|
237
|
+
queueHead = 0;
|
|
238
|
+
cleanup();
|
|
239
|
+
flushResolvers();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
203
243
|
queue.push(msg);
|
|
204
|
-
|
|
244
|
+
wakeResolver();
|
|
205
245
|
};
|
|
206
246
|
|
|
207
247
|
const onEvent = (event: ResponsesAPI.ResponsesServerEvent) => {
|
|
@@ -231,9 +271,14 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
231
271
|
};
|
|
232
272
|
|
|
233
273
|
const flushResolvers = () => {
|
|
234
|
-
|
|
235
|
-
resolver
|
|
274
|
+
while (resolverHead < resolvers.length) {
|
|
275
|
+
const resolver = resolvers[resolverHead];
|
|
276
|
+
resolvers[resolverHead] = undefined;
|
|
277
|
+
resolverHead += 1;
|
|
278
|
+
resolver?.();
|
|
236
279
|
}
|
|
280
|
+
resolvers.length = 0;
|
|
281
|
+
resolverHead = 0;
|
|
237
282
|
};
|
|
238
283
|
|
|
239
284
|
const onClose = (
|
|
@@ -247,8 +292,9 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
247
292
|
cleanup();
|
|
248
293
|
};
|
|
249
294
|
|
|
250
|
-
const onSocketSwap = (
|
|
251
|
-
|
|
295
|
+
const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
|
|
296
|
+
if (currentSocket === newSocket) return;
|
|
297
|
+
currentSocket.off('open', onOpen);
|
|
252
298
|
newSocket.on('open', onOpen);
|
|
253
299
|
currentSocket = newSocket;
|
|
254
300
|
};
|
|
@@ -305,9 +351,21 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
305
351
|
}
|
|
306
352
|
}
|
|
307
353
|
|
|
308
|
-
const resolve = (
|
|
309
|
-
|
|
310
|
-
|
|
354
|
+
const resolve = (
|
|
355
|
+
res: (value: IteratorResult<ResponsesStreamMessage>) => void,
|
|
356
|
+
reject: (error: WebSocketError) => void,
|
|
357
|
+
) => {
|
|
358
|
+
if (failure) {
|
|
359
|
+
reject(failure);
|
|
360
|
+
} else if (queueHead < queue.length) {
|
|
361
|
+
const queued = queue[queueHead]!;
|
|
362
|
+
queue[queueHead] = undefined;
|
|
363
|
+
queueHead += 1;
|
|
364
|
+
if (queueHead >= 64 && queueHead * 2 >= queue.length) {
|
|
365
|
+
queue.splice(0, queueHead);
|
|
366
|
+
queueHead = 0;
|
|
367
|
+
}
|
|
368
|
+
res({ value: queued, done: false });
|
|
311
369
|
} else if (done) {
|
|
312
370
|
res({ value: undefined, done: true });
|
|
313
371
|
} else {
|
|
@@ -317,10 +375,10 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
317
375
|
};
|
|
318
376
|
|
|
319
377
|
const next = (): Promise<IteratorResult<ResponsesStreamMessage>> =>
|
|
320
|
-
new Promise((res) => {
|
|
321
|
-
if (resolve(res)) return;
|
|
378
|
+
new Promise((res, reject) => {
|
|
379
|
+
if (resolve(res, reject)) return;
|
|
322
380
|
resolvers.push(() => {
|
|
323
|
-
resolve(res);
|
|
381
|
+
resolve(res, reject);
|
|
324
382
|
});
|
|
325
383
|
});
|
|
326
384
|
|
|
@@ -328,6 +386,8 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
328
386
|
next,
|
|
329
387
|
return: (): Promise<IteratorReturnResult<undefined>> => {
|
|
330
388
|
done = true;
|
|
389
|
+
queue.length = 0;
|
|
390
|
+
queueHead = 0;
|
|
331
391
|
cleanup();
|
|
332
392
|
flushResolvers();
|
|
333
393
|
return Promise.resolve({ value: undefined, done: true });
|
|
@@ -360,6 +420,35 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
|
|
|
360
420
|
return;
|
|
361
421
|
}
|
|
362
422
|
|
|
423
|
+
if (
|
|
424
|
+
event === null ||
|
|
425
|
+
typeof event !== 'object' ||
|
|
426
|
+
Array.isArray(event) ||
|
|
427
|
+
!Object.prototype.hasOwnProperty.call(event, 'type') ||
|
|
428
|
+
typeof event.type !== 'string'
|
|
429
|
+
) {
|
|
430
|
+
this._onError(
|
|
431
|
+
null,
|
|
432
|
+
'received invalid WebSocket event: expected an object with an own string type',
|
|
433
|
+
undefined,
|
|
434
|
+
);
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const eventType: string = event.type;
|
|
439
|
+
const reservedEventType =
|
|
440
|
+
eventType === 'raw' ||
|
|
441
|
+
eventType === 'close' ||
|
|
442
|
+
eventType === 'event' ||
|
|
443
|
+
eventType === 'reconnecting' ||
|
|
444
|
+
eventType === 'reconnected' ||
|
|
445
|
+
eventType === 'open' ||
|
|
446
|
+
eventType === 'error';
|
|
447
|
+
if (reservedEventType && eventType !== 'error') {
|
|
448
|
+
this._onError(null, 'received reserved WebSocket event type', undefined);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
|
|
363
452
|
this._emit('event', event);
|
|
364
453
|
|
|
365
454
|
if (event.type === 'error') {
|