@livekit/agents 0.0.0-20260120144724
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/LICENSE +201 -0
- package/README.md +17 -0
- package/dist/_exceptions.cjs +109 -0
- package/dist/_exceptions.cjs.map +1 -0
- package/dist/_exceptions.d.cts +64 -0
- package/dist/_exceptions.d.ts +64 -0
- package/dist/_exceptions.d.ts.map +1 -0
- package/dist/_exceptions.js +80 -0
- package/dist/_exceptions.js.map +1 -0
- package/dist/audio.cjs +170 -0
- package/dist/audio.cjs.map +1 -0
- package/dist/audio.d.cts +46 -0
- package/dist/audio.d.ts +46 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +133 -0
- package/dist/audio.js.map +1 -0
- package/dist/cli.cjs +171 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +14 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +145 -0
- package/dist/cli.js.map +1 -0
- 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 +44 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +7 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/generator.cjs +36 -0
- package/dist/generator.cjs.map +1 -0
- package/dist/generator.d.cts +23 -0
- package/dist/generator.d.ts +23 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +11 -0
- package/dist/generator.js.map +1 -0
- package/dist/http_server.cjs +75 -0
- package/dist/http_server.cjs.map +1 -0
- package/dist/http_server.d.cts +20 -0
- package/dist/http_server.d.ts +20 -0
- package/dist/http_server.d.ts.map +1 -0
- package/dist/http_server.js +51 -0
- package/dist/http_server.js.map +1 -0
- package/dist/index.cjs +100 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/api_protos.cjs +104 -0
- package/dist/inference/api_protos.cjs.map +1 -0
- package/dist/inference/api_protos.d.cts +222 -0
- package/dist/inference/api_protos.d.ts +222 -0
- package/dist/inference/api_protos.d.ts.map +1 -0
- package/dist/inference/api_protos.js +70 -0
- package/dist/inference/api_protos.js.map +1 -0
- package/dist/inference/index.cjs +56 -0
- package/dist/inference/index.cjs.map +1 -0
- package/dist/inference/index.d.cts +8 -0
- package/dist/inference/index.d.ts +8 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +23 -0
- package/dist/inference/index.js.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.cjs +152 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.cjs.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.cts +50 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.ts +50 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.ts.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.js +125 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.js.map +1 -0
- package/dist/inference/interruption/InterruptionStream.cjs +310 -0
- package/dist/inference/interruption/InterruptionStream.cjs.map +1 -0
- package/dist/inference/interruption/InterruptionStream.d.cts +57 -0
- package/dist/inference/interruption/InterruptionStream.d.ts +57 -0
- package/dist/inference/interruption/InterruptionStream.d.ts.map +1 -0
- package/dist/inference/interruption/InterruptionStream.js +288 -0
- package/dist/inference/interruption/InterruptionStream.js.map +1 -0
- package/dist/inference/interruption/defaults.cjs +76 -0
- package/dist/inference/interruption/defaults.cjs.map +1 -0
- package/dist/inference/interruption/defaults.d.cts +14 -0
- package/dist/inference/interruption/defaults.d.ts +14 -0
- package/dist/inference/interruption/defaults.d.ts.map +1 -0
- package/dist/inference/interruption/defaults.js +42 -0
- package/dist/inference/interruption/defaults.js.map +1 -0
- package/dist/inference/interruption/errors.cjs +2 -0
- package/dist/inference/interruption/errors.cjs.map +1 -0
- package/dist/inference/interruption/errors.d.cts +2 -0
- package/dist/inference/interruption/errors.d.ts +2 -0
- package/dist/inference/interruption/errors.d.ts.map +1 -0
- package/dist/inference/interruption/errors.js +1 -0
- package/dist/inference/interruption/errors.js.map +1 -0
- package/dist/inference/interruption/http_transport.cjs +57 -0
- package/dist/inference/interruption/http_transport.cjs.map +1 -0
- package/dist/inference/interruption/http_transport.d.cts +23 -0
- package/dist/inference/interruption/http_transport.d.ts +23 -0
- package/dist/inference/interruption/http_transport.d.ts.map +1 -0
- package/dist/inference/interruption/http_transport.js +33 -0
- package/dist/inference/interruption/http_transport.js.map +1 -0
- package/dist/inference/interruption/index.cjs +34 -0
- package/dist/inference/interruption/index.cjs.map +1 -0
- package/dist/inference/interruption/index.d.cts +5 -0
- package/dist/inference/interruption/index.d.ts +5 -0
- package/dist/inference/interruption/index.d.ts.map +1 -0
- package/dist/inference/interruption/index.js +7 -0
- package/dist/inference/interruption/index.js.map +1 -0
- package/dist/inference/interruption/interruption.cjs +85 -0
- package/dist/inference/interruption/interruption.cjs.map +1 -0
- package/dist/inference/interruption/interruption.d.cts +48 -0
- package/dist/inference/interruption/interruption.d.ts +48 -0
- package/dist/inference/interruption/interruption.d.ts.map +1 -0
- package/dist/inference/interruption/interruption.js +59 -0
- package/dist/inference/interruption/interruption.js.map +1 -0
- package/dist/inference/llm.cjs +347 -0
- package/dist/inference/llm.cjs.map +1 -0
- package/dist/inference/llm.d.cts +114 -0
- package/dist/inference/llm.d.ts +114 -0
- package/dist/inference/llm.d.ts.map +1 -0
- package/dist/inference/llm.js +318 -0
- package/dist/inference/llm.js.map +1 -0
- package/dist/inference/stt.cjs +371 -0
- package/dist/inference/stt.cjs.map +1 -0
- package/dist/inference/stt.d.cts +91 -0
- package/dist/inference/stt.d.ts +91 -0
- package/dist/inference/stt.d.ts.map +1 -0
- package/dist/inference/stt.js +350 -0
- package/dist/inference/stt.js.map +1 -0
- package/dist/inference/tts.cjs +439 -0
- package/dist/inference/tts.cjs.map +1 -0
- package/dist/inference/tts.d.cts +80 -0
- package/dist/inference/tts.d.ts +80 -0
- package/dist/inference/tts.d.ts.map +1 -0
- package/dist/inference/tts.js +417 -0
- package/dist/inference/tts.js.map +1 -0
- package/dist/inference/utils.cjs +89 -0
- package/dist/inference/utils.cjs.map +1 -0
- package/dist/inference/utils.d.cts +6 -0
- package/dist/inference/utils.d.ts +6 -0
- package/dist/inference/utils.d.ts.map +1 -0
- package/dist/inference/utils.js +63 -0
- package/dist/inference/utils.js.map +1 -0
- package/dist/inference/utils.test.cjs +20 -0
- package/dist/inference/utils.test.cjs.map +1 -0
- package/dist/inference/utils.test.js +19 -0
- package/dist/inference/utils.test.js.map +1 -0
- package/dist/inference_runner.cjs +37 -0
- package/dist/inference_runner.cjs.map +1 -0
- package/dist/inference_runner.d.cts +11 -0
- package/dist/inference_runner.d.ts +11 -0
- package/dist/inference_runner.d.ts.map +1 -0
- package/dist/inference_runner.js +13 -0
- package/dist/inference_runner.js.map +1 -0
- package/dist/ipc/index.cjs +23 -0
- package/dist/ipc/index.cjs.map +1 -0
- package/dist/ipc/index.d.cts +2 -0
- package/dist/ipc/index.d.ts +2 -0
- package/dist/ipc/index.d.ts.map +1 -0
- package/dist/ipc/index.js +2 -0
- package/dist/ipc/index.js.map +1 -0
- package/dist/ipc/inference_executor.cjs +17 -0
- package/dist/ipc/inference_executor.cjs.map +1 -0
- package/dist/ipc/inference_executor.d.cts +4 -0
- package/dist/ipc/inference_executor.d.ts +4 -0
- package/dist/ipc/inference_executor.d.ts.map +1 -0
- package/dist/ipc/inference_executor.js +1 -0
- package/dist/ipc/inference_executor.js.map +1 -0
- package/dist/ipc/inference_proc_executor.cjs +101 -0
- package/dist/ipc/inference_proc_executor.cjs.map +1 -0
- package/dist/ipc/inference_proc_executor.d.cts +23 -0
- package/dist/ipc/inference_proc_executor.d.ts +23 -0
- package/dist/ipc/inference_proc_executor.d.ts.map +1 -0
- package/dist/ipc/inference_proc_executor.js +75 -0
- package/dist/ipc/inference_proc_executor.js.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.cjs +86 -0
- package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.d.cts +2 -0
- package/dist/ipc/inference_proc_lazy_main.d.ts +2 -0
- package/dist/ipc/inference_proc_lazy_main.d.ts.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.js +85 -0
- package/dist/ipc/inference_proc_lazy_main.js.map +1 -0
- package/dist/ipc/job_executor.cjs +34 -0
- package/dist/ipc/job_executor.cjs.map +1 -0
- package/dist/ipc/job_executor.d.cts +18 -0
- package/dist/ipc/job_executor.d.ts +18 -0
- package/dist/ipc/job_executor.d.ts.map +1 -0
- package/dist/ipc/job_executor.js +10 -0
- package/dist/ipc/job_executor.js.map +1 -0
- package/dist/ipc/job_proc_executor.cjs +115 -0
- package/dist/ipc/job_proc_executor.cjs.map +1 -0
- package/dist/ipc/job_proc_executor.d.cts +19 -0
- package/dist/ipc/job_proc_executor.d.ts +19 -0
- package/dist/ipc/job_proc_executor.d.ts.map +1 -0
- package/dist/ipc/job_proc_executor.js +89 -0
- package/dist/ipc/job_proc_executor.js.map +1 -0
- package/dist/ipc/job_proc_lazy_main.cjs +210 -0
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -0
- package/dist/ipc/job_proc_lazy_main.d.cts +2 -0
- package/dist/ipc/job_proc_lazy_main.d.ts +2 -0
- package/dist/ipc/job_proc_lazy_main.d.ts.map +1 -0
- package/dist/ipc/job_proc_lazy_main.js +187 -0
- package/dist/ipc/job_proc_lazy_main.js.map +1 -0
- package/dist/ipc/message.cjs +17 -0
- package/dist/ipc/message.cjs.map +1 -0
- package/dist/ipc/message.d.cts +58 -0
- package/dist/ipc/message.d.ts +58 -0
- package/dist/ipc/message.d.ts.map +1 -0
- package/dist/ipc/message.js +1 -0
- package/dist/ipc/message.js.map +1 -0
- package/dist/ipc/proc_pool.cjs +164 -0
- package/dist/ipc/proc_pool.cjs.map +1 -0
- package/dist/ipc/proc_pool.d.cts +31 -0
- package/dist/ipc/proc_pool.d.ts +31 -0
- package/dist/ipc/proc_pool.d.ts.map +1 -0
- package/dist/ipc/proc_pool.js +140 -0
- package/dist/ipc/proc_pool.js.map +1 -0
- package/dist/ipc/supervised_proc.cjs +229 -0
- package/dist/ipc/supervised_proc.cjs.map +1 -0
- package/dist/ipc/supervised_proc.d.cts +32 -0
- package/dist/ipc/supervised_proc.d.ts +32 -0
- package/dist/ipc/supervised_proc.d.ts.map +1 -0
- package/dist/ipc/supervised_proc.js +195 -0
- package/dist/ipc/supervised_proc.js.map +1 -0
- 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 +373 -0
- package/dist/job.cjs.map +1 -0
- package/dist/job.d.cts +141 -0
- package/dist/job.d.ts +141 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +332 -0
- package/dist/job.js.map +1 -0
- package/dist/llm/chat_context.cjs +527 -0
- package/dist/llm/chat_context.cjs.map +1 -0
- package/dist/llm/chat_context.d.cts +223 -0
- package/dist/llm/chat_context.d.ts +223 -0
- package/dist/llm/chat_context.d.ts.map +1 -0
- package/dist/llm/chat_context.js +496 -0
- package/dist/llm/chat_context.js.map +1 -0
- package/dist/llm/chat_context.test.cjs +911 -0
- package/dist/llm/chat_context.test.cjs.map +1 -0
- package/dist/llm/chat_context.test.js +916 -0
- package/dist/llm/chat_context.test.js.map +1 -0
- package/dist/llm/fallback_adapter.cjs +278 -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 +254 -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 +79 -0
- package/dist/llm/index.cjs.map +1 -0
- package/dist/llm/index.d.cts +9 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +61 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.cjs +226 -0
- package/dist/llm/llm.cjs.map +1 -0
- package/dist/llm/llm.d.cts +94 -0
- package/dist/llm/llm.d.ts +94 -0
- package/dist/llm/llm.d.ts.map +1 -0
- package/dist/llm/llm.js +201 -0
- package/dist/llm/llm.js.map +1 -0
- package/dist/llm/provider_format/google.cjs +132 -0
- package/dist/llm/provider_format/google.cjs.map +1 -0
- package/dist/llm/provider_format/google.d.cts +6 -0
- package/dist/llm/provider_format/google.d.ts +6 -0
- package/dist/llm/provider_format/google.d.ts.map +1 -0
- package/dist/llm/provider_format/google.js +108 -0
- package/dist/llm/provider_format/google.js.map +1 -0
- package/dist/llm/provider_format/google.test.cjs +724 -0
- package/dist/llm/provider_format/google.test.cjs.map +1 -0
- package/dist/llm/provider_format/google.test.js +728 -0
- package/dist/llm/provider_format/google.test.js.map +1 -0
- package/dist/llm/provider_format/index.cjs +40 -0
- package/dist/llm/provider_format/index.cjs.map +1 -0
- package/dist/llm/provider_format/index.d.cts +4 -0
- package/dist/llm/provider_format/index.d.ts +4 -0
- package/dist/llm/provider_format/index.d.ts.map +1 -0
- package/dist/llm/provider_format/index.js +16 -0
- package/dist/llm/provider_format/index.js.map +1 -0
- package/dist/llm/provider_format/openai.cjs +138 -0
- package/dist/llm/provider_format/openai.cjs.map +1 -0
- package/dist/llm/provider_format/openai.d.cts +3 -0
- package/dist/llm/provider_format/openai.d.ts +3 -0
- package/dist/llm/provider_format/openai.d.ts.map +1 -0
- package/dist/llm/provider_format/openai.js +114 -0
- package/dist/llm/provider_format/openai.js.map +1 -0
- package/dist/llm/provider_format/openai.test.cjs +557 -0
- package/dist/llm/provider_format/openai.test.cjs.map +1 -0
- package/dist/llm/provider_format/openai.test.js +561 -0
- package/dist/llm/provider_format/openai.test.js.map +1 -0
- package/dist/llm/provider_format/utils.cjs +146 -0
- package/dist/llm/provider_format/utils.cjs.map +1 -0
- package/dist/llm/provider_format/utils.d.cts +38 -0
- package/dist/llm/provider_format/utils.d.ts +38 -0
- package/dist/llm/provider_format/utils.d.ts.map +1 -0
- package/dist/llm/provider_format/utils.js +122 -0
- package/dist/llm/provider_format/utils.js.map +1 -0
- package/dist/llm/realtime.cjs +77 -0
- package/dist/llm/realtime.cjs.map +1 -0
- package/dist/llm/realtime.d.cts +106 -0
- package/dist/llm/realtime.d.ts +106 -0
- package/dist/llm/realtime.d.ts.map +1 -0
- package/dist/llm/realtime.js +52 -0
- package/dist/llm/realtime.js.map +1 -0
- package/dist/llm/remote_chat_context.cjs +112 -0
- package/dist/llm/remote_chat_context.cjs.map +1 -0
- package/dist/llm/remote_chat_context.d.cts +25 -0
- package/dist/llm/remote_chat_context.d.ts +25 -0
- package/dist/llm/remote_chat_context.d.ts.map +1 -0
- package/dist/llm/remote_chat_context.js +88 -0
- package/dist/llm/remote_chat_context.js.map +1 -0
- package/dist/llm/remote_chat_context.test.cjs +225 -0
- package/dist/llm/remote_chat_context.test.cjs.map +1 -0
- package/dist/llm/remote_chat_context.test.js +224 -0
- package/dist/llm/remote_chat_context.test.js.map +1 -0
- package/dist/llm/tool_context.cjs +152 -0
- package/dist/llm/tool_context.cjs.map +1 -0
- package/dist/llm/tool_context.d.cts +153 -0
- package/dist/llm/tool_context.d.ts +153 -0
- package/dist/llm/tool_context.d.ts.map +1 -0
- package/dist/llm/tool_context.js +119 -0
- package/dist/llm/tool_context.js.map +1 -0
- package/dist/llm/tool_context.test.cjs +359 -0
- package/dist/llm/tool_context.test.cjs.map +1 -0
- package/dist/llm/tool_context.test.js +336 -0
- package/dist/llm/tool_context.test.js.map +1 -0
- package/dist/llm/tool_context.type.test.cjs +92 -0
- package/dist/llm/tool_context.type.test.cjs.map +1 -0
- package/dist/llm/tool_context.type.test.js +91 -0
- package/dist/llm/tool_context.type.test.js.map +1 -0
- package/dist/llm/utils.cjs +267 -0
- package/dist/llm/utils.cjs.map +1 -0
- package/dist/llm/utils.d.cts +41 -0
- package/dist/llm/utils.d.ts +41 -0
- package/dist/llm/utils.d.ts.map +1 -0
- package/dist/llm/utils.js +230 -0
- package/dist/llm/utils.js.map +1 -0
- package/dist/llm/utils.test.cjs +513 -0
- package/dist/llm/utils.test.cjs.map +1 -0
- package/dist/llm/utils.test.js +490 -0
- package/dist/llm/utils.test.js.map +1 -0
- 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 +81 -0
- package/dist/log.cjs.map +1 -0
- package/dist/log.d.cts +20 -0
- package/dist/log.d.ts +20 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +54 -0
- package/dist/log.js.map +1 -0
- package/dist/metrics/base.cjs +17 -0
- package/dist/metrics/base.cjs.map +1 -0
- package/dist/metrics/base.d.cts +150 -0
- package/dist/metrics/base.d.ts +150 -0
- package/dist/metrics/base.d.ts.map +1 -0
- package/dist/metrics/base.js +1 -0
- package/dist/metrics/base.js.map +1 -0
- package/dist/metrics/index.cjs +32 -0
- package/dist/metrics/index.cjs.map +1 -0
- package/dist/metrics/index.d.cts +4 -0
- package/dist/metrics/index.d.ts +4 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +7 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/usage_collector.cjs +58 -0
- package/dist/metrics/usage_collector.cjs.map +1 -0
- package/dist/metrics/usage_collector.d.cts +15 -0
- package/dist/metrics/usage_collector.d.ts +15 -0
- package/dist/metrics/usage_collector.d.ts.map +1 -0
- package/dist/metrics/usage_collector.js +34 -0
- package/dist/metrics/usage_collector.js.map +1 -0
- package/dist/metrics/utils.cjs +74 -0
- package/dist/metrics/utils.cjs.map +1 -0
- package/dist/metrics/utils.d.cts +3 -0
- package/dist/metrics/utils.d.ts +3 -0
- package/dist/metrics/utils.d.ts.map +1 -0
- package/dist/metrics/utils.js +50 -0
- package/dist/metrics/utils.js.map +1 -0
- package/dist/plugin.cjs +62 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +24 -0
- package/dist/plugin.d.ts +24 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +37 -0
- package/dist/plugin.js.map +1 -0
- package/dist/stream/deferred_stream.cjs +106 -0
- package/dist/stream/deferred_stream.cjs.map +1 -0
- package/dist/stream/deferred_stream.d.cts +32 -0
- package/dist/stream/deferred_stream.d.ts +32 -0
- package/dist/stream/deferred_stream.d.ts.map +1 -0
- package/dist/stream/deferred_stream.js +81 -0
- package/dist/stream/deferred_stream.js.map +1 -0
- package/dist/stream/deferred_stream.test.cjs +527 -0
- package/dist/stream/deferred_stream.test.cjs.map +1 -0
- package/dist/stream/deferred_stream.test.js +526 -0
- package/dist/stream/deferred_stream.test.js.map +1 -0
- package/dist/stream/identity_transform.cjs +42 -0
- package/dist/stream/identity_transform.cjs.map +1 -0
- package/dist/stream/identity_transform.d.cts +6 -0
- package/dist/stream/identity_transform.d.ts +6 -0
- package/dist/stream/identity_transform.d.ts.map +1 -0
- package/dist/stream/identity_transform.js +18 -0
- package/dist/stream/identity_transform.js.map +1 -0
- package/dist/stream/identity_transform.test.cjs +125 -0
- package/dist/stream/identity_transform.test.cjs.map +1 -0
- package/dist/stream/identity_transform.test.js +124 -0
- package/dist/stream/identity_transform.test.js.map +1 -0
- package/dist/stream/index.cjs +38 -0
- package/dist/stream/index.cjs.map +1 -0
- package/dist/stream/index.d.cts +5 -0
- package/dist/stream/index.d.ts +5 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream/index.js +11 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/merge_readable_streams.cjs +59 -0
- package/dist/stream/merge_readable_streams.cjs.map +1 -0
- package/dist/stream/merge_readable_streams.d.cts +4 -0
- package/dist/stream/merge_readable_streams.d.ts +4 -0
- package/dist/stream/merge_readable_streams.d.ts.map +1 -0
- package/dist/stream/merge_readable_streams.js +35 -0
- package/dist/stream/merge_readable_streams.js.map +1 -0
- package/dist/stream/stream_channel.cjs +57 -0
- package/dist/stream/stream_channel.cjs.map +1 -0
- package/dist/stream/stream_channel.d.cts +11 -0
- package/dist/stream/stream_channel.d.ts +11 -0
- package/dist/stream/stream_channel.d.ts.map +1 -0
- package/dist/stream/stream_channel.js +33 -0
- package/dist/stream/stream_channel.js.map +1 -0
- package/dist/stream/stream_channel.test.cjs +124 -0
- package/dist/stream/stream_channel.test.cjs.map +1 -0
- package/dist/stream/stream_channel.test.js +123 -0
- package/dist/stream/stream_channel.test.js.map +1 -0
- package/dist/stt/index.cjs +38 -0
- package/dist/stt/index.cjs.map +1 -0
- package/dist/stt/index.d.cts +3 -0
- package/dist/stt/index.d.ts +3 -0
- package/dist/stt/index.d.ts.map +1 -0
- package/dist/stt/index.js +14 -0
- package/dist/stt/index.js.map +1 -0
- package/dist/stt/stream_adapter.cjs +115 -0
- package/dist/stt/stream_adapter.cjs.map +1 -0
- package/dist/stt/stream_adapter.d.cts +23 -0
- package/dist/stt/stream_adapter.d.ts +23 -0
- package/dist/stt/stream_adapter.d.ts.map +1 -0
- package/dist/stt/stream_adapter.js +90 -0
- package/dist/stt/stream_adapter.js.map +1 -0
- package/dist/stt/stt.cjs +253 -0
- package/dist/stt/stt.cjs.map +1 -0
- package/dist/stt/stt.d.cts +158 -0
- package/dist/stt/stt.d.ts +158 -0
- package/dist/stt/stt.d.ts.map +1 -0
- package/dist/stt/stt.js +227 -0
- package/dist/stt/stt.js.map +1 -0
- 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 +147 -0
- package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
- package/dist/telemetry/otel_http_exporter.d.cts +62 -0
- package/dist/telemetry/otel_http_exporter.d.ts +62 -0
- package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
- package/dist/telemetry/otel_http_exporter.js +123 -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 +206 -0
- package/dist/telemetry/trace_types.cjs.map +1 -0
- package/dist/telemetry/trace_types.d.cts +61 -0
- package/dist/telemetry/trace_types.d.ts +61 -0
- package/dist/telemetry/trace_types.d.ts.map +1 -0
- package/dist/telemetry/trace_types.js +123 -0
- package/dist/telemetry/trace_types.js.map +1 -0
- package/dist/telemetry/traces.cjs +444 -0
- package/dist/telemetry/traces.cjs.map +1 -0
- package/dist/telemetry/traces.d.cts +114 -0
- package/dist/telemetry/traces.d.ts +114 -0
- package/dist/telemetry/traces.d.ts.map +1 -0
- package/dist/telemetry/traces.js +409 -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/basic.cjs +105 -0
- package/dist/tokenize/basic/basic.cjs.map +1 -0
- package/dist/tokenize/basic/basic.d.cts +24 -0
- package/dist/tokenize/basic/basic.d.ts +24 -0
- package/dist/tokenize/basic/basic.d.ts.map +1 -0
- package/dist/tokenize/basic/basic.js +67 -0
- package/dist/tokenize/basic/basic.js.map +1 -0
- package/dist/tokenize/basic/hyphenator.cjs +425 -0
- package/dist/tokenize/basic/hyphenator.cjs.map +1 -0
- package/dist/tokenize/basic/hyphenator.d.cts +17 -0
- package/dist/tokenize/basic/hyphenator.d.ts +17 -0
- package/dist/tokenize/basic/hyphenator.d.ts.map +1 -0
- package/dist/tokenize/basic/hyphenator.js +401 -0
- package/dist/tokenize/basic/hyphenator.js.map +1 -0
- package/dist/tokenize/basic/index.cjs +37 -0
- package/dist/tokenize/basic/index.cjs.map +1 -0
- package/dist/tokenize/basic/index.d.cts +2 -0
- package/dist/tokenize/basic/index.d.ts +2 -0
- package/dist/tokenize/basic/index.d.ts.map +1 -0
- package/dist/tokenize/basic/index.js +15 -0
- package/dist/tokenize/basic/index.js.map +1 -0
- package/dist/tokenize/basic/paragraph.cjs +57 -0
- package/dist/tokenize/basic/paragraph.cjs.map +1 -0
- package/dist/tokenize/basic/paragraph.d.cts +5 -0
- package/dist/tokenize/basic/paragraph.d.ts +5 -0
- package/dist/tokenize/basic/paragraph.d.ts.map +1 -0
- package/dist/tokenize/basic/paragraph.js +33 -0
- package/dist/tokenize/basic/paragraph.js.map +1 -0
- package/dist/tokenize/basic/sentence.cjs +97 -0
- package/dist/tokenize/basic/sentence.cjs.map +1 -0
- package/dist/tokenize/basic/sentence.d.cts +5 -0
- package/dist/tokenize/basic/sentence.d.ts +5 -0
- package/dist/tokenize/basic/sentence.d.ts.map +1 -0
- package/dist/tokenize/basic/sentence.js +73 -0
- package/dist/tokenize/basic/sentence.js.map +1 -0
- package/dist/tokenize/basic/word.cjs +44 -0
- package/dist/tokenize/basic/word.cjs.map +1 -0
- package/dist/tokenize/basic/word.d.cts +5 -0
- package/dist/tokenize/basic/word.d.ts +5 -0
- package/dist/tokenize/basic/word.d.ts.map +1 -0
- package/dist/tokenize/basic/word.js +20 -0
- package/dist/tokenize/basic/word.js.map +1 -0
- package/dist/tokenize/index.cjs +55 -0
- package/dist/tokenize/index.cjs.map +1 -0
- package/dist/tokenize/index.d.cts +5 -0
- package/dist/tokenize/index.d.ts +5 -0
- package/dist/tokenize/index.d.ts.map +1 -0
- package/dist/tokenize/index.js +19 -0
- package/dist/tokenize/index.js.map +1 -0
- package/dist/tokenize/token_stream.cjs +168 -0
- package/dist/tokenize/token_stream.cjs.map +1 -0
- package/dist/tokenize/token_stream.d.cts +40 -0
- package/dist/tokenize/token_stream.d.ts +40 -0
- package/dist/tokenize/token_stream.d.ts.map +1 -0
- package/dist/tokenize/token_stream.js +142 -0
- package/dist/tokenize/token_stream.js.map +1 -0
- package/dist/tokenize/tokenizer.cjs +184 -0
- package/dist/tokenize/tokenizer.cjs.map +1 -0
- package/dist/tokenize/tokenizer.d.cts +55 -0
- package/dist/tokenize/tokenizer.d.ts +55 -0
- package/dist/tokenize/tokenizer.d.ts.map +1 -0
- package/dist/tokenize/tokenizer.js +156 -0
- package/dist/tokenize/tokenizer.js.map +1 -0
- package/dist/tokenize/tokenizer.test.cjs +220 -0
- package/dist/tokenize/tokenizer.test.cjs.map +1 -0
- package/dist/tokenize/tokenizer.test.js +219 -0
- package/dist/tokenize/tokenizer.test.js.map +1 -0
- package/dist/transcription.cjs +247 -0
- package/dist/transcription.cjs.map +1 -0
- package/dist/transcription.d.cts +31 -0
- package/dist/transcription.d.ts +31 -0
- package/dist/transcription.d.ts.map +1 -0
- package/dist/transcription.js +222 -0
- package/dist/transcription.js.map +1 -0
- package/dist/tts/index.cjs +38 -0
- package/dist/tts/index.cjs.map +1 -0
- package/dist/tts/index.d.cts +3 -0
- package/dist/tts/index.d.ts +3 -0
- package/dist/tts/index.d.ts.map +1 -0
- package/dist/tts/index.js +14 -0
- package/dist/tts/index.js.map +1 -0
- package/dist/tts/stream_adapter.cjs +105 -0
- package/dist/tts/stream_adapter.cjs.map +1 -0
- package/dist/tts/stream_adapter.d.cts +20 -0
- package/dist/tts/stream_adapter.d.ts +20 -0
- package/dist/tts/stream_adapter.d.ts.map +1 -0
- package/dist/tts/stream_adapter.js +80 -0
- package/dist/tts/stream_adapter.js.map +1 -0
- package/dist/tts/tts.cjs +431 -0
- package/dist/tts/tts.cjs.map +1 -0
- package/dist/tts/tts.d.cts +161 -0
- package/dist/tts/tts.d.ts +161 -0
- package/dist/tts/tts.d.ts.map +1 -0
- package/dist/tts/tts.js +405 -0
- package/dist/tts/tts.js.map +1 -0
- package/dist/types.cjs +49 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +44 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/ws_transport.cjs +51 -0
- package/dist/utils/ws_transport.cjs.map +1 -0
- package/dist/utils/ws_transport.d.cts +9 -0
- package/dist/utils/ws_transport.d.ts +9 -0
- package/dist/utils/ws_transport.d.ts.map +1 -0
- package/dist/utils/ws_transport.js +17 -0
- package/dist/utils/ws_transport.js.map +1 -0
- package/dist/utils/ws_transport.test.cjs +212 -0
- package/dist/utils/ws_transport.test.cjs.map +1 -0
- package/dist/utils/ws_transport.test.js +211 -0
- package/dist/utils/ws_transport.test.js.map +1 -0
- package/dist/utils.cjs +669 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +244 -0
- package/dist/utils.d.ts +244 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +617 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.cjs +492 -0
- package/dist/utils.test.cjs.map +1 -0
- package/dist/utils.test.js +491 -0
- package/dist/utils.test.js.map +1 -0
- package/dist/vad.cjs +211 -0
- package/dist/vad.cjs.map +1 -0
- package/dist/vad.d.cts +105 -0
- package/dist/vad.d.ts +105 -0
- package/dist/vad.d.ts.map +1 -0
- package/dist/vad.js +185 -0
- package/dist/vad.js.map +1 -0
- package/dist/version.cjs +29 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.d.cts +2 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/voice/agent.cjs +308 -0
- package/dist/voice/agent.cjs.map +1 -0
- package/dist/voice/agent.d.cts +83 -0
- package/dist/voice/agent.d.ts +83 -0
- package/dist/voice/agent.d.ts.map +1 -0
- package/dist/voice/agent.js +287 -0
- package/dist/voice/agent.js.map +1 -0
- package/dist/voice/agent.test.cjs +61 -0
- package/dist/voice/agent.test.cjs.map +1 -0
- package/dist/voice/agent.test.js +60 -0
- package/dist/voice/agent.test.js.map +1 -0
- package/dist/voice/agent_activity.cjs +1784 -0
- package/dist/voice/agent_activity.cjs.map +1 -0
- package/dist/voice/agent_activity.d.cts +116 -0
- package/dist/voice/agent_activity.d.ts +116 -0
- package/dist/voice/agent_activity.d.ts.map +1 -0
- package/dist/voice/agent_activity.js +1780 -0
- package/dist/voice/agent_activity.js.map +1 -0
- package/dist/voice/agent_session.cjs +592 -0
- package/dist/voice/agent_session.cjs.map +1 -0
- package/dist/voice/agent_session.d.cts +165 -0
- package/dist/voice/agent_session.d.ts +165 -0
- package/dist/voice/agent_session.d.ts.map +1 -0
- package/dist/voice/agent_session.js +582 -0
- package/dist/voice/agent_session.js.map +1 -0
- package/dist/voice/audio_recognition.cjs +668 -0
- package/dist/voice/audio_recognition.cjs.map +1 -0
- package/dist/voice/audio_recognition.d.cts +127 -0
- package/dist/voice/audio_recognition.d.ts +127 -0
- package/dist/voice/audio_recognition.d.ts.map +1 -0
- package/dist/voice/audio_recognition.js +647 -0
- package/dist/voice/audio_recognition.js.map +1 -0
- package/dist/voice/avatar/datastream_io.cjs +204 -0
- package/dist/voice/avatar/datastream_io.cjs.map +1 -0
- package/dist/voice/avatar/datastream_io.d.cts +37 -0
- package/dist/voice/avatar/datastream_io.d.ts +37 -0
- package/dist/voice/avatar/datastream_io.d.ts.map +1 -0
- package/dist/voice/avatar/datastream_io.js +188 -0
- package/dist/voice/avatar/datastream_io.js.map +1 -0
- package/dist/voice/avatar/index.cjs +23 -0
- package/dist/voice/avatar/index.cjs.map +1 -0
- package/dist/voice/avatar/index.d.cts +2 -0
- package/dist/voice/avatar/index.d.ts +2 -0
- package/dist/voice/avatar/index.d.ts.map +1 -0
- package/dist/voice/avatar/index.js +2 -0
- package/dist/voice/avatar/index.js.map +1 -0
- package/dist/voice/background_audio.cjs +366 -0
- package/dist/voice/background_audio.cjs.map +1 -0
- package/dist/voice/background_audio.d.cts +121 -0
- package/dist/voice/background_audio.d.ts +121 -0
- package/dist/voice/background_audio.d.ts.map +1 -0
- package/dist/voice/background_audio.js +342 -0
- package/dist/voice/background_audio.js.map +1 -0
- package/dist/voice/events.cjs +147 -0
- package/dist/voice/events.cjs.map +1 -0
- package/dist/voice/events.d.cts +127 -0
- package/dist/voice/events.d.ts +127 -0
- package/dist/voice/events.d.ts.map +1 -0
- package/dist/voice/events.js +112 -0
- package/dist/voice/events.js.map +1 -0
- package/dist/voice/generation.cjs +747 -0
- package/dist/voice/generation.cjs.map +1 -0
- package/dist/voice/generation.d.cts +116 -0
- package/dist/voice/generation.d.ts +116 -0
- package/dist/voice/generation.d.ts.map +1 -0
- package/dist/voice/generation.js +719 -0
- package/dist/voice/generation.js.map +1 -0
- 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 +49 -0
- package/dist/voice/index.cjs.map +1 -0
- package/dist/voice/index.d.cts +10 -0
- package/dist/voice/index.d.ts +10 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +16 -0
- package/dist/voice/index.js.map +1 -0
- 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 +270 -0
- package/dist/voice/io.cjs.map +1 -0
- package/dist/voice/io.d.cts +126 -0
- package/dist/voice/io.d.ts +126 -0
- package/dist/voice/io.d.ts.map +1 -0
- package/dist/voice/io.js +242 -0
- package/dist/voice/io.js.map +1 -0
- 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 +542 -0
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
- package/dist/voice/recorder_io/recorder_io.d.cts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
- package/dist/voice/recorder_io/recorder_io.js +508 -0
- package/dist/voice/recorder_io/recorder_io.js.map +1 -0
- package/dist/voice/report.cjs +75 -0
- package/dist/voice/report.cjs.map +1 -0
- package/dist/voice/report.d.cts +42 -0
- package/dist/voice/report.d.ts +42 -0
- package/dist/voice/report.d.ts.map +1 -0
- package/dist/voice/report.js +50 -0
- package/dist/voice/report.js.map +1 -0
- package/dist/voice/room_io/_input.cjs +133 -0
- package/dist/voice/room_io/_input.cjs.map +1 -0
- package/dist/voice/room_io/_input.d.cts +24 -0
- package/dist/voice/room_io/_input.d.ts +24 -0
- package/dist/voice/room_io/_input.d.ts.map +1 -0
- package/dist/voice/room_io/_input.js +114 -0
- package/dist/voice/room_io/_input.js.map +1 -0
- package/dist/voice/room_io/_output.cjs +359 -0
- package/dist/voice/room_io/_output.cjs.map +1 -0
- package/dist/voice/room_io/_output.d.cts +77 -0
- package/dist/voice/room_io/_output.d.ts +77 -0
- package/dist/voice/room_io/_output.d.ts.map +1 -0
- package/dist/voice/room_io/_output.js +343 -0
- package/dist/voice/room_io/_output.js.map +1 -0
- package/dist/voice/room_io/index.cjs +25 -0
- package/dist/voice/room_io/index.cjs.map +1 -0
- package/dist/voice/room_io/index.d.cts +3 -0
- package/dist/voice/room_io/index.d.ts +3 -0
- package/dist/voice/room_io/index.d.ts.map +1 -0
- package/dist/voice/room_io/index.js +3 -0
- package/dist/voice/room_io/index.js.map +1 -0
- package/dist/voice/room_io/room_io.cjs +373 -0
- package/dist/voice/room_io/room_io.cjs.map +1 -0
- package/dist/voice/room_io/room_io.d.cts +94 -0
- package/dist/voice/room_io/room_io.d.ts +94 -0
- package/dist/voice/room_io/room_io.d.ts.map +1 -0
- package/dist/voice/room_io/room_io.js +364 -0
- package/dist/voice/room_io/room_io.js.map +1 -0
- package/dist/voice/run_context.cjs +51 -0
- package/dist/voice/run_context.cjs.map +1 -0
- package/dist/voice/run_context.d.cts +22 -0
- package/dist/voice/run_context.d.ts +22 -0
- package/dist/voice/run_context.d.ts.map +1 -0
- package/dist/voice/run_context.js +27 -0
- package/dist/voice/run_context.js.map +1 -0
- package/dist/voice/speech_handle.cjs +228 -0
- package/dist/voice/speech_handle.cjs.map +1 -0
- package/dist/voice/speech_handle.d.cts +97 -0
- package/dist/voice/speech_handle.d.ts +97 -0
- package/dist/voice/speech_handle.d.ts.map +1 -0
- package/dist/voice/speech_handle.js +204 -0
- package/dist/voice/speech_handle.js.map +1 -0
- package/dist/voice/transcription/_utils.cjs +45 -0
- package/dist/voice/transcription/_utils.cjs.map +1 -0
- package/dist/voice/transcription/_utils.d.cts +3 -0
- package/dist/voice/transcription/_utils.d.ts +3 -0
- package/dist/voice/transcription/_utils.d.ts.map +1 -0
- package/dist/voice/transcription/_utils.js +21 -0
- package/dist/voice/transcription/_utils.js.map +1 -0
- package/dist/voice/transcription/index.cjs +23 -0
- package/dist/voice/transcription/index.cjs.map +1 -0
- package/dist/voice/transcription/index.d.cts +2 -0
- package/dist/voice/transcription/index.d.ts +2 -0
- package/dist/voice/transcription/index.d.ts.map +1 -0
- package/dist/voice/transcription/index.js +2 -0
- package/dist/voice/transcription/index.js.map +1 -0
- package/dist/voice/transcription/synchronizer.cjs +379 -0
- package/dist/voice/transcription/synchronizer.cjs.map +1 -0
- package/dist/voice/transcription/synchronizer.d.cts +87 -0
- package/dist/voice/transcription/synchronizer.d.ts +87 -0
- package/dist/voice/transcription/synchronizer.d.ts.map +1 -0
- package/dist/voice/transcription/synchronizer.js +354 -0
- package/dist/voice/transcription/synchronizer.js.map +1 -0
- package/dist/worker.cjs +680 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +119 -0
- package/dist/worker.d.ts +119 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +645 -0
- package/dist/worker.js.map +1 -0
- package/package.json +86 -0
- 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 +137 -0
- package/src/audio.ts +205 -0
- package/src/cli.ts +224 -0
- package/src/connection_pool.test.ts +346 -0
- package/src/connection_pool.ts +307 -0
- package/src/constants.ts +9 -0
- package/src/generator.ts +38 -0
- package/src/http_server.ts +64 -0
- package/src/index.ts +41 -0
- package/src/inference/api_protos.ts +82 -0
- package/src/inference/index.ts +32 -0
- package/src/inference/interruption/AdaptiveInterruptionDetector.ts +166 -0
- package/src/inference/interruption/InterruptionStream.ts +397 -0
- package/src/inference/interruption/defaults.ts +33 -0
- package/src/inference/interruption/errors.ts +0 -0
- package/src/inference/interruption/http_transport.ts +61 -0
- package/src/inference/interruption/index.ts +4 -0
- package/src/inference/interruption/interruption.ts +88 -0
- package/src/inference/llm.ts +532 -0
- package/src/inference/stt.ts +524 -0
- package/src/inference/tts.ts +574 -0
- package/src/inference/utils.test.ts +31 -0
- package/src/inference/utils.ts +81 -0
- package/src/inference_runner.ts +19 -0
- package/src/ipc/index.ts +5 -0
- package/src/ipc/inference_executor.ts +7 -0
- package/src/ipc/inference_proc_executor.ts +101 -0
- package/src/ipc/inference_proc_lazy_main.ts +115 -0
- package/src/ipc/job_executor.ts +23 -0
- package/src/ipc/job_proc_executor.ts +122 -0
- package/src/ipc/job_proc_lazy_main.ts +247 -0
- package/src/ipc/message.ts +52 -0
- package/src/ipc/proc_pool.ts +164 -0
- package/src/ipc/supervised_proc.test.ts +153 -0
- package/src/ipc/supervised_proc.ts +242 -0
- package/src/job.ts +461 -0
- package/src/llm/__snapshots__/chat_context.test.ts.snap +527 -0
- package/src/llm/__snapshots__/tool_context.test.ts.snap +177 -0
- package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
- package/src/llm/chat_context.test.ts +1057 -0
- package/src/llm/chat_context.ts +759 -0
- package/src/llm/fallback_adapter.test.ts +238 -0
- package/src/llm/fallback_adapter.ts +391 -0
- package/src/llm/index.ts +74 -0
- package/src/llm/llm.ts +303 -0
- package/src/llm/provider_format/google.test.ts +843 -0
- package/src/llm/provider_format/google.ts +134 -0
- package/src/llm/provider_format/index.ts +23 -0
- package/src/llm/provider_format/openai.test.ts +675 -0
- package/src/llm/provider_format/openai.ts +146 -0
- package/src/llm/provider_format/utils.ts +187 -0
- package/src/llm/realtime.ts +163 -0
- package/src/llm/remote_chat_context.test.ts +290 -0
- package/src/llm/remote_chat_context.ts +114 -0
- package/src/llm/tool_context.test.ts +407 -0
- package/src/llm/tool_context.ts +343 -0
- package/src/llm/tool_context.type.test.ts +115 -0
- package/src/llm/utils.test.ts +670 -0
- package/src/llm/utils.ts +336 -0
- package/src/llm/zod-utils.test.ts +577 -0
- package/src/llm/zod-utils.ts +153 -0
- package/src/log.ts +83 -0
- package/src/metrics/base.ts +168 -0
- package/src/metrics/index.ts +15 -0
- package/src/metrics/usage_collector.ts +46 -0
- package/src/metrics/utils.ts +64 -0
- package/src/plugin.ts +46 -0
- package/src/stream/deferred_stream.test.ts +755 -0
- package/src/stream/deferred_stream.ts +127 -0
- package/src/stream/identity_transform.test.ts +179 -0
- package/src/stream/identity_transform.ts +18 -0
- package/src/stream/index.ts +7 -0
- package/src/stream/merge_readable_streams.ts +40 -0
- package/src/stream/stream_channel.test.ts +166 -0
- package/src/stream/stream_channel.ts +44 -0
- package/src/stt/index.ts +15 -0
- package/src/stt/stream_adapter.ts +107 -0
- package/src/stt/stt.ts +374 -0
- package/src/telemetry/index.ts +28 -0
- package/src/telemetry/logging.ts +55 -0
- package/src/telemetry/otel_http_exporter.ts +195 -0
- package/src/telemetry/pino_otel_transport.ts +265 -0
- package/src/telemetry/trace_types.ts +95 -0
- package/src/telemetry/traces.ts +612 -0
- package/src/telemetry/utils.ts +61 -0
- package/src/tokenize/basic/basic.ts +83 -0
- package/src/tokenize/basic/hyphenator.ts +434 -0
- package/src/tokenize/basic/index.ts +11 -0
- package/src/tokenize/basic/paragraph.ts +43 -0
- package/src/tokenize/basic/sentence.ts +89 -0
- package/src/tokenize/basic/word.ts +27 -0
- package/src/tokenize/index.ts +16 -0
- package/src/tokenize/token_stream.ts +180 -0
- package/src/tokenize/tokenizer.test.ts +255 -0
- package/src/tokenize/tokenizer.ts +152 -0
- package/src/transcription.ts +307 -0
- package/src/tts/index.ts +12 -0
- package/src/tts/stream_adapter.ts +110 -0
- package/src/tts/tts.ts +598 -0
- package/src/types.ts +66 -0
- package/src/utils/ws_transport.test.ts +282 -0
- package/src/utils/ws_transport.ts +22 -0
- package/src/utils.test.ts +651 -0
- package/src/utils.ts +871 -0
- package/src/vad.ts +262 -0
- package/src/version.ts +5 -0
- package/src/voice/agent.test.ts +80 -0
- package/src/voice/agent.ts +418 -0
- package/src/voice/agent_activity.ts +2375 -0
- package/src/voice/agent_session.ts +866 -0
- package/src/voice/audio_recognition.ts +877 -0
- package/src/voice/avatar/datastream_io.ts +247 -0
- package/src/voice/avatar/index.ts +4 -0
- package/src/voice/background_audio.ts +491 -0
- package/src/voice/events.ts +261 -0
- package/src/voice/generation.ts +946 -0
- package/src/voice/generation_tools.test.ts +268 -0
- package/src/voice/index.ts +12 -0
- package/src/voice/interruption_detection.test.ts +151 -0
- package/src/voice/io.ts +347 -0
- package/src/voice/recorder_io/index.ts +4 -0
- package/src/voice/recorder_io/recorder_io.ts +690 -0
- package/src/voice/report.ts +100 -0
- package/src/voice/room_io/_input.ts +162 -0
- package/src/voice/room_io/_output.ts +439 -0
- package/src/voice/room_io/index.ts +5 -0
- package/src/voice/room_io/room_io.ts +518 -0
- package/src/voice/run_context.ts +34 -0
- package/src/voice/speech_handle.ts +250 -0
- package/src/voice/transcription/_utils.ts +25 -0
- package/src/voice/transcription/index.ts +4 -0
- package/src/voice/transcription/synchronizer.ts +477 -0
- package/src/worker.ts +798 -0
package/dist/vad.cjs
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var vad_exports = {};
|
|
20
|
+
__export(vad_exports, {
|
|
21
|
+
VAD: () => VAD,
|
|
22
|
+
VADEventType: () => VADEventType,
|
|
23
|
+
VADStream: () => VADStream
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(vad_exports);
|
|
26
|
+
var import_node_events = require("node:events");
|
|
27
|
+
var import_log = require("./log.cjs");
|
|
28
|
+
var import_deferred_stream = require("./stream/deferred_stream.cjs");
|
|
29
|
+
var import_identity_transform = require("./stream/identity_transform.cjs");
|
|
30
|
+
var VADEventType = /* @__PURE__ */ ((VADEventType2) => {
|
|
31
|
+
VADEventType2[VADEventType2["START_OF_SPEECH"] = 0] = "START_OF_SPEECH";
|
|
32
|
+
VADEventType2[VADEventType2["INFERENCE_DONE"] = 1] = "INFERENCE_DONE";
|
|
33
|
+
VADEventType2[VADEventType2["END_OF_SPEECH"] = 2] = "END_OF_SPEECH";
|
|
34
|
+
VADEventType2[VADEventType2["METRICS_COLLECTED"] = 3] = "METRICS_COLLECTED";
|
|
35
|
+
return VADEventType2;
|
|
36
|
+
})(VADEventType || {});
|
|
37
|
+
class VAD extends import_node_events.EventEmitter {
|
|
38
|
+
#capabilities;
|
|
39
|
+
constructor(capabilities) {
|
|
40
|
+
super();
|
|
41
|
+
this.#capabilities = capabilities;
|
|
42
|
+
}
|
|
43
|
+
get capabilities() {
|
|
44
|
+
return this.#capabilities;
|
|
45
|
+
}
|
|
46
|
+
async close() {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
class VADStream {
|
|
51
|
+
static FLUSH_SENTINEL = Symbol("FLUSH_SENTINEL");
|
|
52
|
+
input = new import_identity_transform.IdentityTransform();
|
|
53
|
+
output = new import_identity_transform.IdentityTransform();
|
|
54
|
+
inputWriter;
|
|
55
|
+
inputReader;
|
|
56
|
+
outputWriter;
|
|
57
|
+
outputReader;
|
|
58
|
+
closed = false;
|
|
59
|
+
inputClosed = false;
|
|
60
|
+
#vad;
|
|
61
|
+
#lastActivityTime = BigInt(0);
|
|
62
|
+
logger = (0, import_log.log)();
|
|
63
|
+
deferredInputStream;
|
|
64
|
+
metricsStream;
|
|
65
|
+
constructor(vad) {
|
|
66
|
+
this.#vad = vad;
|
|
67
|
+
this.deferredInputStream = new import_deferred_stream.DeferredReadableStream();
|
|
68
|
+
this.inputWriter = this.input.writable.getWriter();
|
|
69
|
+
this.inputReader = this.input.readable.getReader();
|
|
70
|
+
this.outputWriter = this.output.writable.getWriter();
|
|
71
|
+
const [outputStream, metricsStream] = this.output.readable.tee();
|
|
72
|
+
this.metricsStream = metricsStream;
|
|
73
|
+
this.outputReader = outputStream.getReader();
|
|
74
|
+
this.pumpDeferredStream();
|
|
75
|
+
this.monitorMetrics();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reads from the deferred input stream and forwards chunks to the input writer.
|
|
79
|
+
*
|
|
80
|
+
* Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)
|
|
81
|
+
* because the inputWriter locks the this.input.writable stream. All writes must go through
|
|
82
|
+
* the inputWriter.
|
|
83
|
+
*/
|
|
84
|
+
async pumpDeferredStream() {
|
|
85
|
+
const reader = this.deferredInputStream.stream.getReader();
|
|
86
|
+
try {
|
|
87
|
+
while (true) {
|
|
88
|
+
const { done, value } = await reader.read();
|
|
89
|
+
if (done) break;
|
|
90
|
+
await this.inputWriter.write(value);
|
|
91
|
+
}
|
|
92
|
+
} catch (e) {
|
|
93
|
+
this.logger.error(`Error pumping deferred stream: ${e}`);
|
|
94
|
+
throw e;
|
|
95
|
+
} finally {
|
|
96
|
+
reader.releaseLock();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async monitorMetrics() {
|
|
100
|
+
let inferenceDurationTotalMs = 0;
|
|
101
|
+
let inferenceCount = 0;
|
|
102
|
+
const metricsReader = this.metricsStream.getReader();
|
|
103
|
+
while (true) {
|
|
104
|
+
const { done, value } = await metricsReader.read();
|
|
105
|
+
if (done) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
switch (value.type) {
|
|
109
|
+
case 0 /* START_OF_SPEECH */:
|
|
110
|
+
inferenceCount++;
|
|
111
|
+
if (inferenceCount >= 1 / this.#vad.capabilities.updateInterval) {
|
|
112
|
+
this.#vad.emit("metrics_collected", {
|
|
113
|
+
type: "vad_metrics",
|
|
114
|
+
timestamp: Date.now(),
|
|
115
|
+
idleTimeMs: Math.trunc(
|
|
116
|
+
Number((process.hrtime.bigint() - this.#lastActivityTime) / BigInt(1e6))
|
|
117
|
+
),
|
|
118
|
+
inferenceDurationTotalMs,
|
|
119
|
+
inferenceCount,
|
|
120
|
+
label: this.#vad.label
|
|
121
|
+
});
|
|
122
|
+
inferenceCount = 0;
|
|
123
|
+
inferenceDurationTotalMs = 0;
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case 1 /* INFERENCE_DONE */:
|
|
127
|
+
inferenceDurationTotalMs += Math.round(value.inferenceDuration);
|
|
128
|
+
this.#lastActivityTime = process.hrtime.bigint();
|
|
129
|
+
break;
|
|
130
|
+
case 2 /* END_OF_SPEECH */:
|
|
131
|
+
this.#lastActivityTime = process.hrtime.bigint();
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Safely send a VAD event to the output stream, handling writer release errors during shutdown.
|
|
138
|
+
* @returns true if the event was sent, false if the stream is closing
|
|
139
|
+
* @throws Error if an unexpected error occurs
|
|
140
|
+
*/
|
|
141
|
+
sendVADEvent(event) {
|
|
142
|
+
if (this.closed) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
this.outputWriter.write(event);
|
|
147
|
+
return true;
|
|
148
|
+
} catch (e) {
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
updateInputStream(audioStream) {
|
|
153
|
+
this.deferredInputStream.setSource(audioStream);
|
|
154
|
+
}
|
|
155
|
+
detachInputStream() {
|
|
156
|
+
this.deferredInputStream.detachSource();
|
|
157
|
+
}
|
|
158
|
+
/** @deprecated Use `updateInputStream` instead */
|
|
159
|
+
pushFrame(frame) {
|
|
160
|
+
if (this.inputClosed) {
|
|
161
|
+
throw new Error("Input is closed");
|
|
162
|
+
}
|
|
163
|
+
if (this.closed) {
|
|
164
|
+
throw new Error("Stream is closed");
|
|
165
|
+
}
|
|
166
|
+
this.inputWriter.write(frame);
|
|
167
|
+
}
|
|
168
|
+
flush() {
|
|
169
|
+
if (this.inputClosed) {
|
|
170
|
+
throw new Error("Input is closed");
|
|
171
|
+
}
|
|
172
|
+
if (this.closed) {
|
|
173
|
+
throw new Error("Stream is closed");
|
|
174
|
+
}
|
|
175
|
+
this.inputWriter.write(VADStream.FLUSH_SENTINEL);
|
|
176
|
+
}
|
|
177
|
+
endInput() {
|
|
178
|
+
if (this.inputClosed) {
|
|
179
|
+
throw new Error("Input is closed");
|
|
180
|
+
}
|
|
181
|
+
if (this.closed) {
|
|
182
|
+
throw new Error("Stream is closed");
|
|
183
|
+
}
|
|
184
|
+
this.inputClosed = true;
|
|
185
|
+
this.input.writable.close();
|
|
186
|
+
}
|
|
187
|
+
async next() {
|
|
188
|
+
return this.outputReader.read().then(({ done, value }) => {
|
|
189
|
+
if (done) {
|
|
190
|
+
return { done: true, value: void 0 };
|
|
191
|
+
}
|
|
192
|
+
return { done: false, value };
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
close() {
|
|
196
|
+
this.outputWriter.releaseLock();
|
|
197
|
+
this.outputReader.cancel();
|
|
198
|
+
this.output.writable.close();
|
|
199
|
+
this.closed = true;
|
|
200
|
+
}
|
|
201
|
+
[Symbol.asyncIterator]() {
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
206
|
+
0 && (module.exports = {
|
|
207
|
+
VAD,
|
|
208
|
+
VADEventType,
|
|
209
|
+
VADStream
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=vad.cjs.map
|
package/dist/vad.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vad.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { AudioFrame } from '@livekit/rtc-node';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport { EventEmitter } from 'node:events';\nimport type {\n ReadableStream,\n ReadableStreamDefaultReader,\n WritableStreamDefaultWriter,\n} from 'node:stream/web';\nimport { log } from './log.js';\nimport type { VADMetrics } from './metrics/base.js';\nimport { DeferredReadableStream } from './stream/deferred_stream.js';\nimport { IdentityTransform } from './stream/identity_transform.js';\n\nexport enum VADEventType {\n START_OF_SPEECH,\n INFERENCE_DONE,\n END_OF_SPEECH,\n METRICS_COLLECTED,\n}\n\nexport interface VADEvent {\n /** Type of the VAD event (e.g., start of speech, end of speech, inference done). */\n type: VADEventType;\n /**\n * Index of the audio sample where the event occurred, relative to the inference sample rate.\n */\n samplesIndex: number;\n /** Timestamp when the event was fired. */\n timestamp: number;\n /** Duration of the speech segment. */\n speechDuration: number;\n /** Duration of the silence segment. */\n silenceDuration: number;\n /**\n * List of audio frames associated with the speech.\n *\n * @remarks\n * - For `start_of_speech` events, this contains the audio chunks that triggered the detection.\n * - For `inference_done` events, this contains the audio chunks that were processed.\n * - For `end_of_speech` events, this contains the complete user speech.\n */\n frames: AudioFrame[];\n /** Probability that speech is present (only for `INFERENCE_DONE` events). */\n probability: number;\n /** Time taken to perform the inference, in seconds (only for `INFERENCE_DONE` events). */\n inferenceDuration: number;\n /** Indicates whether speech was detected in the frames. */\n speaking: boolean;\n /** Threshold used to detect silence. */\n rawAccumulatedSilence: number;\n /** Threshold used to detect speech. */\n rawAccumulatedSpeech: number;\n}\n\nexport interface VADCapabilities {\n updateInterval: number;\n}\n\nexport type VADCallbacks = {\n ['metrics_collected']: (metrics: VADMetrics) => void;\n};\n\nexport abstract class VAD extends (EventEmitter as new () => TypedEmitter<VADCallbacks>) {\n #capabilities: VADCapabilities;\n abstract label: string;\n\n constructor(capabilities: VADCapabilities) {\n super();\n this.#capabilities = capabilities;\n }\n\n get capabilities(): VADCapabilities {\n return this.#capabilities;\n }\n\n /**\n * Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.\n */\n abstract stream(): VADStream;\n\n async close(): Promise<void> {\n return;\n }\n}\n\nexport abstract class VADStream implements AsyncIterableIterator<VADEvent> {\n protected static readonly FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');\n protected input = new IdentityTransform<AudioFrame | typeof VADStream.FLUSH_SENTINEL>();\n protected output = new IdentityTransform<VADEvent>();\n protected inputWriter: WritableStreamDefaultWriter<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;\n protected inputReader: ReadableStreamDefaultReader<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;\n protected outputWriter: WritableStreamDefaultWriter<VADEvent>;\n protected outputReader: ReadableStreamDefaultReader<VADEvent>;\n protected closed = false;\n protected inputClosed = false;\n\n #vad: VAD;\n #lastActivityTime = BigInt(0);\n private logger = log();\n private deferredInputStream: DeferredReadableStream<AudioFrame>;\n\n private metricsStream: ReadableStream<VADEvent>;\n constructor(vad: VAD) {\n this.#vad = vad;\n this.deferredInputStream = new DeferredReadableStream<AudioFrame>();\n\n this.inputWriter = this.input.writable.getWriter();\n this.inputReader = this.input.readable.getReader();\n this.outputWriter = this.output.writable.getWriter();\n\n const [outputStream, metricsStream] = this.output.readable.tee();\n this.metricsStream = metricsStream;\n this.outputReader = outputStream.getReader();\n\n this.pumpDeferredStream();\n this.monitorMetrics();\n }\n\n /**\n * Reads from the deferred input stream and forwards chunks to the input writer.\n *\n * Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)\n * because the inputWriter locks the this.input.writable stream. All writes must go through\n * the inputWriter.\n */\n private async pumpDeferredStream() {\n const reader = this.deferredInputStream.stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n await this.inputWriter.write(value);\n }\n } catch (e) {\n this.logger.error(`Error pumping deferred stream: ${e}`);\n throw e;\n } finally {\n reader.releaseLock();\n }\n }\n\n protected async monitorMetrics() {\n let inferenceDurationTotalMs = 0;\n let inferenceCount = 0;\n const metricsReader = this.metricsStream.getReader();\n while (true) {\n const { done, value } = await metricsReader.read();\n if (done) {\n break;\n }\n switch (value.type) {\n case VADEventType.START_OF_SPEECH:\n inferenceCount++;\n if (inferenceCount >= 1 / this.#vad.capabilities.updateInterval) {\n this.#vad.emit('metrics_collected', {\n type: 'vad_metrics',\n timestamp: Date.now(),\n idleTimeMs: Math.trunc(\n Number((process.hrtime.bigint() - this.#lastActivityTime) / BigInt(1000000)),\n ),\n inferenceDurationTotalMs,\n inferenceCount,\n label: this.#vad.label,\n });\n\n inferenceCount = 0;\n inferenceDurationTotalMs = 0;\n }\n break;\n case VADEventType.INFERENCE_DONE:\n inferenceDurationTotalMs += Math.round(value.inferenceDuration);\n this.#lastActivityTime = process.hrtime.bigint();\n break;\n case VADEventType.END_OF_SPEECH:\n this.#lastActivityTime = process.hrtime.bigint();\n break;\n }\n }\n }\n\n /**\n * Safely send a VAD event to the output stream, handling writer release errors during shutdown.\n * @returns true if the event was sent, false if the stream is closing\n * @throws Error if an unexpected error occurs\n */\n protected sendVADEvent(event: VADEvent): boolean {\n if (this.closed) {\n return false;\n }\n\n try {\n this.outputWriter.write(event);\n return true;\n } catch (e) {\n throw e;\n }\n }\n\n updateInputStream(audioStream: ReadableStream<AudioFrame>) {\n this.deferredInputStream.setSource(audioStream);\n }\n\n detachInputStream() {\n this.deferredInputStream.detachSource();\n }\n\n /** @deprecated Use `updateInputStream` instead */\n pushFrame(frame: AudioFrame) {\n // TODO(AJS-395): remove this method\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputWriter.write(frame);\n }\n\n flush() {\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputWriter.write(VADStream.FLUSH_SENTINEL);\n }\n\n endInput() {\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputClosed = true;\n this.input.writable.close();\n }\n\n async next(): Promise<IteratorResult<VADEvent>> {\n return this.outputReader.read().then(({ done, value }) => {\n if (done) {\n return { done: true, value: undefined };\n }\n return { done: false, value };\n });\n }\n\n close() {\n this.outputWriter.releaseLock();\n this.outputReader.cancel();\n this.output.writable.close();\n this.closed = true;\n }\n\n [Symbol.asyncIterator](): VADStream {\n return this;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAA6B;AAM7B,iBAAoB;AAEpB,6BAAuC;AACvC,gCAAkC;AAE3B,IAAK,eAAL,kBAAKA,kBAAL;AACL,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AACA,EAAAA,4BAAA;AAJU,SAAAA;AAAA,GAAA;AAiDL,MAAe,YAAa,gCAAsD;AAAA,EACvF;AAAA,EAGA,YAAY,cAA+B;AACzC,UAAM;AACN,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,IAAI,eAAgC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAOA,MAAM,QAAuB;AAC3B;AAAA,EACF;AACF;AAEO,MAAe,UAAqD;AAAA,EACzE,OAA0B,iBAAiB,OAAO,gBAAgB;AAAA,EACxD,QAAQ,IAAI,4CAAgE;AAAA,EAC5E,SAAS,IAAI,4CAA4B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EAExB;AAAA,EACA,oBAAoB,OAAO,CAAC;AAAA,EACpB,aAAS,gBAAI;AAAA,EACb;AAAA,EAEA;AAAA,EACR,YAAY,KAAU;AACpB,SAAK,OAAO;AACZ,SAAK,sBAAsB,IAAI,8CAAmC;AAElE,SAAK,cAAc,KAAK,MAAM,SAAS,UAAU;AACjD,SAAK,cAAc,KAAK,MAAM,SAAS,UAAU;AACjD,SAAK,eAAe,KAAK,OAAO,SAAS,UAAU;AAEnD,UAAM,CAAC,cAAc,aAAa,IAAI,KAAK,OAAO,SAAS,IAAI;AAC/D,SAAK,gBAAgB;AACrB,SAAK,eAAe,aAAa,UAAU;AAE3C,SAAK,mBAAmB;AACxB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,qBAAqB;AACjC,UAAM,SAAS,KAAK,oBAAoB,OAAO,UAAU;AACzD,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AACV,cAAM,KAAK,YAAY,MAAM,KAAK;AAAA,MACpC;AAAA,IACF,SAAS,GAAG;AACV,WAAK,OAAO,MAAM,kCAAkC,CAAC,EAAE;AACvD,YAAM;AAAA,IACR,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAgB,iBAAiB;AAC/B,QAAI,2BAA2B;AAC/B,QAAI,iBAAiB;AACrB,UAAM,gBAAgB,KAAK,cAAc,UAAU;AACnD,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,cAAc,KAAK;AACjD,UAAI,MAAM;AACR;AAAA,MACF;AACA,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK;AACH;AACA,cAAI,kBAAkB,IAAI,KAAK,KAAK,aAAa,gBAAgB;AAC/D,iBAAK,KAAK,KAAK,qBAAqB;AAAA,cAClC,MAAM;AAAA,cACN,WAAW,KAAK,IAAI;AAAA,cACpB,YAAY,KAAK;AAAA,gBACf,QAAQ,QAAQ,OAAO,OAAO,IAAI,KAAK,qBAAqB,OAAO,GAAO,CAAC;AAAA,cAC7E;AAAA,cACA;AAAA,cACA;AAAA,cACA,OAAO,KAAK,KAAK;AAAA,YACnB,CAAC;AAED,6BAAiB;AACjB,uCAA2B;AAAA,UAC7B;AACA;AAAA,QACF,KAAK;AACH,sCAA4B,KAAK,MAAM,MAAM,iBAAiB;AAC9D,eAAK,oBAAoB,QAAQ,OAAO,OAAO;AAC/C;AAAA,QACF,KAAK;AACH,eAAK,oBAAoB,QAAQ,OAAO,OAAO;AAC/C;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,aAAa,OAA0B;AAC/C,QAAI,KAAK,QAAQ;AACf,aAAO;AAAA,IACT;AAEA,QAAI;AACF,WAAK,aAAa,MAAM,KAAK;AAC7B,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,kBAAkB,aAAyC;AACzD,SAAK,oBAAoB,UAAU,WAAW;AAAA,EAChD;AAAA,EAEA,oBAAoB;AAClB,SAAK,oBAAoB,aAAa;AAAA,EACxC;AAAA;AAAA,EAGA,UAAU,OAAmB;AAE3B,QAAI,KAAK,aAAa;AACpB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,SAAK,YAAY,MAAM,KAAK;AAAA,EAC9B;AAAA,EAEA,QAAQ;AACN,QAAI,KAAK,aAAa;AACpB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,SAAK,YAAY,MAAM,UAAU,cAAc;AAAA,EACjD;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,aAAa;AACpB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,SAAK,cAAc;AACnB,SAAK,MAAM,SAAS,MAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,OAA0C;AAC9C,WAAO,KAAK,aAAa,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,MAAM,MAAM;AACxD,UAAI,MAAM;AACR,eAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,MACxC;AACA,aAAO,EAAE,MAAM,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AACN,SAAK,aAAa,YAAY;AAC9B,SAAK,aAAa,OAAO;AACzB,SAAK,OAAO,SAAS,MAAM;AAC3B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,CAAC,OAAO,aAAa,IAAe;AAClC,WAAO;AAAA,EACT;AACF;","names":["VADEventType"]}
|
package/dist/vad.d.cts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import type { AudioFrame } from '@livekit/rtc-node';
|
|
3
|
+
import type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';
|
|
4
|
+
import type { ReadableStream, ReadableStreamDefaultReader, WritableStreamDefaultWriter } from 'node:stream/web';
|
|
5
|
+
import type { VADMetrics } from './metrics/base.js';
|
|
6
|
+
import { IdentityTransform } from './stream/identity_transform.js';
|
|
7
|
+
export declare enum VADEventType {
|
|
8
|
+
START_OF_SPEECH = 0,
|
|
9
|
+
INFERENCE_DONE = 1,
|
|
10
|
+
END_OF_SPEECH = 2,
|
|
11
|
+
METRICS_COLLECTED = 3
|
|
12
|
+
}
|
|
13
|
+
export interface VADEvent {
|
|
14
|
+
/** Type of the VAD event (e.g., start of speech, end of speech, inference done). */
|
|
15
|
+
type: VADEventType;
|
|
16
|
+
/**
|
|
17
|
+
* Index of the audio sample where the event occurred, relative to the inference sample rate.
|
|
18
|
+
*/
|
|
19
|
+
samplesIndex: number;
|
|
20
|
+
/** Timestamp when the event was fired. */
|
|
21
|
+
timestamp: number;
|
|
22
|
+
/** Duration of the speech segment. */
|
|
23
|
+
speechDuration: number;
|
|
24
|
+
/** Duration of the silence segment. */
|
|
25
|
+
silenceDuration: number;
|
|
26
|
+
/**
|
|
27
|
+
* List of audio frames associated with the speech.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* - For `start_of_speech` events, this contains the audio chunks that triggered the detection.
|
|
31
|
+
* - For `inference_done` events, this contains the audio chunks that were processed.
|
|
32
|
+
* - For `end_of_speech` events, this contains the complete user speech.
|
|
33
|
+
*/
|
|
34
|
+
frames: AudioFrame[];
|
|
35
|
+
/** Probability that speech is present (only for `INFERENCE_DONE` events). */
|
|
36
|
+
probability: number;
|
|
37
|
+
/** Time taken to perform the inference, in seconds (only for `INFERENCE_DONE` events). */
|
|
38
|
+
inferenceDuration: number;
|
|
39
|
+
/** Indicates whether speech was detected in the frames. */
|
|
40
|
+
speaking: boolean;
|
|
41
|
+
/** Threshold used to detect silence. */
|
|
42
|
+
rawAccumulatedSilence: number;
|
|
43
|
+
/** Threshold used to detect speech. */
|
|
44
|
+
rawAccumulatedSpeech: number;
|
|
45
|
+
}
|
|
46
|
+
export interface VADCapabilities {
|
|
47
|
+
updateInterval: number;
|
|
48
|
+
}
|
|
49
|
+
export type VADCallbacks = {
|
|
50
|
+
['metrics_collected']: (metrics: VADMetrics) => void;
|
|
51
|
+
};
|
|
52
|
+
declare const VAD_base: new () => TypedEmitter<VADCallbacks>;
|
|
53
|
+
export declare abstract class VAD extends VAD_base {
|
|
54
|
+
#private;
|
|
55
|
+
abstract label: string;
|
|
56
|
+
constructor(capabilities: VADCapabilities);
|
|
57
|
+
get capabilities(): VADCapabilities;
|
|
58
|
+
/**
|
|
59
|
+
* Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.
|
|
60
|
+
*/
|
|
61
|
+
abstract stream(): VADStream;
|
|
62
|
+
close(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
export declare abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
65
|
+
#private;
|
|
66
|
+
protected static readonly FLUSH_SENTINEL: unique symbol;
|
|
67
|
+
protected input: IdentityTransform<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
68
|
+
protected output: IdentityTransform<VADEvent>;
|
|
69
|
+
protected inputWriter: WritableStreamDefaultWriter<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
70
|
+
protected inputReader: ReadableStreamDefaultReader<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
71
|
+
protected outputWriter: WritableStreamDefaultWriter<VADEvent>;
|
|
72
|
+
protected outputReader: ReadableStreamDefaultReader<VADEvent>;
|
|
73
|
+
protected closed: boolean;
|
|
74
|
+
protected inputClosed: boolean;
|
|
75
|
+
private logger;
|
|
76
|
+
private deferredInputStream;
|
|
77
|
+
private metricsStream;
|
|
78
|
+
constructor(vad: VAD);
|
|
79
|
+
/**
|
|
80
|
+
* Reads from the deferred input stream and forwards chunks to the input writer.
|
|
81
|
+
*
|
|
82
|
+
* Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)
|
|
83
|
+
* because the inputWriter locks the this.input.writable stream. All writes must go through
|
|
84
|
+
* the inputWriter.
|
|
85
|
+
*/
|
|
86
|
+
private pumpDeferredStream;
|
|
87
|
+
protected monitorMetrics(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Safely send a VAD event to the output stream, handling writer release errors during shutdown.
|
|
90
|
+
* @returns true if the event was sent, false if the stream is closing
|
|
91
|
+
* @throws Error if an unexpected error occurs
|
|
92
|
+
*/
|
|
93
|
+
protected sendVADEvent(event: VADEvent): boolean;
|
|
94
|
+
updateInputStream(audioStream: ReadableStream<AudioFrame>): void;
|
|
95
|
+
detachInputStream(): void;
|
|
96
|
+
/** @deprecated Use `updateInputStream` instead */
|
|
97
|
+
pushFrame(frame: AudioFrame): void;
|
|
98
|
+
flush(): void;
|
|
99
|
+
endInput(): void;
|
|
100
|
+
next(): Promise<IteratorResult<VADEvent>>;
|
|
101
|
+
close(): void;
|
|
102
|
+
[Symbol.asyncIterator](): VADStream;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=vad.d.ts.map
|
package/dist/vad.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import type { AudioFrame } from '@livekit/rtc-node';
|
|
3
|
+
import type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';
|
|
4
|
+
import type { ReadableStream, ReadableStreamDefaultReader, WritableStreamDefaultWriter } from 'node:stream/web';
|
|
5
|
+
import type { VADMetrics } from './metrics/base.js';
|
|
6
|
+
import { IdentityTransform } from './stream/identity_transform.js';
|
|
7
|
+
export declare enum VADEventType {
|
|
8
|
+
START_OF_SPEECH = 0,
|
|
9
|
+
INFERENCE_DONE = 1,
|
|
10
|
+
END_OF_SPEECH = 2,
|
|
11
|
+
METRICS_COLLECTED = 3
|
|
12
|
+
}
|
|
13
|
+
export interface VADEvent {
|
|
14
|
+
/** Type of the VAD event (e.g., start of speech, end of speech, inference done). */
|
|
15
|
+
type: VADEventType;
|
|
16
|
+
/**
|
|
17
|
+
* Index of the audio sample where the event occurred, relative to the inference sample rate.
|
|
18
|
+
*/
|
|
19
|
+
samplesIndex: number;
|
|
20
|
+
/** Timestamp when the event was fired. */
|
|
21
|
+
timestamp: number;
|
|
22
|
+
/** Duration of the speech segment. */
|
|
23
|
+
speechDuration: number;
|
|
24
|
+
/** Duration of the silence segment. */
|
|
25
|
+
silenceDuration: number;
|
|
26
|
+
/**
|
|
27
|
+
* List of audio frames associated with the speech.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* - For `start_of_speech` events, this contains the audio chunks that triggered the detection.
|
|
31
|
+
* - For `inference_done` events, this contains the audio chunks that were processed.
|
|
32
|
+
* - For `end_of_speech` events, this contains the complete user speech.
|
|
33
|
+
*/
|
|
34
|
+
frames: AudioFrame[];
|
|
35
|
+
/** Probability that speech is present (only for `INFERENCE_DONE` events). */
|
|
36
|
+
probability: number;
|
|
37
|
+
/** Time taken to perform the inference, in seconds (only for `INFERENCE_DONE` events). */
|
|
38
|
+
inferenceDuration: number;
|
|
39
|
+
/** Indicates whether speech was detected in the frames. */
|
|
40
|
+
speaking: boolean;
|
|
41
|
+
/** Threshold used to detect silence. */
|
|
42
|
+
rawAccumulatedSilence: number;
|
|
43
|
+
/** Threshold used to detect speech. */
|
|
44
|
+
rawAccumulatedSpeech: number;
|
|
45
|
+
}
|
|
46
|
+
export interface VADCapabilities {
|
|
47
|
+
updateInterval: number;
|
|
48
|
+
}
|
|
49
|
+
export type VADCallbacks = {
|
|
50
|
+
['metrics_collected']: (metrics: VADMetrics) => void;
|
|
51
|
+
};
|
|
52
|
+
declare const VAD_base: new () => TypedEmitter<VADCallbacks>;
|
|
53
|
+
export declare abstract class VAD extends VAD_base {
|
|
54
|
+
#private;
|
|
55
|
+
abstract label: string;
|
|
56
|
+
constructor(capabilities: VADCapabilities);
|
|
57
|
+
get capabilities(): VADCapabilities;
|
|
58
|
+
/**
|
|
59
|
+
* Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.
|
|
60
|
+
*/
|
|
61
|
+
abstract stream(): VADStream;
|
|
62
|
+
close(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
export declare abstract class VADStream implements AsyncIterableIterator<VADEvent> {
|
|
65
|
+
#private;
|
|
66
|
+
protected static readonly FLUSH_SENTINEL: unique symbol;
|
|
67
|
+
protected input: IdentityTransform<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
68
|
+
protected output: IdentityTransform<VADEvent>;
|
|
69
|
+
protected inputWriter: WritableStreamDefaultWriter<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
70
|
+
protected inputReader: ReadableStreamDefaultReader<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;
|
|
71
|
+
protected outputWriter: WritableStreamDefaultWriter<VADEvent>;
|
|
72
|
+
protected outputReader: ReadableStreamDefaultReader<VADEvent>;
|
|
73
|
+
protected closed: boolean;
|
|
74
|
+
protected inputClosed: boolean;
|
|
75
|
+
private logger;
|
|
76
|
+
private deferredInputStream;
|
|
77
|
+
private metricsStream;
|
|
78
|
+
constructor(vad: VAD);
|
|
79
|
+
/**
|
|
80
|
+
* Reads from the deferred input stream and forwards chunks to the input writer.
|
|
81
|
+
*
|
|
82
|
+
* Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)
|
|
83
|
+
* because the inputWriter locks the this.input.writable stream. All writes must go through
|
|
84
|
+
* the inputWriter.
|
|
85
|
+
*/
|
|
86
|
+
private pumpDeferredStream;
|
|
87
|
+
protected monitorMetrics(): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Safely send a VAD event to the output stream, handling writer release errors during shutdown.
|
|
90
|
+
* @returns true if the event was sent, false if the stream is closing
|
|
91
|
+
* @throws Error if an unexpected error occurs
|
|
92
|
+
*/
|
|
93
|
+
protected sendVADEvent(event: VADEvent): boolean;
|
|
94
|
+
updateInputStream(audioStream: ReadableStream<AudioFrame>): void;
|
|
95
|
+
detachInputStream(): void;
|
|
96
|
+
/** @deprecated Use `updateInputStream` instead */
|
|
97
|
+
pushFrame(frame: AudioFrame): void;
|
|
98
|
+
flush(): void;
|
|
99
|
+
endInput(): void;
|
|
100
|
+
next(): Promise<IteratorResult<VADEvent>>;
|
|
101
|
+
close(): void;
|
|
102
|
+
[Symbol.asyncIterator](): VADStream;
|
|
103
|
+
}
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=vad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../src/vad.ts"],"names":[],"mappings":"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"}
|
package/dist/vad.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { log } from "./log.js";
|
|
3
|
+
import { DeferredReadableStream } from "./stream/deferred_stream.js";
|
|
4
|
+
import { IdentityTransform } from "./stream/identity_transform.js";
|
|
5
|
+
var VADEventType = /* @__PURE__ */ ((VADEventType2) => {
|
|
6
|
+
VADEventType2[VADEventType2["START_OF_SPEECH"] = 0] = "START_OF_SPEECH";
|
|
7
|
+
VADEventType2[VADEventType2["INFERENCE_DONE"] = 1] = "INFERENCE_DONE";
|
|
8
|
+
VADEventType2[VADEventType2["END_OF_SPEECH"] = 2] = "END_OF_SPEECH";
|
|
9
|
+
VADEventType2[VADEventType2["METRICS_COLLECTED"] = 3] = "METRICS_COLLECTED";
|
|
10
|
+
return VADEventType2;
|
|
11
|
+
})(VADEventType || {});
|
|
12
|
+
class VAD extends EventEmitter {
|
|
13
|
+
#capabilities;
|
|
14
|
+
constructor(capabilities) {
|
|
15
|
+
super();
|
|
16
|
+
this.#capabilities = capabilities;
|
|
17
|
+
}
|
|
18
|
+
get capabilities() {
|
|
19
|
+
return this.#capabilities;
|
|
20
|
+
}
|
|
21
|
+
async close() {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
class VADStream {
|
|
26
|
+
static FLUSH_SENTINEL = Symbol("FLUSH_SENTINEL");
|
|
27
|
+
input = new IdentityTransform();
|
|
28
|
+
output = new IdentityTransform();
|
|
29
|
+
inputWriter;
|
|
30
|
+
inputReader;
|
|
31
|
+
outputWriter;
|
|
32
|
+
outputReader;
|
|
33
|
+
closed = false;
|
|
34
|
+
inputClosed = false;
|
|
35
|
+
#vad;
|
|
36
|
+
#lastActivityTime = BigInt(0);
|
|
37
|
+
logger = log();
|
|
38
|
+
deferredInputStream;
|
|
39
|
+
metricsStream;
|
|
40
|
+
constructor(vad) {
|
|
41
|
+
this.#vad = vad;
|
|
42
|
+
this.deferredInputStream = new DeferredReadableStream();
|
|
43
|
+
this.inputWriter = this.input.writable.getWriter();
|
|
44
|
+
this.inputReader = this.input.readable.getReader();
|
|
45
|
+
this.outputWriter = this.output.writable.getWriter();
|
|
46
|
+
const [outputStream, metricsStream] = this.output.readable.tee();
|
|
47
|
+
this.metricsStream = metricsStream;
|
|
48
|
+
this.outputReader = outputStream.getReader();
|
|
49
|
+
this.pumpDeferredStream();
|
|
50
|
+
this.monitorMetrics();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Reads from the deferred input stream and forwards chunks to the input writer.
|
|
54
|
+
*
|
|
55
|
+
* Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)
|
|
56
|
+
* because the inputWriter locks the this.input.writable stream. All writes must go through
|
|
57
|
+
* the inputWriter.
|
|
58
|
+
*/
|
|
59
|
+
async pumpDeferredStream() {
|
|
60
|
+
const reader = this.deferredInputStream.stream.getReader();
|
|
61
|
+
try {
|
|
62
|
+
while (true) {
|
|
63
|
+
const { done, value } = await reader.read();
|
|
64
|
+
if (done) break;
|
|
65
|
+
await this.inputWriter.write(value);
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
this.logger.error(`Error pumping deferred stream: ${e}`);
|
|
69
|
+
throw e;
|
|
70
|
+
} finally {
|
|
71
|
+
reader.releaseLock();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async monitorMetrics() {
|
|
75
|
+
let inferenceDurationTotalMs = 0;
|
|
76
|
+
let inferenceCount = 0;
|
|
77
|
+
const metricsReader = this.metricsStream.getReader();
|
|
78
|
+
while (true) {
|
|
79
|
+
const { done, value } = await metricsReader.read();
|
|
80
|
+
if (done) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
switch (value.type) {
|
|
84
|
+
case 0 /* START_OF_SPEECH */:
|
|
85
|
+
inferenceCount++;
|
|
86
|
+
if (inferenceCount >= 1 / this.#vad.capabilities.updateInterval) {
|
|
87
|
+
this.#vad.emit("metrics_collected", {
|
|
88
|
+
type: "vad_metrics",
|
|
89
|
+
timestamp: Date.now(),
|
|
90
|
+
idleTimeMs: Math.trunc(
|
|
91
|
+
Number((process.hrtime.bigint() - this.#lastActivityTime) / BigInt(1e6))
|
|
92
|
+
),
|
|
93
|
+
inferenceDurationTotalMs,
|
|
94
|
+
inferenceCount,
|
|
95
|
+
label: this.#vad.label
|
|
96
|
+
});
|
|
97
|
+
inferenceCount = 0;
|
|
98
|
+
inferenceDurationTotalMs = 0;
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case 1 /* INFERENCE_DONE */:
|
|
102
|
+
inferenceDurationTotalMs += Math.round(value.inferenceDuration);
|
|
103
|
+
this.#lastActivityTime = process.hrtime.bigint();
|
|
104
|
+
break;
|
|
105
|
+
case 2 /* END_OF_SPEECH */:
|
|
106
|
+
this.#lastActivityTime = process.hrtime.bigint();
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Safely send a VAD event to the output stream, handling writer release errors during shutdown.
|
|
113
|
+
* @returns true if the event was sent, false if the stream is closing
|
|
114
|
+
* @throws Error if an unexpected error occurs
|
|
115
|
+
*/
|
|
116
|
+
sendVADEvent(event) {
|
|
117
|
+
if (this.closed) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
this.outputWriter.write(event);
|
|
122
|
+
return true;
|
|
123
|
+
} catch (e) {
|
|
124
|
+
throw e;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
updateInputStream(audioStream) {
|
|
128
|
+
this.deferredInputStream.setSource(audioStream);
|
|
129
|
+
}
|
|
130
|
+
detachInputStream() {
|
|
131
|
+
this.deferredInputStream.detachSource();
|
|
132
|
+
}
|
|
133
|
+
/** @deprecated Use `updateInputStream` instead */
|
|
134
|
+
pushFrame(frame) {
|
|
135
|
+
if (this.inputClosed) {
|
|
136
|
+
throw new Error("Input is closed");
|
|
137
|
+
}
|
|
138
|
+
if (this.closed) {
|
|
139
|
+
throw new Error("Stream is closed");
|
|
140
|
+
}
|
|
141
|
+
this.inputWriter.write(frame);
|
|
142
|
+
}
|
|
143
|
+
flush() {
|
|
144
|
+
if (this.inputClosed) {
|
|
145
|
+
throw new Error("Input is closed");
|
|
146
|
+
}
|
|
147
|
+
if (this.closed) {
|
|
148
|
+
throw new Error("Stream is closed");
|
|
149
|
+
}
|
|
150
|
+
this.inputWriter.write(VADStream.FLUSH_SENTINEL);
|
|
151
|
+
}
|
|
152
|
+
endInput() {
|
|
153
|
+
if (this.inputClosed) {
|
|
154
|
+
throw new Error("Input is closed");
|
|
155
|
+
}
|
|
156
|
+
if (this.closed) {
|
|
157
|
+
throw new Error("Stream is closed");
|
|
158
|
+
}
|
|
159
|
+
this.inputClosed = true;
|
|
160
|
+
this.input.writable.close();
|
|
161
|
+
}
|
|
162
|
+
async next() {
|
|
163
|
+
return this.outputReader.read().then(({ done, value }) => {
|
|
164
|
+
if (done) {
|
|
165
|
+
return { done: true, value: void 0 };
|
|
166
|
+
}
|
|
167
|
+
return { done: false, value };
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
close() {
|
|
171
|
+
this.outputWriter.releaseLock();
|
|
172
|
+
this.outputReader.cancel();
|
|
173
|
+
this.output.writable.close();
|
|
174
|
+
this.closed = true;
|
|
175
|
+
}
|
|
176
|
+
[Symbol.asyncIterator]() {
|
|
177
|
+
return this;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export {
|
|
181
|
+
VAD,
|
|
182
|
+
VADEventType,
|
|
183
|
+
VADStream
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=vad.js.map
|
package/dist/vad.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vad.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { AudioFrame } from '@livekit/rtc-node';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport { EventEmitter } from 'node:events';\nimport type {\n ReadableStream,\n ReadableStreamDefaultReader,\n WritableStreamDefaultWriter,\n} from 'node:stream/web';\nimport { log } from './log.js';\nimport type { VADMetrics } from './metrics/base.js';\nimport { DeferredReadableStream } from './stream/deferred_stream.js';\nimport { IdentityTransform } from './stream/identity_transform.js';\n\nexport enum VADEventType {\n START_OF_SPEECH,\n INFERENCE_DONE,\n END_OF_SPEECH,\n METRICS_COLLECTED,\n}\n\nexport interface VADEvent {\n /** Type of the VAD event (e.g., start of speech, end of speech, inference done). */\n type: VADEventType;\n /**\n * Index of the audio sample where the event occurred, relative to the inference sample rate.\n */\n samplesIndex: number;\n /** Timestamp when the event was fired. */\n timestamp: number;\n /** Duration of the speech segment. */\n speechDuration: number;\n /** Duration of the silence segment. */\n silenceDuration: number;\n /**\n * List of audio frames associated with the speech.\n *\n * @remarks\n * - For `start_of_speech` events, this contains the audio chunks that triggered the detection.\n * - For `inference_done` events, this contains the audio chunks that were processed.\n * - For `end_of_speech` events, this contains the complete user speech.\n */\n frames: AudioFrame[];\n /** Probability that speech is present (only for `INFERENCE_DONE` events). */\n probability: number;\n /** Time taken to perform the inference, in seconds (only for `INFERENCE_DONE` events). */\n inferenceDuration: number;\n /** Indicates whether speech was detected in the frames. */\n speaking: boolean;\n /** Threshold used to detect silence. */\n rawAccumulatedSilence: number;\n /** Threshold used to detect speech. */\n rawAccumulatedSpeech: number;\n}\n\nexport interface VADCapabilities {\n updateInterval: number;\n}\n\nexport type VADCallbacks = {\n ['metrics_collected']: (metrics: VADMetrics) => void;\n};\n\nexport abstract class VAD extends (EventEmitter as new () => TypedEmitter<VADCallbacks>) {\n #capabilities: VADCapabilities;\n abstract label: string;\n\n constructor(capabilities: VADCapabilities) {\n super();\n this.#capabilities = capabilities;\n }\n\n get capabilities(): VADCapabilities {\n return this.#capabilities;\n }\n\n /**\n * Returns a {@link VADStream} that can be used to push audio frames and receive VAD events.\n */\n abstract stream(): VADStream;\n\n async close(): Promise<void> {\n return;\n }\n}\n\nexport abstract class VADStream implements AsyncIterableIterator<VADEvent> {\n protected static readonly FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');\n protected input = new IdentityTransform<AudioFrame | typeof VADStream.FLUSH_SENTINEL>();\n protected output = new IdentityTransform<VADEvent>();\n protected inputWriter: WritableStreamDefaultWriter<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;\n protected inputReader: ReadableStreamDefaultReader<AudioFrame | typeof VADStream.FLUSH_SENTINEL>;\n protected outputWriter: WritableStreamDefaultWriter<VADEvent>;\n protected outputReader: ReadableStreamDefaultReader<VADEvent>;\n protected closed = false;\n protected inputClosed = false;\n\n #vad: VAD;\n #lastActivityTime = BigInt(0);\n private logger = log();\n private deferredInputStream: DeferredReadableStream<AudioFrame>;\n\n private metricsStream: ReadableStream<VADEvent>;\n constructor(vad: VAD) {\n this.#vad = vad;\n this.deferredInputStream = new DeferredReadableStream<AudioFrame>();\n\n this.inputWriter = this.input.writable.getWriter();\n this.inputReader = this.input.readable.getReader();\n this.outputWriter = this.output.writable.getWriter();\n\n const [outputStream, metricsStream] = this.output.readable.tee();\n this.metricsStream = metricsStream;\n this.outputReader = outputStream.getReader();\n\n this.pumpDeferredStream();\n this.monitorMetrics();\n }\n\n /**\n * Reads from the deferred input stream and forwards chunks to the input writer.\n *\n * Note: we can't just do this.deferredInputStream.stream.pipeTo(this.input.writable)\n * because the inputWriter locks the this.input.writable stream. All writes must go through\n * the inputWriter.\n */\n private async pumpDeferredStream() {\n const reader = this.deferredInputStream.stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n await this.inputWriter.write(value);\n }\n } catch (e) {\n this.logger.error(`Error pumping deferred stream: ${e}`);\n throw e;\n } finally {\n reader.releaseLock();\n }\n }\n\n protected async monitorMetrics() {\n let inferenceDurationTotalMs = 0;\n let inferenceCount = 0;\n const metricsReader = this.metricsStream.getReader();\n while (true) {\n const { done, value } = await metricsReader.read();\n if (done) {\n break;\n }\n switch (value.type) {\n case VADEventType.START_OF_SPEECH:\n inferenceCount++;\n if (inferenceCount >= 1 / this.#vad.capabilities.updateInterval) {\n this.#vad.emit('metrics_collected', {\n type: 'vad_metrics',\n timestamp: Date.now(),\n idleTimeMs: Math.trunc(\n Number((process.hrtime.bigint() - this.#lastActivityTime) / BigInt(1000000)),\n ),\n inferenceDurationTotalMs,\n inferenceCount,\n label: this.#vad.label,\n });\n\n inferenceCount = 0;\n inferenceDurationTotalMs = 0;\n }\n break;\n case VADEventType.INFERENCE_DONE:\n inferenceDurationTotalMs += Math.round(value.inferenceDuration);\n this.#lastActivityTime = process.hrtime.bigint();\n break;\n case VADEventType.END_OF_SPEECH:\n this.#lastActivityTime = process.hrtime.bigint();\n break;\n }\n }\n }\n\n /**\n * Safely send a VAD event to the output stream, handling writer release errors during shutdown.\n * @returns true if the event was sent, false if the stream is closing\n * @throws Error if an unexpected error occurs\n */\n protected sendVADEvent(event: VADEvent): boolean {\n if (this.closed) {\n return false;\n }\n\n try {\n this.outputWriter.write(event);\n return true;\n } catch (e) {\n throw e;\n }\n }\n\n updateInputStream(audioStream: ReadableStream<AudioFrame>) {\n this.deferredInputStream.setSource(audioStream);\n }\n\n detachInputStream() {\n this.deferredInputStream.detachSource();\n }\n\n /** @deprecated Use `updateInputStream` instead */\n pushFrame(frame: AudioFrame) {\n // TODO(AJS-395): remove this method\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputWriter.write(frame);\n }\n\n flush() {\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputWriter.write(VADStream.FLUSH_SENTINEL);\n }\n\n endInput() {\n if (this.inputClosed) {\n throw new Error('Input is closed');\n }\n if (this.closed) {\n throw new Error('Stream is closed');\n }\n this.inputClosed = true;\n this.input.writable.close();\n }\n\n async next(): Promise<IteratorResult<VADEvent>> {\n return this.outputReader.read().then(({ done, value }) => {\n if (done) {\n return { done: true, value: undefined };\n }\n return { done: false, value };\n });\n }\n\n close() {\n this.outputWriter.releaseLock();\n this.outputReader.cancel();\n this.output.writable.close();\n this.closed = true;\n }\n\n [Symbol.asyncIterator](): VADStream {\n return this;\n }\n}\n"],"mappings":"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","names":["VADEventType"]}
|