@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
|
@@ -126,4 +126,41 @@ describe('StreamChannel', () => {
|
|
|
126
126
|
const nextResult = await reader.read();
|
|
127
127
|
expect(nextResult.done).toBe(true);
|
|
128
128
|
});
|
|
129
|
+
|
|
130
|
+
it('should gracefully handle close while read is pending', async () => {
|
|
131
|
+
const channel = createStreamChannel<string>();
|
|
132
|
+
const reader = channel.stream().getReader();
|
|
133
|
+
|
|
134
|
+
const readPromise = reader.read();
|
|
135
|
+
|
|
136
|
+
await channel.close();
|
|
137
|
+
|
|
138
|
+
const result = await readPromise;
|
|
139
|
+
expect(result.done).toBe(true);
|
|
140
|
+
expect(result.value).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('should complete all pending reads when closed', async () => {
|
|
144
|
+
const channel = createStreamChannel<number>();
|
|
145
|
+
const reader = channel.stream().getReader();
|
|
146
|
+
|
|
147
|
+
const read1 = reader.read();
|
|
148
|
+
const read2 = reader.read();
|
|
149
|
+
const read3 = reader.read();
|
|
150
|
+
|
|
151
|
+
await channel.write(42);
|
|
152
|
+
await channel.write(43);
|
|
153
|
+
await channel.close();
|
|
154
|
+
|
|
155
|
+
const result1 = await read1;
|
|
156
|
+
expect(result1.done).toBe(false);
|
|
157
|
+
expect(result1.value).toBe(42);
|
|
158
|
+
|
|
159
|
+
const result2 = await read2;
|
|
160
|
+
expect(result2.done).toBe(false);
|
|
161
|
+
expect(result2.value).toBe(43);
|
|
162
|
+
|
|
163
|
+
const result3 = await read3;
|
|
164
|
+
expect(result3.done).toBe(true);
|
|
165
|
+
});
|
|
129
166
|
});
|
|
@@ -4,29 +4,69 @@
|
|
|
4
4
|
import type { ReadableStream } from 'node:stream/web';
|
|
5
5
|
import { IdentityTransform } from './identity_transform.js';
|
|
6
6
|
|
|
7
|
-
export interface StreamChannel<T> {
|
|
7
|
+
export interface StreamChannel<T, E extends Error = Error> {
|
|
8
8
|
write(chunk: T): Promise<void>;
|
|
9
9
|
close(): Promise<void>;
|
|
10
10
|
stream(): ReadableStream<T>;
|
|
11
|
+
abort(error: E): Promise<void>;
|
|
12
|
+
readonly closed: boolean;
|
|
13
|
+
addStreamInput(stream: ReadableStream<T>): void;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
export function createStreamChannel<T>(): StreamChannel<T> {
|
|
16
|
+
export function createStreamChannel<T, E extends Error = Error>(): StreamChannel<T, E> {
|
|
14
17
|
const transform = new IdentityTransform<T>();
|
|
15
18
|
const writer = transform.writable.getWriter();
|
|
19
|
+
let isClosed = false;
|
|
16
20
|
|
|
17
21
|
return {
|
|
18
22
|
write: (chunk: T) => writer.write(chunk),
|
|
19
23
|
stream: () => transform.readable,
|
|
24
|
+
abort: async (error: E) => {
|
|
25
|
+
if (isClosed) return;
|
|
26
|
+
isClosed = true;
|
|
27
|
+
try {
|
|
28
|
+
await writer.abort(error);
|
|
29
|
+
} catch (e) {
|
|
30
|
+
if (e instanceof Error && e.name === 'TypeError') return;
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
addStreamInput: (newInputStream) => {
|
|
35
|
+
if (isClosed) return;
|
|
36
|
+
const reader = newInputStream.getReader();
|
|
37
|
+
(async () => {
|
|
38
|
+
try {
|
|
39
|
+
while (!isClosed) {
|
|
40
|
+
const { done, value } = await reader.read();
|
|
41
|
+
if (done) break;
|
|
42
|
+
await writer.write(value);
|
|
43
|
+
}
|
|
44
|
+
} catch (err) {
|
|
45
|
+
if (!isClosed) {
|
|
46
|
+
isClosed = true;
|
|
47
|
+
await writer.abort(err as E);
|
|
48
|
+
}
|
|
49
|
+
} finally {
|
|
50
|
+
reader.releaseLock();
|
|
51
|
+
}
|
|
52
|
+
})().catch(() => {});
|
|
53
|
+
},
|
|
20
54
|
close: async () => {
|
|
21
55
|
try {
|
|
22
|
-
|
|
56
|
+
const result = await writer.close();
|
|
57
|
+
isClosed = true;
|
|
58
|
+
return result;
|
|
23
59
|
} catch (e) {
|
|
24
60
|
if (e instanceof Error && e.name === 'TypeError') {
|
|
25
61
|
// Ignore error if the stream is already closed
|
|
62
|
+
isClosed = true;
|
|
26
63
|
return;
|
|
27
64
|
}
|
|
28
65
|
throw e;
|
|
29
66
|
}
|
|
30
67
|
},
|
|
68
|
+
get closed() {
|
|
69
|
+
return isClosed;
|
|
70
|
+
},
|
|
31
71
|
};
|
|
32
72
|
}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
import type { AudioFrame } from '@livekit/rtc-node';
|
|
5
5
|
import { log } from '../log.js';
|
|
6
|
+
import type { APIConnectOptions } from '../types.js';
|
|
7
|
+
import { isStreamClosedError } from '../utils.js';
|
|
6
8
|
import type { VAD, VADStream } from '../vad.js';
|
|
7
9
|
import { VADEventType } from '../vad.js';
|
|
8
10
|
import type { SpeechEvent } from './stt.js';
|
|
@@ -22,14 +24,18 @@ export class StreamAdapter extends STT {
|
|
|
22
24
|
this.#stt.on('metrics_collected', (metrics) => {
|
|
23
25
|
this.emit('metrics_collected', metrics);
|
|
24
26
|
});
|
|
27
|
+
|
|
28
|
+
this.#stt.on('error', (error) => {
|
|
29
|
+
this.emit('error', error);
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
|
|
27
|
-
_recognize(frame: AudioFrame): Promise<SpeechEvent> {
|
|
28
|
-
return this.#stt.recognize(frame);
|
|
33
|
+
_recognize(frame: AudioFrame, abortSignal?: AbortSignal): Promise<SpeechEvent> {
|
|
34
|
+
return this.#stt.recognize(frame, abortSignal);
|
|
29
35
|
}
|
|
30
36
|
|
|
31
|
-
stream(): StreamAdapterWrapper {
|
|
32
|
-
return new StreamAdapterWrapper(this.#stt, this.#vad);
|
|
37
|
+
stream(options?: { connOptions?: APIConnectOptions }): StreamAdapterWrapper {
|
|
38
|
+
return new StreamAdapterWrapper(this.#stt, this.#vad, options?.connOptions);
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
41
|
|
|
@@ -38,13 +44,18 @@ export class StreamAdapterWrapper extends SpeechStream {
|
|
|
38
44
|
#vadStream: VADStream;
|
|
39
45
|
label: string;
|
|
40
46
|
|
|
41
|
-
constructor(stt: STT, vad: VAD) {
|
|
42
|
-
super(stt);
|
|
47
|
+
constructor(stt: STT, vad: VAD, connOptions?: APIConnectOptions) {
|
|
48
|
+
super(stt, undefined, connOptions);
|
|
43
49
|
this.#stt = stt;
|
|
44
50
|
this.#vadStream = vad.stream();
|
|
45
51
|
this.label = `stt.StreamAdapterWrapper<${this.#stt.label}>`;
|
|
46
52
|
}
|
|
47
53
|
|
|
54
|
+
close() {
|
|
55
|
+
super.close();
|
|
56
|
+
this.#vadStream.close();
|
|
57
|
+
}
|
|
58
|
+
|
|
48
59
|
async monitorMetrics() {
|
|
49
60
|
return; // do nothing
|
|
50
61
|
}
|
|
@@ -58,7 +69,17 @@ export class StreamAdapterWrapper extends SpeechStream {
|
|
|
58
69
|
this.#vadStream.pushFrame(input);
|
|
59
70
|
}
|
|
60
71
|
}
|
|
61
|
-
|
|
72
|
+
|
|
73
|
+
// Guard against calling endInput() on already-closed stream
|
|
74
|
+
// This happens during handover when close() is called while forwardInput is running
|
|
75
|
+
try {
|
|
76
|
+
this.#vadStream.endInput();
|
|
77
|
+
} catch (e) {
|
|
78
|
+
if (isStreamClosedError(e)) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
throw e;
|
|
82
|
+
}
|
|
62
83
|
};
|
|
63
84
|
|
|
64
85
|
const recognize = async () => {
|
|
@@ -71,7 +92,7 @@ export class StreamAdapterWrapper extends SpeechStream {
|
|
|
71
92
|
this.output.put({ type: SpeechEventType.END_OF_SPEECH });
|
|
72
93
|
|
|
73
94
|
try {
|
|
74
|
-
const event = await this.#stt.recognize(ev.frames);
|
|
95
|
+
const event = await this.#stt.recognize(ev.frames, this.abortSignal);
|
|
75
96
|
if (!event.alternatives![0].text) {
|
|
76
97
|
continue;
|
|
77
98
|
}
|
|
@@ -92,6 +113,6 @@ export class StreamAdapterWrapper extends SpeechStream {
|
|
|
92
113
|
}
|
|
93
114
|
};
|
|
94
115
|
|
|
95
|
-
Promise.all([forwardInput(), recognize()]);
|
|
116
|
+
await Promise.all([forwardInput(), recognize()]);
|
|
96
117
|
}
|
|
97
118
|
}
|
package/src/stt/stt.ts
CHANGED
|
@@ -6,13 +6,15 @@ import type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';
|
|
|
6
6
|
import { EventEmitter } from 'node:events';
|
|
7
7
|
import type { ReadableStream } from 'node:stream/web';
|
|
8
8
|
import { APIConnectionError, APIError } from '../_exceptions.js';
|
|
9
|
-
import {
|
|
9
|
+
import { calculateAudioDurationSeconds } from '../audio.js';
|
|
10
|
+
import type { LanguageCode } from '../language.js';
|
|
10
11
|
import { log } from '../log.js';
|
|
11
12
|
import type { STTMetrics } from '../metrics/base.js';
|
|
12
13
|
import { DeferredReadableStream } from '../stream/deferred_stream.js';
|
|
13
|
-
import { type APIConnectOptions, DEFAULT_API_CONNECT_OPTIONS } from '../types.js';
|
|
14
|
+
import { type APIConnectOptions, DEFAULT_API_CONNECT_OPTIONS, intervalForRetry } from '../types.js';
|
|
14
15
|
import type { AudioBuffer } from '../utils.js';
|
|
15
16
|
import { AsyncIterableQueue, delay, startSoon, toError } from '../utils.js';
|
|
17
|
+
import type { TimedString } from '../voice/index.js';
|
|
16
18
|
|
|
17
19
|
/** Indicates start/middle/end of speech */
|
|
18
20
|
export enum SpeechEventType {
|
|
@@ -38,19 +40,37 @@ export enum SpeechEventType {
|
|
|
38
40
|
END_OF_SPEECH = 3,
|
|
39
41
|
/** Usage event, emitted periodically to indicate usage metrics. */
|
|
40
42
|
RECOGNITION_USAGE = 4,
|
|
43
|
+
/**
|
|
44
|
+
* Preflight transcript, emitted before final transcript when STT has high confidence
|
|
45
|
+
* but hasn't fully committed yet. Includes all pre-committed transcripts including
|
|
46
|
+
* final transcript from the previous STT run.
|
|
47
|
+
*/
|
|
48
|
+
PREFLIGHT_TRANSCRIPT = 5,
|
|
41
49
|
}
|
|
42
50
|
|
|
43
51
|
/** SpeechData contains metadata about this {@link SpeechEvent}. */
|
|
44
52
|
export interface SpeechData {
|
|
45
|
-
|
|
53
|
+
/** Language code of the speech. */
|
|
54
|
+
language: LanguageCode;
|
|
55
|
+
/** Transcribed text. */
|
|
46
56
|
text: string;
|
|
57
|
+
/** Start time of the speech segment in seconds. */
|
|
47
58
|
startTime: number;
|
|
59
|
+
/** End time of the speech segment in seconds. */
|
|
48
60
|
endTime: number;
|
|
61
|
+
/** Confidence score of the transcription (0-1). */
|
|
49
62
|
confidence: number;
|
|
63
|
+
/** Word-level timing information. */
|
|
64
|
+
words?: TimedString[];
|
|
50
65
|
}
|
|
51
66
|
|
|
52
67
|
export interface RecognitionUsage {
|
|
68
|
+
/** Duration of the audio that was recognized in seconds. */
|
|
53
69
|
audioDuration: number;
|
|
70
|
+
/** Input audio tokens (for token-based STT billing). */
|
|
71
|
+
inputTokens?: number;
|
|
72
|
+
/** Output text tokens (for token-based STT billing). */
|
|
73
|
+
outputTokens?: number;
|
|
54
74
|
}
|
|
55
75
|
|
|
56
76
|
/** SpeechEvent is a packet of speech-to-text data. */
|
|
@@ -70,6 +90,13 @@ export interface SpeechEvent {
|
|
|
70
90
|
export interface STTCapabilities {
|
|
71
91
|
streaming: boolean;
|
|
72
92
|
interimResults: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether this STT supports aligned transcripts with word/chunk timestamps.
|
|
95
|
+
* - 'word': Provider returns word-level timestamps
|
|
96
|
+
* - 'chunk': Provider returns chunk-level timestamps (e.g., sentence/phrase boundaries)
|
|
97
|
+
* - false: Provider does not support aligned transcripts
|
|
98
|
+
*/
|
|
99
|
+
alignedTranscript?: 'word' | 'chunk' | false;
|
|
73
100
|
}
|
|
74
101
|
|
|
75
102
|
export interface STTError {
|
|
@@ -106,29 +133,67 @@ export abstract class STT extends (EventEmitter as new () => TypedEmitter<STTCal
|
|
|
106
133
|
return this.#capabilities;
|
|
107
134
|
}
|
|
108
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Get the model name/identifier for this STT instance.
|
|
138
|
+
*
|
|
139
|
+
* @returns The model name if available, "unknown" otherwise.
|
|
140
|
+
*
|
|
141
|
+
* @remarks
|
|
142
|
+
* Plugins should override this property to provide their model information.
|
|
143
|
+
*/
|
|
144
|
+
get model(): string {
|
|
145
|
+
return 'unknown';
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Get the provider name for this STT instance.
|
|
150
|
+
*
|
|
151
|
+
* @returns The provider name if available, "unknown" otherwise.
|
|
152
|
+
*
|
|
153
|
+
* @remarks
|
|
154
|
+
* Plugins should override this property to provide their provider information.
|
|
155
|
+
*/
|
|
156
|
+
get provider(): string {
|
|
157
|
+
return 'unknown';
|
|
158
|
+
}
|
|
159
|
+
|
|
109
160
|
/** Receives an audio buffer and returns transcription in the form of a {@link SpeechEvent} */
|
|
110
|
-
async recognize(frame: AudioBuffer): Promise<SpeechEvent> {
|
|
161
|
+
async recognize(frame: AudioBuffer, abortSignal?: AbortSignal): Promise<SpeechEvent> {
|
|
111
162
|
const startTime = process.hrtime.bigint();
|
|
112
|
-
const event = await this._recognize(frame);
|
|
113
|
-
const
|
|
163
|
+
const event = await this._recognize(frame, abortSignal);
|
|
164
|
+
const durationMs = Number((process.hrtime.bigint() - startTime) / BigInt(1000000));
|
|
114
165
|
this.emit('metrics_collected', {
|
|
115
166
|
type: 'stt_metrics',
|
|
116
167
|
requestId: event.requestId ?? '',
|
|
117
168
|
timestamp: Date.now(),
|
|
118
|
-
|
|
169
|
+
durationMs,
|
|
119
170
|
label: this.label,
|
|
120
|
-
|
|
171
|
+
audioDurationMs: Math.round(calculateAudioDurationSeconds(frame) * 1000),
|
|
121
172
|
streamed: false,
|
|
173
|
+
metadata: {
|
|
174
|
+
modelProvider: this.provider,
|
|
175
|
+
modelName: this.model,
|
|
176
|
+
},
|
|
122
177
|
});
|
|
123
178
|
return event;
|
|
124
179
|
}
|
|
125
|
-
|
|
180
|
+
|
|
181
|
+
protected abstract _recognize(
|
|
182
|
+
frame: AudioBuffer,
|
|
183
|
+
abortSignal?: AbortSignal,
|
|
184
|
+
): Promise<SpeechEvent>;
|
|
126
185
|
|
|
127
186
|
/**
|
|
128
187
|
* Returns a {@link SpeechStream} that can be used to push audio frames and receive
|
|
129
188
|
* transcriptions
|
|
189
|
+
*
|
|
190
|
+
* @param options - Optional configuration including connection options
|
|
130
191
|
*/
|
|
131
|
-
abstract stream(): SpeechStream;
|
|
192
|
+
abstract stream(options?: { connOptions?: APIConnectOptions }): SpeechStream;
|
|
193
|
+
|
|
194
|
+
async close(): Promise<void> {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
132
197
|
}
|
|
133
198
|
|
|
134
199
|
/**
|
|
@@ -160,6 +225,9 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
160
225
|
private deferredInputStream: DeferredReadableStream<AudioFrame>;
|
|
161
226
|
private logger = log();
|
|
162
227
|
private _connOptions: APIConnectOptions;
|
|
228
|
+
private _startTimeOffset: number = 0;
|
|
229
|
+
|
|
230
|
+
protected abortController = new AbortController();
|
|
163
231
|
|
|
164
232
|
constructor(
|
|
165
233
|
stt: STT,
|
|
@@ -177,16 +245,24 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
177
245
|
// is run **after** the constructor has finished. Otherwise we get
|
|
178
246
|
// runtime error when trying to access class variables in the
|
|
179
247
|
// `run` method.
|
|
180
|
-
startSoon(() => this.mainTask().
|
|
248
|
+
startSoon(() => this.mainTask().finally(() => this.queue.close()));
|
|
181
249
|
}
|
|
182
250
|
|
|
183
|
-
|
|
251
|
+
/**
|
|
252
|
+
* Runs the STT with retry logic. Errors are emitted via {@link STT} error events
|
|
253
|
+
* and then re-thrown to trigger `.finally()` cleanup.
|
|
254
|
+
*
|
|
255
|
+
* @throws {APIError} When the STT request fails with a non-retryable error
|
|
256
|
+
* @throws {APIConnectionError} When all retry attempts are exhausted
|
|
257
|
+
* @internal Not annotated with Throws<> because this is fire-and-forget via startSoon()
|
|
258
|
+
*/
|
|
259
|
+
private async mainTask(): Promise<void> {
|
|
184
260
|
for (let i = 0; i < this._connOptions.maxRetry + 1; i++) {
|
|
185
261
|
try {
|
|
186
262
|
return await this.run();
|
|
187
263
|
} catch (error) {
|
|
188
264
|
if (error instanceof APIError) {
|
|
189
|
-
const retryInterval = this._connOptions
|
|
265
|
+
const retryInterval = intervalForRetry(this._connOptions, i);
|
|
190
266
|
|
|
191
267
|
if (this._connOptions.maxRetry === 0 || !error.retryable) {
|
|
192
268
|
this.emitError({ error, recoverable: false });
|
|
@@ -198,10 +274,11 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
198
274
|
options: { retryable: false },
|
|
199
275
|
});
|
|
200
276
|
} else {
|
|
201
|
-
|
|
277
|
+
// Don't emit error event for recoverable errors during retry loop
|
|
278
|
+
// to avoid ERR_UNHANDLED_ERROR or premature session termination
|
|
202
279
|
this.logger.warn(
|
|
203
|
-
{
|
|
204
|
-
`failed to recognize speech, retrying in ${retryInterval}
|
|
280
|
+
{ stt: this.#stt.label, attempt: i + 1, error },
|
|
281
|
+
`failed to recognize speech, retrying in ${retryInterval}ms`,
|
|
205
282
|
);
|
|
206
283
|
}
|
|
207
284
|
|
|
@@ -246,24 +323,58 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
246
323
|
|
|
247
324
|
protected async monitorMetrics() {
|
|
248
325
|
for await (const event of this.queue) {
|
|
249
|
-
this.output.
|
|
326
|
+
if (!this.output.closed) {
|
|
327
|
+
try {
|
|
328
|
+
this.output.put(event);
|
|
329
|
+
} catch (e) {
|
|
330
|
+
if (e instanceof Error && e.message.includes('Queue is closed')) {
|
|
331
|
+
this.logger.warn(
|
|
332
|
+
{ err: e },
|
|
333
|
+
'Queue closed during transcript processing (expected during disconnect)',
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
250
338
|
if (event.type !== SpeechEventType.RECOGNITION_USAGE) continue;
|
|
251
339
|
const metrics: STTMetrics = {
|
|
252
340
|
type: 'stt_metrics',
|
|
253
341
|
timestamp: Date.now(),
|
|
254
342
|
requestId: event.requestId!,
|
|
255
|
-
|
|
343
|
+
durationMs: 0,
|
|
256
344
|
label: this.#stt.label,
|
|
257
|
-
|
|
345
|
+
audioDurationMs: Math.round(event.recognitionUsage!.audioDuration * 1000),
|
|
346
|
+
inputTokens: event.recognitionUsage!.inputTokens ?? 0,
|
|
347
|
+
outputTokens: event.recognitionUsage!.outputTokens ?? 0,
|
|
258
348
|
streamed: true,
|
|
349
|
+
metadata: {
|
|
350
|
+
modelProvider: this.#stt.provider,
|
|
351
|
+
modelName: this.#stt.model,
|
|
352
|
+
},
|
|
259
353
|
};
|
|
260
354
|
this.#stt.emit('metrics_collected', metrics);
|
|
261
355
|
}
|
|
262
|
-
this.output.
|
|
356
|
+
if (!this.output.closed) {
|
|
357
|
+
this.output.close();
|
|
358
|
+
}
|
|
263
359
|
}
|
|
264
360
|
|
|
265
361
|
protected abstract run(): Promise<void>;
|
|
266
362
|
|
|
363
|
+
protected get abortSignal(): AbortSignal {
|
|
364
|
+
return this.abortController.signal;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
get startTimeOffset(): number {
|
|
368
|
+
return this._startTimeOffset;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
set startTimeOffset(value: number) {
|
|
372
|
+
if (value < 0) {
|
|
373
|
+
throw new Error('startTimeOffset must be non-negative');
|
|
374
|
+
}
|
|
375
|
+
this._startTimeOffset = value;
|
|
376
|
+
}
|
|
377
|
+
|
|
267
378
|
updateInputStream(audioStream: ReadableStream<AudioFrame>) {
|
|
268
379
|
this.deferredInputStream.setSource(audioStream);
|
|
269
380
|
}
|
|
@@ -287,6 +398,11 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
287
398
|
}
|
|
288
399
|
}
|
|
289
400
|
|
|
401
|
+
if (frame.samplesPerChannel === 0) {
|
|
402
|
+
this.input.put(frame);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
|
|
290
406
|
if (this.resampler) {
|
|
291
407
|
const frames = this.resampler.push(frame);
|
|
292
408
|
for (const frame of frames) {
|
|
@@ -325,9 +441,10 @@ export abstract class SpeechStream implements AsyncIterableIterator<SpeechEvent>
|
|
|
325
441
|
|
|
326
442
|
/** Close both the input and output of the STT stream */
|
|
327
443
|
close() {
|
|
328
|
-
this.input.close();
|
|
329
|
-
this.queue.close();
|
|
330
|
-
this.output.close();
|
|
444
|
+
if (!this.input.closed) this.input.close();
|
|
445
|
+
if (!this.queue.closed) this.queue.close();
|
|
446
|
+
if (!this.output.closed) this.output.close();
|
|
447
|
+
if (!this.abortController.signal.aborted) this.abortController.abort();
|
|
331
448
|
this.closed = true;
|
|
332
449
|
}
|
|
333
450
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2025 LiveKit, Inc.
|
|
2
|
+
//
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
export { ExtraDetailsProcessor, MetadataLogProcessor } from './logging.js';
|
|
6
|
+
export {
|
|
7
|
+
SimpleOTLPHttpLogExporter,
|
|
8
|
+
type SimpleLogRecord,
|
|
9
|
+
type SimpleOTLPHttpLogExporterConfig,
|
|
10
|
+
} from './otel_http_exporter.js';
|
|
11
|
+
export {
|
|
12
|
+
emitToOtel,
|
|
13
|
+
flushPinoLogs,
|
|
14
|
+
initPinoCloudExporter,
|
|
15
|
+
PinoCloudExporter,
|
|
16
|
+
type PinoCloudExporterConfig,
|
|
17
|
+
type PinoLogObject,
|
|
18
|
+
} from './pino_otel_transport.js';
|
|
19
|
+
export * as traceTypes from './trace_types.js';
|
|
20
|
+
export {
|
|
21
|
+
flushOtelLogs,
|
|
22
|
+
setTracerProvider,
|
|
23
|
+
setupCloudTracer,
|
|
24
|
+
tracer,
|
|
25
|
+
uploadSessionReport,
|
|
26
|
+
type StartSpanOptions,
|
|
27
|
+
} from './traces.js';
|
|
28
|
+
export { recordException, recordRealtimeMetrics } from './utils.js';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2025 LiveKit, Inc.
|
|
2
|
+
//
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
import type { Attributes } from '@opentelemetry/api';
|
|
5
|
+
import type { LogRecord, LogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Metadata log processor that injects metadata (room_id, job_id) into all log records.
|
|
9
|
+
*/
|
|
10
|
+
export class MetadataLogProcessor implements LogRecordProcessor {
|
|
11
|
+
private metadata: Attributes;
|
|
12
|
+
|
|
13
|
+
constructor(metadata: Attributes) {
|
|
14
|
+
this.metadata = metadata;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
onEmit(logRecord: LogRecord): void {
|
|
18
|
+
// Add metadata to log record attributes
|
|
19
|
+
if (logRecord.attributes) {
|
|
20
|
+
Object.assign(logRecord.attributes, this.metadata);
|
|
21
|
+
} else {
|
|
22
|
+
(logRecord as any).attributes = { ...this.metadata };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
shutdown(): Promise<void> {
|
|
27
|
+
return Promise.resolve();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
forceFlush(): Promise<void> {
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Extra details processor that adds logger name to log records.
|
|
37
|
+
*/
|
|
38
|
+
export class ExtraDetailsProcessor implements LogRecordProcessor {
|
|
39
|
+
onEmit(logRecord: LogRecord): void {
|
|
40
|
+
const loggerName = logRecord.instrumentationScope.name;
|
|
41
|
+
if (logRecord.attributes) {
|
|
42
|
+
(logRecord.attributes as any)['logger.name'] = loggerName;
|
|
43
|
+
} else {
|
|
44
|
+
(logRecord as any).attributes = { 'logger.name': loggerName };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
shutdown(): Promise<void> {
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
forceFlush(): Promise<void> {
|
|
53
|
+
return Promise.resolve();
|
|
54
|
+
}
|
|
55
|
+
}
|