openai 7.12.1 → 7.14.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 +22 -0
- package/client.d.mts +3 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +3 -0
- package/client.d.ts.map +1 -1
- package/client.js +3 -0
- package/client.js.map +1 -1
- package/client.mjs +3 -0
- package/client.mjs.map +1 -1
- package/helpers/live.d.mts +2 -0
- package/helpers/live.d.mts.map +1 -0
- package/helpers/live.d.ts +2 -0
- package/helpers/live.d.ts.map +1 -0
- package/helpers/live.js +6 -0
- package/helpers/live.js.map +1 -0
- package/helpers/live.mjs +2 -0
- package/helpers/live.mjs.map +1 -0
- package/lib/live/transcript-grouper.d.mts +96 -0
- package/lib/live/transcript-grouper.d.mts.map +1 -0
- package/lib/live/transcript-grouper.d.ts +96 -0
- package/lib/live/transcript-grouper.d.ts.map +1 -0
- package/lib/live/transcript-grouper.js +223 -0
- package/lib/live/transcript-grouper.js.map +1 -0
- package/lib/live/transcript-grouper.mjs +219 -0
- package/lib/live/transcript-grouper.mjs.map +1 -0
- package/lib/live/transcript-grouping.d.mts +49 -0
- package/lib/live/transcript-grouping.d.mts.map +1 -0
- package/lib/live/transcript-grouping.d.ts +49 -0
- package/lib/live/transcript-grouping.d.ts.map +1 -0
- package/lib/live/transcript-grouping.js +287 -0
- package/lib/live/transcript-grouping.js.map +1 -0
- package/lib/live/transcript-grouping.mjs +283 -0
- package/lib/live/transcript-grouping.mjs.map +1 -0
- package/lib/live/webrtc.d.mts +13 -0
- package/lib/live/webrtc.d.mts.map +1 -0
- package/lib/live/webrtc.d.ts +13 -0
- package/lib/live/webrtc.d.ts.map +1 -0
- package/lib/live/webrtc.js +16 -0
- package/lib/live/webrtc.js.map +1 -0
- package/lib/live/webrtc.mjs +10 -0
- package/lib/live/webrtc.mjs.map +1 -0
- package/lib/realtime/webrtc.d.mts +13 -0
- package/lib/realtime/webrtc.d.mts.map +1 -0
- package/lib/realtime/webrtc.d.ts +13 -0
- package/lib/realtime/webrtc.d.ts.map +1 -0
- package/lib/realtime/webrtc.js +16 -0
- package/lib/realtime/webrtc.js.map +1 -0
- package/lib/realtime/webrtc.mjs +10 -0
- package/lib/realtime/webrtc.mjs.map +1 -0
- package/lib/webrtc/connection.d.mts +40 -0
- package/lib/webrtc/connection.d.mts.map +1 -0
- package/lib/webrtc/connection.d.ts +40 -0
- package/lib/webrtc/connection.d.ts.map +1 -0
- package/lib/webrtc/connection.js +228 -0
- package/lib/webrtc/connection.js.map +1 -0
- package/lib/webrtc/connection.mjs +224 -0
- package/lib/webrtc/connection.mjs.map +1 -0
- package/lib/webrtc/data-channel.d.mts +32 -0
- package/lib/webrtc/data-channel.d.mts.map +1 -0
- package/lib/webrtc/data-channel.d.ts +32 -0
- package/lib/webrtc/data-channel.d.ts.map +1 -0
- package/lib/webrtc/data-channel.js +125 -0
- package/lib/webrtc/data-channel.js.map +1 -0
- package/lib/webrtc/data-channel.mjs +121 -0
- package/lib/webrtc/data-channel.mjs.map +1 -0
- package/lib/webrtc/errors.d.mts +19 -0
- package/lib/webrtc/errors.d.mts.map +1 -0
- package/lib/webrtc/errors.d.ts +19 -0
- package/lib/webrtc/errors.d.ts.map +1 -0
- package/lib/webrtc/errors.js +18 -0
- package/lib/webrtc/errors.js.map +1 -0
- package/lib/webrtc/errors.mjs +14 -0
- package/lib/webrtc/errors.mjs.map +1 -0
- package/lib/webrtc/subscriptions.d.mts +13 -0
- package/lib/webrtc/subscriptions.d.mts.map +1 -0
- package/lib/webrtc/subscriptions.d.ts +13 -0
- package/lib/webrtc/subscriptions.d.ts.map +1 -0
- package/lib/webrtc/subscriptions.js +62 -0
- package/lib/webrtc/subscriptions.js.map +1 -0
- package/lib/webrtc/subscriptions.mjs +58 -0
- package/lib/webrtc/subscriptions.mjs.map +1 -0
- package/lib/webrtc/types.d.mts +99 -0
- package/lib/webrtc/types.d.mts.map +1 -0
- package/lib/webrtc/types.d.ts +99 -0
- package/lib/webrtc/types.d.ts.map +1 -0
- package/lib/webrtc/types.js +3 -0
- package/lib/webrtc/types.js.map +1 -0
- package/lib/webrtc/types.mjs +2 -0
- package/lib/webrtc/types.mjs.map +1 -0
- package/live/webrtc.d.mts +3 -0
- package/live/webrtc.d.mts.map +1 -0
- package/live/webrtc.d.ts +3 -0
- package/live/webrtc.d.ts.map +1 -0
- package/live/webrtc.js +8 -0
- package/live/webrtc.js.map +1 -0
- package/live/webrtc.mjs +2 -0
- package/live/webrtc.mjs.map +1 -0
- package/package.json +11 -1
- package/realtime/webrtc.d.mts +3 -0
- package/realtime/webrtc.d.mts.map +1 -0
- package/realtime/webrtc.d.ts +3 -0
- package/realtime/webrtc.d.ts.map +1 -0
- package/realtime/webrtc.js +8 -0
- package/realtime/webrtc.js.map +1 -0
- package/realtime/webrtc.mjs +2 -0
- package/realtime/webrtc.mjs.map +1 -0
- package/resources/admin/organization/audit-logs.d.mts +1 -1
- package/resources/admin/organization/audit-logs.d.ts +1 -1
- package/resources/admin/organization/projects/api-keys.d.mts +5 -0
- package/resources/admin/organization/projects/api-keys.d.mts.map +1 -1
- package/resources/admin/organization/projects/api-keys.d.ts +5 -0
- package/resources/admin/organization/projects/api-keys.d.ts.map +1 -1
- package/resources/admin/organization/projects/projects.d.mts +2 -2
- package/resources/admin/organization/projects/projects.d.ts +2 -2
- package/resources/admin/organization/projects/service-accounts/service-accounts.d.mts +13 -0
- package/resources/admin/organization/projects/service-accounts/service-accounts.d.mts.map +1 -1
- package/resources/admin/organization/projects/service-accounts/service-accounts.d.ts +13 -0
- package/resources/admin/organization/projects/service-accounts/service-accounts.d.ts.map +1 -1
- package/resources/admin/organization/projects/service-accounts/service-accounts.js.map +1 -1
- package/resources/admin/organization/projects/service-accounts/service-accounts.mjs.map +1 -1
- package/resources/audio/speech.d.mts +3 -2
- package/resources/audio/speech.d.mts.map +1 -1
- package/resources/audio/speech.d.ts +3 -2
- package/resources/audio/speech.d.ts.map +1 -1
- package/resources/audio/transcriptions.d.mts +10 -10
- package/resources/audio/transcriptions.d.ts +10 -10
- package/resources/audio/translations.d.mts +1 -1
- package/resources/audio/translations.d.ts +1 -1
- package/resources/batches.d.mts +6 -5
- package/resources/batches.d.mts.map +1 -1
- package/resources/batches.d.ts +6 -5
- package/resources/batches.d.ts.map +1 -1
- package/resources/beta/assistants.d.mts +143 -147
- package/resources/beta/assistants.d.mts.map +1 -1
- package/resources/beta/assistants.d.ts +143 -147
- package/resources/beta/assistants.d.ts.map +1 -1
- package/resources/beta/responses/input-tokens.d.mts +11 -11
- package/resources/beta/responses/input-tokens.d.ts +11 -11
- package/resources/beta/responses/responses.d.mts +229 -170
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +229 -170
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js +3 -3
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs +3 -3
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/beta/threads/messages.d.mts +29 -23
- package/resources/beta/threads/messages.d.mts.map +1 -1
- package/resources/beta/threads/messages.d.ts +29 -23
- package/resources/beta/threads/messages.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.d.mts +39 -35
- package/resources/beta/threads/runs/runs.d.mts.map +1 -1
- package/resources/beta/threads/runs/runs.d.ts +39 -35
- package/resources/beta/threads/runs/runs.d.ts.map +1 -1
- package/resources/beta/threads/runs/runs.js.map +1 -1
- package/resources/beta/threads/runs/runs.mjs.map +1 -1
- package/resources/beta/threads/runs/steps.d.mts +14 -15
- package/resources/beta/threads/runs/steps.d.mts.map +1 -1
- package/resources/beta/threads/runs/steps.d.ts +14 -15
- package/resources/beta/threads/runs/steps.d.ts.map +1 -1
- package/resources/beta/threads/threads.d.mts +53 -50
- package/resources/beta/threads/threads.d.mts.map +1 -1
- package/resources/beta/threads/threads.d.ts +53 -50
- package/resources/beta/threads/threads.d.ts.map +1 -1
- package/resources/beta/threads/threads.js.map +1 -1
- package/resources/beta/threads/threads.mjs.map +1 -1
- package/resources/chat/completions/completions.d.mts +89 -81
- package/resources/chat/completions/completions.d.mts.map +1 -1
- package/resources/chat/completions/completions.d.ts +89 -81
- 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/completions.d.mts +15 -14
- package/resources/completions.d.mts.map +1 -1
- package/resources/completions.d.ts +15 -14
- package/resources/completions.d.ts.map +1 -1
- package/resources/content-provenance-checks.d.mts +1 -1
- package/resources/content-provenance-checks.d.ts +1 -1
- package/resources/content-provenance-checks.js +1 -1
- package/resources/content-provenance-checks.mjs +1 -1
- package/resources/conversations/items.d.mts +19 -3
- package/resources/conversations/items.d.mts.map +1 -1
- package/resources/conversations/items.d.ts +19 -3
- package/resources/conversations/items.d.ts.map +1 -1
- package/resources/embeddings.d.mts +6 -6
- package/resources/embeddings.d.ts +6 -6
- package/resources/evals/evals.d.mts +1 -1
- package/resources/evals/evals.d.ts +1 -1
- package/resources/evals/evals.js +1 -1
- package/resources/evals/evals.mjs +1 -1
- package/resources/evals/runs/runs.d.mts +62 -57
- package/resources/evals/runs/runs.d.mts.map +1 -1
- package/resources/evals/runs/runs.d.ts +62 -57
- package/resources/evals/runs/runs.d.ts.map +1 -1
- package/resources/evals/runs/runs.js.map +1 -1
- package/resources/evals/runs/runs.mjs.map +1 -1
- package/resources/files.d.mts +5 -5
- package/resources/files.d.ts +5 -5
- package/resources/files.js +5 -5
- package/resources/files.mjs +5 -5
- package/resources/fine-tuning/alpha/graders.d.mts +5 -4
- package/resources/fine-tuning/alpha/graders.d.mts.map +1 -1
- package/resources/fine-tuning/alpha/graders.d.ts +5 -4
- package/resources/fine-tuning/alpha/graders.d.ts.map +1 -1
- package/resources/fine-tuning/checkpoints/permissions.d.mts +8 -4
- package/resources/fine-tuning/checkpoints/permissions.d.mts.map +1 -1
- package/resources/fine-tuning/checkpoints/permissions.d.ts +8 -4
- package/resources/fine-tuning/checkpoints/permissions.d.ts.map +1 -1
- package/resources/fine-tuning/checkpoints/permissions.js +8 -4
- package/resources/fine-tuning/checkpoints/permissions.js.map +1 -1
- package/resources/fine-tuning/checkpoints/permissions.mjs +8 -4
- package/resources/fine-tuning/checkpoints/permissions.mjs.map +1 -1
- package/resources/fine-tuning/jobs/jobs.d.mts +13 -12
- package/resources/fine-tuning/jobs/jobs.d.mts.map +1 -1
- package/resources/fine-tuning/jobs/jobs.d.ts +13 -12
- package/resources/fine-tuning/jobs/jobs.d.ts.map +1 -1
- package/resources/fine-tuning/jobs/jobs.js +2 -2
- package/resources/fine-tuning/jobs/jobs.js.map +1 -1
- package/resources/fine-tuning/jobs/jobs.mjs +2 -2
- package/resources/fine-tuning/jobs/jobs.mjs.map +1 -1
- package/resources/graders/grader-models.d.mts +1 -1
- package/resources/graders/grader-models.d.ts +1 -1
- package/resources/images.d.mts +10 -10
- package/resources/images.d.ts +10 -10
- package/resources/index.d.mts +1 -0
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -0
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +3 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +1 -0
- package/resources/index.mjs.map +1 -1
- package/resources/live/forks/forks.d.mts +110 -0
- package/resources/live/forks/forks.d.mts.map +1 -0
- package/resources/live/forks/forks.d.ts +110 -0
- package/resources/live/forks/forks.d.ts.map +1 -0
- package/resources/live/forks/forks.js +9 -0
- package/resources/live/forks/forks.js.map +1 -0
- package/resources/live/forks/forks.mjs +5 -0
- package/resources/live/forks/forks.mjs.map +1 -0
- package/resources/live/forks/index.d.mts +4 -0
- package/resources/live/forks/index.d.mts.map +1 -0
- package/resources/live/forks/index.d.ts +4 -0
- package/resources/live/forks/index.d.ts.map +1 -0
- package/resources/live/forks/index.js +7 -0
- package/resources/live/forks/index.js.map +1 -0
- package/resources/live/forks/index.mjs +3 -0
- package/resources/live/forks/index.mjs.map +1 -0
- package/resources/live/forks/internal-base.d.mts +73 -0
- package/resources/live/forks/internal-base.d.mts.map +1 -0
- package/resources/live/forks/internal-base.d.ts +73 -0
- package/resources/live/forks/internal-base.d.ts.map +1 -0
- package/resources/live/forks/internal-base.js +49 -0
- package/resources/live/forks/internal-base.js.map +1 -0
- package/resources/live/forks/internal-base.mjs +43 -0
- package/resources/live/forks/internal-base.mjs.map +1 -0
- package/resources/live/forks/ws-base.d.mts +109 -0
- package/resources/live/forks/ws-base.d.mts.map +1 -0
- package/resources/live/forks/ws-base.d.ts +109 -0
- package/resources/live/forks/ws-base.d.ts.map +1 -0
- package/resources/live/forks/ws-base.js +476 -0
- package/resources/live/forks/ws-base.js.map +1 -0
- package/resources/live/forks/ws-base.mjs +472 -0
- package/resources/live/forks/ws-base.mjs.map +1 -0
- package/resources/live/forks/ws.d.mts +13 -0
- package/resources/live/forks/ws.d.mts.map +1 -0
- package/resources/live/forks/ws.d.ts +13 -0
- package/resources/live/forks/ws.d.ts.map +1 -0
- package/resources/live/forks/ws.js +34 -0
- package/resources/live/forks/ws.js.map +1 -0
- package/resources/live/forks/ws.mjs +29 -0
- package/resources/live/forks/ws.mjs.map +1 -0
- package/resources/live/forks.d.mts +2 -0
- package/resources/live/forks.d.mts.map +1 -0
- package/resources/live/forks.d.ts +2 -0
- package/resources/live/forks.d.ts.map +1 -0
- package/resources/live/forks.js +6 -0
- package/resources/live/forks.js.map +1 -0
- package/resources/live/forks.mjs +3 -0
- package/resources/live/forks.mjs.map +1 -0
- package/resources/live/index.d.mts +7 -0
- package/resources/live/index.d.mts.map +1 -0
- package/resources/live/index.d.ts +7 -0
- package/resources/live/index.d.ts.map +1 -0
- package/resources/live/index.js +13 -0
- package/resources/live/index.js.map +1 -0
- package/resources/live/index.mjs +6 -0
- package/resources/live/index.mjs.map +1 -0
- package/resources/live/internal-base.d.mts +71 -0
- package/resources/live/internal-base.d.mts.map +1 -0
- package/resources/live/internal-base.d.ts +71 -0
- package/resources/live/internal-base.d.ts.map +1 -0
- package/resources/live/internal-base.js +48 -0
- package/resources/live/internal-base.js.map +1 -0
- package/resources/live/internal-base.mjs +42 -0
- package/resources/live/internal-base.mjs.map +1 -0
- package/resources/live/live.d.mts +1864 -0
- package/resources/live/live.d.mts.map +1 -0
- package/resources/live/live.d.ts +1864 -0
- package/resources/live/live.d.ts.map +1 -0
- package/resources/live/live.js +40 -0
- package/resources/live/live.js.map +1 -0
- package/resources/live/live.mjs +35 -0
- package/resources/live/live.mjs.map +1 -0
- package/resources/live/sessions.d.mts +254 -0
- package/resources/live/sessions.d.mts.map +1 -0
- package/resources/live/sessions.d.ts +254 -0
- package/resources/live/sessions.d.ts.map +1 -0
- package/resources/live/sessions.js +118 -0
- package/resources/live/sessions.js.map +1 -0
- package/resources/live/sessions.mjs +114 -0
- package/resources/live/sessions.mjs.map +1 -0
- package/resources/live/sideband/index.d.mts +4 -0
- package/resources/live/sideband/index.d.mts.map +1 -0
- package/resources/live/sideband/index.d.ts +4 -0
- package/resources/live/sideband/index.d.ts.map +1 -0
- package/resources/live/sideband/index.js +7 -0
- package/resources/live/sideband/index.js.map +1 -0
- package/resources/live/sideband/index.mjs +3 -0
- package/resources/live/sideband/index.mjs.map +1 -0
- package/resources/live/sideband/internal-base.d.mts +73 -0
- package/resources/live/sideband/internal-base.d.mts.map +1 -0
- package/resources/live/sideband/internal-base.d.ts +73 -0
- package/resources/live/sideband/internal-base.d.ts.map +1 -0
- package/resources/live/sideband/internal-base.js +49 -0
- package/resources/live/sideband/internal-base.js.map +1 -0
- package/resources/live/sideband/internal-base.mjs +43 -0
- package/resources/live/sideband/internal-base.mjs.map +1 -0
- package/resources/live/sideband/sideband.d.mts +25 -0
- package/resources/live/sideband/sideband.d.mts.map +1 -0
- package/resources/live/sideband/sideband.d.ts +25 -0
- package/resources/live/sideband/sideband.d.ts.map +1 -0
- package/resources/live/sideband/sideband.js +9 -0
- package/resources/live/sideband/sideband.js.map +1 -0
- package/resources/live/sideband/sideband.mjs +5 -0
- package/resources/live/sideband/sideband.mjs.map +1 -0
- package/resources/live/sideband/ws-base.d.mts +114 -0
- package/resources/live/sideband/ws-base.d.mts.map +1 -0
- package/resources/live/sideband/ws-base.d.ts +114 -0
- package/resources/live/sideband/ws-base.d.ts.map +1 -0
- package/resources/live/sideband/ws-base.js +476 -0
- package/resources/live/sideband/ws-base.js.map +1 -0
- package/resources/live/sideband/ws-base.mjs +472 -0
- package/resources/live/sideband/ws-base.mjs.map +1 -0
- package/resources/live/sideband/ws.d.mts +13 -0
- package/resources/live/sideband/ws.d.mts.map +1 -0
- package/resources/live/sideband/ws.d.ts +13 -0
- package/resources/live/sideband/ws.d.ts.map +1 -0
- package/resources/live/sideband/ws.js +34 -0
- package/resources/live/sideband/ws.js.map +1 -0
- package/resources/live/sideband/ws.mjs +29 -0
- package/resources/live/sideband/ws.mjs.map +1 -0
- package/resources/live/sideband.d.mts +2 -0
- package/resources/live/sideband.d.mts.map +1 -0
- package/resources/live/sideband.d.ts +2 -0
- package/resources/live/sideband.d.ts.map +1 -0
- package/resources/live/sideband.js +6 -0
- package/resources/live/sideband.js.map +1 -0
- package/resources/live/sideband.mjs +3 -0
- package/resources/live/sideband.mjs.map +1 -0
- package/resources/live/ws-base.d.mts +106 -0
- package/resources/live/ws-base.d.mts.map +1 -0
- package/resources/live/ws-base.d.ts +106 -0
- package/resources/live/ws-base.d.ts.map +1 -0
- package/resources/live/ws-base.js +476 -0
- package/resources/live/ws-base.js.map +1 -0
- package/resources/live/ws-base.mjs +472 -0
- package/resources/live/ws-base.mjs.map +1 -0
- package/resources/live/ws.d.mts +13 -0
- package/resources/live/ws.d.mts.map +1 -0
- package/resources/live/ws.d.ts +13 -0
- package/resources/live/ws.d.ts.map +1 -0
- package/resources/live/ws.js +34 -0
- package/resources/live/ws.js.map +1 -0
- package/resources/live/ws.mjs +29 -0
- package/resources/live/ws.mjs.map +1 -0
- package/resources/live.d.mts +2 -0
- package/resources/live.d.mts.map +1 -0
- package/resources/live.d.ts +2 -0
- package/resources/live.d.ts.map +1 -0
- package/resources/live.js +6 -0
- package/resources/live.js.map +1 -0
- package/resources/live.mjs +3 -0
- package/resources/live.mjs.map +1 -0
- package/resources/moderations.d.mts +5 -4
- package/resources/moderations.d.mts.map +1 -1
- package/resources/moderations.d.ts +5 -4
- package/resources/moderations.d.ts.map +1 -1
- package/resources/moderations.js +2 -1
- package/resources/moderations.js.map +1 -1
- package/resources/moderations.mjs +2 -1
- package/resources/moderations.mjs.map +1 -1
- package/resources/realtime/calls.d.mts +1 -1
- package/resources/realtime/calls.d.ts +1 -1
- package/resources/realtime/client-secrets.d.mts +4 -4
- package/resources/realtime/client-secrets.d.ts +4 -4
- package/resources/realtime/client-secrets.js +1 -1
- package/resources/realtime/client-secrets.mjs +1 -1
- package/resources/realtime/realtime.d.mts +16 -16
- package/resources/realtime/realtime.d.ts +16 -16
- package/resources/responses/input-tokens.d.mts +9 -9
- package/resources/responses/input-tokens.d.ts +9 -9
- package/resources/responses/responses.d.mts +223 -164
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +223 -164
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js +3 -3
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs +3 -3
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/shared.d.mts +12 -12
- package/resources/shared.d.ts +12 -12
- package/resources/uploads/parts.d.mts +5 -4
- package/resources/uploads/parts.d.mts.map +1 -1
- package/resources/uploads/parts.d.ts +5 -4
- package/resources/uploads/parts.d.ts.map +1 -1
- package/resources/uploads/parts.js +5 -4
- package/resources/uploads/parts.js.map +1 -1
- package/resources/uploads/parts.mjs +5 -4
- package/resources/uploads/parts.mjs.map +1 -1
- package/resources/uploads/uploads.d.mts +11 -11
- package/resources/uploads/uploads.d.ts +11 -11
- package/resources/uploads/uploads.js +9 -9
- package/resources/uploads/uploads.mjs +9 -9
- package/resources/vector-stores/file-batches.d.mts +11 -11
- package/resources/vector-stores/file-batches.d.ts +11 -11
- package/resources/vector-stores/files.d.mts +8 -8
- package/resources/vector-stores/files.d.ts +8 -8
- package/resources/vector-stores/files.js +3 -3
- package/resources/vector-stores/files.mjs +3 -3
- package/resources/vector-stores/vector-stores.d.mts +3 -3
- package/resources/vector-stores/vector-stores.d.ts +3 -3
- package/resources/webhooks/webhooks.d.mts +78 -7
- package/resources/webhooks/webhooks.d.mts.map +1 -1
- package/resources/webhooks/webhooks.d.ts +78 -7
- package/resources/webhooks/webhooks.d.ts.map +1 -1
- package/src/client.ts +5 -0
- package/src/helpers/live.ts +8 -0
- package/src/lib/live/transcript-grouper.ts +303 -0
- package/src/lib/live/transcript-grouping.ts +362 -0
- package/src/lib/live/webrtc.ts +23 -0
- package/src/lib/realtime/webrtc.ts +20 -0
- package/src/lib/webrtc/connection.ts +309 -0
- package/src/lib/webrtc/data-channel.ts +144 -0
- package/src/lib/webrtc/errors.ts +38 -0
- package/src/lib/webrtc/subscriptions.ts +62 -0
- package/src/lib/webrtc/types.ts +109 -0
- package/src/live/webrtc.ts +10 -0
- package/src/realtime/webrtc.ts +10 -0
- package/src/resources/admin/organization/audit-logs.ts +1 -1
- package/src/resources/admin/organization/projects/api-keys.ts +6 -0
- package/src/resources/admin/organization/projects/projects.ts +2 -2
- package/src/resources/admin/organization/projects/service-accounts/service-accounts.ts +15 -0
- package/src/resources/audio/speech.ts +3 -2
- package/src/resources/audio/transcriptions.ts +10 -10
- package/src/resources/audio/translations.ts +1 -1
- package/src/resources/batches.ts +6 -5
- package/src/resources/beta/assistants.ts +143 -147
- package/src/resources/beta/responses/input-tokens.ts +11 -11
- package/src/resources/beta/responses/responses.ts +241 -170
- package/src/resources/beta/threads/messages.ts +29 -23
- package/src/resources/beta/threads/runs/runs.ts +39 -35
- package/src/resources/beta/threads/runs/steps.ts +14 -15
- package/src/resources/beta/threads/threads.ts +53 -50
- package/src/resources/chat/completions/completions.ts +89 -81
- package/src/resources/completions.ts +15 -14
- package/src/resources/content-provenance-checks.ts +1 -1
- package/src/resources/conversations/items.ts +23 -3
- package/src/resources/embeddings.ts +6 -6
- package/src/resources/evals/evals.ts +1 -1
- package/src/resources/evals/runs/runs.ts +62 -57
- package/src/resources/files.ts +5 -5
- package/src/resources/fine-tuning/alpha/graders.ts +5 -4
- package/src/resources/fine-tuning/checkpoints/permissions.ts +8 -4
- package/src/resources/fine-tuning/jobs/jobs.ts +13 -12
- package/src/resources/graders/grader-models.ts +1 -1
- package/src/resources/images.ts +10 -10
- package/src/resources/index.ts +1 -0
- package/src/resources/live/api.md +87 -0
- package/src/resources/live/forks/forks.ts +169 -0
- package/src/resources/live/forks/index.ts +5 -0
- package/src/resources/live/forks/internal-base.ts +107 -0
- package/src/resources/live/forks/ws-base.ts +611 -0
- package/src/resources/live/forks/ws.ts +46 -0
- package/src/resources/live/forks.ts +3 -0
- package/src/resources/live/index.ts +20 -0
- package/src/resources/live/internal-base.ts +104 -0
- package/src/resources/live/live.ts +2296 -0
- package/src/resources/live/sessions.ts +337 -0
- package/src/resources/live/sideband/index.ts +10 -0
- package/src/resources/live/sideband/internal-base.ts +107 -0
- package/src/resources/live/sideband/sideband.ts +58 -0
- package/src/resources/live/sideband/ws-base.ts +621 -0
- package/src/resources/live/sideband/ws.ts +46 -0
- package/src/resources/live/sideband.ts +3 -0
- package/src/resources/live/ws-base.ts +607 -0
- package/src/resources/live/ws.ts +42 -0
- package/src/resources/live.ts +3 -0
- package/src/resources/moderations.ts +5 -4
- package/src/resources/realtime/calls.ts +1 -1
- package/src/resources/realtime/client-secrets.ts +4 -4
- package/src/resources/realtime/realtime.ts +16 -16
- package/src/resources/responses/input-tokens.ts +9 -9
- package/src/resources/responses/responses.ts +235 -164
- package/src/resources/shared.ts +12 -12
- package/src/resources/uploads/parts.ts +5 -4
- package/src/resources/uploads/uploads.ts +11 -11
- package/src/resources/vector-stores/file-batches.ts +11 -11
- package/src/resources/vector-stores/files.ts +8 -8
- package/src/resources/vector-stores/vector-stores.ts +3 -3
- package/src/resources/webhooks/api.md +1 -0
- package/src/resources/webhooks/webhooks.ts +88 -5
- 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
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TranscriptGrouper = void 0;
|
|
4
|
+
const EventEmitter_1 = require("../../core/EventEmitter.js");
|
|
5
|
+
const error_1 = require("../../core/error.js");
|
|
6
|
+
const transcript_grouping_1 = require("./transcript-grouping.js");
|
|
7
|
+
const SETTLE_MS = 50;
|
|
8
|
+
const MAX_TIMEOUT_MS = 2147483647;
|
|
9
|
+
let nextGrouperId = 0;
|
|
10
|
+
function normalizeTranscript(event) {
|
|
11
|
+
const { event_id: id, delta: text, start_ms: startMs, end_ms: endMs } = event;
|
|
12
|
+
const speaker = event.type === 'session.input_transcript.delta' ? 'user' : 'assistant';
|
|
13
|
+
if (typeof id !== 'string' ||
|
|
14
|
+
!id ||
|
|
15
|
+
typeof text !== 'string' ||
|
|
16
|
+
!Number.isSafeInteger(startMs) ||
|
|
17
|
+
startMs < 0 ||
|
|
18
|
+
!Number.isSafeInteger(endMs) ||
|
|
19
|
+
endMs < startMs) {
|
|
20
|
+
throw new error_1.OpenAIError('Invalid Live transcript delta: expected an event ID, text, and a nonnegative timed interval');
|
|
21
|
+
}
|
|
22
|
+
return { id, speaker, text, startMs, endMs, receivedAt: performance.now() };
|
|
23
|
+
}
|
|
24
|
+
function optionsWithDefaults(options) {
|
|
25
|
+
const resolved = {
|
|
26
|
+
minTurnSeparationMs: options.minTurnSeparationMs ?? 500,
|
|
27
|
+
assistantSilenceMs: options.assistantSilenceMs ?? 2000,
|
|
28
|
+
backchannelMaxDurationMs: options.backchannelMaxDurationMs ?? 1000,
|
|
29
|
+
backchannelIsolationMs: options.backchannelIsolationMs ?? 2000,
|
|
30
|
+
};
|
|
31
|
+
for (const [name, value] of Object.entries(resolved)) {
|
|
32
|
+
if (!Number.isFinite(value) || value < 0 || value > MAX_TIMEOUT_MS) {
|
|
33
|
+
throw new error_1.OpenAIError(`${name} must be a finite number between 0 and ${MAX_TIMEOUT_MS}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { ...resolved, additionalAcknowledgments: options.additionalAcknowledgments ?? [] };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Groups public Live transcript events using speaker and
|
|
40
|
+
* backchannel heuristics. Raw events remain available on your transport.
|
|
41
|
+
*
|
|
42
|
+
* Only session.input_transcript.delta, session.output_transcript.delta and session.closed are
|
|
43
|
+
* consumed. No audio, engine frames, server turn events or internal end markers
|
|
44
|
+
* are required. Ambiguous speaker changes settle for at most 50 ms. When source
|
|
45
|
+
* time stops arriving, a monotonic local clock supplies a best-effort inactivity
|
|
46
|
+
* fallback. Delayed delivery can therefore change grouping; this is not VAD,
|
|
47
|
+
* playback tracking, or a lossless transcript (some backchannels are suppressed).
|
|
48
|
+
*
|
|
49
|
+
* Create one instance per session. Call close() on transport loss or teardown;
|
|
50
|
+
* the grouper never owns or closes your transport and does not reconnect it.
|
|
51
|
+
*/
|
|
52
|
+
// oxlint-disable-next-line unicorn/prefer-event-target -- This is the SDK's browser-compatible typed emitter, not node:events.
|
|
53
|
+
class TranscriptGrouper extends EventEmitter_1.EventEmitter {
|
|
54
|
+
/** Create a grouper with speaker-based defaults. Invalid timing options throw OpenAIError. */
|
|
55
|
+
constructor(options = {}) {
|
|
56
|
+
super();
|
|
57
|
+
this.seenIds = new Set();
|
|
58
|
+
this.pending = [];
|
|
59
|
+
this.closed = false;
|
|
60
|
+
this.dispatching = false;
|
|
61
|
+
this.updates = [];
|
|
62
|
+
this.grouping = new transcript_grouping_1.TranscriptGrouping(optionsWithDefaults(options), `segment_${nextGrouperId}`);
|
|
63
|
+
nextGrouperId += 1;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Consume one public Live event. Duplicate transcript event IDs and unrelated
|
|
67
|
+
* event types are ignored. Empty text does not count as speech activity.
|
|
68
|
+
* Malformed transcript fields or use after close() throw OpenAIError.
|
|
69
|
+
*/
|
|
70
|
+
push(event) {
|
|
71
|
+
if (this.closed) {
|
|
72
|
+
throw new error_1.OpenAIError('Cannot push events after closing the transcript grouper');
|
|
73
|
+
}
|
|
74
|
+
if (event.type === 'session.closed') {
|
|
75
|
+
this.finish('session_closed');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (event.type !== 'session.input_transcript.delta' && event.type !== 'session.output_transcript.delta') {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const fragment = normalizeTranscript(event);
|
|
82
|
+
const { id, startMs, endMs, speaker } = fragment;
|
|
83
|
+
if (this.seenIds.has(id)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.seenIds.add(id);
|
|
87
|
+
if (!fragment.text) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const updates = [];
|
|
91
|
+
const [pending] = this.pending;
|
|
92
|
+
if (pending && pending.startMs === startMs && pending.endMs === endMs) {
|
|
93
|
+
this.pending.push(fragment);
|
|
94
|
+
if (this.pending.some((part) => part.speaker !== speaker)) {
|
|
95
|
+
updates.push(...this.flushPending());
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
updates.push(...this.flushPending());
|
|
100
|
+
if (this.grouping.speaker === speaker) {
|
|
101
|
+
updates.push(...this.commit([fragment]));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.pending.push(fragment);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
this.schedule();
|
|
108
|
+
this.dispatch(updates);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Flush buffered text according to the grouping policy, finalize all emitted
|
|
112
|
+
* segments, and cancel timers. Idempotent; further push() calls fail. Does not
|
|
113
|
+
* close the transport. Invoke before discarding the grouper at session teardown.
|
|
114
|
+
*/
|
|
115
|
+
close() {
|
|
116
|
+
this.finish('manual');
|
|
117
|
+
}
|
|
118
|
+
finish(reason) {
|
|
119
|
+
if (this.closed) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.closed = true;
|
|
123
|
+
this.clearTimer();
|
|
124
|
+
const updates = this.flushPending();
|
|
125
|
+
updates.push(...this.grouping.close(this.sourceNow(), reason));
|
|
126
|
+
this.seenIds.clear();
|
|
127
|
+
this.dispatch(updates);
|
|
128
|
+
}
|
|
129
|
+
commit(fragments) {
|
|
130
|
+
const [first] = fragments;
|
|
131
|
+
if (!first) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const updates = [];
|
|
135
|
+
if (this.lastStartMs !== undefined && first.startMs < this.lastStartMs) {
|
|
136
|
+
updates.push(...this.grouping.close(this.sourceNow(), 'timestamp_reset'));
|
|
137
|
+
this.anchor = undefined;
|
|
138
|
+
}
|
|
139
|
+
this.lastStartMs = first.startMs;
|
|
140
|
+
// Overlapping intervals can end before earlier ones. Preserve the source
|
|
141
|
+
// high-water mark while restarting local inactivity on newly received text.
|
|
142
|
+
this.anchor = {
|
|
143
|
+
sourceMs: Math.max(this.anchor?.sourceMs ?? 0, first.endMs),
|
|
144
|
+
receivedAt: first.receivedAt,
|
|
145
|
+
};
|
|
146
|
+
for (const part of fragments) {
|
|
147
|
+
this.anchor.sourceMs = Math.max(this.anchor.sourceMs, part.endMs);
|
|
148
|
+
this.anchor.receivedAt = Math.max(this.anchor.receivedAt, part.receivedAt);
|
|
149
|
+
}
|
|
150
|
+
updates.push(...this.grouping.process(fragments));
|
|
151
|
+
return updates;
|
|
152
|
+
}
|
|
153
|
+
flushPending() {
|
|
154
|
+
const { pending } = this;
|
|
155
|
+
this.pending = [];
|
|
156
|
+
return this.commit(pending);
|
|
157
|
+
}
|
|
158
|
+
sourceNow() {
|
|
159
|
+
return this.anchor ? this.anchor.sourceMs + Math.max(0, performance.now() - this.anchor.receivedAt) : 0;
|
|
160
|
+
}
|
|
161
|
+
clearTimer() {
|
|
162
|
+
if (this.timer !== undefined) {
|
|
163
|
+
clearTimeout(this.timer);
|
|
164
|
+
}
|
|
165
|
+
this.timer = undefined;
|
|
166
|
+
}
|
|
167
|
+
schedule() {
|
|
168
|
+
this.clearTimer();
|
|
169
|
+
if (this.closed) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const [pending] = this.pending;
|
|
173
|
+
const deadline = this.grouping.deadline();
|
|
174
|
+
// Settle newly arrived text before applying an older inactivity deadline.
|
|
175
|
+
let delay;
|
|
176
|
+
if (pending) {
|
|
177
|
+
delay = pending.receivedAt + SETTLE_MS - performance.now();
|
|
178
|
+
}
|
|
179
|
+
else if (deadline !== undefined) {
|
|
180
|
+
delay = deadline - this.sourceNow();
|
|
181
|
+
}
|
|
182
|
+
if (delay === undefined) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
this.timer = setTimeout(() => {
|
|
186
|
+
this.timer = undefined;
|
|
187
|
+
const updates = this.flushPending();
|
|
188
|
+
updates.push(...this.grouping.advance(this.sourceNow()));
|
|
189
|
+
this.schedule();
|
|
190
|
+
this.dispatch(updates);
|
|
191
|
+
}, Math.min(MAX_TIMEOUT_MS, Math.max(0, Math.ceil(delay))));
|
|
192
|
+
const timer = this.timer;
|
|
193
|
+
if (typeof timer === 'object' &&
|
|
194
|
+
timer !== null &&
|
|
195
|
+
'unref' in timer &&
|
|
196
|
+
typeof timer.unref === 'function') {
|
|
197
|
+
timer.unref();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
dispatch(updates) {
|
|
201
|
+
this.updates.push(...updates);
|
|
202
|
+
if (this.dispatching) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
this.dispatching = true;
|
|
206
|
+
try {
|
|
207
|
+
while (this.updates.length) {
|
|
208
|
+
const update = this.updates.shift();
|
|
209
|
+
if (update?.type === 'updated') {
|
|
210
|
+
this._emit('segment.updated', update.segment);
|
|
211
|
+
}
|
|
212
|
+
else if (update) {
|
|
213
|
+
this._emit('segment.closed', { segment: update.segment, reason: update.reason });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
this.dispatching = false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.TranscriptGrouper = TranscriptGrouper;
|
|
223
|
+
//# sourceMappingURL=transcript-grouper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-grouper.js","sourceRoot":"","sources":["../../src/lib/live/transcript-grouper.ts"],"names":[],"mappings":";;;AAAA,6DAAuD;AACvD,+CAA+C;AAE/C,kEAA2D;AA8D3D,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,cAAc,GAAG,UAAa,CAAC;AACrC,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,SAAS,mBAAmB,CAC1B,KAA2G;IAE3G,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IACvF,IACE,OAAO,EAAE,KAAK,QAAQ;QACtB,CAAC,EAAE;QACH,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAC9B,OAAO,GAAG,CAAC;QACX,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,OAAO,EACf,CAAC;QACD,MAAM,IAAI,mBAAW,CACnB,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAiC;IAC5D,MAAM,QAAQ,GAAG;QACf,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,GAAG;QACvD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;QACtD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,IAAI;QAClE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,IAAI;KAC/D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YACnE,MAAM,IAAI,mBAAW,CAAC,GAAG,IAAI,0CAA0C,cAAc,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,yBAAyB,EAAE,OAAO,CAAC,yBAAyB,IAAI,EAAE,EAAE,CAAC;AAC7F,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,+HAA+H;AAC/H,MAAa,iBAAkB,SAAQ,2BAAqC;IAW1E,8FAA8F;IAC9F,YAAY,UAAoC,EAAE;QAChD,KAAK,EAAE,CAAC;QAXO,YAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,YAAO,GAAuB,EAAE,CAAC;QAIjC,WAAM,GAAG,KAAK,CAAC;QACf,gBAAW,GAAG,KAAK,CAAC;QACX,YAAO,GAAqB,EAAE,CAAC;QAK9C,IAAI,CAAC,QAAQ,GAAG,IAAI,wCAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,WAAW,aAAa,EAAE,CAAC,CAAC;QACjG,aAAa,IAAI,CAAC,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAkB;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,mBAAW,CAAC,yDAAyD,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gCAAgC,IAAI,KAAK,CAAC,IAAI,KAAK,iCAAiC,EAAE,CAAC;YACxG,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEO,MAAM,CAAC,MAAmC;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,SAAsC;QACnD,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;QACjC,yEAAyE;QACzE,4EAA4E;QAC5E,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;YAC3D,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAEO,SAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1C,0EAA0E;QAC1E,IAAI,KAAyB,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7D,CAAC;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,UAAU,CACrB,GAAG,EAAE;YACH,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACxD,CAAC;QACF,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC;QAClC,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,OAAO,IAAI,KAAK;YAChB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EACjC,CAAC;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,OAAyB;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,MAAM,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAtLD,8CAsLC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { EventEmitter } from "../../core/EventEmitter.mjs";
|
|
2
|
+
import { OpenAIError } from "../../core/error.mjs";
|
|
3
|
+
import { TranscriptGrouping } from "./transcript-grouping.mjs";
|
|
4
|
+
const SETTLE_MS = 50;
|
|
5
|
+
const MAX_TIMEOUT_MS = 2147483647;
|
|
6
|
+
let nextGrouperId = 0;
|
|
7
|
+
function normalizeTranscript(event) {
|
|
8
|
+
const { event_id: id, delta: text, start_ms: startMs, end_ms: endMs } = event;
|
|
9
|
+
const speaker = event.type === 'session.input_transcript.delta' ? 'user' : 'assistant';
|
|
10
|
+
if (typeof id !== 'string' ||
|
|
11
|
+
!id ||
|
|
12
|
+
typeof text !== 'string' ||
|
|
13
|
+
!Number.isSafeInteger(startMs) ||
|
|
14
|
+
startMs < 0 ||
|
|
15
|
+
!Number.isSafeInteger(endMs) ||
|
|
16
|
+
endMs < startMs) {
|
|
17
|
+
throw new OpenAIError('Invalid Live transcript delta: expected an event ID, text, and a nonnegative timed interval');
|
|
18
|
+
}
|
|
19
|
+
return { id, speaker, text, startMs, endMs, receivedAt: performance.now() };
|
|
20
|
+
}
|
|
21
|
+
function optionsWithDefaults(options) {
|
|
22
|
+
const resolved = {
|
|
23
|
+
minTurnSeparationMs: options.minTurnSeparationMs ?? 500,
|
|
24
|
+
assistantSilenceMs: options.assistantSilenceMs ?? 2000,
|
|
25
|
+
backchannelMaxDurationMs: options.backchannelMaxDurationMs ?? 1000,
|
|
26
|
+
backchannelIsolationMs: options.backchannelIsolationMs ?? 2000,
|
|
27
|
+
};
|
|
28
|
+
for (const [name, value] of Object.entries(resolved)) {
|
|
29
|
+
if (!Number.isFinite(value) || value < 0 || value > MAX_TIMEOUT_MS) {
|
|
30
|
+
throw new OpenAIError(`${name} must be a finite number between 0 and ${MAX_TIMEOUT_MS}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { ...resolved, additionalAcknowledgments: options.additionalAcknowledgments ?? [] };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Groups public Live transcript events using speaker and
|
|
37
|
+
* backchannel heuristics. Raw events remain available on your transport.
|
|
38
|
+
*
|
|
39
|
+
* Only session.input_transcript.delta, session.output_transcript.delta and session.closed are
|
|
40
|
+
* consumed. No audio, engine frames, server turn events or internal end markers
|
|
41
|
+
* are required. Ambiguous speaker changes settle for at most 50 ms. When source
|
|
42
|
+
* time stops arriving, a monotonic local clock supplies a best-effort inactivity
|
|
43
|
+
* fallback. Delayed delivery can therefore change grouping; this is not VAD,
|
|
44
|
+
* playback tracking, or a lossless transcript (some backchannels are suppressed).
|
|
45
|
+
*
|
|
46
|
+
* Create one instance per session. Call close() on transport loss or teardown;
|
|
47
|
+
* the grouper never owns or closes your transport and does not reconnect it.
|
|
48
|
+
*/
|
|
49
|
+
// oxlint-disable-next-line unicorn/prefer-event-target -- This is the SDK's browser-compatible typed emitter, not node:events.
|
|
50
|
+
export class TranscriptGrouper extends EventEmitter {
|
|
51
|
+
/** Create a grouper with speaker-based defaults. Invalid timing options throw OpenAIError. */
|
|
52
|
+
constructor(options = {}) {
|
|
53
|
+
super();
|
|
54
|
+
this.seenIds = new Set();
|
|
55
|
+
this.pending = [];
|
|
56
|
+
this.closed = false;
|
|
57
|
+
this.dispatching = false;
|
|
58
|
+
this.updates = [];
|
|
59
|
+
this.grouping = new TranscriptGrouping(optionsWithDefaults(options), `segment_${nextGrouperId}`);
|
|
60
|
+
nextGrouperId += 1;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Consume one public Live event. Duplicate transcript event IDs and unrelated
|
|
64
|
+
* event types are ignored. Empty text does not count as speech activity.
|
|
65
|
+
* Malformed transcript fields or use after close() throw OpenAIError.
|
|
66
|
+
*/
|
|
67
|
+
push(event) {
|
|
68
|
+
if (this.closed) {
|
|
69
|
+
throw new OpenAIError('Cannot push events after closing the transcript grouper');
|
|
70
|
+
}
|
|
71
|
+
if (event.type === 'session.closed') {
|
|
72
|
+
this.finish('session_closed');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (event.type !== 'session.input_transcript.delta' && event.type !== 'session.output_transcript.delta') {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const fragment = normalizeTranscript(event);
|
|
79
|
+
const { id, startMs, endMs, speaker } = fragment;
|
|
80
|
+
if (this.seenIds.has(id)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.seenIds.add(id);
|
|
84
|
+
if (!fragment.text) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const updates = [];
|
|
88
|
+
const [pending] = this.pending;
|
|
89
|
+
if (pending && pending.startMs === startMs && pending.endMs === endMs) {
|
|
90
|
+
this.pending.push(fragment);
|
|
91
|
+
if (this.pending.some((part) => part.speaker !== speaker)) {
|
|
92
|
+
updates.push(...this.flushPending());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
updates.push(...this.flushPending());
|
|
97
|
+
if (this.grouping.speaker === speaker) {
|
|
98
|
+
updates.push(...this.commit([fragment]));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.pending.push(fragment);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
this.schedule();
|
|
105
|
+
this.dispatch(updates);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Flush buffered text according to the grouping policy, finalize all emitted
|
|
109
|
+
* segments, and cancel timers. Idempotent; further push() calls fail. Does not
|
|
110
|
+
* close the transport. Invoke before discarding the grouper at session teardown.
|
|
111
|
+
*/
|
|
112
|
+
close() {
|
|
113
|
+
this.finish('manual');
|
|
114
|
+
}
|
|
115
|
+
finish(reason) {
|
|
116
|
+
if (this.closed) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.closed = true;
|
|
120
|
+
this.clearTimer();
|
|
121
|
+
const updates = this.flushPending();
|
|
122
|
+
updates.push(...this.grouping.close(this.sourceNow(), reason));
|
|
123
|
+
this.seenIds.clear();
|
|
124
|
+
this.dispatch(updates);
|
|
125
|
+
}
|
|
126
|
+
commit(fragments) {
|
|
127
|
+
const [first] = fragments;
|
|
128
|
+
if (!first) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const updates = [];
|
|
132
|
+
if (this.lastStartMs !== undefined && first.startMs < this.lastStartMs) {
|
|
133
|
+
updates.push(...this.grouping.close(this.sourceNow(), 'timestamp_reset'));
|
|
134
|
+
this.anchor = undefined;
|
|
135
|
+
}
|
|
136
|
+
this.lastStartMs = first.startMs;
|
|
137
|
+
// Overlapping intervals can end before earlier ones. Preserve the source
|
|
138
|
+
// high-water mark while restarting local inactivity on newly received text.
|
|
139
|
+
this.anchor = {
|
|
140
|
+
sourceMs: Math.max(this.anchor?.sourceMs ?? 0, first.endMs),
|
|
141
|
+
receivedAt: first.receivedAt,
|
|
142
|
+
};
|
|
143
|
+
for (const part of fragments) {
|
|
144
|
+
this.anchor.sourceMs = Math.max(this.anchor.sourceMs, part.endMs);
|
|
145
|
+
this.anchor.receivedAt = Math.max(this.anchor.receivedAt, part.receivedAt);
|
|
146
|
+
}
|
|
147
|
+
updates.push(...this.grouping.process(fragments));
|
|
148
|
+
return updates;
|
|
149
|
+
}
|
|
150
|
+
flushPending() {
|
|
151
|
+
const { pending } = this;
|
|
152
|
+
this.pending = [];
|
|
153
|
+
return this.commit(pending);
|
|
154
|
+
}
|
|
155
|
+
sourceNow() {
|
|
156
|
+
return this.anchor ? this.anchor.sourceMs + Math.max(0, performance.now() - this.anchor.receivedAt) : 0;
|
|
157
|
+
}
|
|
158
|
+
clearTimer() {
|
|
159
|
+
if (this.timer !== undefined) {
|
|
160
|
+
clearTimeout(this.timer);
|
|
161
|
+
}
|
|
162
|
+
this.timer = undefined;
|
|
163
|
+
}
|
|
164
|
+
schedule() {
|
|
165
|
+
this.clearTimer();
|
|
166
|
+
if (this.closed) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const [pending] = this.pending;
|
|
170
|
+
const deadline = this.grouping.deadline();
|
|
171
|
+
// Settle newly arrived text before applying an older inactivity deadline.
|
|
172
|
+
let delay;
|
|
173
|
+
if (pending) {
|
|
174
|
+
delay = pending.receivedAt + SETTLE_MS - performance.now();
|
|
175
|
+
}
|
|
176
|
+
else if (deadline !== undefined) {
|
|
177
|
+
delay = deadline - this.sourceNow();
|
|
178
|
+
}
|
|
179
|
+
if (delay === undefined) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
this.timer = setTimeout(() => {
|
|
183
|
+
this.timer = undefined;
|
|
184
|
+
const updates = this.flushPending();
|
|
185
|
+
updates.push(...this.grouping.advance(this.sourceNow()));
|
|
186
|
+
this.schedule();
|
|
187
|
+
this.dispatch(updates);
|
|
188
|
+
}, Math.min(MAX_TIMEOUT_MS, Math.max(0, Math.ceil(delay))));
|
|
189
|
+
const timer = this.timer;
|
|
190
|
+
if (typeof timer === 'object' &&
|
|
191
|
+
timer !== null &&
|
|
192
|
+
'unref' in timer &&
|
|
193
|
+
typeof timer.unref === 'function') {
|
|
194
|
+
timer.unref();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
dispatch(updates) {
|
|
198
|
+
this.updates.push(...updates);
|
|
199
|
+
if (this.dispatching) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.dispatching = true;
|
|
203
|
+
try {
|
|
204
|
+
while (this.updates.length) {
|
|
205
|
+
const update = this.updates.shift();
|
|
206
|
+
if (update?.type === 'updated') {
|
|
207
|
+
this._emit('segment.updated', update.segment);
|
|
208
|
+
}
|
|
209
|
+
else if (update) {
|
|
210
|
+
this._emit('segment.closed', { segment: update.segment, reason: update.reason });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
this.dispatching = false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=transcript-grouper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-grouper.mjs","sourceRoot":"","sources":["../../src/lib/live/transcript-grouper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { TranscriptGrouperOptions, TranscriptSegment, TranscriptSegmentCloseReason } from "./transcript-grouper.mjs";
|
|
2
|
+
export interface TranscriptFragment {
|
|
3
|
+
speaker: 'user' | 'assistant';
|
|
4
|
+
text: string;
|
|
5
|
+
startMs: number;
|
|
6
|
+
endMs: number;
|
|
7
|
+
}
|
|
8
|
+
export type GroupingUpdate = {
|
|
9
|
+
type: 'updated';
|
|
10
|
+
segment: TranscriptSegment;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'closed';
|
|
13
|
+
segment: TranscriptSegment;
|
|
14
|
+
reason: TranscriptSegmentCloseReason;
|
|
15
|
+
};
|
|
16
|
+
/** The v2 grouping policy, driven by timed public text rather than engine frames. */
|
|
17
|
+
export declare class TranscriptGrouping {
|
|
18
|
+
private current;
|
|
19
|
+
private buffered;
|
|
20
|
+
private lastId;
|
|
21
|
+
private nextId;
|
|
22
|
+
private lastAssistantEnd;
|
|
23
|
+
private readonly options;
|
|
24
|
+
private readonly idPrefix;
|
|
25
|
+
private readonly acknowledgments;
|
|
26
|
+
constructor(options: Required<TranscriptGrouperOptions>, idPrefix: string);
|
|
27
|
+
get speaker(): TranscriptFragment['speaker'] | undefined;
|
|
28
|
+
process(fragments: readonly TranscriptFragment[]): GroupingUpdate[];
|
|
29
|
+
advance(timeMs: number, hasIncomingUser?: boolean): GroupingUpdate[];
|
|
30
|
+
deadline(): number | undefined;
|
|
31
|
+
close(timeMs: number, reason: TranscriptSegmentCloseReason): GroupingUpdate[];
|
|
32
|
+
private ingest;
|
|
33
|
+
private newTurn;
|
|
34
|
+
private static append;
|
|
35
|
+
private buffer;
|
|
36
|
+
private promote;
|
|
37
|
+
private finishCurrent;
|
|
38
|
+
private finish;
|
|
39
|
+
private emit;
|
|
40
|
+
private static snapshot;
|
|
41
|
+
private mightBeBackchannel;
|
|
42
|
+
private userContinued;
|
|
43
|
+
private recentAssistant;
|
|
44
|
+
private keepBackchannel;
|
|
45
|
+
private maybeDropBackchannel;
|
|
46
|
+
private standaloneAcknowledgment;
|
|
47
|
+
private possibleAcknowledgment;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=transcript-grouping.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-grouping.d.mts","sourceRoot":"","sources":["../../src/lib/live/transcript-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,EAC7B,iCAA6B;AAE9B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAuCzF,qFAAqF;AACrF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM;IASzE,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAS,CAEvD;IAED,OAAO,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,cAAc,EAAE;IAgCnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,cAAc,EAAE;IAsBlE,QAAQ,IAAI,MAAM,GAAG,SAAS;IAqB9B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,cAAc,EAAE;IAa7E,OAAO,CAAC,MAAM;IA2Cd,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,MAAM,CAAC,MAAM;IAOrB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,MAAM,CAAC,QAAQ;IAWvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,sBAAsB;CAQ/B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { TranscriptGrouperOptions, TranscriptSegment, TranscriptSegmentCloseReason } from "./transcript-grouper.js";
|
|
2
|
+
export interface TranscriptFragment {
|
|
3
|
+
speaker: 'user' | 'assistant';
|
|
4
|
+
text: string;
|
|
5
|
+
startMs: number;
|
|
6
|
+
endMs: number;
|
|
7
|
+
}
|
|
8
|
+
export type GroupingUpdate = {
|
|
9
|
+
type: 'updated';
|
|
10
|
+
segment: TranscriptSegment;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'closed';
|
|
13
|
+
segment: TranscriptSegment;
|
|
14
|
+
reason: TranscriptSegmentCloseReason;
|
|
15
|
+
};
|
|
16
|
+
/** The v2 grouping policy, driven by timed public text rather than engine frames. */
|
|
17
|
+
export declare class TranscriptGrouping {
|
|
18
|
+
private current;
|
|
19
|
+
private buffered;
|
|
20
|
+
private lastId;
|
|
21
|
+
private nextId;
|
|
22
|
+
private lastAssistantEnd;
|
|
23
|
+
private readonly options;
|
|
24
|
+
private readonly idPrefix;
|
|
25
|
+
private readonly acknowledgments;
|
|
26
|
+
constructor(options: Required<TranscriptGrouperOptions>, idPrefix: string);
|
|
27
|
+
get speaker(): TranscriptFragment['speaker'] | undefined;
|
|
28
|
+
process(fragments: readonly TranscriptFragment[]): GroupingUpdate[];
|
|
29
|
+
advance(timeMs: number, hasIncomingUser?: boolean): GroupingUpdate[];
|
|
30
|
+
deadline(): number | undefined;
|
|
31
|
+
close(timeMs: number, reason: TranscriptSegmentCloseReason): GroupingUpdate[];
|
|
32
|
+
private ingest;
|
|
33
|
+
private newTurn;
|
|
34
|
+
private static append;
|
|
35
|
+
private buffer;
|
|
36
|
+
private promote;
|
|
37
|
+
private finishCurrent;
|
|
38
|
+
private finish;
|
|
39
|
+
private emit;
|
|
40
|
+
private static snapshot;
|
|
41
|
+
private mightBeBackchannel;
|
|
42
|
+
private userContinued;
|
|
43
|
+
private recentAssistant;
|
|
44
|
+
private keepBackchannel;
|
|
45
|
+
private maybeDropBackchannel;
|
|
46
|
+
private standaloneAcknowledgment;
|
|
47
|
+
private possibleAcknowledgment;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=transcript-grouping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-grouping.d.ts","sourceRoot":"","sources":["../../src/lib/live/transcript-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,EAC7B,gCAA6B;AAE9B,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAuCzF,qFAAqF;AACrF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;gBAExC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,MAAM;IASzE,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,SAAS,CAEvD;IAED,OAAO,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,cAAc,EAAE;IAgCnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,UAAQ,GAAG,cAAc,EAAE;IAsBlE,QAAQ,IAAI,MAAM,GAAG,SAAS;IAqB9B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,cAAc,EAAE;IAa7E,OAAO,CAAC,MAAM;IA2Cd,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,MAAM,CAAC,MAAM;IAOrB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,MAAM,CAAC,QAAQ;IAWvB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,sBAAsB;CAQ/B"}
|