@livekit/agents 1.1.0 → 1.2.1
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/dist/_exceptions.cjs.map +1 -1
- package/dist/_exceptions.d.ts.map +1 -1
- package/dist/_exceptions.js.map +1 -1
- package/dist/audio.cjs +89 -3
- package/dist/audio.cjs.map +1 -1
- package/dist/audio.d.cts +36 -1
- package/dist/audio.d.ts +36 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +76 -2
- package/dist/audio.js.map +1 -1
- package/dist/beta/index.cjs +29 -0
- package/dist/beta/index.cjs.map +1 -0
- package/dist/beta/index.d.cts +2 -0
- package/dist/beta/index.d.ts +2 -0
- package/dist/beta/index.d.ts.map +1 -0
- package/dist/beta/index.js +7 -0
- package/dist/beta/index.js.map +1 -0
- package/dist/beta/workflows/index.cjs +29 -0
- package/dist/beta/workflows/index.cjs.map +1 -0
- package/dist/beta/workflows/index.d.cts +2 -0
- package/dist/beta/workflows/index.d.ts +2 -0
- package/dist/beta/workflows/index.d.ts.map +1 -0
- package/dist/beta/workflows/index.js +7 -0
- package/dist/beta/workflows/index.js.map +1 -0
- package/dist/beta/workflows/task_group.cjs +165 -0
- package/dist/beta/workflows/task_group.cjs.map +1 -0
- package/dist/beta/workflows/task_group.d.cts +32 -0
- package/dist/beta/workflows/task_group.d.ts +32 -0
- package/dist/beta/workflows/task_group.d.ts.map +1 -0
- package/dist/beta/workflows/task_group.js +141 -0
- package/dist/beta/workflows/task_group.js.map +1 -0
- package/dist/cli.cjs +44 -46
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +3 -3
- package/dist/cli.d.ts +3 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -47
- package/dist/cli.js.map +1 -1
- package/dist/connection_pool.cjs +242 -0
- package/dist/connection_pool.cjs.map +1 -0
- package/dist/connection_pool.d.cts +123 -0
- package/dist/connection_pool.d.ts +123 -0
- package/dist/connection_pool.d.ts.map +1 -0
- package/dist/connection_pool.js +218 -0
- package/dist/connection_pool.js.map +1 -0
- package/dist/connection_pool.test.cjs +256 -0
- package/dist/connection_pool.test.cjs.map +1 -0
- package/dist/connection_pool.test.js +255 -0
- package/dist/connection_pool.test.js.map +1 -0
- package/dist/constants.cjs +30 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +10 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -1
- package/dist/cpu.cjs +189 -0
- package/dist/cpu.cjs.map +1 -0
- package/dist/cpu.d.cts +24 -0
- package/dist/cpu.d.ts +24 -0
- package/dist/cpu.d.ts.map +1 -0
- package/dist/cpu.js +152 -0
- package/dist/cpu.js.map +1 -0
- package/dist/cpu.test.cjs +227 -0
- package/dist/cpu.test.cjs.map +1 -0
- package/dist/cpu.test.js +204 -0
- package/dist/cpu.test.js.map +1 -0
- package/dist/http_server.cjs +9 -6
- package/dist/http_server.cjs.map +1 -1
- package/dist/http_server.d.cts +5 -1
- package/dist/http_server.d.ts +5 -1
- package/dist/http_server.d.ts.map +1 -1
- package/dist/http_server.js +9 -6
- package/dist/http_server.js.map +1 -1
- package/dist/index.cjs +24 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -11
- package/dist/index.d.ts +15 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/inference/api_protos.cjs +70 -2
- package/dist/inference/api_protos.cjs.map +1 -1
- package/dist/inference/api_protos.d.cts +373 -32
- package/dist/inference/api_protos.d.ts +373 -32
- package/dist/inference/api_protos.d.ts.map +1 -1
- package/dist/inference/api_protos.js +62 -2
- package/dist/inference/api_protos.js.map +1 -1
- package/dist/inference/index.cjs +8 -0
- package/dist/inference/index.cjs.map +1 -1
- package/dist/inference/index.d.cts +3 -4
- package/dist/inference/index.d.ts +3 -4
- package/dist/inference/index.d.ts.map +1 -1
- package/dist/inference/index.js +18 -3
- package/dist/inference/index.js.map +1 -1
- package/dist/inference/interruption/defaults.cjs +81 -0
- package/dist/inference/interruption/defaults.cjs.map +1 -0
- package/dist/inference/interruption/defaults.d.cts +19 -0
- package/dist/inference/interruption/defaults.d.ts +19 -0
- package/dist/inference/interruption/defaults.d.ts.map +1 -0
- package/dist/inference/interruption/defaults.js +46 -0
- package/dist/inference/interruption/defaults.js.map +1 -0
- package/dist/inference/interruption/errors.cjs +44 -0
- package/dist/inference/interruption/errors.cjs.map +1 -0
- package/dist/inference/interruption/errors.d.cts +12 -0
- package/dist/inference/interruption/errors.d.ts +12 -0
- package/dist/inference/interruption/errors.d.ts.map +1 -0
- package/dist/inference/interruption/errors.js +20 -0
- package/dist/inference/interruption/errors.js.map +1 -0
- package/dist/inference/interruption/http_transport.cjs +163 -0
- package/dist/inference/interruption/http_transport.cjs.map +1 -0
- package/dist/inference/interruption/http_transport.d.cts +65 -0
- package/dist/inference/interruption/http_transport.d.ts +65 -0
- package/dist/inference/interruption/http_transport.d.ts.map +1 -0
- package/dist/inference/interruption/http_transport.js +137 -0
- package/dist/inference/interruption/http_transport.js.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.js +34 -0
- package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
- package/dist/inference/interruption/interruption_detector.cjs +198 -0
- package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
- package/dist/inference/interruption/interruption_detector.d.cts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_detector.js +164 -0
- package/dist/inference/interruption/interruption_detector.js.map +1 -0
- package/dist/inference/interruption/interruption_stream.cjs +368 -0
- package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
- package/dist/inference/interruption/interruption_stream.d.cts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_stream.js +344 -0
- package/dist/inference/interruption/interruption_stream.js.map +1 -0
- package/dist/inference/interruption/types.cjs +17 -0
- package/dist/inference/interruption/types.cjs.map +1 -0
- package/dist/inference/interruption/types.d.cts +66 -0
- package/dist/inference/interruption/types.d.ts +66 -0
- package/dist/inference/interruption/types.d.ts.map +1 -0
- package/dist/inference/interruption/types.js +1 -0
- package/dist/inference/interruption/types.js.map +1 -0
- package/dist/inference/interruption/utils.cjs +130 -0
- package/dist/inference/interruption/utils.cjs.map +1 -0
- package/dist/inference/interruption/utils.d.cts +41 -0
- package/dist/inference/interruption/utils.d.ts +41 -0
- package/dist/inference/interruption/utils.d.ts.map +1 -0
- package/dist/inference/interruption/utils.js +105 -0
- package/dist/inference/interruption/utils.js.map +1 -0
- package/dist/inference/interruption/utils.test.cjs +105 -0
- package/dist/inference/interruption/utils.test.cjs.map +1 -0
- package/dist/inference/interruption/utils.test.js +104 -0
- package/dist/inference/interruption/utils.test.js.map +1 -0
- package/dist/inference/interruption/ws_transport.cjs +347 -0
- package/dist/inference/interruption/ws_transport.cjs.map +1 -0
- package/dist/inference/interruption/ws_transport.d.cts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
- package/dist/inference/interruption/ws_transport.js +313 -0
- package/dist/inference/interruption/ws_transport.js.map +1 -0
- package/dist/inference/llm.cjs +106 -66
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.cts +65 -43
- package/dist/inference/llm.d.ts +65 -43
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js +100 -66
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/stt.cjs +319 -170
- package/dist/inference/stt.cjs.map +1 -1
- package/dist/inference/stt.d.cts +64 -15
- package/dist/inference/stt.d.ts +64 -15
- package/dist/inference/stt.d.ts.map +1 -1
- package/dist/inference/stt.js +319 -170
- package/dist/inference/stt.js.map +1 -1
- package/dist/inference/stt.test.cjs +218 -0
- package/dist/inference/stt.test.cjs.map +1 -0
- package/dist/inference/stt.test.js +217 -0
- package/dist/inference/stt.test.js.map +1 -0
- package/dist/inference/tts.cjs +249 -71
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +94 -17
- package/dist/inference/tts.d.ts +94 -17
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +249 -77
- package/dist/inference/tts.js.map +1 -1
- package/dist/inference/tts.test.cjs +305 -0
- package/dist/inference/tts.test.cjs.map +1 -0
- package/dist/inference/tts.test.js +304 -0
- package/dist/inference/tts.test.js.map +1 -0
- package/dist/inference/utils.cjs +26 -7
- package/dist/inference/utils.cjs.map +1 -1
- package/dist/inference/utils.d.cts +14 -1
- package/dist/inference/utils.d.ts +14 -1
- package/dist/inference/utils.d.ts.map +1 -1
- package/dist/inference/utils.js +18 -2
- package/dist/inference/utils.js.map +1 -1
- package/dist/ipc/inference_proc_executor.cjs +6 -3
- package/dist/ipc/inference_proc_executor.cjs.map +1 -1
- package/dist/ipc/inference_proc_executor.d.ts.map +1 -1
- package/dist/ipc/inference_proc_executor.js +6 -3
- package/dist/ipc/inference_proc_executor.js.map +1 -1
- package/dist/ipc/inference_proc_lazy_main.cjs +13 -1
- package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/inference_proc_lazy_main.js +13 -1
- package/dist/ipc/inference_proc_lazy_main.js.map +1 -1
- package/dist/ipc/job_proc_executor.cjs +6 -1
- package/dist/ipc/job_proc_executor.cjs.map +1 -1
- package/dist/ipc/job_proc_executor.d.ts.map +1 -1
- package/dist/ipc/job_proc_executor.js +6 -1
- package/dist/ipc/job_proc_executor.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +89 -17
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +68 -18
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/ipc/supervised_proc.cjs +34 -8
- package/dist/ipc/supervised_proc.cjs.map +1 -1
- package/dist/ipc/supervised_proc.d.cts +8 -0
- package/dist/ipc/supervised_proc.d.ts +8 -0
- package/dist/ipc/supervised_proc.d.ts.map +1 -1
- package/dist/ipc/supervised_proc.js +34 -8
- package/dist/ipc/supervised_proc.js.map +1 -1
- package/dist/ipc/supervised_proc.test.cjs +145 -0
- package/dist/ipc/supervised_proc.test.cjs.map +1 -0
- package/dist/ipc/supervised_proc.test.js +122 -0
- package/dist/ipc/supervised_proc.test.js.map +1 -0
- package/dist/job.cjs +109 -1
- package/dist/job.cjs.map +1 -1
- package/dist/job.d.cts +14 -0
- package/dist/job.d.ts +14 -0
- package/dist/job.d.ts.map +1 -1
- package/dist/job.js +99 -1
- package/dist/job.js.map +1 -1
- package/dist/language.cjs +394 -0
- package/dist/language.cjs.map +1 -0
- package/dist/language.d.cts +15 -0
- package/dist/language.d.ts +15 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +363 -0
- package/dist/language.js.map +1 -0
- package/dist/language.test.cjs +43 -0
- package/dist/language.test.cjs.map +1 -0
- package/dist/language.test.js +49 -0
- package/dist/language.test.js.map +1 -0
- package/dist/llm/chat_context.cjs +345 -3
- package/dist/llm/chat_context.cjs.map +1 -1
- package/dist/llm/chat_context.d.cts +86 -2
- package/dist/llm/chat_context.d.ts +86 -2
- package/dist/llm/chat_context.d.ts.map +1 -1
- package/dist/llm/chat_context.js +344 -3
- package/dist/llm/chat_context.js.map +1 -1
- package/dist/llm/chat_context.test.cjs +692 -0
- package/dist/llm/chat_context.test.cjs.map +1 -1
- package/dist/llm/chat_context.test.js +692 -0
- package/dist/llm/chat_context.test.js.map +1 -1
- package/dist/llm/fallback_adapter.cjs +280 -0
- package/dist/llm/fallback_adapter.cjs.map +1 -0
- package/dist/llm/fallback_adapter.d.cts +73 -0
- package/dist/llm/fallback_adapter.d.ts +73 -0
- package/dist/llm/fallback_adapter.d.ts.map +1 -0
- package/dist/llm/fallback_adapter.js +256 -0
- package/dist/llm/fallback_adapter.js.map +1 -0
- package/dist/llm/fallback_adapter.test.cjs +176 -0
- package/dist/llm/fallback_adapter.test.cjs.map +1 -0
- package/dist/llm/fallback_adapter.test.js +175 -0
- package/dist/llm/fallback_adapter.test.js.map +1 -0
- package/dist/llm/index.cjs +11 -0
- package/dist/llm/index.cjs.map +1 -1
- package/dist/llm/index.d.cts +4 -3
- package/dist/llm/index.d.ts +4 -3
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +13 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm.cjs +65 -11
- package/dist/llm/llm.cjs.map +1 -1
- package/dist/llm/llm.d.cts +13 -2
- package/dist/llm/llm.d.ts +13 -2
- package/dist/llm/llm.d.ts.map +1 -1
- package/dist/llm/llm.js +65 -11
- package/dist/llm/llm.js.map +1 -1
- package/dist/llm/provider_format/google.cjs +6 -2
- package/dist/llm/provider_format/google.cjs.map +1 -1
- package/dist/llm/provider_format/google.d.cts +1 -1
- package/dist/llm/provider_format/google.d.ts +1 -1
- package/dist/llm/provider_format/google.d.ts.map +1 -1
- package/dist/llm/provider_format/google.js +6 -2
- package/dist/llm/provider_format/google.js.map +1 -1
- package/dist/llm/provider_format/google.test.cjs +48 -0
- package/dist/llm/provider_format/google.test.cjs.map +1 -1
- package/dist/llm/provider_format/google.test.js +54 -1
- package/dist/llm/provider_format/google.test.js.map +1 -1
- package/dist/llm/provider_format/index.cjs +2 -0
- package/dist/llm/provider_format/index.cjs.map +1 -1
- package/dist/llm/provider_format/index.d.cts +2 -2
- package/dist/llm/provider_format/index.d.ts +2 -2
- package/dist/llm/provider_format/index.d.ts.map +1 -1
- package/dist/llm/provider_format/index.js +6 -1
- package/dist/llm/provider_format/index.js.map +1 -1
- package/dist/llm/provider_format/openai.cjs +126 -24
- package/dist/llm/provider_format/openai.cjs.map +1 -1
- package/dist/llm/provider_format/openai.d.cts +1 -0
- package/dist/llm/provider_format/openai.d.ts +1 -0
- package/dist/llm/provider_format/openai.d.ts.map +1 -1
- package/dist/llm/provider_format/openai.js +124 -23
- package/dist/llm/provider_format/openai.js.map +1 -1
- package/dist/llm/provider_format/openai.test.cjs +393 -0
- package/dist/llm/provider_format/openai.test.cjs.map +1 -1
- package/dist/llm/provider_format/openai.test.js +400 -2
- package/dist/llm/provider_format/openai.test.js.map +1 -1
- package/dist/llm/provider_format/utils.cjs +5 -4
- package/dist/llm/provider_format/utils.cjs.map +1 -1
- package/dist/llm/provider_format/utils.d.ts.map +1 -1
- package/dist/llm/provider_format/utils.js +5 -4
- package/dist/llm/provider_format/utils.js.map +1 -1
- package/dist/llm/realtime.cjs +3 -0
- package/dist/llm/realtime.cjs.map +1 -1
- package/dist/llm/realtime.d.cts +15 -1
- package/dist/llm/realtime.d.ts +15 -1
- package/dist/llm/realtime.d.ts.map +1 -1
- package/dist/llm/realtime.js +3 -0
- package/dist/llm/realtime.js.map +1 -1
- package/dist/llm/remote_chat_context.cjs.map +1 -1
- package/dist/llm/remote_chat_context.d.cts +2 -0
- package/dist/llm/remote_chat_context.d.ts +2 -0
- package/dist/llm/remote_chat_context.d.ts.map +1 -1
- package/dist/llm/remote_chat_context.js.map +1 -1
- package/dist/llm/tool_context.cjs +50 -2
- package/dist/llm/tool_context.cjs.map +1 -1
- package/dist/llm/tool_context.d.cts +47 -11
- package/dist/llm/tool_context.d.ts +47 -11
- package/dist/llm/tool_context.d.ts.map +1 -1
- package/dist/llm/tool_context.js +48 -3
- package/dist/llm/tool_context.js.map +1 -1
- package/dist/llm/tool_context.test.cjs +197 -0
- package/dist/llm/tool_context.test.cjs.map +1 -1
- package/dist/llm/tool_context.test.js +175 -0
- package/dist/llm/tool_context.test.js.map +1 -1
- package/dist/llm/utils.cjs +107 -12
- package/dist/llm/utils.cjs.map +1 -1
- package/dist/llm/utils.d.cts +10 -3
- package/dist/llm/utils.d.ts +10 -3
- package/dist/llm/utils.d.ts.map +1 -1
- package/dist/llm/utils.js +106 -12
- package/dist/llm/utils.js.map +1 -1
- package/dist/llm/utils.test.cjs +90 -0
- package/dist/llm/utils.test.cjs.map +1 -1
- package/dist/llm/utils.test.js +98 -2
- package/dist/llm/utils.test.js.map +1 -1
- package/dist/llm/zod-utils.cjs +102 -0
- package/dist/llm/zod-utils.cjs.map +1 -0
- package/dist/llm/zod-utils.d.cts +65 -0
- package/dist/llm/zod-utils.d.ts +65 -0
- package/dist/llm/zod-utils.d.ts.map +1 -0
- package/dist/llm/zod-utils.js +64 -0
- package/dist/llm/zod-utils.js.map +1 -0
- package/dist/llm/zod-utils.test.cjs +472 -0
- package/dist/llm/zod-utils.test.cjs.map +1 -0
- package/dist/llm/zod-utils.test.js +455 -0
- package/dist/llm/zod-utils.test.js.map +1 -0
- package/dist/log.cjs +45 -14
- package/dist/log.cjs.map +1 -1
- package/dist/log.d.cts +8 -1
- package/dist/log.d.ts +8 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +45 -15
- package/dist/log.js.map +1 -1
- package/dist/metrics/base.cjs.map +1 -1
- package/dist/metrics/base.d.cts +75 -19
- package/dist/metrics/base.d.ts +75 -19
- package/dist/metrics/base.d.ts.map +1 -1
- package/dist/metrics/index.cjs +5 -0
- package/dist/metrics/index.cjs.map +1 -1
- package/dist/metrics/index.d.cts +2 -1
- package/dist/metrics/index.d.ts +2 -1
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +6 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/model_usage.cjs +189 -0
- package/dist/metrics/model_usage.cjs.map +1 -0
- package/dist/metrics/model_usage.d.cts +92 -0
- package/dist/metrics/model_usage.d.ts +92 -0
- package/dist/metrics/model_usage.d.ts.map +1 -0
- package/dist/metrics/model_usage.js +164 -0
- package/dist/metrics/model_usage.js.map +1 -0
- package/dist/metrics/model_usage.test.cjs +474 -0
- package/dist/metrics/model_usage.test.cjs.map +1 -0
- package/dist/metrics/model_usage.test.js +476 -0
- package/dist/metrics/model_usage.test.js.map +1 -0
- package/dist/metrics/usage_collector.cjs +5 -2
- package/dist/metrics/usage_collector.cjs.map +1 -1
- package/dist/metrics/usage_collector.d.cts +10 -1
- package/dist/metrics/usage_collector.d.ts +10 -1
- package/dist/metrics/usage_collector.d.ts.map +1 -1
- package/dist/metrics/usage_collector.js +5 -2
- package/dist/metrics/usage_collector.js.map +1 -1
- package/dist/metrics/utils.cjs +23 -7
- package/dist/metrics/utils.cjs.map +1 -1
- package/dist/metrics/utils.d.ts.map +1 -1
- package/dist/metrics/utils.js +23 -7
- package/dist/metrics/utils.js.map +1 -1
- package/dist/stream/deferred_stream.cjs +31 -10
- package/dist/stream/deferred_stream.cjs.map +1 -1
- package/dist/stream/deferred_stream.d.cts +6 -1
- package/dist/stream/deferred_stream.d.ts +6 -1
- package/dist/stream/deferred_stream.d.ts.map +1 -1
- package/dist/stream/deferred_stream.js +31 -10
- package/dist/stream/deferred_stream.js.map +1 -1
- package/dist/stream/deferred_stream.test.cjs +2 -2
- package/dist/stream/deferred_stream.test.cjs.map +1 -1
- package/dist/stream/deferred_stream.test.js +2 -2
- package/dist/stream/deferred_stream.test.js.map +1 -1
- package/dist/stream/index.cjs +3 -0
- package/dist/stream/index.cjs.map +1 -1
- package/dist/stream/index.d.cts +1 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +2 -0
- package/dist/stream/index.js.map +1 -1
- package/dist/stream/multi_input_stream.cjs +139 -0
- package/dist/stream/multi_input_stream.cjs.map +1 -0
- package/dist/stream/multi_input_stream.d.cts +55 -0
- package/dist/stream/multi_input_stream.d.ts +55 -0
- package/dist/stream/multi_input_stream.d.ts.map +1 -0
- package/dist/stream/multi_input_stream.js +115 -0
- package/dist/stream/multi_input_stream.js.map +1 -0
- package/dist/stream/multi_input_stream.test.cjs +344 -0
- package/dist/stream/multi_input_stream.test.cjs.map +1 -0
- package/dist/stream/multi_input_stream.test.js +343 -0
- package/dist/stream/multi_input_stream.test.js.map +1 -0
- package/dist/stream/stream_channel.cjs +39 -1
- package/dist/stream/stream_channel.cjs.map +1 -1
- package/dist/stream/stream_channel.d.cts +5 -2
- package/dist/stream/stream_channel.d.ts +5 -2
- package/dist/stream/stream_channel.d.ts.map +1 -1
- package/dist/stream/stream_channel.js +39 -1
- package/dist/stream/stream_channel.js.map +1 -1
- package/dist/stream/stream_channel.test.cjs +27 -0
- package/dist/stream/stream_channel.test.cjs.map +1 -1
- package/dist/stream/stream_channel.test.js +27 -0
- package/dist/stream/stream_channel.test.js.map +1 -1
- package/dist/stt/stream_adapter.cjs +24 -9
- package/dist/stt/stream_adapter.cjs.map +1 -1
- package/dist/stt/stream_adapter.d.cts +7 -3
- package/dist/stt/stream_adapter.d.ts +7 -3
- package/dist/stt/stream_adapter.d.ts.map +1 -1
- package/dist/stt/stream_adapter.js +24 -9
- package/dist/stt/stream_adapter.js.map +1 -1
- package/dist/stt/stt.cjs +94 -19
- package/dist/stt/stt.cjs.map +1 -1
- package/dist/stt/stt.d.cts +68 -5
- package/dist/stt/stt.d.ts +68 -5
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +96 -21
- package/dist/stt/stt.js.map +1 -1
- package/dist/telemetry/index.cjs +72 -0
- package/dist/telemetry/index.cjs.map +1 -0
- package/dist/telemetry/index.d.cts +7 -0
- package/dist/telemetry/index.d.ts +7 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +37 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logging.cjs +65 -0
- package/dist/telemetry/logging.cjs.map +1 -0
- package/dist/telemetry/logging.d.cts +21 -0
- package/dist/telemetry/logging.d.ts +21 -0
- package/dist/telemetry/logging.d.ts.map +1 -0
- package/dist/telemetry/logging.js +40 -0
- package/dist/telemetry/logging.js.map +1 -0
- package/dist/telemetry/otel_http_exporter.cjs +166 -0
- package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
- package/dist/telemetry/otel_http_exporter.d.cts +63 -0
- package/dist/telemetry/otel_http_exporter.d.ts +63 -0
- package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
- package/dist/telemetry/otel_http_exporter.js +142 -0
- package/dist/telemetry/otel_http_exporter.js.map +1 -0
- package/dist/telemetry/pino_otel_transport.cjs +217 -0
- package/dist/telemetry/pino_otel_transport.cjs.map +1 -0
- package/dist/telemetry/pino_otel_transport.d.cts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts.map +1 -0
- package/dist/telemetry/pino_otel_transport.js +189 -0
- package/dist/telemetry/pino_otel_transport.js.map +1 -0
- package/dist/telemetry/trace_types.cjs +233 -0
- package/dist/telemetry/trace_types.cjs.map +1 -0
- package/dist/telemetry/trace_types.d.cts +74 -0
- package/dist/telemetry/trace_types.d.ts +74 -0
- package/dist/telemetry/trace_types.d.ts.map +1 -0
- package/dist/telemetry/trace_types.js +141 -0
- package/dist/telemetry/trace_types.js.map +1 -0
- package/dist/telemetry/traces.cjs +484 -0
- package/dist/telemetry/traces.cjs.map +1 -0
- package/dist/telemetry/traces.d.cts +116 -0
- package/dist/telemetry/traces.d.ts +116 -0
- package/dist/telemetry/traces.d.ts.map +1 -0
- package/dist/telemetry/traces.js +449 -0
- package/dist/telemetry/traces.js.map +1 -0
- package/dist/telemetry/utils.cjs +86 -0
- package/dist/telemetry/utils.cjs.map +1 -0
- package/dist/telemetry/utils.d.cts +5 -0
- package/dist/telemetry/utils.d.ts +5 -0
- package/dist/telemetry/utils.d.ts.map +1 -0
- package/dist/telemetry/utils.js +51 -0
- package/dist/telemetry/utils.js.map +1 -0
- package/dist/tokenize/basic/sentence.cjs +3 -3
- package/dist/tokenize/basic/sentence.cjs.map +1 -1
- package/dist/tokenize/basic/sentence.js +3 -3
- package/dist/tokenize/basic/sentence.js.map +1 -1
- package/dist/tokenize/tokenizer.test.cjs +3 -1
- package/dist/tokenize/tokenizer.test.cjs.map +1 -1
- package/dist/tokenize/tokenizer.test.js +3 -1
- package/dist/tokenize/tokenizer.test.js.map +1 -1
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.d.cts +6 -0
- package/dist/transcription.d.ts +6 -0
- package/dist/transcription.d.ts.map +1 -1
- package/dist/transcription.js.map +1 -1
- package/dist/tts/fallback_adapter.cjs +472 -0
- package/dist/tts/fallback_adapter.cjs.map +1 -0
- package/dist/tts/fallback_adapter.d.cts +110 -0
- package/dist/tts/fallback_adapter.d.ts +110 -0
- package/dist/tts/fallback_adapter.d.ts.map +1 -0
- package/dist/tts/fallback_adapter.js +448 -0
- package/dist/tts/fallback_adapter.js.map +1 -0
- package/dist/tts/index.cjs +3 -0
- package/dist/tts/index.cjs.map +1 -1
- package/dist/tts/index.d.cts +1 -0
- package/dist/tts/index.d.ts +1 -0
- package/dist/tts/index.d.ts.map +1 -1
- package/dist/tts/index.js +2 -0
- package/dist/tts/index.js.map +1 -1
- package/dist/tts/stream_adapter.cjs +25 -8
- package/dist/tts/stream_adapter.cjs.map +1 -1
- package/dist/tts/stream_adapter.d.cts +6 -3
- package/dist/tts/stream_adapter.d.ts +6 -3
- package/dist/tts/stream_adapter.d.ts.map +1 -1
- package/dist/tts/stream_adapter.js +25 -8
- package/dist/tts/stream_adapter.js.map +1 -1
- package/dist/tts/tts.cjs +189 -57
- package/dist/tts/tts.cjs.map +1 -1
- package/dist/tts/tts.d.cts +58 -6
- package/dist/tts/tts.d.ts +58 -6
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +191 -59
- package/dist/tts/tts.js.map +1 -1
- package/dist/typed_promise.cjs +48 -0
- package/dist/typed_promise.cjs.map +1 -0
- package/dist/typed_promise.d.cts +24 -0
- package/dist/typed_promise.d.ts +24 -0
- package/dist/typed_promise.d.ts.map +1 -0
- package/dist/typed_promise.js +28 -0
- package/dist/typed_promise.js.map +1 -0
- package/dist/types.cjs +24 -32
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +45 -10
- package/dist/types.d.ts +45 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -30
- package/dist/types.js.map +1 -1
- package/dist/utils.cjs +124 -28
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +41 -1
- package/dist/utils.d.ts +41 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +119 -27
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.cjs +73 -1
- package/dist/utils.test.cjs.map +1 -1
- package/dist/utils.test.js +74 -10
- package/dist/utils.test.js.map +1 -1
- package/dist/vad.cjs +35 -15
- package/dist/vad.cjs.map +1 -1
- package/dist/vad.d.cts +15 -5
- package/dist/vad.d.ts +15 -5
- package/dist/vad.d.ts.map +1 -1
- package/dist/vad.js +35 -15
- package/dist/vad.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/agent.cjs +258 -35
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +54 -13
- package/dist/voice/agent.d.ts +54 -13
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +254 -34
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent.test.cjs +314 -0
- package/dist/voice/agent.test.cjs.map +1 -1
- package/dist/voice/agent.test.js +316 -2
- package/dist/voice/agent.test.js.map +1 -1
- package/dist/voice/agent_activity.cjs +1116 -385
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +72 -11
- package/dist/voice/agent_activity.d.ts +72 -11
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +1119 -383
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_activity.test.cjs +135 -0
- package/dist/voice/agent_activity.test.cjs.map +1 -0
- package/dist/voice/agent_activity.test.js +134 -0
- package/dist/voice/agent_activity.test.js.map +1 -0
- package/dist/voice/agent_session.cjs +550 -90
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +185 -25
- package/dist/voice/agent_session.d.ts +185 -25
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +556 -91
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/audio_recognition.cjs +605 -46
- package/dist/voice/audio_recognition.cjs.map +1 -1
- package/dist/voice/audio_recognition.d.cts +96 -4
- package/dist/voice/audio_recognition.d.ts +96 -4
- package/dist/voice/audio_recognition.d.ts.map +1 -1
- package/dist/voice/audio_recognition.js +611 -47
- package/dist/voice/audio_recognition.js.map +1 -1
- package/dist/voice/audio_recognition_span.test.cjs +295 -0
- package/dist/voice/audio_recognition_span.test.cjs.map +1 -0
- package/dist/voice/audio_recognition_span.test.js +299 -0
- package/dist/voice/audio_recognition_span.test.js.map +1 -0
- package/dist/voice/avatar/datastream_io.cjs +7 -1
- package/dist/voice/avatar/datastream_io.cjs.map +1 -1
- package/dist/voice/avatar/datastream_io.d.cts +1 -0
- package/dist/voice/avatar/datastream_io.d.ts +1 -0
- package/dist/voice/avatar/datastream_io.d.ts.map +1 -1
- package/dist/voice/avatar/datastream_io.js +7 -1
- package/dist/voice/avatar/datastream_io.js.map +1 -1
- package/dist/voice/background_audio.cjs +367 -0
- package/dist/voice/background_audio.cjs.map +1 -0
- package/dist/voice/background_audio.d.cts +123 -0
- package/dist/voice/background_audio.d.ts +123 -0
- package/dist/voice/background_audio.d.ts.map +1 -0
- package/dist/voice/background_audio.js +343 -0
- package/dist/voice/background_audio.js.map +1 -0
- package/dist/voice/events.cjs +3 -0
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +16 -9
- package/dist/voice/events.d.ts +16 -9
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js +3 -0
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/generation.cjs +205 -41
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.cts +21 -5
- package/dist/voice/generation.d.ts +21 -5
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +215 -43
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/generation_tools.test.cjs +236 -0
- package/dist/voice/generation_tools.test.cjs.map +1 -0
- package/dist/voice/generation_tools.test.js +235 -0
- package/dist/voice/generation_tools.test.js.map +1 -0
- package/dist/voice/index.cjs +33 -2
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +8 -2
- package/dist/voice/index.d.ts +8 -2
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +19 -2
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/interruption_detection.test.cjs +114 -0
- package/dist/voice/interruption_detection.test.cjs.map +1 -0
- package/dist/voice/interruption_detection.test.js +113 -0
- package/dist/voice/interruption_detection.test.js.map +1 -0
- package/dist/voice/io.cjs +66 -6
- package/dist/voice/io.cjs.map +1 -1
- package/dist/voice/io.d.cts +67 -7
- package/dist/voice/io.d.ts +67 -7
- package/dist/voice/io.d.ts.map +1 -1
- package/dist/voice/io.js +62 -5
- package/dist/voice/io.js.map +1 -1
- package/dist/voice/recorder_io/index.cjs +23 -0
- package/dist/voice/recorder_io/index.cjs.map +1 -0
- package/dist/voice/recorder_io/index.d.cts +2 -0
- package/dist/voice/recorder_io/index.d.ts +2 -0
- package/dist/voice/recorder_io/index.d.ts.map +1 -0
- package/dist/voice/recorder_io/index.js +2 -0
- package/dist/voice/recorder_io/index.js.map +1 -0
- package/dist/voice/recorder_io/recorder_io.cjs +607 -0
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
- package/dist/voice/recorder_io/recorder_io.d.cts +106 -0
- package/dist/voice/recorder_io/recorder_io.d.ts +106 -0
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
- package/dist/voice/recorder_io/recorder_io.js +573 -0
- package/dist/voice/recorder_io/recorder_io.js.map +1 -0
- package/dist/voice/remote_session.cjs +922 -0
- package/dist/voice/remote_session.cjs.map +1 -0
- package/dist/voice/remote_session.d.cts +108 -0
- package/dist/voice/remote_session.d.ts +108 -0
- package/dist/voice/remote_session.d.ts.map +1 -0
- package/dist/voice/remote_session.js +887 -0
- package/dist/voice/remote_session.js.map +1 -0
- package/dist/voice/report.cjs +88 -0
- package/dist/voice/report.cjs.map +1 -0
- package/dist/voice/report.d.cts +49 -0
- package/dist/voice/report.d.ts +49 -0
- package/dist/voice/report.d.ts.map +1 -0
- package/dist/voice/report.js +63 -0
- package/dist/voice/report.js.map +1 -0
- package/dist/voice/report.test.cjs +121 -0
- package/dist/voice/report.test.cjs.map +1 -0
- package/dist/voice/report.test.js +120 -0
- package/dist/voice/report.test.js.map +1 -0
- package/dist/voice/room_io/_input.cjs +40 -7
- package/dist/voice/room_io/_input.cjs.map +1 -1
- package/dist/voice/room_io/_input.d.cts +5 -2
- package/dist/voice/room_io/_input.d.ts +5 -2
- package/dist/voice/room_io/_input.d.ts.map +1 -1
- package/dist/voice/room_io/_input.js +41 -8
- package/dist/voice/room_io/_input.js.map +1 -1
- package/dist/voice/room_io/_output.cjs +19 -11
- package/dist/voice/room_io/_output.cjs.map +1 -1
- package/dist/voice/room_io/_output.d.cts +7 -4
- package/dist/voice/room_io/_output.d.ts +7 -4
- package/dist/voice/room_io/_output.d.ts.map +1 -1
- package/dist/voice/room_io/_output.js +20 -12
- package/dist/voice/room_io/_output.js.map +1 -1
- package/dist/voice/room_io/room_io.cjs +33 -6
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.cts +29 -9
- package/dist/voice/room_io/room_io.d.ts +29 -9
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +33 -7
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/speech_handle.cjs +22 -4
- package/dist/voice/speech_handle.cjs.map +1 -1
- package/dist/voice/speech_handle.d.cts +17 -2
- package/dist/voice/speech_handle.d.ts +17 -2
- package/dist/voice/speech_handle.d.ts.map +1 -1
- package/dist/voice/speech_handle.js +21 -4
- package/dist/voice/speech_handle.js.map +1 -1
- package/dist/voice/testing/fake_llm.cjs +127 -0
- package/dist/voice/testing/fake_llm.cjs.map +1 -0
- package/dist/voice/testing/fake_llm.d.cts +30 -0
- package/dist/voice/testing/fake_llm.d.ts +30 -0
- package/dist/voice/testing/fake_llm.d.ts.map +1 -0
- package/dist/voice/testing/fake_llm.js +103 -0
- package/dist/voice/testing/fake_llm.js.map +1 -0
- package/dist/voice/testing/index.cjs +57 -0
- package/dist/voice/testing/index.cjs.map +1 -0
- package/dist/voice/testing/index.d.cts +21 -0
- package/dist/voice/testing/index.d.ts +21 -0
- package/dist/voice/testing/index.d.ts.map +1 -0
- package/dist/voice/testing/index.js +35 -0
- package/dist/voice/testing/index.js.map +1 -0
- package/dist/voice/testing/run_result.cjs +817 -0
- package/dist/voice/testing/run_result.cjs.map +1 -0
- package/dist/voice/testing/run_result.d.cts +385 -0
- package/dist/voice/testing/run_result.d.ts +385 -0
- package/dist/voice/testing/run_result.d.ts.map +1 -0
- package/dist/voice/testing/run_result.js +790 -0
- package/dist/voice/testing/run_result.js.map +1 -0
- package/dist/voice/testing/types.cjs +46 -0
- package/dist/voice/testing/types.cjs.map +1 -0
- package/dist/voice/testing/types.d.cts +83 -0
- package/dist/voice/testing/types.d.ts +83 -0
- package/dist/voice/testing/types.d.ts.map +1 -0
- package/dist/voice/testing/types.js +19 -0
- package/dist/voice/testing/types.js.map +1 -0
- package/dist/voice/transcription/synchronizer.cjs +139 -15
- package/dist/voice/transcription/synchronizer.cjs.map +1 -1
- package/dist/voice/transcription/synchronizer.d.cts +35 -4
- package/dist/voice/transcription/synchronizer.d.ts +35 -4
- package/dist/voice/transcription/synchronizer.d.ts.map +1 -1
- package/dist/voice/transcription/synchronizer.js +143 -16
- package/dist/voice/transcription/synchronizer.js.map +1 -1
- package/dist/voice/transcription/synchronizer.test.cjs +151 -0
- package/dist/voice/transcription/synchronizer.test.cjs.map +1 -0
- package/dist/voice/transcription/synchronizer.test.js +150 -0
- package/dist/voice/transcription/synchronizer.test.js.map +1 -0
- package/dist/voice/turn_config/endpointing.cjs +33 -0
- package/dist/voice/turn_config/endpointing.cjs.map +1 -0
- package/dist/voice/turn_config/endpointing.d.cts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
- package/dist/voice/turn_config/endpointing.js +9 -0
- package/dist/voice/turn_config/endpointing.js.map +1 -0
- package/dist/voice/turn_config/interruption.cjs +37 -0
- package/dist/voice/turn_config/interruption.cjs.map +1 -0
- package/dist/voice/turn_config/interruption.d.cts +53 -0
- package/dist/voice/turn_config/interruption.d.ts +53 -0
- package/dist/voice/turn_config/interruption.d.ts.map +1 -0
- package/dist/voice/turn_config/interruption.js +13 -0
- package/dist/voice/turn_config/interruption.js.map +1 -0
- package/dist/voice/turn_config/turn_handling.cjs +35 -0
- package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
- package/dist/voice/turn_config/turn_handling.d.cts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
- package/dist/voice/turn_config/turn_handling.js +11 -0
- package/dist/voice/turn_config/turn_handling.js.map +1 -0
- package/dist/voice/turn_config/utils.cjs +157 -0
- package/dist/voice/turn_config/utils.cjs.map +1 -0
- package/dist/voice/turn_config/utils.d.cts +37 -0
- package/dist/voice/turn_config/utils.d.ts +37 -0
- package/dist/voice/turn_config/utils.d.ts.map +1 -0
- package/dist/voice/turn_config/utils.js +131 -0
- package/dist/voice/turn_config/utils.js.map +1 -0
- package/dist/voice/turn_config/utils.test.cjs +128 -0
- package/dist/voice/turn_config/utils.test.cjs.map +1 -0
- package/dist/voice/turn_config/utils.test.js +127 -0
- package/dist/voice/turn_config/utils.test.js.map +1 -0
- package/dist/voice/utils.cjs +47 -0
- package/dist/voice/utils.cjs.map +1 -0
- package/dist/voice/utils.d.cts +4 -0
- package/dist/voice/utils.d.ts +4 -0
- package/dist/voice/utils.d.ts.map +1 -0
- package/dist/voice/utils.js +23 -0
- package/dist/voice/utils.js.map +1 -0
- package/dist/worker.cjs +44 -52
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +18 -8
- package/dist/worker.d.ts +18 -8
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +43 -43
- package/dist/worker.js.map +1 -1
- package/package.json +35 -13
- package/resources/NOTICE +2 -0
- package/resources/keyboard-typing.ogg +0 -0
- package/resources/keyboard-typing2.ogg +0 -0
- package/resources/office-ambience.ogg +0 -0
- package/src/_exceptions.ts +5 -0
- package/src/audio.ts +132 -1
- package/src/beta/index.ts +9 -0
- package/src/beta/workflows/index.ts +9 -0
- package/src/beta/workflows/task_group.ts +203 -0
- package/src/cli.ts +57 -66
- package/src/connection_pool.test.ts +346 -0
- package/src/connection_pool.ts +307 -0
- package/src/constants.ts +14 -0
- package/src/cpu.test.ts +239 -0
- package/src/cpu.ts +173 -0
- package/src/http_server.ts +18 -6
- package/src/index.ts +15 -13
- package/src/inference/api_protos.ts +85 -2
- package/src/inference/index.ts +32 -4
- package/src/inference/interruption/defaults.ts +51 -0
- package/src/inference/interruption/errors.ts +25 -0
- package/src/inference/interruption/http_transport.ts +207 -0
- package/src/inference/interruption/interruption_cache_entry.ts +50 -0
- package/src/inference/interruption/interruption_detector.ts +204 -0
- package/src/inference/interruption/interruption_stream.ts +467 -0
- package/src/inference/interruption/types.ts +84 -0
- package/src/inference/interruption/utils.test.ts +132 -0
- package/src/inference/interruption/utils.ts +137 -0
- package/src/inference/interruption/ws_transport.ts +416 -0
- package/src/inference/llm.ts +214 -163
- package/src/inference/stt.test.ts +253 -0
- package/src/inference/stt.ts +449 -208
- package/src/inference/tts.test.ts +354 -0
- package/src/inference/tts.ts +417 -115
- package/src/inference/utils.ts +30 -2
- package/src/ipc/inference_proc_executor.ts +11 -3
- package/src/ipc/inference_proc_lazy_main.ts +13 -1
- package/src/ipc/job_proc_executor.ts +11 -1
- package/src/ipc/job_proc_lazy_main.ts +86 -20
- package/src/ipc/supervised_proc.test.ts +153 -0
- package/src/ipc/supervised_proc.ts +39 -10
- package/src/job.ts +120 -1
- package/src/language.test.ts +62 -0
- package/src/language.ts +380 -0
- package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
- package/src/llm/chat_context.test.ts +787 -0
- package/src/llm/chat_context.ts +493 -2
- package/src/llm/fallback_adapter.test.ts +238 -0
- package/src/llm/fallback_adapter.ts +394 -0
- package/src/llm/index.ts +13 -0
- package/src/llm/llm.ts +77 -12
- package/src/llm/provider_format/google.test.ts +72 -1
- package/src/llm/provider_format/google.ts +10 -6
- package/src/llm/provider_format/index.ts +7 -2
- package/src/llm/provider_format/openai.test.ts +480 -2
- package/src/llm/provider_format/openai.ts +152 -21
- package/src/llm/provider_format/utils.ts +11 -5
- package/src/llm/realtime.ts +23 -2
- package/src/llm/remote_chat_context.ts +2 -2
- package/src/llm/tool_context.test.ts +210 -1
- package/src/llm/tool_context.ts +115 -17
- package/src/llm/utils.test.ts +103 -2
- package/src/llm/utils.ts +152 -16
- package/src/llm/zod-utils.test.ts +577 -0
- package/src/llm/zod-utils.ts +153 -0
- package/src/log.ts +71 -19
- package/src/metrics/base.ts +78 -19
- package/src/metrics/index.ts +12 -0
- package/src/metrics/model_usage.test.ts +545 -0
- package/src/metrics/model_usage.ts +262 -0
- package/src/metrics/usage_collector.ts +14 -3
- package/src/metrics/utils.ts +27 -7
- package/src/stream/deferred_stream.test.ts +3 -3
- package/src/stream/deferred_stream.ts +43 -11
- package/src/stream/index.ts +1 -0
- package/src/stream/multi_input_stream.test.ts +545 -0
- package/src/stream/multi_input_stream.ts +172 -0
- package/src/stream/stream_channel.test.ts +37 -0
- package/src/stream/stream_channel.ts +43 -3
- package/src/stt/stream_adapter.ts +30 -9
- package/src/stt/stt.ts +140 -23
- package/src/telemetry/index.ts +28 -0
- package/src/telemetry/logging.ts +55 -0
- package/src/telemetry/otel_http_exporter.ts +218 -0
- package/src/telemetry/pino_otel_transport.ts +265 -0
- package/src/telemetry/trace_types.ts +109 -0
- package/src/telemetry/traces.ts +673 -0
- package/src/telemetry/utils.ts +61 -0
- package/src/tokenize/basic/sentence.ts +3 -3
- package/src/tokenize/tokenizer.test.ts +4 -0
- package/src/transcription.ts +6 -0
- package/src/tts/fallback_adapter.ts +586 -0
- package/src/tts/index.ts +1 -0
- package/src/tts/stream_adapter.ts +38 -8
- package/src/tts/tts.ts +245 -62
- package/src/typed_promise.ts +67 -0
- package/src/types.ts +62 -33
- package/src/utils.test.ts +90 -10
- package/src/utils.ts +178 -33
- package/src/vad.ts +42 -18
- package/src/version.ts +1 -1
- package/src/voice/agent.test.ts +347 -2
- package/src/voice/agent.ts +346 -44
- package/src/voice/agent_activity.test.ts +194 -0
- package/src/voice/agent_activity.ts +1457 -388
- package/src/voice/agent_session.ts +817 -112
- package/src/voice/audio_recognition.ts +845 -70
- package/src/voice/audio_recognition_span.test.ts +341 -0
- package/src/voice/avatar/datastream_io.ts +9 -1
- package/src/voice/background_audio.ts +494 -0
- package/src/voice/events.ts +27 -7
- package/src/voice/generation.ts +310 -56
- package/src/voice/generation_tools.test.ts +268 -0
- package/src/voice/index.ts +17 -3
- package/src/voice/interruption_detection.test.ts +151 -0
- package/src/voice/io.ts +115 -12
- package/src/voice/recorder_io/index.ts +4 -0
- package/src/voice/recorder_io/recorder_io.ts +783 -0
- package/src/voice/remote_session.ts +1083 -0
- package/src/voice/report.test.ts +136 -0
- package/src/voice/report.ts +140 -0
- package/src/voice/room_io/_input.ts +45 -10
- package/src/voice/room_io/_output.ts +26 -14
- package/src/voice/room_io/room_io.ts +67 -22
- package/src/voice/speech_handle.ts +38 -6
- package/src/voice/testing/fake_llm.ts +138 -0
- package/src/voice/testing/index.ts +52 -0
- package/src/voice/testing/run_result.ts +995 -0
- package/src/voice/testing/types.ts +118 -0
- package/src/voice/transcription/synchronizer.test.ts +206 -0
- package/src/voice/transcription/synchronizer.ts +204 -19
- package/src/voice/turn_config/endpointing.ts +33 -0
- package/src/voice/turn_config/interruption.ts +56 -0
- package/src/voice/turn_config/turn_handling.ts +45 -0
- package/src/voice/turn_config/utils.test.ts +148 -0
- package/src/voice/turn_config/utils.ts +167 -0
- package/src/voice/utils.ts +29 -0
- package/src/worker.ts +92 -78
- package/src/llm/__snapshots__/utils.test.ts.snap +0 -65
package/src/inference/tts.ts
CHANGED
|
@@ -5,96 +5,208 @@ import type { AudioFrame } from '@livekit/rtc-node';
|
|
|
5
5
|
import { WebSocket } from 'ws';
|
|
6
6
|
import { APIError, APIStatusError } from '../_exceptions.js';
|
|
7
7
|
import { AudioByteStream } from '../audio.js';
|
|
8
|
+
import { ConnectionPool } from '../connection_pool.js';
|
|
9
|
+
import { type LanguageCode, normalizeLanguage } from '../language.js';
|
|
8
10
|
import { log } from '../log.js';
|
|
9
11
|
import { createStreamChannel } from '../stream/stream_channel.js';
|
|
10
12
|
import { basic as tokenizeBasic } from '../tokenize/index.js';
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
TTS as BaseTTS,
|
|
14
|
-
ChunkedStream,
|
|
15
|
-
} from '../tts/index.js';
|
|
13
|
+
import type { ChunkedStream } from '../tts/index.js';
|
|
14
|
+
import { SynthesizeStream as BaseSynthesizeStream, TTS as BaseTTS } from '../tts/index.js';
|
|
16
15
|
import { type APIConnectOptions, DEFAULT_API_CONNECT_OPTIONS } from '../types.js';
|
|
17
|
-
import { shortuuid } from '../utils.js';
|
|
16
|
+
import { Event, Future, Task, cancelAndWait, combineSignals, shortuuid } from '../utils.js';
|
|
18
17
|
import {
|
|
19
18
|
type TtsClientEvent,
|
|
20
19
|
type TtsServerEvent,
|
|
21
|
-
type TtsSessionCreateEvent,
|
|
22
20
|
ttsClientEventSchema,
|
|
23
21
|
ttsServerEventSchema,
|
|
24
22
|
} from './api_protos.js';
|
|
25
|
-
import { type
|
|
23
|
+
import { type AnyString, connectWs, createAccessToken, getDefaultInferenceUrl } from './utils.js';
|
|
26
24
|
|
|
27
|
-
type
|
|
25
|
+
export type CartesiaModels =
|
|
26
|
+
| 'cartesia/sonic-3'
|
|
27
|
+
| 'cartesia/sonic-2'
|
|
28
|
+
| 'cartesia/sonic-turbo'
|
|
29
|
+
| 'cartesia/sonic';
|
|
28
30
|
|
|
29
|
-
export type
|
|
31
|
+
export type DeepgramTTSModels = 'deepgram/aura' | 'deepgram/aura-2';
|
|
30
32
|
|
|
31
|
-
type
|
|
32
|
-
| 'elevenlabs'
|
|
33
|
+
export type ElevenlabsModels =
|
|
33
34
|
| 'elevenlabs/eleven_flash_v2'
|
|
34
35
|
| 'elevenlabs/eleven_flash_v2_5'
|
|
35
36
|
| 'elevenlabs/eleven_turbo_v2'
|
|
36
37
|
| 'elevenlabs/eleven_turbo_v2_5'
|
|
37
38
|
| 'elevenlabs/eleven_multilingual_v2';
|
|
38
39
|
|
|
39
|
-
export type
|
|
40
|
+
export type InworldModels =
|
|
41
|
+
| 'inworld/inworld-tts-1.5-max'
|
|
42
|
+
| 'inworld/inworld-tts-1.5-mini'
|
|
43
|
+
| 'inworld/inworld-tts-1-max'
|
|
44
|
+
| 'inworld/inworld-tts-1';
|
|
40
45
|
|
|
41
|
-
export type
|
|
46
|
+
export type RimeModels = 'rime/arcana' | 'rime/mistv2';
|
|
42
47
|
|
|
43
|
-
export
|
|
48
|
+
export interface CartesiaOptions {
|
|
49
|
+
emotion?: string;
|
|
50
|
+
/** Maximum duration of audio in seconds. */
|
|
51
|
+
duration?: number;
|
|
52
|
+
/** Speech speed. Default: not specified. */
|
|
53
|
+
speed?: 'slow' | 'normal' | 'fast' | number;
|
|
54
|
+
volume?: number;
|
|
55
|
+
max_buffer_delay_ms?: number;
|
|
56
|
+
add_timestamps?: boolean;
|
|
57
|
+
add_phoneme_timestamps?: boolean;
|
|
58
|
+
use_normalized_timestamps?: boolean;
|
|
59
|
+
}
|
|
44
60
|
|
|
45
|
-
export
|
|
61
|
+
export interface ElevenlabsOptions {
|
|
62
|
+
/** Inactivity timeout in seconds. Default: 60. */
|
|
63
|
+
inactivity_timeout?: number;
|
|
64
|
+
/** Text normalization mode. Default: "auto". */
|
|
65
|
+
apply_text_normalization?: 'auto' | 'off' | 'on';
|
|
66
|
+
auto_mode?: boolean;
|
|
67
|
+
enable_logging?: boolean;
|
|
68
|
+
enable_ssml_parsing?: boolean;
|
|
69
|
+
sync_alignment?: boolean;
|
|
70
|
+
language_code?: string;
|
|
71
|
+
/** Voice stability tuning, typically in the range [0, 1]. */
|
|
72
|
+
stability?: number;
|
|
73
|
+
/** Voice similarity tuning, typically in the range [0, 1]. */
|
|
74
|
+
similarity_boost?: number;
|
|
75
|
+
/** Style exaggeration tuning, typically in the range [0, 1]. */
|
|
76
|
+
style?: number;
|
|
77
|
+
/** Speech speed multiplier. */
|
|
78
|
+
speed?: number;
|
|
79
|
+
use_speaker_boost?: boolean;
|
|
80
|
+
chunk_length_schedule?: number[];
|
|
81
|
+
preferred_alignment?: string;
|
|
82
|
+
}
|
|
46
83
|
|
|
47
|
-
export
|
|
84
|
+
export interface DeepgramTTSOptions {
|
|
85
|
+
/** Default: false. */
|
|
86
|
+
mip_opt_out?: boolean;
|
|
87
|
+
}
|
|
48
88
|
|
|
49
|
-
export interface
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
export interface RimeOptions {
|
|
90
|
+
/** Default 1.0, <1 = faster, >1 = slower. */
|
|
91
|
+
speed_alpha?: number;
|
|
92
|
+
/** Default false. */
|
|
93
|
+
pause_between_brackets?: boolean;
|
|
94
|
+
/** Default false. */
|
|
95
|
+
phonemize_between_brackets?: boolean;
|
|
96
|
+
/** Comma-separated speed factors for [bracketed] words. */
|
|
97
|
+
inline_speed_alpha?: string;
|
|
98
|
+
/** Default false. */
|
|
99
|
+
no_text_normalization?: boolean;
|
|
52
100
|
}
|
|
53
101
|
|
|
54
|
-
export interface
|
|
55
|
-
|
|
56
|
-
|
|
102
|
+
export interface InworldOptions {
|
|
103
|
+
/** Range >0.5, <=1.5. */
|
|
104
|
+
speaking_rate?: number;
|
|
105
|
+
/** Range 0-2. */
|
|
106
|
+
temperature?: number;
|
|
107
|
+
timestamp_type?: 'TIMESTAMP_TYPE_UNSPECIFIED' | 'WORD' | 'CHARACTER';
|
|
108
|
+
apply_text_normalization?: 'APPLY_TEXT_NORMALIZATION_UNSPECIFIED' | 'ON' | 'OFF';
|
|
109
|
+
/** @deprecated Backward-compatible alias. Use `apply_text_normalization`. */
|
|
110
|
+
text_normalization?: 'ON' | 'OFF';
|
|
57
111
|
}
|
|
58
112
|
|
|
59
|
-
|
|
113
|
+
type _TTSModels =
|
|
114
|
+
| CartesiaModels
|
|
115
|
+
| DeepgramTTSModels
|
|
116
|
+
| ElevenlabsModels
|
|
117
|
+
| RimeModels
|
|
118
|
+
| InworldModels;
|
|
60
119
|
|
|
61
|
-
export
|
|
120
|
+
export type TTSModels =
|
|
121
|
+
| CartesiaModels
|
|
122
|
+
| DeepgramTTSModels
|
|
123
|
+
| ElevenlabsModels
|
|
124
|
+
| RimeModels
|
|
125
|
+
| InworldModels
|
|
126
|
+
| AnyString;
|
|
62
127
|
|
|
63
|
-
export type
|
|
128
|
+
export type ModelWithVoice = `${_TTSModels}:${string}` | TTSModels;
|
|
64
129
|
|
|
65
130
|
export type TTSOptions<TModel extends TTSModels> = TModel extends CartesiaModels
|
|
66
131
|
? CartesiaOptions
|
|
67
|
-
: TModel extends
|
|
68
|
-
?
|
|
69
|
-
: TModel extends
|
|
70
|
-
?
|
|
71
|
-
: TModel extends
|
|
72
|
-
?
|
|
73
|
-
:
|
|
132
|
+
: TModel extends DeepgramTTSModels
|
|
133
|
+
? DeepgramTTSOptions
|
|
134
|
+
: TModel extends ElevenlabsModels
|
|
135
|
+
? ElevenlabsOptions
|
|
136
|
+
: TModel extends RimeModels
|
|
137
|
+
? RimeOptions
|
|
138
|
+
: TModel extends InworldModels
|
|
139
|
+
? InworldOptions
|
|
140
|
+
: Record<string, unknown>;
|
|
141
|
+
|
|
142
|
+
/** Parse a model string into [model, voice]. Voice is undefined if not specified. */
|
|
143
|
+
export function parseTTSModelString(model: string): [string, string | undefined] {
|
|
144
|
+
const idx = model.lastIndexOf(':');
|
|
145
|
+
if (idx !== -1) {
|
|
146
|
+
return [model.slice(0, idx), model.slice(idx + 1)];
|
|
147
|
+
}
|
|
148
|
+
return [model, undefined];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** A fallback model with optional extra configuration. Extra fields are passed through to the provider. */
|
|
152
|
+
export interface TTSFallbackModel {
|
|
153
|
+
/** Model name (e.g. "cartesia/sonic", "elevenlabs/eleven_flash_v2", "rime/arcana"). */
|
|
154
|
+
model: string;
|
|
155
|
+
/** Voice to use for the model. */
|
|
156
|
+
voice: string;
|
|
157
|
+
/** Extra configuration for the model. */
|
|
158
|
+
extraKwargs?: Record<string, unknown>;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export type TTSFallbackModelType = TTSFallbackModel | string;
|
|
162
|
+
|
|
163
|
+
/** Normalize a single or list of FallbackModelType into TTSFallbackModel[]. */
|
|
164
|
+
export function normalizeTTSFallback(
|
|
165
|
+
fallback: TTSFallbackModelType | TTSFallbackModelType[],
|
|
166
|
+
): TTSFallbackModel[] {
|
|
167
|
+
const makeFallback = (model: TTSFallbackModelType): TTSFallbackModel => {
|
|
168
|
+
if (typeof model === 'string') {
|
|
169
|
+
const [name, voice] = parseTTSModelString(model);
|
|
170
|
+
return { model: name, voice: voice ?? '' };
|
|
171
|
+
}
|
|
172
|
+
return model;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
if (Array.isArray(fallback)) {
|
|
176
|
+
return fallback.map(makeFallback);
|
|
177
|
+
}
|
|
178
|
+
return [makeFallback(fallback)];
|
|
179
|
+
}
|
|
74
180
|
|
|
75
181
|
type TTSEncoding = 'pcm_s16le';
|
|
76
182
|
|
|
77
183
|
const DEFAULT_ENCODING: TTSEncoding = 'pcm_s16le';
|
|
78
184
|
const DEFAULT_SAMPLE_RATE = 16000;
|
|
79
|
-
const DEFAULT_BASE_URL = 'https://agent-gateway.livekit.cloud/v1';
|
|
80
185
|
const NUM_CHANNELS = 1;
|
|
81
186
|
const DEFAULT_LANGUAGE = 'en';
|
|
82
187
|
|
|
83
188
|
export interface InferenceTTSOptions<TModel extends TTSModels> {
|
|
84
189
|
model?: TModel;
|
|
85
190
|
voice?: string;
|
|
86
|
-
language?:
|
|
191
|
+
language?: LanguageCode;
|
|
87
192
|
encoding: TTSEncoding;
|
|
88
193
|
sampleRate: number;
|
|
89
194
|
baseURL: string;
|
|
90
195
|
apiKey: string;
|
|
91
196
|
apiSecret: string;
|
|
92
|
-
|
|
197
|
+
/** Flat provider-specific inference options forwarded as the `extra` payload field. */
|
|
198
|
+
modelOptions: TTSOptions<TModel>;
|
|
199
|
+
fallback?: TTSFallbackModel[];
|
|
200
|
+
connOptions?: APIConnectOptions;
|
|
93
201
|
}
|
|
94
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Livekit Cloud Inference TTS
|
|
205
|
+
*/
|
|
95
206
|
export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
96
207
|
private opts: InferenceTTSOptions<TModel>;
|
|
97
208
|
private streams: Set<SynthesizeStream<TModel>> = new Set();
|
|
209
|
+
pool: ConnectionPool<WebSocket>;
|
|
98
210
|
|
|
99
211
|
#logger = log();
|
|
100
212
|
|
|
@@ -107,7 +219,10 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
107
219
|
sampleRate?: number;
|
|
108
220
|
apiKey?: string;
|
|
109
221
|
apiSecret?: string;
|
|
110
|
-
|
|
222
|
+
/** Flat provider-specific inference options forwarded as the `extra` payload field. */
|
|
223
|
+
modelOptions?: TTSOptions<TModel>;
|
|
224
|
+
fallback?: TTSFallbackModelType | TTSFallbackModelType[];
|
|
225
|
+
connOptions?: APIConnectOptions;
|
|
111
226
|
}) {
|
|
112
227
|
const sampleRate = opts?.sampleRate ?? DEFAULT_SAMPLE_RATE;
|
|
113
228
|
super(sampleRate, 1, { streaming: true });
|
|
@@ -120,10 +235,12 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
120
235
|
encoding = DEFAULT_ENCODING,
|
|
121
236
|
apiKey,
|
|
122
237
|
apiSecret,
|
|
123
|
-
|
|
238
|
+
modelOptions = {} as TTSOptions<TModel>,
|
|
239
|
+
fallback,
|
|
240
|
+
connOptions,
|
|
124
241
|
} = opts || {};
|
|
125
242
|
|
|
126
|
-
const lkBaseURL = baseURL ||
|
|
243
|
+
const lkBaseURL = baseURL || getDefaultInferenceUrl();
|
|
127
244
|
const lkApiKey = apiKey || process.env.LIVEKIT_INFERENCE_API_KEY || process.env.LIVEKIT_API_KEY;
|
|
128
245
|
if (!lkApiKey) {
|
|
129
246
|
throw new Error('apiKey is required: pass apiKey or set LIVEKIT_API_KEY');
|
|
@@ -154,27 +271,57 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
154
271
|
}
|
|
155
272
|
}
|
|
156
273
|
|
|
274
|
+
const normalizedFallback = fallback ? normalizeTTSFallback(fallback) : undefined;
|
|
275
|
+
|
|
157
276
|
this.opts = {
|
|
158
277
|
model: nextModel,
|
|
159
278
|
voice: nextVoice,
|
|
160
|
-
language,
|
|
279
|
+
language: normalizeLanguage(language),
|
|
161
280
|
encoding,
|
|
162
281
|
sampleRate,
|
|
163
282
|
baseURL: lkBaseURL,
|
|
164
283
|
apiKey: lkApiKey,
|
|
165
284
|
apiSecret: lkApiSecret,
|
|
166
|
-
|
|
285
|
+
modelOptions,
|
|
286
|
+
fallback: normalizedFallback,
|
|
287
|
+
connOptions: connOptions ?? DEFAULT_API_CONNECT_OPTIONS,
|
|
167
288
|
};
|
|
289
|
+
|
|
290
|
+
// Initialize connection pool
|
|
291
|
+
this.pool = new ConnectionPool<WebSocket>({
|
|
292
|
+
connectCb: (timeout) => this.connectWs(timeout),
|
|
293
|
+
closeCb: (ws) => this.closeWs(ws),
|
|
294
|
+
maxSessionDuration: 300_000,
|
|
295
|
+
markRefreshedOnGet: true,
|
|
296
|
+
connectTimeout: 10_000, // 10 seconds default
|
|
297
|
+
});
|
|
168
298
|
}
|
|
169
299
|
|
|
170
300
|
get label() {
|
|
171
301
|
return 'inference.TTS';
|
|
172
302
|
}
|
|
173
303
|
|
|
304
|
+
get model(): string {
|
|
305
|
+
return this.opts.model ?? 'unknown';
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
get provider(): string {
|
|
309
|
+
return 'livekit';
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
static fromModelString(modelString: string): TTS<AnyString> {
|
|
313
|
+
const [model, voice] = parseTTSModelString(modelString);
|
|
314
|
+
return new TTS({ model, voice: voice || undefined });
|
|
315
|
+
}
|
|
316
|
+
|
|
174
317
|
updateOptions(opts: Partial<Pick<InferenceTTSOptions<TModel>, 'model' | 'voice' | 'language'>>) {
|
|
175
|
-
this.opts = {
|
|
318
|
+
this.opts = {
|
|
319
|
+
...this.opts,
|
|
320
|
+
...opts,
|
|
321
|
+
language: opts.language !== undefined ? normalizeLanguage(opts.language) : this.opts.language,
|
|
322
|
+
};
|
|
176
323
|
for (const stream of this.streams) {
|
|
177
|
-
stream.updateOptions(opts);
|
|
324
|
+
stream.updateOptions(this.opts);
|
|
178
325
|
}
|
|
179
326
|
}
|
|
180
327
|
|
|
@@ -183,7 +330,7 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
183
330
|
}
|
|
184
331
|
|
|
185
332
|
stream(options?: { connOptions?: APIConnectOptions }): SynthesizeStream<TModel> {
|
|
186
|
-
const { connOptions = DEFAULT_API_CONNECT_OPTIONS } = options || {};
|
|
333
|
+
const { connOptions = this.opts.connOptions ?? DEFAULT_API_CONNECT_OPTIONS } = options || {};
|
|
187
334
|
const stream = new SynthesizeStream(this, { ...this.opts }, connOptions);
|
|
188
335
|
this.streams.add(stream);
|
|
189
336
|
return stream;
|
|
@@ -203,13 +350,31 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
203
350
|
type: 'session.create',
|
|
204
351
|
sample_rate: String(this.opts.sampleRate),
|
|
205
352
|
encoding: this.opts.encoding,
|
|
206
|
-
extra: this.opts.
|
|
207
|
-
} as
|
|
353
|
+
extra: this.opts.modelOptions,
|
|
354
|
+
} as Record<string, unknown>;
|
|
355
|
+
|
|
356
|
+
if (this.opts.voice) (params as Record<string, unknown>).voice = this.opts.voice;
|
|
357
|
+
if (this.opts.model) (params as Record<string, unknown>).model = this.opts.model;
|
|
358
|
+
if (this.opts.language) (params as Record<string, unknown>).language = this.opts.language;
|
|
359
|
+
|
|
360
|
+
if (this.opts.fallback?.length) {
|
|
361
|
+
params.fallback = {
|
|
362
|
+
models: this.opts.fallback.map((m) => ({
|
|
363
|
+
model: m.model,
|
|
364
|
+
voice: m.voice,
|
|
365
|
+
extra: m.extraKwargs ?? {},
|
|
366
|
+
})),
|
|
367
|
+
};
|
|
368
|
+
}
|
|
208
369
|
|
|
209
|
-
if (this.opts.
|
|
210
|
-
|
|
211
|
-
|
|
370
|
+
if (this.opts.connOptions) {
|
|
371
|
+
params.connection = {
|
|
372
|
+
timeout: this.opts.connOptions.timeoutMs / 1000,
|
|
373
|
+
retries: this.opts.connOptions.maxRetry,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
212
376
|
|
|
377
|
+
this.#logger.debug({ url }, 'inference.TTS creating new websocket connection (pool miss)');
|
|
213
378
|
const socket = await connectWs(url, headers, timeout);
|
|
214
379
|
socket.send(JSON.stringify(params));
|
|
215
380
|
return socket;
|
|
@@ -219,18 +384,22 @@ export class TTS<TModel extends TTSModels> extends BaseTTS {
|
|
|
219
384
|
await ws.close();
|
|
220
385
|
}
|
|
221
386
|
|
|
387
|
+
prewarm(): void {
|
|
388
|
+
this.pool.prewarm();
|
|
389
|
+
}
|
|
390
|
+
|
|
222
391
|
async close() {
|
|
223
392
|
for (const stream of this.streams) {
|
|
224
393
|
await stream.close();
|
|
225
394
|
}
|
|
226
395
|
this.streams.clear();
|
|
396
|
+
await this.pool.close();
|
|
227
397
|
}
|
|
228
398
|
}
|
|
229
399
|
|
|
230
400
|
export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeStream {
|
|
231
401
|
private opts: InferenceTTSOptions<TModel>;
|
|
232
402
|
private tts: TTS<TModel>;
|
|
233
|
-
private connOptions: APIConnectOptions;
|
|
234
403
|
|
|
235
404
|
#logger = log();
|
|
236
405
|
|
|
@@ -238,7 +407,6 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
238
407
|
super(tts, connOptions);
|
|
239
408
|
this.opts = opts;
|
|
240
409
|
this.tts = tts;
|
|
241
|
-
this.connOptions = connOptions;
|
|
242
410
|
}
|
|
243
411
|
|
|
244
412
|
get label() {
|
|
@@ -246,31 +414,39 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
246
414
|
}
|
|
247
415
|
|
|
248
416
|
updateOptions(opts: Partial<Pick<InferenceTTSOptions<TModel>, 'model' | 'voice' | 'language'>>) {
|
|
249
|
-
this.opts = {
|
|
417
|
+
this.opts = {
|
|
418
|
+
...this.opts,
|
|
419
|
+
...opts,
|
|
420
|
+
language: opts.language !== undefined ? normalizeLanguage(opts.language) : this.opts.language,
|
|
421
|
+
};
|
|
250
422
|
}
|
|
251
423
|
|
|
252
424
|
protected async run(): Promise<void> {
|
|
253
|
-
let ws: WebSocket | null = null;
|
|
254
425
|
let closing = false;
|
|
255
|
-
let finalReceived = false;
|
|
256
426
|
let lastFrame: AudioFrame | undefined;
|
|
257
427
|
|
|
258
428
|
const sendTokenizerStream = new tokenizeBasic.SentenceTokenizer().stream();
|
|
259
429
|
const eventChannel = createStreamChannel<TtsServerEvent>();
|
|
260
430
|
const requestId = shortuuid('tts_request_');
|
|
431
|
+
const inputSentEvent = new Event();
|
|
261
432
|
|
|
262
|
-
|
|
433
|
+
// Signal for protocol-driven completion (when 'done' message is received)
|
|
434
|
+
const completionFuture = new Future<void>();
|
|
435
|
+
|
|
436
|
+
const resourceCleanup = async () => {
|
|
263
437
|
if (closing) return;
|
|
264
438
|
closing = true;
|
|
265
439
|
sendTokenizerStream.close();
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
ws?.close();
|
|
440
|
+
// close() returns a promise; don't leak it
|
|
441
|
+
await eventChannel.close();
|
|
269
442
|
};
|
|
270
443
|
|
|
271
|
-
const sendClientEvent = async (event: TtsClientEvent) => {
|
|
444
|
+
const sendClientEvent = async (event: TtsClientEvent, ws: WebSocket, signal: AbortSignal) => {
|
|
445
|
+
// Don't send events to a closed WebSocket or aborted controller
|
|
446
|
+
if (signal.aborted || closing) return;
|
|
447
|
+
|
|
272
448
|
const validatedEvent = await ttsClientEventSchema.parseAsync(event);
|
|
273
|
-
if (
|
|
449
|
+
if (ws.readyState !== WebSocket.OPEN) {
|
|
274
450
|
this.#logger.warn('Trying to send client TTS event to a closed WebSocket');
|
|
275
451
|
return;
|
|
276
452
|
}
|
|
@@ -284,67 +460,123 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
284
460
|
}
|
|
285
461
|
};
|
|
286
462
|
|
|
287
|
-
const createInputTask = async () => {
|
|
463
|
+
const createInputTask = async (signal: AbortSignal) => {
|
|
288
464
|
for await (const data of this.input) {
|
|
289
|
-
if (
|
|
465
|
+
if (signal.aborted || closing) break;
|
|
290
466
|
if (data === SynthesizeStream.FLUSH_SENTINEL) {
|
|
291
467
|
sendTokenizerStream.flush();
|
|
292
468
|
continue;
|
|
293
469
|
}
|
|
294
470
|
sendTokenizerStream.pushText(data);
|
|
295
471
|
}
|
|
296
|
-
|
|
472
|
+
// Only call endInput if the stream hasn't been closed by cleanup
|
|
473
|
+
if (!closing) {
|
|
474
|
+
sendTokenizerStream.endInput();
|
|
475
|
+
}
|
|
297
476
|
};
|
|
298
477
|
|
|
299
|
-
const createSentenceStreamTask = async () => {
|
|
478
|
+
const createSentenceStreamTask = async (ws: WebSocket, signal: AbortSignal) => {
|
|
300
479
|
for await (const ev of sendTokenizerStream) {
|
|
301
|
-
if (
|
|
302
|
-
|
|
303
|
-
sendClientEvent(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
480
|
+
if (signal.aborted || closing) break;
|
|
481
|
+
|
|
482
|
+
await sendClientEvent(
|
|
483
|
+
{
|
|
484
|
+
type: 'input_transcript',
|
|
485
|
+
transcript: ev.token + ' ',
|
|
486
|
+
},
|
|
487
|
+
ws,
|
|
488
|
+
signal,
|
|
489
|
+
);
|
|
490
|
+
inputSentEvent.set();
|
|
307
491
|
}
|
|
308
492
|
|
|
309
|
-
sendClientEvent({ type: 'session.flush' });
|
|
493
|
+
await sendClientEvent({ type: 'session.flush' }, ws, signal);
|
|
494
|
+
// needed in case empty input is sent
|
|
495
|
+
inputSentEvent.set();
|
|
310
496
|
};
|
|
311
497
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
ws.on('message', async (data) => {
|
|
498
|
+
// Handles WebSocket message routing and error handling
|
|
499
|
+
// Completes based on protocol messages, NOT on ws.close()
|
|
500
|
+
const createWsListenerTask = async (ws: WebSocket, signal: AbortSignal) => {
|
|
501
|
+
const onMessage = (data: Buffer) => {
|
|
502
|
+
try {
|
|
320
503
|
const eventJson = JSON.parse(data.toString()) as Record<string, unknown>;
|
|
321
504
|
const validatedEvent = ttsServerEventSchema.parse(eventJson);
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
})
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if (!closing) return this.#logger.error('WebSocket closed unexpectedly');
|
|
335
|
-
if (finalReceived) return resolve();
|
|
505
|
+
// writer.write returns a promise; avoid unhandled rejections if stream is closed
|
|
506
|
+
void eventChannel.write(validatedEvent).catch((error) => {
|
|
507
|
+
this.#logger.debug(
|
|
508
|
+
{ error },
|
|
509
|
+
'Failed writing TTS event to stream channel (likely closed)',
|
|
510
|
+
);
|
|
511
|
+
});
|
|
512
|
+
} catch (e) {
|
|
513
|
+
this.#logger.error({ error: e }, 'Error parsing WebSocket message');
|
|
514
|
+
}
|
|
515
|
+
};
|
|
336
516
|
|
|
337
|
-
|
|
517
|
+
const onError = (e: Error) => {
|
|
518
|
+
this.#logger.error({ error: e }, 'WebSocket error');
|
|
519
|
+
void resourceCleanup();
|
|
520
|
+
try {
|
|
521
|
+
// If the ws is misbehaving, hard-stop it immediately to avoid buffering.
|
|
522
|
+
ws.terminate?.();
|
|
523
|
+
} catch {
|
|
524
|
+
// ignore
|
|
525
|
+
}
|
|
526
|
+
// Ensure this ws is not reused
|
|
527
|
+
this.tts.pool.remove(ws);
|
|
528
|
+
completionFuture.reject(e);
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
const onClose = () => {
|
|
532
|
+
// WebSocket closed unexpectedly (not by us)
|
|
533
|
+
if (!closing) {
|
|
534
|
+
this.#logger.error('WebSocket closed unexpectedly');
|
|
535
|
+
void resourceCleanup();
|
|
536
|
+
// Ensure this ws is not reused
|
|
537
|
+
this.tts.pool.remove(ws);
|
|
538
|
+
completionFuture.reject(
|
|
338
539
|
new APIStatusError({
|
|
339
540
|
message: 'Gateway connection closed unexpectedly',
|
|
340
541
|
options: { requestId },
|
|
341
542
|
}),
|
|
342
543
|
);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
544
|
+
}
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
const onAbort = () => {
|
|
548
|
+
void resourceCleanup();
|
|
549
|
+
try {
|
|
550
|
+
// On interruption/abort, close the websocket immediately so the server stops streaming
|
|
551
|
+
// and the ws library doesn't buffer unread frames in memory.
|
|
552
|
+
ws.terminate?.();
|
|
553
|
+
} catch {
|
|
554
|
+
// ignore
|
|
555
|
+
}
|
|
556
|
+
this.tts.pool.remove(ws);
|
|
557
|
+
inputSentEvent.set();
|
|
558
|
+
completionFuture.resolve();
|
|
559
|
+
};
|
|
560
|
+
|
|
561
|
+
// Attach listeners
|
|
562
|
+
ws.on('message', onMessage);
|
|
563
|
+
ws.on('error', onError);
|
|
564
|
+
ws.on('close', onClose);
|
|
565
|
+
signal.addEventListener('abort', onAbort);
|
|
566
|
+
|
|
567
|
+
try {
|
|
568
|
+
// Wait for protocol-driven completion or error
|
|
569
|
+
await completionFuture.await;
|
|
570
|
+
} finally {
|
|
571
|
+
// IMPORTANT: Remove listeners so connection can be reused
|
|
572
|
+
ws.off('message', onMessage);
|
|
573
|
+
ws.off('error', onError);
|
|
574
|
+
ws.off('close', onClose);
|
|
575
|
+
signal.removeEventListener('abort', onAbort);
|
|
576
|
+
}
|
|
345
577
|
};
|
|
346
578
|
|
|
347
|
-
const createRecvTask = async () => {
|
|
579
|
+
const createRecvTask = async (signal: AbortSignal) => {
|
|
348
580
|
let currentSessionId: string | null = null;
|
|
349
581
|
|
|
350
582
|
const bstream = new AudioByteStream(this.opts.sampleRate, NUM_CHANNELS);
|
|
@@ -352,9 +584,11 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
352
584
|
const reader = serverEventStream.getReader();
|
|
353
585
|
|
|
354
586
|
try {
|
|
355
|
-
|
|
587
|
+
await inputSentEvent.wait();
|
|
588
|
+
|
|
589
|
+
while (!this.closed && !signal.aborted) {
|
|
356
590
|
const result = await reader.read();
|
|
357
|
-
if (
|
|
591
|
+
if (signal.aborted) return;
|
|
358
592
|
if (result.done) return;
|
|
359
593
|
|
|
360
594
|
const serverEvent = result.value;
|
|
@@ -370,24 +604,29 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
370
604
|
}
|
|
371
605
|
break;
|
|
372
606
|
case 'done':
|
|
373
|
-
finalReceived = true;
|
|
374
607
|
for (const frame of bstream.flush()) {
|
|
375
608
|
sendLastFrame(currentSessionId!, false);
|
|
376
609
|
lastFrame = frame;
|
|
377
610
|
}
|
|
378
611
|
sendLastFrame(currentSessionId!, true);
|
|
379
612
|
this.queue.put(SynthesizeStream.END_OF_STREAM);
|
|
380
|
-
|
|
613
|
+
await resourceCleanup();
|
|
614
|
+
completionFuture.resolve();
|
|
615
|
+
return;
|
|
381
616
|
case 'session.closed':
|
|
382
|
-
resourceCleanup();
|
|
383
|
-
|
|
617
|
+
await resourceCleanup();
|
|
618
|
+
completionFuture.resolve();
|
|
619
|
+
return;
|
|
384
620
|
case 'error':
|
|
385
621
|
this.#logger.error(
|
|
386
622
|
{ serverEvent },
|
|
387
623
|
'Received error message from LiveKit TTS WebSocket',
|
|
388
624
|
);
|
|
389
|
-
resourceCleanup();
|
|
390
|
-
|
|
625
|
+
await resourceCleanup();
|
|
626
|
+
completionFuture.reject(
|
|
627
|
+
new APIError(`LiveKit TTS returned error: ${serverEvent.message}`),
|
|
628
|
+
);
|
|
629
|
+
return;
|
|
391
630
|
default:
|
|
392
631
|
this.#logger.warn('Unexpected message %s', serverEvent);
|
|
393
632
|
break;
|
|
@@ -404,18 +643,81 @@ export class SynthesizeStream<TModel extends TTSModels> extends BaseSynthesizeSt
|
|
|
404
643
|
};
|
|
405
644
|
|
|
406
645
|
try {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
646
|
+
await this.tts.pool.withConnection(
|
|
647
|
+
async (ws: WebSocket) => {
|
|
648
|
+
try {
|
|
649
|
+
// IMPORTANT: don't cancel the stream's controller on normal completion,
|
|
650
|
+
// otherwise the pool will remove+close the ws and every run becomes a pool miss.
|
|
651
|
+
const runController = new AbortController();
|
|
652
|
+
const onStreamAbort = () => runController.abort(this.abortController.signal.reason);
|
|
653
|
+
this.abortController.signal.addEventListener('abort', onStreamAbort, { once: true });
|
|
654
|
+
|
|
655
|
+
const tasks = [
|
|
656
|
+
Task.from(
|
|
657
|
+
async (controller) => {
|
|
658
|
+
const combined = combineSignals(runController.signal, controller.signal);
|
|
659
|
+
await createInputTask(combined);
|
|
660
|
+
},
|
|
661
|
+
undefined,
|
|
662
|
+
'inference-tts-input',
|
|
663
|
+
),
|
|
664
|
+
Task.from(
|
|
665
|
+
async (controller) => {
|
|
666
|
+
const combined = combineSignals(runController.signal, controller.signal);
|
|
667
|
+
await createSentenceStreamTask(ws, combined);
|
|
668
|
+
},
|
|
669
|
+
undefined,
|
|
670
|
+
'inference-tts-sentence',
|
|
671
|
+
),
|
|
672
|
+
Task.from(
|
|
673
|
+
async (controller) => {
|
|
674
|
+
const combined = combineSignals(runController.signal, controller.signal);
|
|
675
|
+
await createWsListenerTask(ws, combined);
|
|
676
|
+
},
|
|
677
|
+
undefined,
|
|
678
|
+
'inference-tts-ws-listener',
|
|
679
|
+
),
|
|
680
|
+
Task.from(
|
|
681
|
+
async (controller) => {
|
|
682
|
+
const combined = combineSignals(runController.signal, controller.signal);
|
|
683
|
+
await createRecvTask(combined);
|
|
684
|
+
},
|
|
685
|
+
undefined,
|
|
686
|
+
'inference-tts-recv',
|
|
687
|
+
),
|
|
688
|
+
];
|
|
689
|
+
|
|
690
|
+
try {
|
|
691
|
+
await Promise.all(tasks.map((t) => t.result));
|
|
692
|
+
} finally {
|
|
693
|
+
// Mirror python finally: unblock recv and cancel all tasks.
|
|
694
|
+
inputSentEvent.set();
|
|
695
|
+
await resourceCleanup();
|
|
696
|
+
await cancelAndWait(tasks, 5000);
|
|
697
|
+
this.abortController.signal.removeEventListener('abort', onStreamAbort);
|
|
698
|
+
}
|
|
699
|
+
} catch (e) {
|
|
700
|
+
// If aborted, don't throw - let cleanup handle it
|
|
701
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
throw e;
|
|
705
|
+
}
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
timeout: this.connOptions.timeoutMs,
|
|
709
|
+
},
|
|
710
|
+
);
|
|
415
711
|
} catch (e) {
|
|
416
|
-
|
|
712
|
+
// Handle connection errors
|
|
713
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
714
|
+
// Abort is expected during normal shutdown
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
717
|
+
throw e;
|
|
417
718
|
} finally {
|
|
418
|
-
|
|
719
|
+
// Ensure cleanup always runs (and don't leak the promise)
|
|
720
|
+
await resourceCleanup();
|
|
419
721
|
}
|
|
420
722
|
}
|
|
421
723
|
}
|