@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/types.ts
CHANGED
|
@@ -1,42 +1,71 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2025 LiveKit, Inc.
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
export class APIConnectOptions {
|
|
5
|
-
/** Maximum number of retries to connect to the API. */
|
|
6
|
-
readonly maxRetry: number;
|
|
7
|
-
/** Interval between retries to connect to the API in milliseconds. */
|
|
8
|
-
readonly retryIntervalMs: number;
|
|
9
|
-
/** Timeout for connecting to the API in milliseconds. */
|
|
10
|
-
readonly timeoutMs: number;
|
|
11
4
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Key used to store timed transcripts in AudioFrame.userdata.
|
|
7
|
+
*/
|
|
8
|
+
export const USERDATA_TIMED_TRANSCRIPT = 'lk.timed_transcripts';
|
|
16
9
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Connection options for API calls, controlling retry and timeout behavior.
|
|
12
|
+
*/
|
|
13
|
+
export interface APIConnectOptions {
|
|
14
|
+
/** Maximum number of retries to connect to the API. Default: 3 */
|
|
15
|
+
maxRetry: number;
|
|
16
|
+
/** Interval between retries to connect to the API in milliseconds. Default: 2000 */
|
|
17
|
+
retryIntervalMs: number;
|
|
18
|
+
/** Timeout for connecting to the API in milliseconds. Default: 10000 */
|
|
19
|
+
timeoutMs: number;
|
|
20
|
+
}
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
export const DEFAULT_API_CONNECT_OPTIONS: APIConnectOptions = {
|
|
23
|
+
maxRetry: 3,
|
|
24
|
+
retryIntervalMs: 2000,
|
|
25
|
+
timeoutMs: 10000,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Return the interval for the given number of retries.
|
|
30
|
+
* The first retry is immediate, and then uses specified retryIntervalMs.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function intervalForRetry(connOptions: APIConnectOptions, numRetries: number): number {
|
|
34
|
+
if (numRetries === 0) {
|
|
35
|
+
return 0.1;
|
|
39
36
|
}
|
|
37
|
+
return connOptions.retryIntervalMs;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Connection options for the agent session, controlling retry and timeout behavior
|
|
42
|
+
* for STT, LLM, and TTS connections.
|
|
43
|
+
*/
|
|
44
|
+
export interface SessionConnectOptions {
|
|
45
|
+
/** Connection options for speech-to-text. */
|
|
46
|
+
sttConnOptions?: Partial<APIConnectOptions>;
|
|
47
|
+
/** Connection options for the language model. */
|
|
48
|
+
llmConnOptions?: Partial<APIConnectOptions>;
|
|
49
|
+
/** Connection options for text-to-speech. */
|
|
50
|
+
ttsConnOptions?: Partial<APIConnectOptions>;
|
|
51
|
+
/** Maximum number of consecutive unrecoverable errors from LLM or TTS before closing the session. Default: 3 */
|
|
52
|
+
maxUnrecoverableErrors?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Resolved session connect options with all values populated.
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export interface ResolvedSessionConnectOptions {
|
|
60
|
+
sttConnOptions: APIConnectOptions;
|
|
61
|
+
llmConnOptions: APIConnectOptions;
|
|
62
|
+
ttsConnOptions: APIConnectOptions;
|
|
63
|
+
maxUnrecoverableErrors: number;
|
|
40
64
|
}
|
|
41
65
|
|
|
42
|
-
export const
|
|
66
|
+
export const DEFAULT_SESSION_CONNECT_OPTIONS: ResolvedSessionConnectOptions = {
|
|
67
|
+
sttConnOptions: DEFAULT_API_CONNECT_OPTIONS,
|
|
68
|
+
llmConnOptions: DEFAULT_API_CONNECT_OPTIONS,
|
|
69
|
+
ttsConnOptions: DEFAULT_API_CONNECT_OPTIONS,
|
|
70
|
+
maxUnrecoverableErrors: 3,
|
|
71
|
+
};
|
package/src/utils.test.ts
CHANGED
|
@@ -5,15 +5,7 @@ import { AudioFrame } from '@livekit/rtc-node';
|
|
|
5
5
|
import { ReadableStream } from 'node:stream/web';
|
|
6
6
|
import { describe, expect, it } from 'vitest';
|
|
7
7
|
import { initializeLogger } from '../src/log.js';
|
|
8
|
-
import {
|
|
9
|
-
Event,
|
|
10
|
-
TASK_TIMEOUT_ERROR,
|
|
11
|
-
Task,
|
|
12
|
-
TaskResult,
|
|
13
|
-
delay,
|
|
14
|
-
isPending,
|
|
15
|
-
resampleStream,
|
|
16
|
-
} from '../src/utils.js';
|
|
8
|
+
import { Event, Task, TaskResult, delay, isPending, resampleStream } from '../src/utils.js';
|
|
17
9
|
|
|
18
10
|
describe('utils', () => {
|
|
19
11
|
// initialize logger
|
|
@@ -442,7 +434,8 @@ describe('utils', () => {
|
|
|
442
434
|
await task.cancelAndWait(200);
|
|
443
435
|
expect.fail('Task should have timed out');
|
|
444
436
|
} catch (error: unknown) {
|
|
445
|
-
expect(error).
|
|
437
|
+
expect(error).instanceof(Error);
|
|
438
|
+
expect((error as Error).message).toBe('Task cancellation timed out');
|
|
446
439
|
}
|
|
447
440
|
});
|
|
448
441
|
|
|
@@ -476,6 +469,93 @@ describe('utils', () => {
|
|
|
476
469
|
expect((error as Error).name).toBe('TypeError');
|
|
477
470
|
}
|
|
478
471
|
});
|
|
472
|
+
|
|
473
|
+
it('should return undefined for Task.current outside task context', () => {
|
|
474
|
+
expect(Task.current()).toBeUndefined();
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
it('should preserve Task.current inside a task across awaits', async () => {
|
|
478
|
+
const task = Task.from(
|
|
479
|
+
async () => {
|
|
480
|
+
const currentAtStart = Task.current();
|
|
481
|
+
await delay(5);
|
|
482
|
+
const currentAfterAwait = Task.current();
|
|
483
|
+
|
|
484
|
+
expect(currentAtStart).toBeDefined();
|
|
485
|
+
expect(currentAfterAwait).toBe(currentAtStart);
|
|
486
|
+
|
|
487
|
+
return currentAtStart;
|
|
488
|
+
},
|
|
489
|
+
undefined,
|
|
490
|
+
'current-context-test',
|
|
491
|
+
);
|
|
492
|
+
|
|
493
|
+
const currentFromResult = await task.result;
|
|
494
|
+
expect(currentFromResult).toBe(task);
|
|
495
|
+
});
|
|
496
|
+
|
|
497
|
+
it('should isolate nested Task.current context and restore parent context', async () => {
|
|
498
|
+
const parentTask = Task.from(
|
|
499
|
+
async (controller) => {
|
|
500
|
+
const parentCurrent = Task.current();
|
|
501
|
+
expect(parentCurrent).toBeDefined();
|
|
502
|
+
|
|
503
|
+
const childTask = Task.from(
|
|
504
|
+
async () => {
|
|
505
|
+
const childCurrentStart = Task.current();
|
|
506
|
+
await delay(5);
|
|
507
|
+
const childCurrentAfterAwait = Task.current();
|
|
508
|
+
|
|
509
|
+
expect(childCurrentStart).toBeDefined();
|
|
510
|
+
expect(childCurrentAfterAwait).toBe(childCurrentStart);
|
|
511
|
+
expect(childCurrentStart).not.toBe(parentCurrent);
|
|
512
|
+
|
|
513
|
+
return childCurrentStart;
|
|
514
|
+
},
|
|
515
|
+
controller,
|
|
516
|
+
'child-current-context-test',
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
const childCurrent = await childTask.result;
|
|
520
|
+
const parentCurrentAfterChild = Task.current();
|
|
521
|
+
|
|
522
|
+
expect(parentCurrentAfterChild).toBe(parentCurrent);
|
|
523
|
+
|
|
524
|
+
return { parentCurrent, childCurrent };
|
|
525
|
+
},
|
|
526
|
+
undefined,
|
|
527
|
+
'parent-current-context-test',
|
|
528
|
+
);
|
|
529
|
+
|
|
530
|
+
const { parentCurrent, childCurrent } = await parentTask.result;
|
|
531
|
+
expect(parentCurrent).toBe(parentTask);
|
|
532
|
+
expect(childCurrent).not.toBe(parentCurrent);
|
|
533
|
+
expect(Task.current()).toBeUndefined();
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
it('should always expose Task.current for concurrent task callbacks', async () => {
|
|
537
|
+
const tasks = Array.from({ length: 25 }, (_, idx) =>
|
|
538
|
+
Task.from(
|
|
539
|
+
async () => {
|
|
540
|
+
const currentAtStart = Task.current();
|
|
541
|
+
await delay(1);
|
|
542
|
+
const currentAfterAwait = Task.current();
|
|
543
|
+
|
|
544
|
+
expect(currentAtStart).toBeDefined();
|
|
545
|
+
expect(currentAfterAwait).toBe(currentAtStart);
|
|
546
|
+
|
|
547
|
+
return currentAtStart;
|
|
548
|
+
},
|
|
549
|
+
undefined,
|
|
550
|
+
`current-context-stress-${idx}`,
|
|
551
|
+
),
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
const currentTasks = await Promise.all(tasks.map((task) => task.result));
|
|
555
|
+
currentTasks.forEach((currentTask, idx) => {
|
|
556
|
+
expect(currentTask).toBe(tasks[idx]);
|
|
557
|
+
});
|
|
558
|
+
});
|
|
479
559
|
});
|
|
480
560
|
|
|
481
561
|
describe('Event', () => {
|
package/src/utils.ts
CHANGED
|
@@ -9,12 +9,30 @@ import type {
|
|
|
9
9
|
TrackKind,
|
|
10
10
|
} from '@livekit/rtc-node';
|
|
11
11
|
import { AudioFrame, AudioResampler, RoomEvent } from '@livekit/rtc-node';
|
|
12
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
12
13
|
import { EventEmitter, once } from 'node:events';
|
|
13
14
|
import type { ReadableStream } from 'node:stream/web';
|
|
14
15
|
import { TransformStream, type TransformStreamDefaultController } from 'node:stream/web';
|
|
15
16
|
import { v4 as uuidv4 } from 'uuid';
|
|
16
17
|
import { log } from './log.js';
|
|
17
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Recursively expands all nested properties of a type,
|
|
21
|
+
* resolving aliases so as to inspect the real shape in IDE.
|
|
22
|
+
*/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
24
|
+
export type Expand<T> = T extends Function
|
|
25
|
+
? T
|
|
26
|
+
: T extends object
|
|
27
|
+
? T extends Array<infer U>
|
|
28
|
+
? Array<Expand<U>>
|
|
29
|
+
: T extends Map<infer K, infer V>
|
|
30
|
+
? Map<Expand<K>, Expand<V>>
|
|
31
|
+
: T extends Set<infer M>
|
|
32
|
+
? Set<Expand<M>>
|
|
33
|
+
: { [K in keyof T]: Expand<T[K]> }
|
|
34
|
+
: T;
|
|
35
|
+
|
|
18
36
|
/** Union of a single and a list of {@link AudioFrame}s */
|
|
19
37
|
export type AudioBuffer = AudioFrame[] | AudioFrame;
|
|
20
38
|
|
|
@@ -108,6 +126,9 @@ export class Future<T = void> {
|
|
|
108
126
|
#resolvePromise!: (value: T) => void;
|
|
109
127
|
#rejectPromise!: (error: Error) => void;
|
|
110
128
|
#done: boolean = false;
|
|
129
|
+
#rejected: boolean = false;
|
|
130
|
+
#result: T | undefined = undefined;
|
|
131
|
+
#error: Error | undefined = undefined;
|
|
111
132
|
|
|
112
133
|
constructor() {
|
|
113
134
|
this.#await = new Promise<T>((resolve, reject) => {
|
|
@@ -124,14 +145,39 @@ export class Future<T = void> {
|
|
|
124
145
|
return this.#done;
|
|
125
146
|
}
|
|
126
147
|
|
|
148
|
+
get result(): T {
|
|
149
|
+
if (!this.#done) {
|
|
150
|
+
throw new Error('Future is not done');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (this.#rejected) {
|
|
154
|
+
throw this.#error;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return this.#result!;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Whether the future was rejected (cancelled) */
|
|
161
|
+
get rejected() {
|
|
162
|
+
return this.#rejected;
|
|
163
|
+
}
|
|
164
|
+
|
|
127
165
|
resolve(value: T) {
|
|
128
166
|
this.#done = true;
|
|
167
|
+
this.#result = value;
|
|
129
168
|
this.#resolvePromise(value);
|
|
130
169
|
}
|
|
131
170
|
|
|
132
171
|
reject(error: Error) {
|
|
133
172
|
this.#done = true;
|
|
173
|
+
this.#rejected = true;
|
|
174
|
+
this.#error = error;
|
|
134
175
|
this.#rejectPromise(error);
|
|
176
|
+
// Python calls Future.exception() right after set_exception() to silence
|
|
177
|
+
// "exception was never retrieved" warnings. In JS, consume the rejection
|
|
178
|
+
// immediately so Node does not emit unhandled-rejection noise before a
|
|
179
|
+
// later await/catch observes it.
|
|
180
|
+
void this.#await.catch(() => undefined);
|
|
135
181
|
}
|
|
136
182
|
}
|
|
137
183
|
|
|
@@ -368,8 +414,6 @@ export class AudioEnergyFilter {
|
|
|
368
414
|
}
|
|
369
415
|
}
|
|
370
416
|
|
|
371
|
-
export const TASK_TIMEOUT_ERROR = new Error('Task cancellation timed out');
|
|
372
|
-
|
|
373
417
|
export enum TaskResult {
|
|
374
418
|
Timeout = 'timeout',
|
|
375
419
|
Completed = 'completed',
|
|
@@ -396,7 +440,9 @@ export enum TaskResult {
|
|
|
396
440
|
* @param T - The type of the task result
|
|
397
441
|
*/
|
|
398
442
|
export class Task<T> {
|
|
443
|
+
private static readonly currentTaskStorage = new AsyncLocalStorage<Task<unknown>>();
|
|
399
444
|
private resultFuture: Future<T>;
|
|
445
|
+
private doneCallbacks: Set<() => void> = new Set();
|
|
400
446
|
|
|
401
447
|
#logger = log();
|
|
402
448
|
|
|
@@ -406,6 +452,21 @@ export class Task<T> {
|
|
|
406
452
|
readonly name?: string,
|
|
407
453
|
) {
|
|
408
454
|
this.resultFuture = new Future();
|
|
455
|
+
void this.resultFuture.await
|
|
456
|
+
.then(
|
|
457
|
+
() => undefined,
|
|
458
|
+
() => undefined,
|
|
459
|
+
)
|
|
460
|
+
.finally(() => {
|
|
461
|
+
for (const callback of this.doneCallbacks) {
|
|
462
|
+
try {
|
|
463
|
+
callback();
|
|
464
|
+
} catch (error) {
|
|
465
|
+
this.#logger.error({ error }, 'Task done callback failed');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
this.doneCallbacks.clear();
|
|
469
|
+
});
|
|
409
470
|
this.runTask();
|
|
410
471
|
}
|
|
411
472
|
|
|
@@ -425,6 +486,13 @@ export class Task<T> {
|
|
|
425
486
|
return new Task(fn, abortController, name);
|
|
426
487
|
}
|
|
427
488
|
|
|
489
|
+
/**
|
|
490
|
+
* Returns the currently running task in this async context, if available.
|
|
491
|
+
*/
|
|
492
|
+
static current(): Task<unknown> | undefined {
|
|
493
|
+
return Task.currentTaskStorage.getStore();
|
|
494
|
+
}
|
|
495
|
+
|
|
428
496
|
private async runTask() {
|
|
429
497
|
const run = async () => {
|
|
430
498
|
if (this.name) {
|
|
@@ -433,7 +501,8 @@ export class Task<T> {
|
|
|
433
501
|
return await this.fn(this.controller);
|
|
434
502
|
};
|
|
435
503
|
|
|
436
|
-
return
|
|
504
|
+
return Task.currentTaskStorage
|
|
505
|
+
.run(this as Task<unknown>, run)
|
|
437
506
|
.then((value) => {
|
|
438
507
|
this.resultFuture.resolve(value);
|
|
439
508
|
return value;
|
|
@@ -464,34 +533,30 @@ export class Task<T> {
|
|
|
464
533
|
async cancelAndWait(timeout?: number) {
|
|
465
534
|
this.cancel();
|
|
466
535
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
const result = await Promise.race(promises);
|
|
536
|
+
// Race between task completion and timeout
|
|
537
|
+
const promises = [
|
|
538
|
+
this.result
|
|
539
|
+
.then(() => TaskResult.Completed)
|
|
540
|
+
.catch((error) => {
|
|
541
|
+
if (error.name === 'AbortError') {
|
|
542
|
+
return TaskResult.Aborted;
|
|
543
|
+
}
|
|
544
|
+
throw error;
|
|
545
|
+
}),
|
|
546
|
+
];
|
|
547
|
+
|
|
548
|
+
if (timeout) {
|
|
549
|
+
promises.push(delay(timeout).then(() => TaskResult.Timeout));
|
|
550
|
+
}
|
|
485
551
|
|
|
486
|
-
|
|
487
|
-
if (result === TaskResult.Timeout) {
|
|
488
|
-
throw TASK_TIMEOUT_ERROR;
|
|
489
|
-
}
|
|
552
|
+
const result = await Promise.race(promises);
|
|
490
553
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
throw
|
|
554
|
+
// Check what happened
|
|
555
|
+
if (result === TaskResult.Timeout) {
|
|
556
|
+
throw new Error('Task cancellation timed out');
|
|
494
557
|
}
|
|
558
|
+
|
|
559
|
+
return result;
|
|
495
560
|
}
|
|
496
561
|
|
|
497
562
|
/**
|
|
@@ -509,7 +574,15 @@ export class Task<T> {
|
|
|
509
574
|
}
|
|
510
575
|
|
|
511
576
|
addDoneCallback(callback: () => void) {
|
|
512
|
-
this.
|
|
577
|
+
if (this.done) {
|
|
578
|
+
queueMicrotask(callback);
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
this.doneCallbacks.add(callback);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
removeDoneCallback(callback: () => void) {
|
|
585
|
+
this.doneCallbacks.delete(callback);
|
|
513
586
|
}
|
|
514
587
|
}
|
|
515
588
|
|
|
@@ -633,14 +706,22 @@ export function resampleStream({
|
|
|
633
706
|
let resampler: AudioResampler | null = null;
|
|
634
707
|
const transformStream = new TransformStream<AudioFrame, AudioFrame>({
|
|
635
708
|
transform(chunk: AudioFrame, controller: TransformStreamDefaultController<AudioFrame>) {
|
|
709
|
+
if (chunk.samplesPerChannel === 0) {
|
|
710
|
+
controller.enqueue(chunk);
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
636
713
|
if (!resampler) {
|
|
637
714
|
resampler = new AudioResampler(chunk.sampleRate, outputRate);
|
|
638
715
|
}
|
|
639
716
|
for (const frame of resampler.push(chunk)) {
|
|
640
717
|
controller.enqueue(frame);
|
|
641
718
|
}
|
|
642
|
-
|
|
643
|
-
|
|
719
|
+
},
|
|
720
|
+
flush(controller) {
|
|
721
|
+
if (resampler) {
|
|
722
|
+
for (const frame of resampler.flush()) {
|
|
723
|
+
controller.enqueue(frame);
|
|
724
|
+
}
|
|
644
725
|
}
|
|
645
726
|
},
|
|
646
727
|
});
|
|
@@ -657,6 +738,20 @@ export class InvalidErrorType extends Error {
|
|
|
657
738
|
}
|
|
658
739
|
}
|
|
659
740
|
|
|
741
|
+
/**
|
|
742
|
+
* Check if an error is a stream closed error that can be safely ignored during cleanup.
|
|
743
|
+
* This happens during handover/cleanup when close() is called while operations are still running.
|
|
744
|
+
*
|
|
745
|
+
* @param error - The error to check.
|
|
746
|
+
* @returns True if the error is a stream closed error.
|
|
747
|
+
*/
|
|
748
|
+
export function isStreamClosedError(error: unknown): boolean {
|
|
749
|
+
return (
|
|
750
|
+
error instanceof Error &&
|
|
751
|
+
(error.message === 'Stream is closed' || error.message === 'Input is closed')
|
|
752
|
+
);
|
|
753
|
+
}
|
|
754
|
+
|
|
660
755
|
/**
|
|
661
756
|
* In JS an error can be any arbitrary value.
|
|
662
757
|
* This function converts an unknown error to an Error and stores the original value in the error object.
|
|
@@ -694,11 +789,11 @@ export type DelayOptions = {
|
|
|
694
789
|
*/
|
|
695
790
|
export function delay(ms: number, options: DelayOptions = {}): Promise<void> {
|
|
696
791
|
const { signal } = options;
|
|
697
|
-
if (signal?.aborted) return Promise.reject(signal.reason);
|
|
792
|
+
if (signal?.aborted) return Promise.reject(signal.reason ?? new Error('delay aborted'));
|
|
698
793
|
return new Promise((resolve, reject) => {
|
|
699
794
|
const abort = () => {
|
|
700
795
|
clearTimeout(i);
|
|
701
|
-
reject(signal?.reason);
|
|
796
|
+
reject(signal?.reason ?? new Error('delay aborted'));
|
|
702
797
|
};
|
|
703
798
|
const done = () => {
|
|
704
799
|
signal?.removeEventListener('abort', abort);
|
|
@@ -751,7 +846,12 @@ export async function waitForParticipant({
|
|
|
751
846
|
}
|
|
752
847
|
};
|
|
753
848
|
|
|
849
|
+
const onDisconnected = () => {
|
|
850
|
+
fut.reject(new Error('Got disconnected from room while waiting for participant'));
|
|
851
|
+
};
|
|
852
|
+
|
|
754
853
|
room.on(RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
854
|
+
room.on(RoomEvent.Disconnected, onDisconnected);
|
|
755
855
|
|
|
756
856
|
try {
|
|
757
857
|
for (const p of room.remoteParticipants.values()) {
|
|
@@ -764,6 +864,7 @@ export async function waitForParticipant({
|
|
|
764
864
|
return await fut.await;
|
|
765
865
|
} finally {
|
|
766
866
|
room.off(RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
867
|
+
room.off(RoomEvent.Disconnected, onDisconnected);
|
|
767
868
|
}
|
|
768
869
|
}
|
|
769
870
|
|
|
@@ -828,3 +929,47 @@ export async function waitForAbort(signal: AbortSignal) {
|
|
|
828
929
|
signal.addEventListener('abort', handler, { once: true });
|
|
829
930
|
return await abortFuture.await;
|
|
830
931
|
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Combines two abort signals into a single abort signal.
|
|
935
|
+
* @param a - The first abort signal.
|
|
936
|
+
* @param b - The second abort signal.
|
|
937
|
+
* @returns A new abort signal that is aborted when either of the input signals is aborted.
|
|
938
|
+
*/
|
|
939
|
+
export const combineSignals = (a: AbortSignal, b: AbortSignal): AbortSignal => {
|
|
940
|
+
const c = new AbortController();
|
|
941
|
+
const abortFrom = (s: AbortSignal) => {
|
|
942
|
+
if (c.signal.aborted) return;
|
|
943
|
+
c.abort((s as any).reason);
|
|
944
|
+
};
|
|
945
|
+
if (a.aborted) {
|
|
946
|
+
abortFrom(a);
|
|
947
|
+
} else {
|
|
948
|
+
a.addEventListener('abort', () => abortFrom(a), { once: true });
|
|
949
|
+
}
|
|
950
|
+
if (b.aborted) {
|
|
951
|
+
abortFrom(b);
|
|
952
|
+
} else {
|
|
953
|
+
b.addEventListener('abort', () => abortFrom(b), { once: true });
|
|
954
|
+
}
|
|
955
|
+
return c.signal;
|
|
956
|
+
};
|
|
957
|
+
|
|
958
|
+
export const isCloud = (url: URL) => {
|
|
959
|
+
const hostname = url.hostname;
|
|
960
|
+
return hostname.endsWith('.livekit.cloud') || hostname.endsWith('.livekit.run');
|
|
961
|
+
};
|
|
962
|
+
|
|
963
|
+
/**
|
|
964
|
+
* Whether the agent is running in development mode (launched via `dev` or `connect`).
|
|
965
|
+
*/
|
|
966
|
+
export const isDevMode = (): boolean => {
|
|
967
|
+
return process.env.LIVEKIT_DEV_MODE === '1';
|
|
968
|
+
};
|
|
969
|
+
|
|
970
|
+
/**
|
|
971
|
+
* Whether the agent is hosted on LiveKit Cloud.
|
|
972
|
+
*/
|
|
973
|
+
export const isHosted = (): boolean => {
|
|
974
|
+
return process.env.LIVEKIT_REMOTE_EOT_URL !== undefined;
|
|
975
|
+
};
|
package/src/vad.ts
CHANGED
|
@@ -30,9 +30,9 @@ export interface VADEvent {
|
|
|
30
30
|
samplesIndex: number;
|
|
31
31
|
/** Timestamp when the event was fired. */
|
|
32
32
|
timestamp: number;
|
|
33
|
-
/** Duration of the speech segment. */
|
|
33
|
+
/** Duration of the speech segment in seconds. */
|
|
34
34
|
speechDuration: number;
|
|
35
|
-
/** Duration of the silence segment. */
|
|
35
|
+
/** Duration of the silence segment in seconds. */
|
|
36
36
|
silenceDuration: number;
|
|
37
37
|
/**
|
|
38
38
|
* List of audio frames associated with the speech.
|
|
@@ -56,6 +56,7 @@ export interface VADEvent {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
export interface VADCapabilities {
|
|
59
|
+
/** Duration of each VAD inference window in milliseconds. Used to batch metrics emissions to roughly once per second. */
|
|
59
60
|
updateInterval: number;
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -80,6 +81,10 @@ export abstract class VAD extends (EventEmitter as new () => TypedEmitter<VADCal
|
|
|
80
81
|
* Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.
|
|
81
82
|
*/
|
|
82
83
|
abstract stream(): VADStream;
|
|
84
|
+
|
|
85
|
+
async close(): Promise<void> {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
export abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
@@ -93,14 +98,15 @@ export abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
|
93
98
|
protected closed = false;
|
|
94
99
|
protected inputClosed = false;
|
|
95
100
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
protected vad: VAD;
|
|
102
|
+
protected lastActivityTime = BigInt(0);
|
|
103
|
+
protected logger;
|
|
104
|
+
protected deferredInputStream: DeferredReadableStream<AudioFrame>;
|
|
100
105
|
|
|
101
106
|
private metricsStream: ReadableStream<VADEvent>;
|
|
102
107
|
constructor(vad: VAD) {
|
|
103
|
-
this
|
|
108
|
+
this.logger = log();
|
|
109
|
+
this.vad = vad;
|
|
104
110
|
this.deferredInputStream = new DeferredReadableStream<AudioFrame>();
|
|
105
111
|
|
|
106
112
|
this.inputWriter = this.input.writable.getWriter();
|
|
@@ -139,7 +145,7 @@ export abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
protected async monitorMetrics() {
|
|
142
|
-
let
|
|
148
|
+
let inferenceDurationTotalMs = 0;
|
|
143
149
|
let inferenceCount = 0;
|
|
144
150
|
const metricsReader = this.metricsStream.getReader();
|
|
145
151
|
while (true) {
|
|
@@ -150,33 +156,51 @@ export abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
|
150
156
|
switch (value.type) {
|
|
151
157
|
case VADEventType.START_OF_SPEECH:
|
|
152
158
|
inferenceCount++;
|
|
153
|
-
if (inferenceCount >=
|
|
154
|
-
this
|
|
159
|
+
if (inferenceCount >= 1000 / this.vad.capabilities.updateInterval) {
|
|
160
|
+
this.vad.emit('metrics_collected', {
|
|
155
161
|
type: 'vad_metrics',
|
|
156
162
|
timestamp: Date.now(),
|
|
157
|
-
|
|
158
|
-
Number((process.hrtime.bigint() - this
|
|
163
|
+
idleTimeMs: Math.trunc(
|
|
164
|
+
Number((process.hrtime.bigint() - this.lastActivityTime) / BigInt(1000000)),
|
|
159
165
|
),
|
|
160
|
-
|
|
166
|
+
inferenceDurationTotalMs,
|
|
161
167
|
inferenceCount,
|
|
162
|
-
label: this
|
|
168
|
+
label: this.vad.label,
|
|
163
169
|
});
|
|
164
170
|
|
|
165
171
|
inferenceCount = 0;
|
|
166
|
-
|
|
172
|
+
inferenceDurationTotalMs = 0;
|
|
167
173
|
}
|
|
168
174
|
break;
|
|
169
175
|
case VADEventType.INFERENCE_DONE:
|
|
170
|
-
|
|
171
|
-
this
|
|
176
|
+
inferenceDurationTotalMs += Math.round(value.inferenceDuration);
|
|
177
|
+
this.lastActivityTime = process.hrtime.bigint();
|
|
172
178
|
break;
|
|
173
179
|
case VADEventType.END_OF_SPEECH:
|
|
174
|
-
this
|
|
180
|
+
this.lastActivityTime = process.hrtime.bigint();
|
|
175
181
|
break;
|
|
176
182
|
}
|
|
177
183
|
}
|
|
178
184
|
}
|
|
179
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Safely send a VAD event to the output stream, handling writer release errors during shutdown.
|
|
188
|
+
* @returns true if the event was sent, false if the stream is closing
|
|
189
|
+
* @throws Error if an unexpected error occurs
|
|
190
|
+
*/
|
|
191
|
+
protected sendVADEvent(event: VADEvent): boolean {
|
|
192
|
+
if (this.closed) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
try {
|
|
197
|
+
this.outputWriter.write(event);
|
|
198
|
+
return true;
|
|
199
|
+
} catch (e) {
|
|
200
|
+
throw e;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
180
204
|
updateInputStream(audioStream: ReadableStream<AudioFrame>) {
|
|
181
205
|
this.deferredInputStream.setSource(audioStream);
|
|
182
206
|
}
|
package/src/version.ts
CHANGED