@livekit/agents 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_exceptions.cjs.map +1 -1
- package/dist/_exceptions.d.ts.map +1 -1
- package/dist/_exceptions.js.map +1 -1
- package/dist/audio.cjs +89 -3
- package/dist/audio.cjs.map +1 -1
- package/dist/audio.d.cts +36 -1
- package/dist/audio.d.ts +36 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +76 -2
- package/dist/audio.js.map +1 -1
- package/dist/beta/index.cjs +29 -0
- package/dist/beta/index.cjs.map +1 -0
- package/dist/beta/index.d.cts +2 -0
- package/dist/beta/index.d.ts +2 -0
- package/dist/beta/index.d.ts.map +1 -0
- package/dist/beta/index.js +7 -0
- package/dist/beta/index.js.map +1 -0
- package/dist/beta/workflows/index.cjs +29 -0
- package/dist/beta/workflows/index.cjs.map +1 -0
- package/dist/beta/workflows/index.d.cts +2 -0
- package/dist/beta/workflows/index.d.ts +2 -0
- package/dist/beta/workflows/index.d.ts.map +1 -0
- package/dist/beta/workflows/index.js +7 -0
- package/dist/beta/workflows/index.js.map +1 -0
- package/dist/beta/workflows/task_group.cjs +165 -0
- package/dist/beta/workflows/task_group.cjs.map +1 -0
- package/dist/beta/workflows/task_group.d.cts +32 -0
- package/dist/beta/workflows/task_group.d.ts +32 -0
- package/dist/beta/workflows/task_group.d.ts.map +1 -0
- package/dist/beta/workflows/task_group.js +141 -0
- package/dist/beta/workflows/task_group.js.map +1 -0
- package/dist/cli.cjs +44 -46
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +3 -3
- package/dist/cli.d.ts +3 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -47
- package/dist/cli.js.map +1 -1
- package/dist/connection_pool.cjs +242 -0
- package/dist/connection_pool.cjs.map +1 -0
- package/dist/connection_pool.d.cts +123 -0
- package/dist/connection_pool.d.ts +123 -0
- package/dist/connection_pool.d.ts.map +1 -0
- package/dist/connection_pool.js +218 -0
- package/dist/connection_pool.js.map +1 -0
- package/dist/connection_pool.test.cjs +256 -0
- package/dist/connection_pool.test.cjs.map +1 -0
- package/dist/connection_pool.test.js +255 -0
- package/dist/connection_pool.test.js.map +1 -0
- package/dist/constants.cjs +30 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +10 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -1
- package/dist/cpu.cjs +189 -0
- package/dist/cpu.cjs.map +1 -0
- package/dist/cpu.d.cts +24 -0
- package/dist/cpu.d.ts +24 -0
- package/dist/cpu.d.ts.map +1 -0
- package/dist/cpu.js +152 -0
- package/dist/cpu.js.map +1 -0
- package/dist/cpu.test.cjs +227 -0
- package/dist/cpu.test.cjs.map +1 -0
- package/dist/cpu.test.js +204 -0
- package/dist/cpu.test.js.map +1 -0
- package/dist/http_server.cjs +9 -6
- package/dist/http_server.cjs.map +1 -1
- package/dist/http_server.d.cts +5 -1
- package/dist/http_server.d.ts +5 -1
- package/dist/http_server.d.ts.map +1 -1
- package/dist/http_server.js +9 -6
- package/dist/http_server.js.map +1 -1
- package/dist/index.cjs +24 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -11
- package/dist/index.d.ts +15 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/inference/api_protos.cjs +70 -2
- package/dist/inference/api_protos.cjs.map +1 -1
- package/dist/inference/api_protos.d.cts +373 -32
- package/dist/inference/api_protos.d.ts +373 -32
- package/dist/inference/api_protos.d.ts.map +1 -1
- package/dist/inference/api_protos.js +62 -2
- package/dist/inference/api_protos.js.map +1 -1
- package/dist/inference/index.cjs +8 -0
- package/dist/inference/index.cjs.map +1 -1
- package/dist/inference/index.d.cts +3 -4
- package/dist/inference/index.d.ts +3 -4
- package/dist/inference/index.d.ts.map +1 -1
- package/dist/inference/index.js +18 -3
- package/dist/inference/index.js.map +1 -1
- package/dist/inference/interruption/defaults.cjs +81 -0
- package/dist/inference/interruption/defaults.cjs.map +1 -0
- package/dist/inference/interruption/defaults.d.cts +19 -0
- package/dist/inference/interruption/defaults.d.ts +19 -0
- package/dist/inference/interruption/defaults.d.ts.map +1 -0
- package/dist/inference/interruption/defaults.js +46 -0
- package/dist/inference/interruption/defaults.js.map +1 -0
- package/dist/inference/interruption/errors.cjs +44 -0
- package/dist/inference/interruption/errors.cjs.map +1 -0
- package/dist/inference/interruption/errors.d.cts +12 -0
- package/dist/inference/interruption/errors.d.ts +12 -0
- package/dist/inference/interruption/errors.d.ts.map +1 -0
- package/dist/inference/interruption/errors.js +20 -0
- package/dist/inference/interruption/errors.js.map +1 -0
- package/dist/inference/interruption/http_transport.cjs +163 -0
- package/dist/inference/interruption/http_transport.cjs.map +1 -0
- package/dist/inference/interruption/http_transport.d.cts +65 -0
- package/dist/inference/interruption/http_transport.d.ts +65 -0
- package/dist/inference/interruption/http_transport.d.ts.map +1 -0
- package/dist/inference/interruption/http_transport.js +137 -0
- package/dist/inference/interruption/http_transport.js.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs +58 -0
- package/dist/inference/interruption/interruption_cache_entry.cjs.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.d.cts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts +30 -0
- package/dist/inference/interruption/interruption_cache_entry.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_cache_entry.js +34 -0
- package/dist/inference/interruption/interruption_cache_entry.js.map +1 -0
- package/dist/inference/interruption/interruption_detector.cjs +198 -0
- package/dist/inference/interruption/interruption_detector.cjs.map +1 -0
- package/dist/inference/interruption/interruption_detector.d.cts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts +59 -0
- package/dist/inference/interruption/interruption_detector.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_detector.js +164 -0
- package/dist/inference/interruption/interruption_detector.js.map +1 -0
- package/dist/inference/interruption/interruption_stream.cjs +368 -0
- package/dist/inference/interruption/interruption_stream.cjs.map +1 -0
- package/dist/inference/interruption/interruption_stream.d.cts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts +46 -0
- package/dist/inference/interruption/interruption_stream.d.ts.map +1 -0
- package/dist/inference/interruption/interruption_stream.js +344 -0
- package/dist/inference/interruption/interruption_stream.js.map +1 -0
- package/dist/inference/interruption/types.cjs +17 -0
- package/dist/inference/interruption/types.cjs.map +1 -0
- package/dist/inference/interruption/types.d.cts +66 -0
- package/dist/inference/interruption/types.d.ts +66 -0
- package/dist/inference/interruption/types.d.ts.map +1 -0
- package/dist/inference/interruption/types.js +1 -0
- package/dist/inference/interruption/types.js.map +1 -0
- package/dist/inference/interruption/utils.cjs +130 -0
- package/dist/inference/interruption/utils.cjs.map +1 -0
- package/dist/inference/interruption/utils.d.cts +41 -0
- package/dist/inference/interruption/utils.d.ts +41 -0
- package/dist/inference/interruption/utils.d.ts.map +1 -0
- package/dist/inference/interruption/utils.js +105 -0
- package/dist/inference/interruption/utils.js.map +1 -0
- package/dist/inference/interruption/utils.test.cjs +105 -0
- package/dist/inference/interruption/utils.test.cjs.map +1 -0
- package/dist/inference/interruption/utils.test.js +104 -0
- package/dist/inference/interruption/utils.test.js.map +1 -0
- package/dist/inference/interruption/ws_transport.cjs +347 -0
- package/dist/inference/interruption/ws_transport.cjs.map +1 -0
- package/dist/inference/interruption/ws_transport.d.cts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts +33 -0
- package/dist/inference/interruption/ws_transport.d.ts.map +1 -0
- package/dist/inference/interruption/ws_transport.js +313 -0
- package/dist/inference/interruption/ws_transport.js.map +1 -0
- package/dist/inference/llm.cjs +106 -66
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.cts +65 -43
- package/dist/inference/llm.d.ts +65 -43
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js +100 -66
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/stt.cjs +319 -170
- package/dist/inference/stt.cjs.map +1 -1
- package/dist/inference/stt.d.cts +64 -15
- package/dist/inference/stt.d.ts +64 -15
- package/dist/inference/stt.d.ts.map +1 -1
- package/dist/inference/stt.js +319 -170
- package/dist/inference/stt.js.map +1 -1
- package/dist/inference/stt.test.cjs +218 -0
- package/dist/inference/stt.test.cjs.map +1 -0
- package/dist/inference/stt.test.js +217 -0
- package/dist/inference/stt.test.js.map +1 -0
- package/dist/inference/tts.cjs +249 -71
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +94 -17
- package/dist/inference/tts.d.ts +94 -17
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +249 -77
- package/dist/inference/tts.js.map +1 -1
- package/dist/inference/tts.test.cjs +305 -0
- package/dist/inference/tts.test.cjs.map +1 -0
- package/dist/inference/tts.test.js +304 -0
- package/dist/inference/tts.test.js.map +1 -0
- package/dist/inference/utils.cjs +26 -7
- package/dist/inference/utils.cjs.map +1 -1
- package/dist/inference/utils.d.cts +14 -1
- package/dist/inference/utils.d.ts +14 -1
- package/dist/inference/utils.d.ts.map +1 -1
- package/dist/inference/utils.js +18 -2
- package/dist/inference/utils.js.map +1 -1
- package/dist/ipc/inference_proc_executor.cjs +6 -3
- package/dist/ipc/inference_proc_executor.cjs.map +1 -1
- package/dist/ipc/inference_proc_executor.d.ts.map +1 -1
- package/dist/ipc/inference_proc_executor.js +6 -3
- package/dist/ipc/inference_proc_executor.js.map +1 -1
- package/dist/ipc/inference_proc_lazy_main.cjs +13 -1
- package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/inference_proc_lazy_main.js +13 -1
- package/dist/ipc/inference_proc_lazy_main.js.map +1 -1
- package/dist/ipc/job_proc_executor.cjs +6 -1
- package/dist/ipc/job_proc_executor.cjs.map +1 -1
- package/dist/ipc/job_proc_executor.d.ts.map +1 -1
- package/dist/ipc/job_proc_executor.js +6 -1
- package/dist/ipc/job_proc_executor.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +89 -17
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +68 -18
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/ipc/supervised_proc.cjs +34 -8
- package/dist/ipc/supervised_proc.cjs.map +1 -1
- package/dist/ipc/supervised_proc.d.cts +8 -0
- package/dist/ipc/supervised_proc.d.ts +8 -0
- package/dist/ipc/supervised_proc.d.ts.map +1 -1
- package/dist/ipc/supervised_proc.js +34 -8
- package/dist/ipc/supervised_proc.js.map +1 -1
- package/dist/ipc/supervised_proc.test.cjs +145 -0
- package/dist/ipc/supervised_proc.test.cjs.map +1 -0
- package/dist/ipc/supervised_proc.test.js +122 -0
- package/dist/ipc/supervised_proc.test.js.map +1 -0
- package/dist/job.cjs +109 -1
- package/dist/job.cjs.map +1 -1
- package/dist/job.d.cts +14 -0
- package/dist/job.d.ts +14 -0
- package/dist/job.d.ts.map +1 -1
- package/dist/job.js +99 -1
- package/dist/job.js.map +1 -1
- package/dist/language.cjs +394 -0
- package/dist/language.cjs.map +1 -0
- package/dist/language.d.cts +15 -0
- package/dist/language.d.ts +15 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +363 -0
- package/dist/language.js.map +1 -0
- package/dist/language.test.cjs +43 -0
- package/dist/language.test.cjs.map +1 -0
- package/dist/language.test.js +49 -0
- package/dist/language.test.js.map +1 -0
- package/dist/llm/chat_context.cjs +345 -3
- package/dist/llm/chat_context.cjs.map +1 -1
- package/dist/llm/chat_context.d.cts +86 -2
- package/dist/llm/chat_context.d.ts +86 -2
- package/dist/llm/chat_context.d.ts.map +1 -1
- package/dist/llm/chat_context.js +344 -3
- package/dist/llm/chat_context.js.map +1 -1
- package/dist/llm/chat_context.test.cjs +692 -0
- package/dist/llm/chat_context.test.cjs.map +1 -1
- package/dist/llm/chat_context.test.js +692 -0
- package/dist/llm/chat_context.test.js.map +1 -1
- package/dist/llm/fallback_adapter.cjs +280 -0
- package/dist/llm/fallback_adapter.cjs.map +1 -0
- package/dist/llm/fallback_adapter.d.cts +73 -0
- package/dist/llm/fallback_adapter.d.ts +73 -0
- package/dist/llm/fallback_adapter.d.ts.map +1 -0
- package/dist/llm/fallback_adapter.js +256 -0
- package/dist/llm/fallback_adapter.js.map +1 -0
- package/dist/llm/fallback_adapter.test.cjs +176 -0
- package/dist/llm/fallback_adapter.test.cjs.map +1 -0
- package/dist/llm/fallback_adapter.test.js +175 -0
- package/dist/llm/fallback_adapter.test.js.map +1 -0
- package/dist/llm/index.cjs +11 -0
- package/dist/llm/index.cjs.map +1 -1
- package/dist/llm/index.d.cts +4 -3
- package/dist/llm/index.d.ts +4 -3
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +13 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm.cjs +65 -11
- package/dist/llm/llm.cjs.map +1 -1
- package/dist/llm/llm.d.cts +13 -2
- package/dist/llm/llm.d.ts +13 -2
- package/dist/llm/llm.d.ts.map +1 -1
- package/dist/llm/llm.js +65 -11
- package/dist/llm/llm.js.map +1 -1
- package/dist/llm/provider_format/google.cjs +6 -2
- package/dist/llm/provider_format/google.cjs.map +1 -1
- package/dist/llm/provider_format/google.d.cts +1 -1
- package/dist/llm/provider_format/google.d.ts +1 -1
- package/dist/llm/provider_format/google.d.ts.map +1 -1
- package/dist/llm/provider_format/google.js +6 -2
- package/dist/llm/provider_format/google.js.map +1 -1
- package/dist/llm/provider_format/google.test.cjs +48 -0
- package/dist/llm/provider_format/google.test.cjs.map +1 -1
- package/dist/llm/provider_format/google.test.js +54 -1
- package/dist/llm/provider_format/google.test.js.map +1 -1
- package/dist/llm/provider_format/index.cjs +2 -0
- package/dist/llm/provider_format/index.cjs.map +1 -1
- package/dist/llm/provider_format/index.d.cts +2 -2
- package/dist/llm/provider_format/index.d.ts +2 -2
- package/dist/llm/provider_format/index.d.ts.map +1 -1
- package/dist/llm/provider_format/index.js +6 -1
- package/dist/llm/provider_format/index.js.map +1 -1
- package/dist/llm/provider_format/openai.cjs +126 -24
- package/dist/llm/provider_format/openai.cjs.map +1 -1
- package/dist/llm/provider_format/openai.d.cts +1 -0
- package/dist/llm/provider_format/openai.d.ts +1 -0
- package/dist/llm/provider_format/openai.d.ts.map +1 -1
- package/dist/llm/provider_format/openai.js +124 -23
- package/dist/llm/provider_format/openai.js.map +1 -1
- package/dist/llm/provider_format/openai.test.cjs +393 -0
- package/dist/llm/provider_format/openai.test.cjs.map +1 -1
- package/dist/llm/provider_format/openai.test.js +400 -2
- package/dist/llm/provider_format/openai.test.js.map +1 -1
- package/dist/llm/provider_format/utils.cjs +5 -4
- package/dist/llm/provider_format/utils.cjs.map +1 -1
- package/dist/llm/provider_format/utils.d.ts.map +1 -1
- package/dist/llm/provider_format/utils.js +5 -4
- package/dist/llm/provider_format/utils.js.map +1 -1
- package/dist/llm/realtime.cjs +3 -0
- package/dist/llm/realtime.cjs.map +1 -1
- package/dist/llm/realtime.d.cts +15 -1
- package/dist/llm/realtime.d.ts +15 -1
- package/dist/llm/realtime.d.ts.map +1 -1
- package/dist/llm/realtime.js +3 -0
- package/dist/llm/realtime.js.map +1 -1
- package/dist/llm/remote_chat_context.cjs.map +1 -1
- package/dist/llm/remote_chat_context.d.cts +2 -0
- package/dist/llm/remote_chat_context.d.ts +2 -0
- package/dist/llm/remote_chat_context.d.ts.map +1 -1
- package/dist/llm/remote_chat_context.js.map +1 -1
- package/dist/llm/tool_context.cjs +50 -2
- package/dist/llm/tool_context.cjs.map +1 -1
- package/dist/llm/tool_context.d.cts +47 -11
- package/dist/llm/tool_context.d.ts +47 -11
- package/dist/llm/tool_context.d.ts.map +1 -1
- package/dist/llm/tool_context.js +48 -3
- package/dist/llm/tool_context.js.map +1 -1
- package/dist/llm/tool_context.test.cjs +197 -0
- package/dist/llm/tool_context.test.cjs.map +1 -1
- package/dist/llm/tool_context.test.js +175 -0
- package/dist/llm/tool_context.test.js.map +1 -1
- package/dist/llm/utils.cjs +107 -12
- package/dist/llm/utils.cjs.map +1 -1
- package/dist/llm/utils.d.cts +10 -3
- package/dist/llm/utils.d.ts +10 -3
- package/dist/llm/utils.d.ts.map +1 -1
- package/dist/llm/utils.js +106 -12
- package/dist/llm/utils.js.map +1 -1
- package/dist/llm/utils.test.cjs +90 -0
- package/dist/llm/utils.test.cjs.map +1 -1
- package/dist/llm/utils.test.js +98 -2
- package/dist/llm/utils.test.js.map +1 -1
- package/dist/llm/zod-utils.cjs +102 -0
- package/dist/llm/zod-utils.cjs.map +1 -0
- package/dist/llm/zod-utils.d.cts +65 -0
- package/dist/llm/zod-utils.d.ts +65 -0
- package/dist/llm/zod-utils.d.ts.map +1 -0
- package/dist/llm/zod-utils.js +64 -0
- package/dist/llm/zod-utils.js.map +1 -0
- package/dist/llm/zod-utils.test.cjs +472 -0
- package/dist/llm/zod-utils.test.cjs.map +1 -0
- package/dist/llm/zod-utils.test.js +455 -0
- package/dist/llm/zod-utils.test.js.map +1 -0
- package/dist/log.cjs +45 -14
- package/dist/log.cjs.map +1 -1
- package/dist/log.d.cts +8 -1
- package/dist/log.d.ts +8 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +45 -15
- package/dist/log.js.map +1 -1
- package/dist/metrics/base.cjs.map +1 -1
- package/dist/metrics/base.d.cts +75 -19
- package/dist/metrics/base.d.ts +75 -19
- package/dist/metrics/base.d.ts.map +1 -1
- package/dist/metrics/index.cjs +5 -0
- package/dist/metrics/index.cjs.map +1 -1
- package/dist/metrics/index.d.cts +2 -1
- package/dist/metrics/index.d.ts +2 -1
- package/dist/metrics/index.d.ts.map +1 -1
- package/dist/metrics/index.js +6 -0
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/model_usage.cjs +189 -0
- package/dist/metrics/model_usage.cjs.map +1 -0
- package/dist/metrics/model_usage.d.cts +92 -0
- package/dist/metrics/model_usage.d.ts +92 -0
- package/dist/metrics/model_usage.d.ts.map +1 -0
- package/dist/metrics/model_usage.js +164 -0
- package/dist/metrics/model_usage.js.map +1 -0
- package/dist/metrics/model_usage.test.cjs +474 -0
- package/dist/metrics/model_usage.test.cjs.map +1 -0
- package/dist/metrics/model_usage.test.js +476 -0
- package/dist/metrics/model_usage.test.js.map +1 -0
- package/dist/metrics/usage_collector.cjs +5 -2
- package/dist/metrics/usage_collector.cjs.map +1 -1
- package/dist/metrics/usage_collector.d.cts +10 -1
- package/dist/metrics/usage_collector.d.ts +10 -1
- package/dist/metrics/usage_collector.d.ts.map +1 -1
- package/dist/metrics/usage_collector.js +5 -2
- package/dist/metrics/usage_collector.js.map +1 -1
- package/dist/metrics/utils.cjs +23 -7
- package/dist/metrics/utils.cjs.map +1 -1
- package/dist/metrics/utils.d.ts.map +1 -1
- package/dist/metrics/utils.js +23 -7
- package/dist/metrics/utils.js.map +1 -1
- package/dist/stream/deferred_stream.cjs +31 -10
- package/dist/stream/deferred_stream.cjs.map +1 -1
- package/dist/stream/deferred_stream.d.cts +6 -1
- package/dist/stream/deferred_stream.d.ts +6 -1
- package/dist/stream/deferred_stream.d.ts.map +1 -1
- package/dist/stream/deferred_stream.js +31 -10
- package/dist/stream/deferred_stream.js.map +1 -1
- package/dist/stream/deferred_stream.test.cjs +2 -2
- package/dist/stream/deferred_stream.test.cjs.map +1 -1
- package/dist/stream/deferred_stream.test.js +2 -2
- package/dist/stream/deferred_stream.test.js.map +1 -1
- package/dist/stream/index.cjs +3 -0
- package/dist/stream/index.cjs.map +1 -1
- package/dist/stream/index.d.cts +1 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +2 -0
- package/dist/stream/index.js.map +1 -1
- package/dist/stream/multi_input_stream.cjs +139 -0
- package/dist/stream/multi_input_stream.cjs.map +1 -0
- package/dist/stream/multi_input_stream.d.cts +55 -0
- package/dist/stream/multi_input_stream.d.ts +55 -0
- package/dist/stream/multi_input_stream.d.ts.map +1 -0
- package/dist/stream/multi_input_stream.js +115 -0
- package/dist/stream/multi_input_stream.js.map +1 -0
- package/dist/stream/multi_input_stream.test.cjs +344 -0
- package/dist/stream/multi_input_stream.test.cjs.map +1 -0
- package/dist/stream/multi_input_stream.test.js +343 -0
- package/dist/stream/multi_input_stream.test.js.map +1 -0
- package/dist/stream/stream_channel.cjs +39 -1
- package/dist/stream/stream_channel.cjs.map +1 -1
- package/dist/stream/stream_channel.d.cts +5 -2
- package/dist/stream/stream_channel.d.ts +5 -2
- package/dist/stream/stream_channel.d.ts.map +1 -1
- package/dist/stream/stream_channel.js +39 -1
- package/dist/stream/stream_channel.js.map +1 -1
- package/dist/stream/stream_channel.test.cjs +27 -0
- package/dist/stream/stream_channel.test.cjs.map +1 -1
- package/dist/stream/stream_channel.test.js +27 -0
- package/dist/stream/stream_channel.test.js.map +1 -1
- package/dist/stt/stream_adapter.cjs +24 -9
- package/dist/stt/stream_adapter.cjs.map +1 -1
- package/dist/stt/stream_adapter.d.cts +7 -3
- package/dist/stt/stream_adapter.d.ts +7 -3
- package/dist/stt/stream_adapter.d.ts.map +1 -1
- package/dist/stt/stream_adapter.js +24 -9
- package/dist/stt/stream_adapter.js.map +1 -1
- package/dist/stt/stt.cjs +94 -19
- package/dist/stt/stt.cjs.map +1 -1
- package/dist/stt/stt.d.cts +68 -5
- package/dist/stt/stt.d.ts +68 -5
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +96 -21
- package/dist/stt/stt.js.map +1 -1
- package/dist/telemetry/index.cjs +72 -0
- package/dist/telemetry/index.cjs.map +1 -0
- package/dist/telemetry/index.d.cts +7 -0
- package/dist/telemetry/index.d.ts +7 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +37 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logging.cjs +65 -0
- package/dist/telemetry/logging.cjs.map +1 -0
- package/dist/telemetry/logging.d.cts +21 -0
- package/dist/telemetry/logging.d.ts +21 -0
- package/dist/telemetry/logging.d.ts.map +1 -0
- package/dist/telemetry/logging.js +40 -0
- package/dist/telemetry/logging.js.map +1 -0
- package/dist/telemetry/otel_http_exporter.cjs +166 -0
- package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
- package/dist/telemetry/otel_http_exporter.d.cts +63 -0
- package/dist/telemetry/otel_http_exporter.d.ts +63 -0
- package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
- package/dist/telemetry/otel_http_exporter.js +142 -0
- package/dist/telemetry/otel_http_exporter.js.map +1 -0
- package/dist/telemetry/pino_otel_transport.cjs +217 -0
- package/dist/telemetry/pino_otel_transport.cjs.map +1 -0
- package/dist/telemetry/pino_otel_transport.d.cts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts.map +1 -0
- package/dist/telemetry/pino_otel_transport.js +189 -0
- package/dist/telemetry/pino_otel_transport.js.map +1 -0
- package/dist/telemetry/trace_types.cjs +233 -0
- package/dist/telemetry/trace_types.cjs.map +1 -0
- package/dist/telemetry/trace_types.d.cts +74 -0
- package/dist/telemetry/trace_types.d.ts +74 -0
- package/dist/telemetry/trace_types.d.ts.map +1 -0
- package/dist/telemetry/trace_types.js +141 -0
- package/dist/telemetry/trace_types.js.map +1 -0
- package/dist/telemetry/traces.cjs +484 -0
- package/dist/telemetry/traces.cjs.map +1 -0
- package/dist/telemetry/traces.d.cts +116 -0
- package/dist/telemetry/traces.d.ts +116 -0
- package/dist/telemetry/traces.d.ts.map +1 -0
- package/dist/telemetry/traces.js +449 -0
- package/dist/telemetry/traces.js.map +1 -0
- package/dist/telemetry/utils.cjs +86 -0
- package/dist/telemetry/utils.cjs.map +1 -0
- package/dist/telemetry/utils.d.cts +5 -0
- package/dist/telemetry/utils.d.ts +5 -0
- package/dist/telemetry/utils.d.ts.map +1 -0
- package/dist/telemetry/utils.js +51 -0
- package/dist/telemetry/utils.js.map +1 -0
- package/dist/tokenize/basic/sentence.cjs +3 -3
- package/dist/tokenize/basic/sentence.cjs.map +1 -1
- package/dist/tokenize/basic/sentence.js +3 -3
- package/dist/tokenize/basic/sentence.js.map +1 -1
- package/dist/tokenize/tokenizer.test.cjs +3 -1
- package/dist/tokenize/tokenizer.test.cjs.map +1 -1
- package/dist/tokenize/tokenizer.test.js +3 -1
- package/dist/tokenize/tokenizer.test.js.map +1 -1
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.d.cts +6 -0
- package/dist/transcription.d.ts +6 -0
- package/dist/transcription.d.ts.map +1 -1
- package/dist/transcription.js.map +1 -1
- package/dist/tts/fallback_adapter.cjs +472 -0
- package/dist/tts/fallback_adapter.cjs.map +1 -0
- package/dist/tts/fallback_adapter.d.cts +110 -0
- package/dist/tts/fallback_adapter.d.ts +110 -0
- package/dist/tts/fallback_adapter.d.ts.map +1 -0
- package/dist/tts/fallback_adapter.js +448 -0
- package/dist/tts/fallback_adapter.js.map +1 -0
- package/dist/tts/index.cjs +3 -0
- package/dist/tts/index.cjs.map +1 -1
- package/dist/tts/index.d.cts +1 -0
- package/dist/tts/index.d.ts +1 -0
- package/dist/tts/index.d.ts.map +1 -1
- package/dist/tts/index.js +2 -0
- package/dist/tts/index.js.map +1 -1
- package/dist/tts/stream_adapter.cjs +25 -8
- package/dist/tts/stream_adapter.cjs.map +1 -1
- package/dist/tts/stream_adapter.d.cts +6 -3
- package/dist/tts/stream_adapter.d.ts +6 -3
- package/dist/tts/stream_adapter.d.ts.map +1 -1
- package/dist/tts/stream_adapter.js +25 -8
- package/dist/tts/stream_adapter.js.map +1 -1
- package/dist/tts/tts.cjs +189 -57
- package/dist/tts/tts.cjs.map +1 -1
- package/dist/tts/tts.d.cts +58 -6
- package/dist/tts/tts.d.ts +58 -6
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +191 -59
- package/dist/tts/tts.js.map +1 -1
- package/dist/typed_promise.cjs +48 -0
- package/dist/typed_promise.cjs.map +1 -0
- package/dist/typed_promise.d.cts +24 -0
- package/dist/typed_promise.d.ts +24 -0
- package/dist/typed_promise.d.ts.map +1 -0
- package/dist/typed_promise.js +28 -0
- package/dist/typed_promise.js.map +1 -0
- package/dist/types.cjs +24 -32
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +45 -10
- package/dist/types.d.ts +45 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -30
- package/dist/types.js.map +1 -1
- package/dist/utils.cjs +124 -28
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +41 -1
- package/dist/utils.d.ts +41 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +119 -27
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.cjs +73 -1
- package/dist/utils.test.cjs.map +1 -1
- package/dist/utils.test.js +74 -10
- package/dist/utils.test.js.map +1 -1
- package/dist/vad.cjs +35 -15
- package/dist/vad.cjs.map +1 -1
- package/dist/vad.d.cts +15 -5
- package/dist/vad.d.ts +15 -5
- package/dist/vad.d.ts.map +1 -1
- package/dist/vad.js +35 -15
- package/dist/vad.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/agent.cjs +258 -35
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +54 -13
- package/dist/voice/agent.d.ts +54 -13
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +254 -34
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent.test.cjs +314 -0
- package/dist/voice/agent.test.cjs.map +1 -1
- package/dist/voice/agent.test.js +316 -2
- package/dist/voice/agent.test.js.map +1 -1
- package/dist/voice/agent_activity.cjs +1116 -385
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +72 -11
- package/dist/voice/agent_activity.d.ts +72 -11
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +1119 -383
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_activity.test.cjs +135 -0
- package/dist/voice/agent_activity.test.cjs.map +1 -0
- package/dist/voice/agent_activity.test.js +134 -0
- package/dist/voice/agent_activity.test.js.map +1 -0
- package/dist/voice/agent_session.cjs +550 -90
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +185 -25
- package/dist/voice/agent_session.d.ts +185 -25
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +556 -91
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/audio_recognition.cjs +605 -46
- package/dist/voice/audio_recognition.cjs.map +1 -1
- package/dist/voice/audio_recognition.d.cts +96 -4
- package/dist/voice/audio_recognition.d.ts +96 -4
- package/dist/voice/audio_recognition.d.ts.map +1 -1
- package/dist/voice/audio_recognition.js +611 -47
- package/dist/voice/audio_recognition.js.map +1 -1
- package/dist/voice/audio_recognition_span.test.cjs +295 -0
- package/dist/voice/audio_recognition_span.test.cjs.map +1 -0
- package/dist/voice/audio_recognition_span.test.js +299 -0
- package/dist/voice/audio_recognition_span.test.js.map +1 -0
- package/dist/voice/avatar/datastream_io.cjs +7 -1
- package/dist/voice/avatar/datastream_io.cjs.map +1 -1
- package/dist/voice/avatar/datastream_io.d.cts +1 -0
- package/dist/voice/avatar/datastream_io.d.ts +1 -0
- package/dist/voice/avatar/datastream_io.d.ts.map +1 -1
- package/dist/voice/avatar/datastream_io.js +7 -1
- package/dist/voice/avatar/datastream_io.js.map +1 -1
- package/dist/voice/background_audio.cjs +367 -0
- package/dist/voice/background_audio.cjs.map +1 -0
- package/dist/voice/background_audio.d.cts +123 -0
- package/dist/voice/background_audio.d.ts +123 -0
- package/dist/voice/background_audio.d.ts.map +1 -0
- package/dist/voice/background_audio.js +343 -0
- package/dist/voice/background_audio.js.map +1 -0
- package/dist/voice/events.cjs +3 -0
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +16 -9
- package/dist/voice/events.d.ts +16 -9
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js +3 -0
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/generation.cjs +205 -41
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.cts +21 -5
- package/dist/voice/generation.d.ts +21 -5
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +215 -43
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/generation_tools.test.cjs +236 -0
- package/dist/voice/generation_tools.test.cjs.map +1 -0
- package/dist/voice/generation_tools.test.js +235 -0
- package/dist/voice/generation_tools.test.js.map +1 -0
- package/dist/voice/index.cjs +33 -2
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +8 -2
- package/dist/voice/index.d.ts +8 -2
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +19 -2
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/interruption_detection.test.cjs +114 -0
- package/dist/voice/interruption_detection.test.cjs.map +1 -0
- package/dist/voice/interruption_detection.test.js +113 -0
- package/dist/voice/interruption_detection.test.js.map +1 -0
- package/dist/voice/io.cjs +66 -6
- package/dist/voice/io.cjs.map +1 -1
- package/dist/voice/io.d.cts +67 -7
- package/dist/voice/io.d.ts +67 -7
- package/dist/voice/io.d.ts.map +1 -1
- package/dist/voice/io.js +62 -5
- package/dist/voice/io.js.map +1 -1
- package/dist/voice/recorder_io/index.cjs +23 -0
- package/dist/voice/recorder_io/index.cjs.map +1 -0
- package/dist/voice/recorder_io/index.d.cts +2 -0
- package/dist/voice/recorder_io/index.d.ts +2 -0
- package/dist/voice/recorder_io/index.d.ts.map +1 -0
- package/dist/voice/recorder_io/index.js +2 -0
- package/dist/voice/recorder_io/index.js.map +1 -0
- package/dist/voice/recorder_io/recorder_io.cjs +607 -0
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
- package/dist/voice/recorder_io/recorder_io.d.cts +106 -0
- package/dist/voice/recorder_io/recorder_io.d.ts +106 -0
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
- package/dist/voice/recorder_io/recorder_io.js +573 -0
- package/dist/voice/recorder_io/recorder_io.js.map +1 -0
- package/dist/voice/remote_session.cjs +922 -0
- package/dist/voice/remote_session.cjs.map +1 -0
- package/dist/voice/remote_session.d.cts +108 -0
- package/dist/voice/remote_session.d.ts +108 -0
- package/dist/voice/remote_session.d.ts.map +1 -0
- package/dist/voice/remote_session.js +887 -0
- package/dist/voice/remote_session.js.map +1 -0
- package/dist/voice/report.cjs +88 -0
- package/dist/voice/report.cjs.map +1 -0
- package/dist/voice/report.d.cts +49 -0
- package/dist/voice/report.d.ts +49 -0
- package/dist/voice/report.d.ts.map +1 -0
- package/dist/voice/report.js +63 -0
- package/dist/voice/report.js.map +1 -0
- package/dist/voice/report.test.cjs +121 -0
- package/dist/voice/report.test.cjs.map +1 -0
- package/dist/voice/report.test.js +120 -0
- package/dist/voice/report.test.js.map +1 -0
- package/dist/voice/room_io/_input.cjs +40 -7
- package/dist/voice/room_io/_input.cjs.map +1 -1
- package/dist/voice/room_io/_input.d.cts +5 -2
- package/dist/voice/room_io/_input.d.ts +5 -2
- package/dist/voice/room_io/_input.d.ts.map +1 -1
- package/dist/voice/room_io/_input.js +41 -8
- package/dist/voice/room_io/_input.js.map +1 -1
- package/dist/voice/room_io/_output.cjs +19 -11
- package/dist/voice/room_io/_output.cjs.map +1 -1
- package/dist/voice/room_io/_output.d.cts +7 -4
- package/dist/voice/room_io/_output.d.ts +7 -4
- package/dist/voice/room_io/_output.d.ts.map +1 -1
- package/dist/voice/room_io/_output.js +20 -12
- package/dist/voice/room_io/_output.js.map +1 -1
- package/dist/voice/room_io/room_io.cjs +33 -6
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.cts +29 -9
- package/dist/voice/room_io/room_io.d.ts +29 -9
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +33 -7
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/speech_handle.cjs +22 -4
- package/dist/voice/speech_handle.cjs.map +1 -1
- package/dist/voice/speech_handle.d.cts +17 -2
- package/dist/voice/speech_handle.d.ts +17 -2
- package/dist/voice/speech_handle.d.ts.map +1 -1
- package/dist/voice/speech_handle.js +21 -4
- package/dist/voice/speech_handle.js.map +1 -1
- package/dist/voice/testing/fake_llm.cjs +127 -0
- package/dist/voice/testing/fake_llm.cjs.map +1 -0
- package/dist/voice/testing/fake_llm.d.cts +30 -0
- package/dist/voice/testing/fake_llm.d.ts +30 -0
- package/dist/voice/testing/fake_llm.d.ts.map +1 -0
- package/dist/voice/testing/fake_llm.js +103 -0
- package/dist/voice/testing/fake_llm.js.map +1 -0
- package/dist/voice/testing/index.cjs +57 -0
- package/dist/voice/testing/index.cjs.map +1 -0
- package/dist/voice/testing/index.d.cts +21 -0
- package/dist/voice/testing/index.d.ts +21 -0
- package/dist/voice/testing/index.d.ts.map +1 -0
- package/dist/voice/testing/index.js +35 -0
- package/dist/voice/testing/index.js.map +1 -0
- package/dist/voice/testing/run_result.cjs +817 -0
- package/dist/voice/testing/run_result.cjs.map +1 -0
- package/dist/voice/testing/run_result.d.cts +385 -0
- package/dist/voice/testing/run_result.d.ts +385 -0
- package/dist/voice/testing/run_result.d.ts.map +1 -0
- package/dist/voice/testing/run_result.js +790 -0
- package/dist/voice/testing/run_result.js.map +1 -0
- package/dist/voice/testing/types.cjs +46 -0
- package/dist/voice/testing/types.cjs.map +1 -0
- package/dist/voice/testing/types.d.cts +83 -0
- package/dist/voice/testing/types.d.ts +83 -0
- package/dist/voice/testing/types.d.ts.map +1 -0
- package/dist/voice/testing/types.js +19 -0
- package/dist/voice/testing/types.js.map +1 -0
- package/dist/voice/transcription/synchronizer.cjs +139 -15
- package/dist/voice/transcription/synchronizer.cjs.map +1 -1
- package/dist/voice/transcription/synchronizer.d.cts +35 -4
- package/dist/voice/transcription/synchronizer.d.ts +35 -4
- package/dist/voice/transcription/synchronizer.d.ts.map +1 -1
- package/dist/voice/transcription/synchronizer.js +143 -16
- package/dist/voice/transcription/synchronizer.js.map +1 -1
- package/dist/voice/transcription/synchronizer.test.cjs +151 -0
- package/dist/voice/transcription/synchronizer.test.cjs.map +1 -0
- package/dist/voice/transcription/synchronizer.test.js +150 -0
- package/dist/voice/transcription/synchronizer.test.js.map +1 -0
- package/dist/voice/turn_config/endpointing.cjs +33 -0
- package/dist/voice/turn_config/endpointing.cjs.map +1 -0
- package/dist/voice/turn_config/endpointing.d.cts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts +30 -0
- package/dist/voice/turn_config/endpointing.d.ts.map +1 -0
- package/dist/voice/turn_config/endpointing.js +9 -0
- package/dist/voice/turn_config/endpointing.js.map +1 -0
- package/dist/voice/turn_config/interruption.cjs +37 -0
- package/dist/voice/turn_config/interruption.cjs.map +1 -0
- package/dist/voice/turn_config/interruption.d.cts +53 -0
- package/dist/voice/turn_config/interruption.d.ts +53 -0
- package/dist/voice/turn_config/interruption.d.ts.map +1 -0
- package/dist/voice/turn_config/interruption.js +13 -0
- package/dist/voice/turn_config/interruption.js.map +1 -0
- package/dist/voice/turn_config/turn_handling.cjs +35 -0
- package/dist/voice/turn_config/turn_handling.cjs.map +1 -0
- package/dist/voice/turn_config/turn_handling.d.cts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts +36 -0
- package/dist/voice/turn_config/turn_handling.d.ts.map +1 -0
- package/dist/voice/turn_config/turn_handling.js +11 -0
- package/dist/voice/turn_config/turn_handling.js.map +1 -0
- package/dist/voice/turn_config/utils.cjs +157 -0
- package/dist/voice/turn_config/utils.cjs.map +1 -0
- package/dist/voice/turn_config/utils.d.cts +37 -0
- package/dist/voice/turn_config/utils.d.ts +37 -0
- package/dist/voice/turn_config/utils.d.ts.map +1 -0
- package/dist/voice/turn_config/utils.js +131 -0
- package/dist/voice/turn_config/utils.js.map +1 -0
- package/dist/voice/turn_config/utils.test.cjs +128 -0
- package/dist/voice/turn_config/utils.test.cjs.map +1 -0
- package/dist/voice/turn_config/utils.test.js +127 -0
- package/dist/voice/turn_config/utils.test.js.map +1 -0
- package/dist/voice/utils.cjs +47 -0
- package/dist/voice/utils.cjs.map +1 -0
- package/dist/voice/utils.d.cts +4 -0
- package/dist/voice/utils.d.ts +4 -0
- package/dist/voice/utils.d.ts.map +1 -0
- package/dist/voice/utils.js +23 -0
- package/dist/voice/utils.js.map +1 -0
- package/dist/worker.cjs +44 -52
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +18 -8
- package/dist/worker.d.ts +18 -8
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +43 -43
- package/dist/worker.js.map +1 -1
- package/package.json +35 -13
- package/resources/NOTICE +2 -0
- package/resources/keyboard-typing.ogg +0 -0
- package/resources/keyboard-typing2.ogg +0 -0
- package/resources/office-ambience.ogg +0 -0
- package/src/_exceptions.ts +5 -0
- package/src/audio.ts +132 -1
- package/src/beta/index.ts +9 -0
- package/src/beta/workflows/index.ts +9 -0
- package/src/beta/workflows/task_group.ts +203 -0
- package/src/cli.ts +57 -66
- package/src/connection_pool.test.ts +346 -0
- package/src/connection_pool.ts +307 -0
- package/src/constants.ts +14 -0
- package/src/cpu.test.ts +239 -0
- package/src/cpu.ts +173 -0
- package/src/http_server.ts +18 -6
- package/src/index.ts +15 -13
- package/src/inference/api_protos.ts +85 -2
- package/src/inference/index.ts +32 -4
- package/src/inference/interruption/defaults.ts +51 -0
- package/src/inference/interruption/errors.ts +25 -0
- package/src/inference/interruption/http_transport.ts +207 -0
- package/src/inference/interruption/interruption_cache_entry.ts +50 -0
- package/src/inference/interruption/interruption_detector.ts +204 -0
- package/src/inference/interruption/interruption_stream.ts +467 -0
- package/src/inference/interruption/types.ts +84 -0
- package/src/inference/interruption/utils.test.ts +132 -0
- package/src/inference/interruption/utils.ts +137 -0
- package/src/inference/interruption/ws_transport.ts +416 -0
- package/src/inference/llm.ts +214 -163
- package/src/inference/stt.test.ts +253 -0
- package/src/inference/stt.ts +449 -208
- package/src/inference/tts.test.ts +354 -0
- package/src/inference/tts.ts +417 -115
- package/src/inference/utils.ts +30 -2
- package/src/ipc/inference_proc_executor.ts +11 -3
- package/src/ipc/inference_proc_lazy_main.ts +13 -1
- package/src/ipc/job_proc_executor.ts +11 -1
- package/src/ipc/job_proc_lazy_main.ts +86 -20
- package/src/ipc/supervised_proc.test.ts +153 -0
- package/src/ipc/supervised_proc.ts +39 -10
- package/src/job.ts +120 -1
- package/src/language.test.ts +62 -0
- package/src/language.ts +380 -0
- package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
- package/src/llm/chat_context.test.ts +787 -0
- package/src/llm/chat_context.ts +493 -2
- package/src/llm/fallback_adapter.test.ts +238 -0
- package/src/llm/fallback_adapter.ts +394 -0
- package/src/llm/index.ts +13 -0
- package/src/llm/llm.ts +77 -12
- package/src/llm/provider_format/google.test.ts +72 -1
- package/src/llm/provider_format/google.ts +10 -6
- package/src/llm/provider_format/index.ts +7 -2
- package/src/llm/provider_format/openai.test.ts +480 -2
- package/src/llm/provider_format/openai.ts +152 -21
- package/src/llm/provider_format/utils.ts +11 -5
- package/src/llm/realtime.ts +23 -2
- package/src/llm/remote_chat_context.ts +2 -2
- package/src/llm/tool_context.test.ts +210 -1
- package/src/llm/tool_context.ts +115 -17
- package/src/llm/utils.test.ts +103 -2
- package/src/llm/utils.ts +152 -16
- package/src/llm/zod-utils.test.ts +577 -0
- package/src/llm/zod-utils.ts +153 -0
- package/src/log.ts +71 -19
- package/src/metrics/base.ts +78 -19
- package/src/metrics/index.ts +12 -0
- package/src/metrics/model_usage.test.ts +545 -0
- package/src/metrics/model_usage.ts +262 -0
- package/src/metrics/usage_collector.ts +14 -3
- package/src/metrics/utils.ts +27 -7
- package/src/stream/deferred_stream.test.ts +3 -3
- package/src/stream/deferred_stream.ts +43 -11
- package/src/stream/index.ts +1 -0
- package/src/stream/multi_input_stream.test.ts +545 -0
- package/src/stream/multi_input_stream.ts +172 -0
- package/src/stream/stream_channel.test.ts +37 -0
- package/src/stream/stream_channel.ts +43 -3
- package/src/stt/stream_adapter.ts +30 -9
- package/src/stt/stt.ts +140 -23
- package/src/telemetry/index.ts +28 -0
- package/src/telemetry/logging.ts +55 -0
- package/src/telemetry/otel_http_exporter.ts +218 -0
- package/src/telemetry/pino_otel_transport.ts +265 -0
- package/src/telemetry/trace_types.ts +109 -0
- package/src/telemetry/traces.ts +673 -0
- package/src/telemetry/utils.ts +61 -0
- package/src/tokenize/basic/sentence.ts +3 -3
- package/src/tokenize/tokenizer.test.ts +4 -0
- package/src/transcription.ts +6 -0
- package/src/tts/fallback_adapter.ts +586 -0
- package/src/tts/index.ts +1 -0
- package/src/tts/stream_adapter.ts +38 -8
- package/src/tts/tts.ts +245 -62
- package/src/typed_promise.ts +67 -0
- package/src/types.ts +62 -33
- package/src/utils.test.ts +90 -10
- package/src/utils.ts +178 -33
- package/src/vad.ts +42 -18
- package/src/version.ts +1 -1
- package/src/voice/agent.test.ts +347 -2
- package/src/voice/agent.ts +346 -44
- package/src/voice/agent_activity.test.ts +194 -0
- package/src/voice/agent_activity.ts +1457 -388
- package/src/voice/agent_session.ts +817 -112
- package/src/voice/audio_recognition.ts +845 -70
- package/src/voice/audio_recognition_span.test.ts +341 -0
- package/src/voice/avatar/datastream_io.ts +9 -1
- package/src/voice/background_audio.ts +494 -0
- package/src/voice/events.ts +27 -7
- package/src/voice/generation.ts +310 -56
- package/src/voice/generation_tools.test.ts +268 -0
- package/src/voice/index.ts +17 -3
- package/src/voice/interruption_detection.test.ts +151 -0
- package/src/voice/io.ts +115 -12
- package/src/voice/recorder_io/index.ts +4 -0
- package/src/voice/recorder_io/recorder_io.ts +783 -0
- package/src/voice/remote_session.ts +1083 -0
- package/src/voice/report.test.ts +136 -0
- package/src/voice/report.ts +140 -0
- package/src/voice/room_io/_input.ts +45 -10
- package/src/voice/room_io/_output.ts +26 -14
- package/src/voice/room_io/room_io.ts +67 -22
- package/src/voice/speech_handle.ts +38 -6
- package/src/voice/testing/fake_llm.ts +138 -0
- package/src/voice/testing/index.ts +52 -0
- package/src/voice/testing/run_result.ts +995 -0
- package/src/voice/testing/types.ts +118 -0
- package/src/voice/transcription/synchronizer.test.ts +206 -0
- package/src/voice/transcription/synchronizer.ts +204 -19
- package/src/voice/turn_config/endpointing.ts +33 -0
- package/src/voice/turn_config/interruption.ts +56 -0
- package/src/voice/turn_config/turn_handling.ts +45 -0
- package/src/voice/turn_config/utils.test.ts +148 -0
- package/src/voice/turn_config/utils.ts +167 -0
- package/src/voice/utils.ts +29 -0
- package/src/worker.ts +92 -78
- package/src/llm/__snapshots__/utils.test.ts.snap +0 -65
package/dist/_exceptions.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_exceptions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Raised when accepting a job but not receiving an assignment within the specified timeout.\n * The server may have chosen another worker to handle this job.\n */\nexport class AssignmentTimeoutError extends Error {\n constructor(message = 'Assignment timeout occurred') {\n super(message);\n this.name = 'AssignmentTimeoutError';\n Error.captureStackTrace(this, AssignmentTimeoutError);\n }\n}\n\n/**\n * Interface for API error options\n */\ninterface APIErrorOptions {\n body?: object | null;\n retryable?: boolean;\n}\n\nconst API_ERROR_SYMBOL = Symbol('APIError');\n\n/**\n * Raised when an API request failed.\n * This is used on our TTS/STT/LLM plugins.\n */\nexport class APIError extends Error {\n readonly body: object | null;\n readonly retryable: boolean;\n\n constructor(message: string, { body = null, retryable = true }: APIErrorOptions = {}) {\n super(message);\n this.name = 'APIError';\n\n this.body = body;\n this.retryable = retryable;\n Error.captureStackTrace(this, APIError);\n Object.defineProperty(this, API_ERROR_SYMBOL, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n\n toString(): string {\n return `${this.message} (body=${JSON.stringify(this.body)}, retryable=${this.retryable})`;\n }\n}\n\n/**\n * Interface for API status error options\n */\ninterface APIStatusErrorOptions extends APIErrorOptions {\n statusCode?: number;\n requestId?: string | null;\n}\n\n/**\n * Raised when an API response has a status code of 4xx or 5xx.\n */\nexport class APIStatusError extends APIError {\n readonly statusCode: number;\n readonly requestId: string | null;\n\n constructor({\n message = 'API error.',\n options = {},\n }: {\n message?: string;\n options?: APIStatusErrorOptions;\n }) {\n const statusCode = options.statusCode ?? -1;\n // 4xx errors are not retryable\n const isRetryable = options.retryable ?? !(statusCode >= 400 && statusCode < 500);\n\n super(message, { body: options.body, retryable: isRetryable });\n this.name = 'APIStatusError';\n\n this.statusCode = statusCode;\n this.requestId = options.requestId ?? null;\n Error.captureStackTrace(this, APIStatusError);\n }\n\n toString(): string {\n return (\n `${this.message} ` +\n `(statusCode=${this.statusCode}, ` +\n `requestId=${this.requestId}, ` +\n `body=${JSON.stringify(this.body)}, ` +\n `retryable=${this.retryable})`\n );\n }\n}\n\n/**\n * Raised when an API request failed due to a connection error.\n */\nexport class APIConnectionError extends APIError {\n constructor({\n message = 'Connection error.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n super(message, { body: null, retryable: options.retryable ?? true });\n this.name = 'APIConnectionError';\n Error.captureStackTrace(this, APIConnectionError);\n }\n}\n\n/**\n * Raised when an API request timed out.\n */\nexport class APITimeoutError extends APIConnectionError {\n constructor({\n message = 'Request timed out.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n const retryable = options?.retryable ?? true;\n\n super({ message, options: { retryable } });\n this.name = 'APITimeoutError';\n Error.captureStackTrace(this, APITimeoutError);\n }\n}\n\nexport function isAPIError(error: unknown): error is APIError {\n return error !== null && typeof error === 'object' && API_ERROR_SYMBOL in error;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../src/_exceptions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n// FIXME(@livekit/agents): Consider migrating error signaling away from Error subclasses\n// toward an AbortSignal-based pattern for cancellation/error propagation. Error subclasses\n// work well for synchronous throw/catch, but AbortSignal integrates better with async\n// streams, fetch, and the broader Web API ecosystem.\n\n/**\n * Raised when accepting a job but not receiving an assignment within the specified timeout.\n * The server may have chosen another worker to handle this job.\n */\nexport class AssignmentTimeoutError extends Error {\n constructor(message = 'Assignment timeout occurred') {\n super(message);\n this.name = 'AssignmentTimeoutError';\n Error.captureStackTrace(this, AssignmentTimeoutError);\n }\n}\n\n/**\n * Interface for API error options\n */\ninterface APIErrorOptions {\n body?: object | null;\n retryable?: boolean;\n}\n\nconst API_ERROR_SYMBOL = Symbol('APIError');\n\n/**\n * Raised when an API request failed.\n * This is used on our TTS/STT/LLM plugins.\n */\nexport class APIError extends Error {\n readonly body: object | null;\n readonly retryable: boolean;\n\n constructor(message: string, { body = null, retryable = true }: APIErrorOptions = {}) {\n super(message);\n this.name = 'APIError';\n\n this.body = body;\n this.retryable = retryable;\n Error.captureStackTrace(this, APIError);\n Object.defineProperty(this, API_ERROR_SYMBOL, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n\n toString(): string {\n return `${this.message} (body=${JSON.stringify(this.body)}, retryable=${this.retryable})`;\n }\n}\n\n/**\n * Interface for API status error options\n */\ninterface APIStatusErrorOptions extends APIErrorOptions {\n statusCode?: number;\n requestId?: string | null;\n}\n\n/**\n * Raised when an API response has a status code of 4xx or 5xx.\n */\nexport class APIStatusError extends APIError {\n readonly statusCode: number;\n readonly requestId: string | null;\n\n constructor({\n message = 'API error.',\n options = {},\n }: {\n message?: string;\n options?: APIStatusErrorOptions;\n }) {\n const statusCode = options.statusCode ?? -1;\n // 4xx errors are not retryable\n const isRetryable = options.retryable ?? !(statusCode >= 400 && statusCode < 500);\n\n super(message, { body: options.body, retryable: isRetryable });\n this.name = 'APIStatusError';\n\n this.statusCode = statusCode;\n this.requestId = options.requestId ?? null;\n Error.captureStackTrace(this, APIStatusError);\n }\n\n toString(): string {\n return (\n `${this.message} ` +\n `(statusCode=${this.statusCode}, ` +\n `requestId=${this.requestId}, ` +\n `body=${JSON.stringify(this.body)}, ` +\n `retryable=${this.retryable})`\n );\n }\n}\n\n/**\n * Raised when an API request failed due to a connection error.\n */\nexport class APIConnectionError extends APIError {\n constructor({\n message = 'Connection error.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n super(message, { body: null, retryable: options.retryable ?? true });\n this.name = 'APIConnectionError';\n Error.captureStackTrace(this, APIConnectionError);\n }\n}\n\n/**\n * Raised when an API request timed out.\n */\nexport class APITimeoutError extends APIConnectionError {\n constructor({\n message = 'Request timed out.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n const retryable = options?.retryable ?? true;\n\n super({ message, options: { retryable } });\n this.name = 'APITimeoutError';\n Error.captureStackTrace(this, APITimeoutError);\n }\n}\n\nexport function isAPIError(error: unknown): error is APIError {\n return error !== null && typeof error === 'object' && API_ERROR_SYMBOL in error;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,MAAM,+BAA+B,MAAM;AAAA,EAChD,YAAY,UAAU,+BAA+B;AACnD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,sBAAsB;AAAA,EACtD;AACF;AAUA,MAAM,mBAAmB,OAAO,UAAU;AAMnC,MAAM,iBAAiB,MAAM;AAAA,EACzB;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,EAAE,OAAO,MAAM,YAAY,KAAK,IAAqB,CAAC,GAAG;AACpF,UAAM,OAAO;AACb,SAAK,OAAO;AAEZ,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,UAAM,kBAAkB,MAAM,QAAQ;AACtC,WAAO,eAAe,MAAM,kBAAkB;AAAA,MAC5C,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,WAAmB;AACjB,WAAO,GAAG,KAAK,OAAO,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC,eAAe,KAAK,SAAS;AAAA,EACxF;AACF;AAaO,MAAM,uBAAuB,SAAS;AAAA,EAClC;AAAA,EACA;AAAA,EAET,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,aAAa,QAAQ,cAAc;AAEzC,UAAM,cAAc,QAAQ,aAAa,EAAE,cAAc,OAAO,aAAa;AAE7E,UAAM,SAAS,EAAE,MAAM,QAAQ,MAAM,WAAW,YAAY,CAAC;AAC7D,SAAK,OAAO;AAEZ,SAAK,aAAa;AAClB,SAAK,YAAY,QAAQ,aAAa;AACtC,UAAM,kBAAkB,MAAM,cAAc;AAAA,EAC9C;AAAA,EAEA,WAAmB;AACjB,WACE,GAAG,KAAK,OAAO,gBACA,KAAK,UAAU,eACjB,KAAK,SAAS,UACnB,KAAK,UAAU,KAAK,IAAI,CAAC,eACpB,KAAK,SAAS;AAAA,EAE/B;AACF;AAKO,MAAM,2BAA2B,SAAS;AAAA,EAC/C,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,SAAS,EAAE,MAAM,MAAM,WAAW,QAAQ,aAAa,KAAK,CAAC;AACnE,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,kBAAkB;AAAA,EAClD;AACF;AAKO,MAAM,wBAAwB,mBAAmB;AAAA,EACtD,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,aAAY,mCAAS,cAAa;AAExC,UAAM,EAAE,SAAS,SAAS,EAAE,UAAU,EAAE,CAAC;AACzC,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,eAAe;AAAA,EAC/C;AACF;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,oBAAoB;AAC5E;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_exceptions.d.ts","sourceRoot":"","sources":["../src/_exceptions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_exceptions.d.ts","sourceRoot":"","sources":["../src/_exceptions.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,SAAgC;CAKpD;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,EAAE,IAAW,EAAE,SAAgB,EAAE,GAAE,eAAoB;IAepF,QAAQ,IAAI,MAAM;CAGnB;AAED;;GAEG;AACH,UAAU,qBAAsB,SAAQ,eAAe;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEtB,EACV,OAAsB,EACtB,OAAY,GACb,EAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,qBAAqB,CAAC;KACjC;IAaD,QAAQ,IAAI,MAAM;CASnB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,EACV,OAA6B,EAC7B,OAAY,GACb,EAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,eAAe,CAAC;KAC3B;CAKF;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,EACV,OAA8B,EAC9B,OAAY,GACb,EAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,eAAe,CAAC;KAC3B;CAOF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D"}
|
package/dist/_exceptions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_exceptions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Raised when accepting a job but not receiving an assignment within the specified timeout.\n * The server may have chosen another worker to handle this job.\n */\nexport class AssignmentTimeoutError extends Error {\n constructor(message = 'Assignment timeout occurred') {\n super(message);\n this.name = 'AssignmentTimeoutError';\n Error.captureStackTrace(this, AssignmentTimeoutError);\n }\n}\n\n/**\n * Interface for API error options\n */\ninterface APIErrorOptions {\n body?: object | null;\n retryable?: boolean;\n}\n\nconst API_ERROR_SYMBOL = Symbol('APIError');\n\n/**\n * Raised when an API request failed.\n * This is used on our TTS/STT/LLM plugins.\n */\nexport class APIError extends Error {\n readonly body: object | null;\n readonly retryable: boolean;\n\n constructor(message: string, { body = null, retryable = true }: APIErrorOptions = {}) {\n super(message);\n this.name = 'APIError';\n\n this.body = body;\n this.retryable = retryable;\n Error.captureStackTrace(this, APIError);\n Object.defineProperty(this, API_ERROR_SYMBOL, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n\n toString(): string {\n return `${this.message} (body=${JSON.stringify(this.body)}, retryable=${this.retryable})`;\n }\n}\n\n/**\n * Interface for API status error options\n */\ninterface APIStatusErrorOptions extends APIErrorOptions {\n statusCode?: number;\n requestId?: string | null;\n}\n\n/**\n * Raised when an API response has a status code of 4xx or 5xx.\n */\nexport class APIStatusError extends APIError {\n readonly statusCode: number;\n readonly requestId: string | null;\n\n constructor({\n message = 'API error.',\n options = {},\n }: {\n message?: string;\n options?: APIStatusErrorOptions;\n }) {\n const statusCode = options.statusCode ?? -1;\n // 4xx errors are not retryable\n const isRetryable = options.retryable ?? !(statusCode >= 400 && statusCode < 500);\n\n super(message, { body: options.body, retryable: isRetryable });\n this.name = 'APIStatusError';\n\n this.statusCode = statusCode;\n this.requestId = options.requestId ?? null;\n Error.captureStackTrace(this, APIStatusError);\n }\n\n toString(): string {\n return (\n `${this.message} ` +\n `(statusCode=${this.statusCode}, ` +\n `requestId=${this.requestId}, ` +\n `body=${JSON.stringify(this.body)}, ` +\n `retryable=${this.retryable})`\n );\n }\n}\n\n/**\n * Raised when an API request failed due to a connection error.\n */\nexport class APIConnectionError extends APIError {\n constructor({\n message = 'Connection error.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n super(message, { body: null, retryable: options.retryable ?? true });\n this.name = 'APIConnectionError';\n Error.captureStackTrace(this, APIConnectionError);\n }\n}\n\n/**\n * Raised when an API request timed out.\n */\nexport class APITimeoutError extends APIConnectionError {\n constructor({\n message = 'Request timed out.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n const retryable = options?.retryable ?? true;\n\n super({ message, options: { retryable } });\n this.name = 'APITimeoutError';\n Error.captureStackTrace(this, APITimeoutError);\n }\n}\n\nexport function isAPIError(error: unknown): error is APIError {\n return error !== null && typeof error === 'object' && API_ERROR_SYMBOL in error;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/_exceptions.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n// FIXME(@livekit/agents): Consider migrating error signaling away from Error subclasses\n// toward an AbortSignal-based pattern for cancellation/error propagation. Error subclasses\n// work well for synchronous throw/catch, but AbortSignal integrates better with async\n// streams, fetch, and the broader Web API ecosystem.\n\n/**\n * Raised when accepting a job but not receiving an assignment within the specified timeout.\n * The server may have chosen another worker to handle this job.\n */\nexport class AssignmentTimeoutError extends Error {\n constructor(message = 'Assignment timeout occurred') {\n super(message);\n this.name = 'AssignmentTimeoutError';\n Error.captureStackTrace(this, AssignmentTimeoutError);\n }\n}\n\n/**\n * Interface for API error options\n */\ninterface APIErrorOptions {\n body?: object | null;\n retryable?: boolean;\n}\n\nconst API_ERROR_SYMBOL = Symbol('APIError');\n\n/**\n * Raised when an API request failed.\n * This is used on our TTS/STT/LLM plugins.\n */\nexport class APIError extends Error {\n readonly body: object | null;\n readonly retryable: boolean;\n\n constructor(message: string, { body = null, retryable = true }: APIErrorOptions = {}) {\n super(message);\n this.name = 'APIError';\n\n this.body = body;\n this.retryable = retryable;\n Error.captureStackTrace(this, APIError);\n Object.defineProperty(this, API_ERROR_SYMBOL, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n\n toString(): string {\n return `${this.message} (body=${JSON.stringify(this.body)}, retryable=${this.retryable})`;\n }\n}\n\n/**\n * Interface for API status error options\n */\ninterface APIStatusErrorOptions extends APIErrorOptions {\n statusCode?: number;\n requestId?: string | null;\n}\n\n/**\n * Raised when an API response has a status code of 4xx or 5xx.\n */\nexport class APIStatusError extends APIError {\n readonly statusCode: number;\n readonly requestId: string | null;\n\n constructor({\n message = 'API error.',\n options = {},\n }: {\n message?: string;\n options?: APIStatusErrorOptions;\n }) {\n const statusCode = options.statusCode ?? -1;\n // 4xx errors are not retryable\n const isRetryable = options.retryable ?? !(statusCode >= 400 && statusCode < 500);\n\n super(message, { body: options.body, retryable: isRetryable });\n this.name = 'APIStatusError';\n\n this.statusCode = statusCode;\n this.requestId = options.requestId ?? null;\n Error.captureStackTrace(this, APIStatusError);\n }\n\n toString(): string {\n return (\n `${this.message} ` +\n `(statusCode=${this.statusCode}, ` +\n `requestId=${this.requestId}, ` +\n `body=${JSON.stringify(this.body)}, ` +\n `retryable=${this.retryable})`\n );\n }\n}\n\n/**\n * Raised when an API request failed due to a connection error.\n */\nexport class APIConnectionError extends APIError {\n constructor({\n message = 'Connection error.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n super(message, { body: null, retryable: options.retryable ?? true });\n this.name = 'APIConnectionError';\n Error.captureStackTrace(this, APIConnectionError);\n }\n}\n\n/**\n * Raised when an API request timed out.\n */\nexport class APITimeoutError extends APIConnectionError {\n constructor({\n message = 'Request timed out.',\n options = {},\n }: {\n message?: string;\n options?: APIErrorOptions;\n }) {\n const retryable = options?.retryable ?? true;\n\n super({ message, options: { retryable } });\n this.name = 'APITimeoutError';\n Error.captureStackTrace(this, APITimeoutError);\n }\n}\n\nexport function isAPIError(error: unknown): error is APIError {\n return error !== null && typeof error === 'object' && API_ERROR_SYMBOL in error;\n}\n"],"mappings":"AAYO,MAAM,+BAA+B,MAAM;AAAA,EAChD,YAAY,UAAU,+BAA+B;AACnD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,sBAAsB;AAAA,EACtD;AACF;AAUA,MAAM,mBAAmB,OAAO,UAAU;AAMnC,MAAM,iBAAiB,MAAM;AAAA,EACzB;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,EAAE,OAAO,MAAM,YAAY,KAAK,IAAqB,CAAC,GAAG;AACpF,UAAM,OAAO;AACb,SAAK,OAAO;AAEZ,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,UAAM,kBAAkB,MAAM,QAAQ;AACtC,WAAO,eAAe,MAAM,kBAAkB;AAAA,MAC5C,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,WAAmB;AACjB,WAAO,GAAG,KAAK,OAAO,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC,eAAe,KAAK,SAAS;AAAA,EACxF;AACF;AAaO,MAAM,uBAAuB,SAAS;AAAA,EAClC;AAAA,EACA;AAAA,EAET,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,aAAa,QAAQ,cAAc;AAEzC,UAAM,cAAc,QAAQ,aAAa,EAAE,cAAc,OAAO,aAAa;AAE7E,UAAM,SAAS,EAAE,MAAM,QAAQ,MAAM,WAAW,YAAY,CAAC;AAC7D,SAAK,OAAO;AAEZ,SAAK,aAAa;AAClB,SAAK,YAAY,QAAQ,aAAa;AACtC,UAAM,kBAAkB,MAAM,cAAc;AAAA,EAC9C;AAAA,EAEA,WAAmB;AACjB,WACE,GAAG,KAAK,OAAO,gBACA,KAAK,UAAU,eACjB,KAAK,SAAS,UACnB,KAAK,UAAU,KAAK,IAAI,CAAC,eACpB,KAAK,SAAS;AAAA,EAE/B;AACF;AAKO,MAAM,2BAA2B,SAAS;AAAA,EAC/C,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,SAAS,EAAE,MAAM,MAAM,WAAW,QAAQ,aAAa,KAAK,CAAC;AACnE,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,kBAAkB;AAAA,EAClD;AACF;AAKO,MAAM,wBAAwB,mBAAmB;AAAA,EACtD,YAAY;AAAA,IACV,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,EACb,GAGG;AACD,UAAM,aAAY,mCAAS,cAAa;AAExC,UAAM,EAAE,SAAS,SAAS,EAAE,UAAU,EAAE,CAAC;AACzC,SAAK,OAAO;AACZ,UAAM,kBAAkB,MAAM,eAAe;AAAA,EAC/C;AACF;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,oBAAoB;AAC5E;","names":[]}
|
package/dist/audio.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,16 +17,30 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var audio_exports = {};
|
|
20
30
|
__export(audio_exports, {
|
|
21
31
|
AudioByteStream: () => AudioByteStream,
|
|
22
|
-
|
|
32
|
+
audioFramesFromFile: () => audioFramesFromFile,
|
|
33
|
+
calculateAudioDurationSeconds: () => calculateAudioDurationSeconds,
|
|
34
|
+
loopAudioFramesFromFile: () => loopAudioFramesFromFile
|
|
23
35
|
});
|
|
24
36
|
module.exports = __toCommonJS(audio_exports);
|
|
37
|
+
var import_ffmpeg = __toESM(require("@ffmpeg-installer/ffmpeg"), 1);
|
|
25
38
|
var import_rtc_node = require("@livekit/rtc-node");
|
|
39
|
+
var import_fluent_ffmpeg = __toESM(require("fluent-ffmpeg"), 1);
|
|
26
40
|
var import_log = require("./log.cjs");
|
|
27
|
-
|
|
41
|
+
var import_stream_channel = require("./stream/stream_channel.cjs");
|
|
42
|
+
import_fluent_ffmpeg.default.setFfmpegPath(import_ffmpeg.default.path);
|
|
43
|
+
function calculateAudioDurationSeconds(frame) {
|
|
28
44
|
return Array.isArray(frame) ? frame.reduce((sum, a) => sum + a.samplesPerChannel / a.sampleRate, 0) : frame.samplesPerChannel / frame.sampleRate;
|
|
29
45
|
}
|
|
30
46
|
class AudioByteStream {
|
|
@@ -76,9 +92,79 @@ class AudioByteStream {
|
|
|
76
92
|
return frames;
|
|
77
93
|
}
|
|
78
94
|
}
|
|
95
|
+
function audioFramesFromFile(filePath, options = {}) {
|
|
96
|
+
var _a;
|
|
97
|
+
const sampleRate = options.sampleRate ?? 48e3;
|
|
98
|
+
const numChannels = options.numChannels ?? 1;
|
|
99
|
+
const audioStream = new AudioByteStream(sampleRate, numChannels);
|
|
100
|
+
const channel = (0, import_stream_channel.createStreamChannel)();
|
|
101
|
+
const logger = (0, import_log.log)();
|
|
102
|
+
const command = (0, import_fluent_ffmpeg.default)(filePath).inputOptions([
|
|
103
|
+
"-probesize",
|
|
104
|
+
"32",
|
|
105
|
+
"-analyzeduration",
|
|
106
|
+
"0",
|
|
107
|
+
"-fflags",
|
|
108
|
+
"+nobuffer+flush_packets",
|
|
109
|
+
"-flags",
|
|
110
|
+
"low_delay"
|
|
111
|
+
]).format("s16le").audioChannels(numChannels).audioFrequency(sampleRate);
|
|
112
|
+
let commandRunning = true;
|
|
113
|
+
const onClose = () => {
|
|
114
|
+
logger.debug("Audio file playback aborted");
|
|
115
|
+
channel.close();
|
|
116
|
+
if (commandRunning) {
|
|
117
|
+
commandRunning = false;
|
|
118
|
+
command.kill("SIGKILL");
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const outputStream = command.pipe();
|
|
122
|
+
(_a = options.abortSignal) == null ? void 0 : _a.addEventListener("abort", onClose, { once: true });
|
|
123
|
+
outputStream.on("data", (chunk) => {
|
|
124
|
+
const arrayBuffer = chunk.buffer.slice(
|
|
125
|
+
chunk.byteOffset,
|
|
126
|
+
chunk.byteOffset + chunk.byteLength
|
|
127
|
+
);
|
|
128
|
+
const frames = audioStream.write(arrayBuffer);
|
|
129
|
+
for (const frame of frames) {
|
|
130
|
+
channel.write(frame);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
outputStream.on("end", () => {
|
|
134
|
+
const frames = audioStream.flush();
|
|
135
|
+
for (const frame of frames) {
|
|
136
|
+
channel.write(frame);
|
|
137
|
+
}
|
|
138
|
+
commandRunning = false;
|
|
139
|
+
channel.close();
|
|
140
|
+
});
|
|
141
|
+
outputStream.on("error", (err) => {
|
|
142
|
+
logger.error(err);
|
|
143
|
+
commandRunning = false;
|
|
144
|
+
onClose();
|
|
145
|
+
});
|
|
146
|
+
return channel.stream();
|
|
147
|
+
}
|
|
148
|
+
async function* loopAudioFramesFromFile(filePath, options = {}) {
|
|
149
|
+
var _a;
|
|
150
|
+
const frames = [];
|
|
151
|
+
const logger = (0, import_log.log)();
|
|
152
|
+
for await (const frame of audioFramesFromFile(filePath, options)) {
|
|
153
|
+
frames.push(frame);
|
|
154
|
+
yield frame;
|
|
155
|
+
}
|
|
156
|
+
while (!((_a = options.abortSignal) == null ? void 0 : _a.aborted)) {
|
|
157
|
+
for (const frame of frames) {
|
|
158
|
+
yield frame;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
logger.debug("Audio file playback loop finished");
|
|
162
|
+
}
|
|
79
163
|
// Annotate the CommonJS export names for ESM import in node:
|
|
80
164
|
0 && (module.exports = {
|
|
81
165
|
AudioByteStream,
|
|
82
|
-
|
|
166
|
+
audioFramesFromFile,
|
|
167
|
+
calculateAudioDurationSeconds,
|
|
168
|
+
loopAudioFramesFromFile
|
|
83
169
|
});
|
|
84
170
|
//# sourceMappingURL=audio.cjs.map
|
package/dist/audio.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AudioFrame } from '@livekit/rtc-node';\nimport { log } from './log.js';\nimport type { AudioBuffer } from './utils.js';\n\nexport function
|
|
1
|
+
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport ffmpegInstaller from '@ffmpeg-installer/ffmpeg';\nimport { AudioFrame } from '@livekit/rtc-node';\nimport ffmpeg from 'fluent-ffmpeg';\nimport type { ReadableStream } from 'node:stream/web';\nimport { log } from './log.js';\nimport { createStreamChannel } from './stream/stream_channel.js';\nimport type { AudioBuffer } from './utils.js';\n\nffmpeg.setFfmpegPath(ffmpegInstaller.path);\n\nexport interface AudioDecodeOptions {\n sampleRate?: number;\n numChannels?: number;\n /**\n * Audio format hint (e.g., 'mp3', 'ogg', 'wav', 'opus')\n * If not provided, FFmpeg will auto-detect\n */\n format?: string;\n abortSignal?: AbortSignal;\n}\n\nexport function calculateAudioDurationSeconds(frame: AudioBuffer) {\n // TODO(AJS-102): use frame.durationMs once available in rtc-node\n return Array.isArray(frame)\n ? frame.reduce((sum, a) => sum + a.samplesPerChannel / a.sampleRate, 0)\n : frame.samplesPerChannel / frame.sampleRate;\n}\n\n/** AudioByteStream translates between LiveKit AudioFrame packets and raw byte data. */\nexport class AudioByteStream {\n #sampleRate: number;\n #numChannels: number;\n #bytesPerFrame: number;\n #buf: Int8Array;\n #logger = log();\n\n constructor(sampleRate: number, numChannels: number, samplesPerChannel: number | null = null) {\n this.#sampleRate = sampleRate;\n this.#numChannels = numChannels;\n\n if (samplesPerChannel === null) {\n samplesPerChannel = Math.floor(sampleRate / 10); // 100ms by default\n }\n\n this.#bytesPerFrame = numChannels * samplesPerChannel * 2; // 2 bytes per sample (Int16)\n this.#buf = new Int8Array();\n }\n\n write(data: ArrayBuffer): AudioFrame[] {\n this.#buf = new Int8Array([...this.#buf, ...new Int8Array(data)]);\n\n const frames: AudioFrame[] = [];\n while (this.#buf.length >= this.#bytesPerFrame) {\n const frameData = this.#buf.slice(0, this.#bytesPerFrame);\n this.#buf = this.#buf.slice(this.#bytesPerFrame);\n\n frames.push(\n new AudioFrame(\n new Int16Array(frameData.buffer),\n this.#sampleRate,\n this.#numChannels,\n frameData.length / 2,\n ),\n );\n }\n\n return frames;\n }\n\n flush(): AudioFrame[] {\n if (this.#buf.length % (2 * this.#numChannels) !== 0) {\n this.#logger.warn('AudioByteStream: incomplete frame during flush, dropping');\n return [];\n }\n\n const frames = [\n new AudioFrame(\n new Int16Array(this.#buf.buffer),\n this.#sampleRate,\n this.#numChannels,\n this.#buf.length / 2,\n ),\n ];\n\n this.#buf = new Int8Array(); // Clear buffer after flushing\n return frames;\n }\n}\n\n/**\n * Decode an audio file into AudioFrame instances\n *\n * @param filePath - Path to the audio file\n * @param options - Decoding options\n * @returns AsyncGenerator that yields AudioFrame objects\n *\n * @example\n * ```typescript\n * for await (const frame of audioFramesFromFile('audio.ogg', { sampleRate: 48000 })) {\n * console.log('Frame:', frame.samplesPerChannel, 'samples');\n * }\n * ```\n */\nexport function audioFramesFromFile(\n filePath: string,\n options: AudioDecodeOptions = {},\n): ReadableStream<AudioFrame> {\n const sampleRate = options.sampleRate ?? 48000;\n const numChannels = options.numChannels ?? 1;\n\n const audioStream = new AudioByteStream(sampleRate, numChannels);\n const channel = createStreamChannel<AudioFrame>();\n const logger = log();\n\n // TODO (Brian): decode WAV using a custom decoder instead of FFmpeg\n const command = ffmpeg(filePath)\n .inputOptions([\n '-probesize',\n '32',\n '-analyzeduration',\n '0',\n '-fflags',\n '+nobuffer+flush_packets',\n '-flags',\n 'low_delay',\n ])\n .format('s16le') // signed 16-bit little-endian PCM to be consistent cross-platform\n .audioChannels(numChannels)\n .audioFrequency(sampleRate);\n\n let commandRunning = true;\n\n const onClose = () => {\n logger.debug('Audio file playback aborted');\n\n channel.close();\n if (commandRunning) {\n commandRunning = false;\n command.kill('SIGKILL');\n }\n };\n\n const outputStream = command.pipe();\n options.abortSignal?.addEventListener('abort', onClose, { once: true });\n\n outputStream.on('data', (chunk: Buffer) => {\n const arrayBuffer = chunk.buffer.slice(\n chunk.byteOffset,\n chunk.byteOffset + chunk.byteLength,\n ) as ArrayBuffer;\n\n const frames = audioStream.write(arrayBuffer);\n for (const frame of frames) {\n channel.write(frame);\n }\n });\n\n outputStream.on('end', () => {\n const frames = audioStream.flush();\n for (const frame of frames) {\n channel.write(frame);\n }\n commandRunning = false;\n channel.close();\n });\n\n outputStream.on('error', (err: Error) => {\n logger.error(err);\n commandRunning = false;\n onClose();\n });\n\n return channel.stream();\n}\n\n/**\n * Loop audio frames from a file indefinitely\n *\n * @param filePath - Path to the audio file\n * @param options - Decoding options\n * @returns AsyncGenerator that yields AudioFrame objects in an infinite loop\n */\nexport async function* loopAudioFramesFromFile(\n filePath: string,\n options: AudioDecodeOptions = {},\n): AsyncGenerator<AudioFrame, void, unknown> {\n const frames: AudioFrame[] = [];\n const logger = log();\n\n for await (const frame of audioFramesFromFile(filePath, options)) {\n frames.push(frame);\n yield frame;\n }\n\n while (!options.abortSignal?.aborted) {\n for (const frame of frames) {\n yield frame;\n }\n }\n\n logger.debug('Audio file playback loop finished');\n}\n"],"mappings":"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","names":["ffmpeg","ffmpegInstaller"]}
|
package/dist/audio.d.cts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { AudioFrame } from '@livekit/rtc-node';
|
|
3
|
+
import type { ReadableStream } from 'node:stream/web';
|
|
2
4
|
import type { AudioBuffer } from './utils.js';
|
|
3
|
-
export
|
|
5
|
+
export interface AudioDecodeOptions {
|
|
6
|
+
sampleRate?: number;
|
|
7
|
+
numChannels?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Audio format hint (e.g., 'mp3', 'ogg', 'wav', 'opus')
|
|
10
|
+
* If not provided, FFmpeg will auto-detect
|
|
11
|
+
*/
|
|
12
|
+
format?: string;
|
|
13
|
+
abortSignal?: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
export declare function calculateAudioDurationSeconds(frame: AudioBuffer): number;
|
|
4
16
|
/** AudioByteStream translates between LiveKit AudioFrame packets and raw byte data. */
|
|
5
17
|
export declare class AudioByteStream {
|
|
6
18
|
#private;
|
|
@@ -8,4 +20,27 @@ export declare class AudioByteStream {
|
|
|
8
20
|
write(data: ArrayBuffer): AudioFrame[];
|
|
9
21
|
flush(): AudioFrame[];
|
|
10
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Decode an audio file into AudioFrame instances
|
|
25
|
+
*
|
|
26
|
+
* @param filePath - Path to the audio file
|
|
27
|
+
* @param options - Decoding options
|
|
28
|
+
* @returns AsyncGenerator that yields AudioFrame objects
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* for await (const frame of audioFramesFromFile('audio.ogg', { sampleRate: 48000 })) {
|
|
33
|
+
* console.log('Frame:', frame.samplesPerChannel, 'samples');
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function audioFramesFromFile(filePath: string, options?: AudioDecodeOptions): ReadableStream<AudioFrame>;
|
|
38
|
+
/**
|
|
39
|
+
* Loop audio frames from a file indefinitely
|
|
40
|
+
*
|
|
41
|
+
* @param filePath - Path to the audio file
|
|
42
|
+
* @param options - Decoding options
|
|
43
|
+
* @returns AsyncGenerator that yields AudioFrame objects in an infinite loop
|
|
44
|
+
*/
|
|
45
|
+
export declare function loopAudioFramesFromFile(filePath: string, options?: AudioDecodeOptions): AsyncGenerator<AudioFrame, void, unknown>;
|
|
11
46
|
//# sourceMappingURL=audio.d.ts.map
|
package/dist/audio.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
2
|
import { AudioFrame } from '@livekit/rtc-node';
|
|
3
|
+
import type { ReadableStream } from 'node:stream/web';
|
|
2
4
|
import type { AudioBuffer } from './utils.js';
|
|
3
|
-
export
|
|
5
|
+
export interface AudioDecodeOptions {
|
|
6
|
+
sampleRate?: number;
|
|
7
|
+
numChannels?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Audio format hint (e.g., 'mp3', 'ogg', 'wav', 'opus')
|
|
10
|
+
* If not provided, FFmpeg will auto-detect
|
|
11
|
+
*/
|
|
12
|
+
format?: string;
|
|
13
|
+
abortSignal?: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
export declare function calculateAudioDurationSeconds(frame: AudioBuffer): number;
|
|
4
16
|
/** AudioByteStream translates between LiveKit AudioFrame packets and raw byte data. */
|
|
5
17
|
export declare class AudioByteStream {
|
|
6
18
|
#private;
|
|
@@ -8,4 +20,27 @@ export declare class AudioByteStream {
|
|
|
8
20
|
write(data: ArrayBuffer): AudioFrame[];
|
|
9
21
|
flush(): AudioFrame[];
|
|
10
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Decode an audio file into AudioFrame instances
|
|
25
|
+
*
|
|
26
|
+
* @param filePath - Path to the audio file
|
|
27
|
+
* @param options - Decoding options
|
|
28
|
+
* @returns AsyncGenerator that yields AudioFrame objects
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* for await (const frame of audioFramesFromFile('audio.ogg', { sampleRate: 48000 })) {
|
|
33
|
+
* console.log('Frame:', frame.samplesPerChannel, 'samples');
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function audioFramesFromFile(filePath: string, options?: AudioDecodeOptions): ReadableStream<AudioFrame>;
|
|
38
|
+
/**
|
|
39
|
+
* Loop audio frames from a file indefinitely
|
|
40
|
+
*
|
|
41
|
+
* @param filePath - Path to the audio file
|
|
42
|
+
* @param options - Decoding options
|
|
43
|
+
* @returns AsyncGenerator that yields AudioFrame objects in an infinite loop
|
|
44
|
+
*/
|
|
45
|
+
export declare function loopAudioFramesFromFile(filePath: string, options?: AudioDecodeOptions): AsyncGenerator<AudioFrame, void, unknown>;
|
|
11
46
|
//# sourceMappingURL=audio.d.ts.map
|
package/dist/audio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,WAAW,UAK/D;AAED,uFAAuF;AACvF,qBAAa,eAAe;;gBAOd,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;IAY5F,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,EAAE;IAqBtC,KAAK,IAAI,UAAU,EAAE;CAkBtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,cAAc,CAAC,UAAU,CAAC,CAmE5B;AAED;;;;;;GAMG;AACH,wBAAuB,uBAAuB,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAgB3C"}
|
package/dist/audio.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import ffmpegInstaller from "@ffmpeg-installer/ffmpeg";
|
|
1
2
|
import { AudioFrame } from "@livekit/rtc-node";
|
|
3
|
+
import ffmpeg from "fluent-ffmpeg";
|
|
2
4
|
import { log } from "./log.js";
|
|
3
|
-
|
|
5
|
+
import { createStreamChannel } from "./stream/stream_channel.js";
|
|
6
|
+
ffmpeg.setFfmpegPath(ffmpegInstaller.path);
|
|
7
|
+
function calculateAudioDurationSeconds(frame) {
|
|
4
8
|
return Array.isArray(frame) ? frame.reduce((sum, a) => sum + a.samplesPerChannel / a.sampleRate, 0) : frame.samplesPerChannel / frame.sampleRate;
|
|
5
9
|
}
|
|
6
10
|
class AudioByteStream {
|
|
@@ -52,8 +56,78 @@ class AudioByteStream {
|
|
|
52
56
|
return frames;
|
|
53
57
|
}
|
|
54
58
|
}
|
|
59
|
+
function audioFramesFromFile(filePath, options = {}) {
|
|
60
|
+
var _a;
|
|
61
|
+
const sampleRate = options.sampleRate ?? 48e3;
|
|
62
|
+
const numChannels = options.numChannels ?? 1;
|
|
63
|
+
const audioStream = new AudioByteStream(sampleRate, numChannels);
|
|
64
|
+
const channel = createStreamChannel();
|
|
65
|
+
const logger = log();
|
|
66
|
+
const command = ffmpeg(filePath).inputOptions([
|
|
67
|
+
"-probesize",
|
|
68
|
+
"32",
|
|
69
|
+
"-analyzeduration",
|
|
70
|
+
"0",
|
|
71
|
+
"-fflags",
|
|
72
|
+
"+nobuffer+flush_packets",
|
|
73
|
+
"-flags",
|
|
74
|
+
"low_delay"
|
|
75
|
+
]).format("s16le").audioChannels(numChannels).audioFrequency(sampleRate);
|
|
76
|
+
let commandRunning = true;
|
|
77
|
+
const onClose = () => {
|
|
78
|
+
logger.debug("Audio file playback aborted");
|
|
79
|
+
channel.close();
|
|
80
|
+
if (commandRunning) {
|
|
81
|
+
commandRunning = false;
|
|
82
|
+
command.kill("SIGKILL");
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const outputStream = command.pipe();
|
|
86
|
+
(_a = options.abortSignal) == null ? void 0 : _a.addEventListener("abort", onClose, { once: true });
|
|
87
|
+
outputStream.on("data", (chunk) => {
|
|
88
|
+
const arrayBuffer = chunk.buffer.slice(
|
|
89
|
+
chunk.byteOffset,
|
|
90
|
+
chunk.byteOffset + chunk.byteLength
|
|
91
|
+
);
|
|
92
|
+
const frames = audioStream.write(arrayBuffer);
|
|
93
|
+
for (const frame of frames) {
|
|
94
|
+
channel.write(frame);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
outputStream.on("end", () => {
|
|
98
|
+
const frames = audioStream.flush();
|
|
99
|
+
for (const frame of frames) {
|
|
100
|
+
channel.write(frame);
|
|
101
|
+
}
|
|
102
|
+
commandRunning = false;
|
|
103
|
+
channel.close();
|
|
104
|
+
});
|
|
105
|
+
outputStream.on("error", (err) => {
|
|
106
|
+
logger.error(err);
|
|
107
|
+
commandRunning = false;
|
|
108
|
+
onClose();
|
|
109
|
+
});
|
|
110
|
+
return channel.stream();
|
|
111
|
+
}
|
|
112
|
+
async function* loopAudioFramesFromFile(filePath, options = {}) {
|
|
113
|
+
var _a;
|
|
114
|
+
const frames = [];
|
|
115
|
+
const logger = log();
|
|
116
|
+
for await (const frame of audioFramesFromFile(filePath, options)) {
|
|
117
|
+
frames.push(frame);
|
|
118
|
+
yield frame;
|
|
119
|
+
}
|
|
120
|
+
while (!((_a = options.abortSignal) == null ? void 0 : _a.aborted)) {
|
|
121
|
+
for (const frame of frames) {
|
|
122
|
+
yield frame;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
logger.debug("Audio file playback loop finished");
|
|
126
|
+
}
|
|
55
127
|
export {
|
|
56
128
|
AudioByteStream,
|
|
57
|
-
|
|
129
|
+
audioFramesFromFile,
|
|
130
|
+
calculateAudioDurationSeconds,
|
|
131
|
+
loopAudioFramesFromFile
|
|
58
132
|
};
|
|
59
133
|
//# sourceMappingURL=audio.js.map
|
package/dist/audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AudioFrame } from '@livekit/rtc-node';\nimport { log } from './log.js';\nimport type { AudioBuffer } from './utils.js';\n\nexport function
|
|
1
|
+
{"version":3,"sources":["../src/audio.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport ffmpegInstaller from '@ffmpeg-installer/ffmpeg';\nimport { AudioFrame } from '@livekit/rtc-node';\nimport ffmpeg from 'fluent-ffmpeg';\nimport type { ReadableStream } from 'node:stream/web';\nimport { log } from './log.js';\nimport { createStreamChannel } from './stream/stream_channel.js';\nimport type { AudioBuffer } from './utils.js';\n\nffmpeg.setFfmpegPath(ffmpegInstaller.path);\n\nexport interface AudioDecodeOptions {\n sampleRate?: number;\n numChannels?: number;\n /**\n * Audio format hint (e.g., 'mp3', 'ogg', 'wav', 'opus')\n * If not provided, FFmpeg will auto-detect\n */\n format?: string;\n abortSignal?: AbortSignal;\n}\n\nexport function calculateAudioDurationSeconds(frame: AudioBuffer) {\n // TODO(AJS-102): use frame.durationMs once available in rtc-node\n return Array.isArray(frame)\n ? frame.reduce((sum, a) => sum + a.samplesPerChannel / a.sampleRate, 0)\n : frame.samplesPerChannel / frame.sampleRate;\n}\n\n/** AudioByteStream translates between LiveKit AudioFrame packets and raw byte data. */\nexport class AudioByteStream {\n #sampleRate: number;\n #numChannels: number;\n #bytesPerFrame: number;\n #buf: Int8Array;\n #logger = log();\n\n constructor(sampleRate: number, numChannels: number, samplesPerChannel: number | null = null) {\n this.#sampleRate = sampleRate;\n this.#numChannels = numChannels;\n\n if (samplesPerChannel === null) {\n samplesPerChannel = Math.floor(sampleRate / 10); // 100ms by default\n }\n\n this.#bytesPerFrame = numChannels * samplesPerChannel * 2; // 2 bytes per sample (Int16)\n this.#buf = new Int8Array();\n }\n\n write(data: ArrayBuffer): AudioFrame[] {\n this.#buf = new Int8Array([...this.#buf, ...new Int8Array(data)]);\n\n const frames: AudioFrame[] = [];\n while (this.#buf.length >= this.#bytesPerFrame) {\n const frameData = this.#buf.slice(0, this.#bytesPerFrame);\n this.#buf = this.#buf.slice(this.#bytesPerFrame);\n\n frames.push(\n new AudioFrame(\n new Int16Array(frameData.buffer),\n this.#sampleRate,\n this.#numChannels,\n frameData.length / 2,\n ),\n );\n }\n\n return frames;\n }\n\n flush(): AudioFrame[] {\n if (this.#buf.length % (2 * this.#numChannels) !== 0) {\n this.#logger.warn('AudioByteStream: incomplete frame during flush, dropping');\n return [];\n }\n\n const frames = [\n new AudioFrame(\n new Int16Array(this.#buf.buffer),\n this.#sampleRate,\n this.#numChannels,\n this.#buf.length / 2,\n ),\n ];\n\n this.#buf = new Int8Array(); // Clear buffer after flushing\n return frames;\n }\n}\n\n/**\n * Decode an audio file into AudioFrame instances\n *\n * @param filePath - Path to the audio file\n * @param options - Decoding options\n * @returns AsyncGenerator that yields AudioFrame objects\n *\n * @example\n * ```typescript\n * for await (const frame of audioFramesFromFile('audio.ogg', { sampleRate: 48000 })) {\n * console.log('Frame:', frame.samplesPerChannel, 'samples');\n * }\n * ```\n */\nexport function audioFramesFromFile(\n filePath: string,\n options: AudioDecodeOptions = {},\n): ReadableStream<AudioFrame> {\n const sampleRate = options.sampleRate ?? 48000;\n const numChannels = options.numChannels ?? 1;\n\n const audioStream = new AudioByteStream(sampleRate, numChannels);\n const channel = createStreamChannel<AudioFrame>();\n const logger = log();\n\n // TODO (Brian): decode WAV using a custom decoder instead of FFmpeg\n const command = ffmpeg(filePath)\n .inputOptions([\n '-probesize',\n '32',\n '-analyzeduration',\n '0',\n '-fflags',\n '+nobuffer+flush_packets',\n '-flags',\n 'low_delay',\n ])\n .format('s16le') // signed 16-bit little-endian PCM to be consistent cross-platform\n .audioChannels(numChannels)\n .audioFrequency(sampleRate);\n\n let commandRunning = true;\n\n const onClose = () => {\n logger.debug('Audio file playback aborted');\n\n channel.close();\n if (commandRunning) {\n commandRunning = false;\n command.kill('SIGKILL');\n }\n };\n\n const outputStream = command.pipe();\n options.abortSignal?.addEventListener('abort', onClose, { once: true });\n\n outputStream.on('data', (chunk: Buffer) => {\n const arrayBuffer = chunk.buffer.slice(\n chunk.byteOffset,\n chunk.byteOffset + chunk.byteLength,\n ) as ArrayBuffer;\n\n const frames = audioStream.write(arrayBuffer);\n for (const frame of frames) {\n channel.write(frame);\n }\n });\n\n outputStream.on('end', () => {\n const frames = audioStream.flush();\n for (const frame of frames) {\n channel.write(frame);\n }\n commandRunning = false;\n channel.close();\n });\n\n outputStream.on('error', (err: Error) => {\n logger.error(err);\n commandRunning = false;\n onClose();\n });\n\n return channel.stream();\n}\n\n/**\n * Loop audio frames from a file indefinitely\n *\n * @param filePath - Path to the audio file\n * @param options - Decoding options\n * @returns AsyncGenerator that yields AudioFrame objects in an infinite loop\n */\nexport async function* loopAudioFramesFromFile(\n filePath: string,\n options: AudioDecodeOptions = {},\n): AsyncGenerator<AudioFrame, void, unknown> {\n const frames: AudioFrame[] = [];\n const logger = log();\n\n for await (const frame of audioFramesFromFile(filePath, options)) {\n frames.push(frame);\n yield frame;\n }\n\n while (!options.abortSignal?.aborted) {\n for (const frame of frames) {\n yield frame;\n }\n }\n\n logger.debug('Audio file playback loop finished');\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 beta_exports = {};
|
|
20
|
+
__export(beta_exports, {
|
|
21
|
+
TaskGroup: () => import_workflows.TaskGroup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(beta_exports);
|
|
24
|
+
var import_workflows = require("./workflows/index.cjs");
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
TaskGroup
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/beta/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './workflows/index.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAKO;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/beta/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/beta/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './workflows/index.js';\n"],"mappings":"AAGA;AAAA,EACE;AAAA,OAIK;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 workflows_exports = {};
|
|
20
|
+
__export(workflows_exports, {
|
|
21
|
+
TaskGroup: () => import_task_group.TaskGroup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(workflows_exports);
|
|
24
|
+
var import_task_group = require("./task_group.cjs");
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
TaskGroup
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './task_group.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAKO;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/beta/workflows/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/beta/workflows/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2026 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nexport {\n TaskGroup,\n type TaskCompletedEvent,\n type TaskGroupOptions,\n type TaskGroupResult,\n} from './task_group.js';\n"],"mappings":"AAGA;AAAA,EACE;AAAA,OAIK;","names":[]}
|