@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/utils.cjs
CHANGED
|
@@ -26,15 +26,19 @@ __export(utils_exports, {
|
|
|
26
26
|
Future: () => Future,
|
|
27
27
|
InvalidErrorType: () => InvalidErrorType,
|
|
28
28
|
Queue: () => Queue,
|
|
29
|
-
TASK_TIMEOUT_ERROR: () => TASK_TIMEOUT_ERROR,
|
|
30
29
|
Task: () => Task,
|
|
31
30
|
TaskResult: () => TaskResult,
|
|
32
31
|
cancelAndWait: () => cancelAndWait,
|
|
32
|
+
combineSignals: () => combineSignals,
|
|
33
33
|
createImmutableArray: () => createImmutableArray,
|
|
34
34
|
delay: () => delay,
|
|
35
35
|
gracefullyCancel: () => gracefullyCancel,
|
|
36
|
+
isCloud: () => isCloud,
|
|
37
|
+
isDevMode: () => isDevMode,
|
|
38
|
+
isHosted: () => isHosted,
|
|
36
39
|
isImmutableArray: () => isImmutableArray,
|
|
37
40
|
isPending: () => isPending,
|
|
41
|
+
isStreamClosedError: () => isStreamClosedError,
|
|
38
42
|
mergeFrames: () => mergeFrames,
|
|
39
43
|
noop: () => noop,
|
|
40
44
|
resampleStream: () => resampleStream,
|
|
@@ -49,6 +53,7 @@ __export(utils_exports, {
|
|
|
49
53
|
});
|
|
50
54
|
module.exports = __toCommonJS(utils_exports);
|
|
51
55
|
var import_rtc_node = require("@livekit/rtc-node");
|
|
56
|
+
var import_node_async_hooks = require("node:async_hooks");
|
|
52
57
|
var import_node_events = require("node:events");
|
|
53
58
|
var import_web = require("node:stream/web");
|
|
54
59
|
var import_uuid = require("uuid");
|
|
@@ -120,6 +125,9 @@ class Future {
|
|
|
120
125
|
#resolvePromise;
|
|
121
126
|
#rejectPromise;
|
|
122
127
|
#done = false;
|
|
128
|
+
#rejected = false;
|
|
129
|
+
#result = void 0;
|
|
130
|
+
#error = void 0;
|
|
123
131
|
constructor() {
|
|
124
132
|
this.#await = new Promise((resolve, reject) => {
|
|
125
133
|
this.#resolvePromise = resolve;
|
|
@@ -132,13 +140,30 @@ class Future {
|
|
|
132
140
|
get done() {
|
|
133
141
|
return this.#done;
|
|
134
142
|
}
|
|
143
|
+
get result() {
|
|
144
|
+
if (!this.#done) {
|
|
145
|
+
throw new Error("Future is not done");
|
|
146
|
+
}
|
|
147
|
+
if (this.#rejected) {
|
|
148
|
+
throw this.#error;
|
|
149
|
+
}
|
|
150
|
+
return this.#result;
|
|
151
|
+
}
|
|
152
|
+
/** Whether the future was rejected (cancelled) */
|
|
153
|
+
get rejected() {
|
|
154
|
+
return this.#rejected;
|
|
155
|
+
}
|
|
135
156
|
resolve(value) {
|
|
136
157
|
this.#done = true;
|
|
158
|
+
this.#result = value;
|
|
137
159
|
this.#resolvePromise(value);
|
|
138
160
|
}
|
|
139
161
|
reject(error) {
|
|
140
162
|
this.#done = true;
|
|
163
|
+
this.#rejected = true;
|
|
164
|
+
this.#error = error;
|
|
141
165
|
this.#rejectPromise(error);
|
|
166
|
+
void this.#await.catch(() => void 0);
|
|
142
167
|
}
|
|
143
168
|
}
|
|
144
169
|
class Event {
|
|
@@ -317,7 +342,6 @@ class AudioEnergyFilter {
|
|
|
317
342
|
return false;
|
|
318
343
|
}
|
|
319
344
|
}
|
|
320
|
-
const TASK_TIMEOUT_ERROR = new Error("Task cancellation timed out");
|
|
321
345
|
var TaskResult = /* @__PURE__ */ ((TaskResult2) => {
|
|
322
346
|
TaskResult2["Timeout"] = "timeout";
|
|
323
347
|
TaskResult2["Completed"] = "completed";
|
|
@@ -330,9 +354,24 @@ class Task {
|
|
|
330
354
|
this.controller = controller;
|
|
331
355
|
this.name = name;
|
|
332
356
|
this.resultFuture = new Future();
|
|
357
|
+
void this.resultFuture.await.then(
|
|
358
|
+
() => void 0,
|
|
359
|
+
() => void 0
|
|
360
|
+
).finally(() => {
|
|
361
|
+
for (const callback of this.doneCallbacks) {
|
|
362
|
+
try {
|
|
363
|
+
callback();
|
|
364
|
+
} catch (error) {
|
|
365
|
+
this.#logger.error({ error }, "Task done callback failed");
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
this.doneCallbacks.clear();
|
|
369
|
+
});
|
|
333
370
|
this.runTask();
|
|
334
371
|
}
|
|
372
|
+
static currentTaskStorage = new import_node_async_hooks.AsyncLocalStorage();
|
|
335
373
|
resultFuture;
|
|
374
|
+
doneCallbacks = /* @__PURE__ */ new Set();
|
|
336
375
|
#logger = (0, import_log.log)();
|
|
337
376
|
/**
|
|
338
377
|
* Creates a new task from a function.
|
|
@@ -345,6 +384,12 @@ class Task {
|
|
|
345
384
|
const abortController = controller ?? new AbortController();
|
|
346
385
|
return new Task(fn, abortController, name);
|
|
347
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Returns the currently running task in this async context, if available.
|
|
389
|
+
*/
|
|
390
|
+
static current() {
|
|
391
|
+
return Task.currentTaskStorage.getStore();
|
|
392
|
+
}
|
|
348
393
|
async runTask() {
|
|
349
394
|
const run = async () => {
|
|
350
395
|
if (this.name) {
|
|
@@ -352,7 +397,7 @@ class Task {
|
|
|
352
397
|
}
|
|
353
398
|
return await this.fn(this.controller);
|
|
354
399
|
};
|
|
355
|
-
return run().then((value) => {
|
|
400
|
+
return Task.currentTaskStorage.run(this, run).then((value) => {
|
|
356
401
|
this.resultFuture.resolve(value);
|
|
357
402
|
return value;
|
|
358
403
|
}).catch((error) => {
|
|
@@ -377,26 +422,22 @@ class Task {
|
|
|
377
422
|
*/
|
|
378
423
|
async cancelAndWait(timeout) {
|
|
379
424
|
this.cancel();
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
throw TASK_TIMEOUT_ERROR;
|
|
395
|
-
}
|
|
396
|
-
return result;
|
|
397
|
-
} catch (error) {
|
|
398
|
-
throw error;
|
|
425
|
+
const promises = [
|
|
426
|
+
this.result.then(() => "completed" /* Completed */).catch((error) => {
|
|
427
|
+
if (error.name === "AbortError") {
|
|
428
|
+
return "aborted" /* Aborted */;
|
|
429
|
+
}
|
|
430
|
+
throw error;
|
|
431
|
+
})
|
|
432
|
+
];
|
|
433
|
+
if (timeout) {
|
|
434
|
+
promises.push(delay(timeout).then(() => "timeout" /* Timeout */));
|
|
435
|
+
}
|
|
436
|
+
const result = await Promise.race(promises);
|
|
437
|
+
if (result === "timeout" /* Timeout */) {
|
|
438
|
+
throw new Error("Task cancellation timed out");
|
|
399
439
|
}
|
|
440
|
+
return result;
|
|
400
441
|
}
|
|
401
442
|
/**
|
|
402
443
|
* The result of the task.
|
|
@@ -411,7 +452,14 @@ class Task {
|
|
|
411
452
|
return this.resultFuture.done;
|
|
412
453
|
}
|
|
413
454
|
addDoneCallback(callback) {
|
|
414
|
-
this.
|
|
455
|
+
if (this.done) {
|
|
456
|
+
queueMicrotask(callback);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
this.doneCallbacks.add(callback);
|
|
460
|
+
}
|
|
461
|
+
removeDoneCallback(callback) {
|
|
462
|
+
this.doneCallbacks.delete(callback);
|
|
415
463
|
}
|
|
416
464
|
}
|
|
417
465
|
async function waitFor(tasks) {
|
|
@@ -491,14 +539,22 @@ function resampleStream({
|
|
|
491
539
|
let resampler = null;
|
|
492
540
|
const transformStream = new import_web.TransformStream({
|
|
493
541
|
transform(chunk, controller) {
|
|
542
|
+
if (chunk.samplesPerChannel === 0) {
|
|
543
|
+
controller.enqueue(chunk);
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
494
546
|
if (!resampler) {
|
|
495
547
|
resampler = new import_rtc_node.AudioResampler(chunk.sampleRate, outputRate);
|
|
496
548
|
}
|
|
497
549
|
for (const frame of resampler.push(chunk)) {
|
|
498
550
|
controller.enqueue(frame);
|
|
499
551
|
}
|
|
500
|
-
|
|
501
|
-
|
|
552
|
+
},
|
|
553
|
+
flush(controller) {
|
|
554
|
+
if (resampler) {
|
|
555
|
+
for (const frame of resampler.flush()) {
|
|
556
|
+
controller.enqueue(frame);
|
|
557
|
+
}
|
|
502
558
|
}
|
|
503
559
|
}
|
|
504
560
|
});
|
|
@@ -512,6 +568,9 @@ class InvalidErrorType extends Error {
|
|
|
512
568
|
Error.captureStackTrace(this, InvalidErrorType);
|
|
513
569
|
}
|
|
514
570
|
}
|
|
571
|
+
function isStreamClosedError(error) {
|
|
572
|
+
return error instanceof Error && (error.message === "Stream is closed" || error.message === "Input is closed");
|
|
573
|
+
}
|
|
515
574
|
function toError(error) {
|
|
516
575
|
if (error instanceof Error) {
|
|
517
576
|
return error;
|
|
@@ -523,11 +582,11 @@ function startSoon(func) {
|
|
|
523
582
|
}
|
|
524
583
|
function delay(ms, options = {}) {
|
|
525
584
|
const { signal } = options;
|
|
526
|
-
if (signal == null ? void 0 : signal.aborted) return Promise.reject(signal.reason);
|
|
585
|
+
if (signal == null ? void 0 : signal.aborted) return Promise.reject(signal.reason ?? new Error("delay aborted"));
|
|
527
586
|
return new Promise((resolve, reject) => {
|
|
528
587
|
const abort = () => {
|
|
529
588
|
clearTimeout(i);
|
|
530
|
-
reject(signal == null ? void 0 : signal.reason);
|
|
589
|
+
reject((signal == null ? void 0 : signal.reason) ?? new Error("delay aborted"));
|
|
531
590
|
};
|
|
532
591
|
const done = () => {
|
|
533
592
|
signal == null ? void 0 : signal.removeEventListener("abort", abort);
|
|
@@ -560,7 +619,11 @@ async function waitForParticipant({
|
|
|
560
619
|
}
|
|
561
620
|
}
|
|
562
621
|
};
|
|
622
|
+
const onDisconnected = () => {
|
|
623
|
+
fut.reject(new Error("Got disconnected from room while waiting for participant"));
|
|
624
|
+
};
|
|
563
625
|
room.on(import_rtc_node.RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
626
|
+
room.on(import_rtc_node.RoomEvent.Disconnected, onDisconnected);
|
|
564
627
|
try {
|
|
565
628
|
for (const p of room.remoteParticipants.values()) {
|
|
566
629
|
onParticipantConnected(p);
|
|
@@ -571,6 +634,7 @@ async function waitForParticipant({
|
|
|
571
634
|
return await fut.await;
|
|
572
635
|
} finally {
|
|
573
636
|
room.off(import_rtc_node.RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
637
|
+
room.off(import_rtc_node.RoomEvent.Disconnected, onDisconnected);
|
|
574
638
|
}
|
|
575
639
|
}
|
|
576
640
|
async function waitForTrackPublication({
|
|
@@ -616,6 +680,34 @@ async function waitForAbort(signal) {
|
|
|
616
680
|
signal.addEventListener("abort", handler, { once: true });
|
|
617
681
|
return await abortFuture.await;
|
|
618
682
|
}
|
|
683
|
+
const combineSignals = (a, b) => {
|
|
684
|
+
const c = new AbortController();
|
|
685
|
+
const abortFrom = (s) => {
|
|
686
|
+
if (c.signal.aborted) return;
|
|
687
|
+
c.abort(s.reason);
|
|
688
|
+
};
|
|
689
|
+
if (a.aborted) {
|
|
690
|
+
abortFrom(a);
|
|
691
|
+
} else {
|
|
692
|
+
a.addEventListener("abort", () => abortFrom(a), { once: true });
|
|
693
|
+
}
|
|
694
|
+
if (b.aborted) {
|
|
695
|
+
abortFrom(b);
|
|
696
|
+
} else {
|
|
697
|
+
b.addEventListener("abort", () => abortFrom(b), { once: true });
|
|
698
|
+
}
|
|
699
|
+
return c.signal;
|
|
700
|
+
};
|
|
701
|
+
const isCloud = (url) => {
|
|
702
|
+
const hostname = url.hostname;
|
|
703
|
+
return hostname.endsWith(".livekit.cloud") || hostname.endsWith(".livekit.run");
|
|
704
|
+
};
|
|
705
|
+
const isDevMode = () => {
|
|
706
|
+
return process.env.LIVEKIT_DEV_MODE === "1";
|
|
707
|
+
};
|
|
708
|
+
const isHosted = () => {
|
|
709
|
+
return process.env.LIVEKIT_REMOTE_EOT_URL !== void 0;
|
|
710
|
+
};
|
|
619
711
|
// Annotate the CommonJS export names for ESM import in node:
|
|
620
712
|
0 && (module.exports = {
|
|
621
713
|
AsyncIterableQueue,
|
|
@@ -626,15 +718,19 @@ async function waitForAbort(signal) {
|
|
|
626
718
|
Future,
|
|
627
719
|
InvalidErrorType,
|
|
628
720
|
Queue,
|
|
629
|
-
TASK_TIMEOUT_ERROR,
|
|
630
721
|
Task,
|
|
631
722
|
TaskResult,
|
|
632
723
|
cancelAndWait,
|
|
724
|
+
combineSignals,
|
|
633
725
|
createImmutableArray,
|
|
634
726
|
delay,
|
|
635
727
|
gracefullyCancel,
|
|
728
|
+
isCloud,
|
|
729
|
+
isDevMode,
|
|
730
|
+
isHosted,
|
|
636
731
|
isImmutableArray,
|
|
637
732
|
isPending,
|
|
733
|
+
isStreamClosedError,
|
|
638
734
|
mergeFrames,
|
|
639
735
|
noop,
|
|
640
736
|
resampleStream,
|
package/dist/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n ParticipantKind,\n RemoteParticipant,\n RemoteTrackPublication,\n Room,\n TrackKind,\n} from '@livekit/rtc-node';\nimport { AudioFrame, AudioResampler, RoomEvent } from '@livekit/rtc-node';\nimport { EventEmitter, once } from 'node:events';\nimport type { ReadableStream } from 'node:stream/web';\nimport { TransformStream, type TransformStreamDefaultController } from 'node:stream/web';\nimport { v4 as uuidv4 } from 'uuid';\nimport { log } from './log.js';\n\n/** Union of a single and a list of {@link AudioFrame}s */\nexport type AudioBuffer = AudioFrame[] | AudioFrame;\n\nexport const noop = () => {};\n\nexport const isPending = async (promise: Promise<unknown>): Promise<boolean> => {\n const sentinel = Symbol('sentinel');\n const result = await Promise.race([promise, Promise.resolve(sentinel)]);\n return result === sentinel;\n};\n\n/**\n * Merge one or more {@link AudioFrame}s into a single one.\n *\n * @param buffer - Either an {@link AudioFrame} or a list thereof\n * @throws\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n * | TypeError} if sample rate or channel count are mismatched\n */\nexport const mergeFrames = (buffer: AudioBuffer): AudioFrame => {\n if (Array.isArray(buffer)) {\n buffer = buffer as AudioFrame[];\n if (buffer.length == 0) {\n throw new TypeError('buffer is empty');\n }\n\n const sampleRate = buffer[0]!.sampleRate;\n const channels = buffer[0]!.channels;\n let samplesPerChannel = 0;\n let data = new Int16Array();\n\n for (const frame of buffer) {\n if (frame.sampleRate !== sampleRate) {\n throw new TypeError('sample rate mismatch');\n }\n\n if (frame.channels !== channels) {\n throw new TypeError('channel count mismatch');\n }\n\n data = new Int16Array([...data, ...frame.data]);\n samplesPerChannel += frame.samplesPerChannel;\n }\n\n return new AudioFrame(data, sampleRate, channels, samplesPerChannel);\n }\n\n return buffer;\n};\n\n/** @internal */\nexport class Queue<T> {\n /** @internal */\n items: T[] = [];\n #limit?: number;\n #events = new EventEmitter();\n\n constructor(limit?: number) {\n this.#limit = limit;\n }\n\n async get(): Promise<T> {\n const _get = async (): Promise<T> => {\n if (this.items.length === 0) {\n await once(this.#events, 'put');\n }\n let item = this.items.shift();\n if (!item) {\n item = await _get();\n }\n return item;\n };\n\n const item = _get();\n this.#events.emit('get');\n return item;\n }\n\n async put(item: T) {\n if (this.#limit && this.items.length >= this.#limit) {\n await once(this.#events, 'get');\n }\n this.items.push(item);\n this.#events.emit('put');\n }\n}\n\n/** @internal */\nexport class Future<T = void> {\n #await: Promise<T>;\n #resolvePromise!: (value: T) => void;\n #rejectPromise!: (error: Error) => void;\n #done: boolean = false;\n\n constructor() {\n this.#await = new Promise<T>((resolve, reject) => {\n this.#resolvePromise = resolve;\n this.#rejectPromise = reject;\n });\n }\n\n get await() {\n return this.#await;\n }\n\n get done() {\n return this.#done;\n }\n\n resolve(value: T) {\n this.#done = true;\n this.#resolvePromise(value);\n }\n\n reject(error: Error) {\n this.#done = true;\n this.#rejectPromise(error);\n }\n}\n\n/** @internal */\nexport class Event {\n #isSet = false;\n #waiters: Array<() => void> = [];\n\n async wait() {\n if (this.#isSet) return true;\n\n let resolve: () => void = noop;\n const waiter = new Promise<void>((r) => {\n resolve = r;\n this.#waiters.push(resolve);\n });\n\n try {\n await waiter;\n return true;\n } finally {\n const index = this.#waiters.indexOf(resolve);\n if (index !== -1) {\n this.#waiters.splice(index, 1);\n }\n }\n }\n\n get isSet(): boolean {\n return this.#isSet;\n }\n\n set(): void {\n if (this.#isSet) return;\n\n this.#isSet = true;\n this.#waiters.forEach((resolve) => resolve());\n this.#waiters = [];\n }\n\n clear(): void {\n this.#isSet = false;\n }\n}\n\n/** @internal */\nexport class CancellablePromise<T> {\n #promise: Promise<T>;\n #cancelFn: () => void;\n #isCancelled: boolean = false;\n #error: Error | null = null;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: unknown) => void,\n onCancel: (cancelFn: () => void) => void,\n ) => void,\n ) {\n let cancel: () => void;\n\n this.#promise = new Promise<T>((resolve, reject) => {\n executor(\n resolve,\n (reason) => {\n this.#error = reason instanceof Error ? reason : new Error(String(reason));\n reject(reason);\n },\n (cancelFn) => {\n cancel = () => {\n this.#isCancelled = true;\n cancelFn();\n };\n },\n );\n });\n\n this.#cancelFn = cancel!;\n }\n\n get isCancelled(): boolean {\n return this.#isCancelled;\n }\n\n get error(): Error | null {\n return this.#error;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | Promise<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | Promise<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.#promise.then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: unknown) => TResult | Promise<TResult>) | null,\n ): Promise<T | TResult> {\n return this.#promise.catch(onrejected);\n }\n\n finally(onfinally?: (() => void) | null): Promise<T> {\n return this.#promise.finally(onfinally);\n }\n\n cancel(): void {\n this.#cancelFn();\n }\n\n static from<T>(promise: Promise<T>): CancellablePromise<T> {\n return new CancellablePromise<T>((resolve, reject) => {\n promise.then(resolve).catch(reject);\n });\n }\n}\n\n/** @internal */\nexport async function gracefullyCancel<T>(promise: CancellablePromise<T>): Promise<void> {\n if (!promise.isCancelled) {\n promise.cancel();\n }\n try {\n await promise;\n } catch (error) {\n // Ignore the error, as it's expected due to cancellation\n }\n}\n\n/** @internal */\nexport class AsyncIterableQueue<T> implements AsyncIterableIterator<T> {\n private static readonly CLOSE_SENTINEL = Symbol('CLOSE_SENTINEL');\n #queue = new Queue<T | typeof AsyncIterableQueue.CLOSE_SENTINEL>();\n #closed = false;\n\n get closed(): boolean {\n return this.#closed;\n }\n\n put(item: T): void {\n if (this.#closed) {\n throw new Error('Queue is closed');\n }\n this.#queue.put(item);\n }\n\n close(): void {\n this.#closed = true;\n this.#queue.put(AsyncIterableQueue.CLOSE_SENTINEL);\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.#closed && this.#queue.items.length === 0) {\n return { value: undefined, done: true };\n }\n const item = await this.#queue.get();\n if (item === AsyncIterableQueue.CLOSE_SENTINEL && this.#closed) {\n return { value: undefined, done: true };\n }\n return { value: item as T, done: false };\n }\n\n [Symbol.asyncIterator](): AsyncIterableQueue<T> {\n return this;\n }\n}\n\n/** @internal */\nexport class ExpFilter {\n #alpha: number;\n #max?: number;\n #filtered?: number = undefined;\n\n constructor(alpha: number, max?: number) {\n this.#alpha = alpha;\n this.#max = max;\n }\n\n reset(alpha?: number) {\n if (alpha) {\n this.#alpha = alpha;\n }\n this.#filtered = undefined;\n }\n\n apply(exp: number, sample: number): number {\n if (this.#filtered) {\n const a = this.#alpha ** exp;\n this.#filtered = a * this.#filtered + (1 - a) * sample;\n } else {\n this.#filtered = sample;\n }\n\n if (this.#max && this.#filtered > this.#max) {\n this.#filtered = this.#max;\n }\n\n return this.#filtered;\n }\n\n get filtered(): number | undefined {\n return this.#filtered;\n }\n\n set alpha(alpha: number) {\n this.#alpha = alpha;\n }\n}\n\n/** @internal */\nexport class AudioEnergyFilter {\n #cooldownSeconds: number;\n #cooldown: number;\n\n constructor(cooldownSeconds = 1) {\n this.#cooldownSeconds = cooldownSeconds;\n this.#cooldown = cooldownSeconds;\n }\n\n pushFrame(frame: AudioFrame): boolean {\n const arr = Float32Array.from(frame.data, (x) => x / 32768);\n const rms = (arr.map((x) => x ** 2).reduce((acc, x) => acc + x) / arr.length) ** 0.5;\n if (rms > 0.004) {\n this.#cooldown = this.#cooldownSeconds;\n return true;\n }\n\n const durationSeconds = frame.samplesPerChannel / frame.sampleRate;\n this.#cooldown -= durationSeconds;\n if (this.#cooldown > 0) {\n return true;\n }\n\n return false;\n }\n}\n\nexport const TASK_TIMEOUT_ERROR = new Error('Task cancellation timed out');\n\nexport enum TaskResult {\n Timeout = 'timeout',\n Completed = 'completed',\n Aborted = 'aborted',\n}\n\n/** @internal */\n/**\n * A task that can be cancelled.\n *\n * We recommend using the `Task.from` method to create a task. When creating subtasks, pass the same controller to all subtasks.\n *\n * @example\n * ```ts\n * const parent = Task.from((controller) => {\n * const child1 = Task.from(() => { ... }, controller);\n * const child2 = Task.from(() => { ... }, controller);\n * });\n * parent.cancel();\n * ```\n *\n * This will cancel all subtasks when the parent is cancelled.\n *\n * @param T - The type of the task result\n */\nexport class Task<T> {\n private resultFuture: Future<T>;\n\n #logger = log();\n\n constructor(\n private readonly fn: (controller: AbortController) => Promise<T>,\n private readonly controller: AbortController,\n readonly name?: string,\n ) {\n this.resultFuture = new Future();\n this.runTask();\n }\n\n /**\n * Creates a new task from a function.\n *\n * @param fn - The function to run\n * @param controller - The abort controller to use\n * @returns A new task\n */\n static from<T>(\n fn: (controller: AbortController) => Promise<T>,\n controller?: AbortController,\n name?: string,\n ) {\n const abortController = controller ?? new AbortController();\n return new Task(fn, abortController, name);\n }\n\n private async runTask() {\n const run = async () => {\n if (this.name) {\n this.#logger.debug(`Task.runTask: task ${this.name} started`);\n }\n return await this.fn(this.controller);\n };\n\n return run()\n .then((value) => {\n this.resultFuture.resolve(value);\n return value;\n })\n .catch((error) => {\n this.resultFuture.reject(error);\n })\n .finally(() => {\n if (this.name) {\n this.#logger.debug(`Task.runTask: task ${this.name} done`);\n }\n });\n }\n\n /**\n * Cancels the task.\n */\n cancel() {\n this.controller.abort();\n }\n\n /**\n * Cancels the task and waits for it to complete.\n *\n * @param timeout - The timeout in milliseconds\n * @returns The result status of the task (timeout, completed, aborted)\n */\n async cancelAndWait(timeout?: number) {\n this.cancel();\n\n try {\n // Race between task completion and timeout\n const promises = [\n this.result\n .then(() => TaskResult.Completed)\n .catch((error) => {\n if (error.name === 'AbortError') {\n return TaskResult.Aborted;\n }\n throw error;\n }),\n ];\n\n if (timeout) {\n promises.push(delay(timeout).then(() => TaskResult.Timeout));\n }\n\n const result = await Promise.race(promises);\n\n // Check what happened\n if (result === TaskResult.Timeout) {\n throw TASK_TIMEOUT_ERROR;\n }\n\n return result;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * The result of the task.\n */\n get result(): Promise<T> {\n return this.resultFuture.await;\n }\n\n /**\n * Whether the task has completed.\n */\n get done(): boolean {\n return this.resultFuture.done;\n }\n\n addDoneCallback(callback: () => void) {\n this.resultFuture.await.finally(callback);\n }\n}\n\nexport async function waitFor(tasks: Task<void>[]): Promise<void> {\n await Promise.allSettled(tasks.map((task) => task.result));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function cancelAndWait(tasks: Task<any>[], timeout?: number): Promise<void> {\n await Promise.allSettled(tasks.map((task) => task.cancelAndWait(timeout)));\n}\n\nexport function withResolvers<T = unknown>() {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\n/**\n * Generates a short UUID with a prefix. Mirrors the python agents implementation.\n *\n * @param prefix - The prefix to add to the UUID.\n * @returns A short UUID with the prefix.\n */\nexport function shortuuid(prefix: string = ''): string {\n return `${prefix}${uuidv4().slice(0, 12)}`;\n}\n\nconst READONLY_SYMBOL = Symbol('Readonly');\n\nconst MUTATION_METHODS = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse',\n 'fill',\n 'copyWithin',\n] as const;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n/**\n * Creates a read-only proxy for an array.\n * @param array - The array to make read-only.\n * @param additionalErrorMessage - An additional error message to include in the error thrown when a mutation method is called.\n * @returns A read-only proxy for the array.\n */\nexport function createImmutableArray<T>(array: T[], additionalErrorMessage: string = ''): T[] {\n return new Proxy(array, {\n get(target, key) {\n if (key === READONLY_SYMBOL) {\n return true;\n }\n\n // Intercept mutation methods\n if (\n typeof key === 'string' &&\n MUTATION_METHODS.includes(key as (typeof MUTATION_METHODS)[number])\n ) {\n return function () {\n throw new TypeError(\n `Cannot call ${key}() on a read-only array. ${additionalErrorMessage}`.trim(),\n );\n };\n }\n\n return Reflect.get(target, key);\n },\n set(_, prop) {\n throw new TypeError(\n `Cannot assign to read-only array index \"${String(prop)}\". ${additionalErrorMessage}`.trim(),\n );\n },\n deleteProperty(_, prop) {\n throw new TypeError(\n `Cannot delete read-only array index \"${String(prop)}\". ${additionalErrorMessage}`.trim(),\n );\n },\n defineProperty(_, prop) {\n throw new TypeError(\n `Cannot define property \"${String(prop)}\" on a read-only array. ${additionalErrorMessage}`.trim(),\n );\n },\n setPrototypeOf() {\n throw new TypeError(\n `Cannot change prototype of a read-only array. ${additionalErrorMessage}`.trim(),\n );\n },\n });\n}\n\nexport function isImmutableArray(array: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return typeof array === 'object' && !!(array as any)[READONLY_SYMBOL];\n}\n\n/**\n * Resamples an audio stream to a target sample rate.\n *\n * WARINING: The input stream will be locked until the resampled stream is closed.\n *\n * @param stream - The input stream to resample.\n * @param outputRate - The target sample rate.\n * @returns A new stream with the resampled audio.\n */\nexport function resampleStream({\n stream,\n outputRate,\n}: {\n stream: ReadableStream<AudioFrame>;\n outputRate: number;\n}): ReadableStream<AudioFrame> {\n let resampler: AudioResampler | null = null;\n const transformStream = new TransformStream<AudioFrame, AudioFrame>({\n transform(chunk: AudioFrame, controller: TransformStreamDefaultController<AudioFrame>) {\n if (!resampler) {\n resampler = new AudioResampler(chunk.sampleRate, outputRate);\n }\n for (const frame of resampler.push(chunk)) {\n controller.enqueue(frame);\n }\n for (const frame of resampler.flush()) {\n controller.enqueue(frame);\n }\n },\n });\n return stream.pipeThrough(transformStream);\n}\n\nexport class InvalidErrorType extends Error {\n readonly error: unknown;\n\n constructor(error: unknown) {\n super(`Expected error, got ${error} (${typeof error})`);\n this.error = error;\n Error.captureStackTrace(this, InvalidErrorType);\n }\n}\n\n/**\n * In JS an error can be any arbitrary value.\n * This function converts an unknown error to an Error and stores the original value in the error object.\n *\n * @param error - The error to convert.\n * @returns An Error.\n */\nexport function toError(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n throw new InvalidErrorType(error);\n}\n\n/**\n * This is a hack to immitate asyncio.create_task so that\n * func will be run after the current event loop iteration.\n *\n * @param func - The function to run.\n */\nexport function startSoon(func: () => void) {\n setTimeout(func, 0);\n}\n\nexport type DelayOptions = {\n signal?: AbortSignal;\n};\n\n/**\n * Delay for a given number of milliseconds.\n *\n * @param ms - The number of milliseconds to delay.\n * @param options - The options for the delay.\n * @returns A promise that resolves after the delay.\n */\nexport function delay(ms: number, options: DelayOptions = {}): Promise<void> {\n const { signal } = options;\n if (signal?.aborted) return Promise.reject(signal.reason);\n return new Promise((resolve, reject) => {\n const abort = () => {\n clearTimeout(i);\n reject(signal?.reason);\n };\n const done = () => {\n signal?.removeEventListener('abort', abort);\n resolve();\n };\n const i = setTimeout(done, ms);\n signal?.addEventListener('abort', abort, { once: true });\n });\n}\n\n/**\n * Returns a participant that matches the given identity. If identity is None, the first\n * participant that joins the room will be returned.\n * If the participant has already joined, the function will return immediately.\n * @param room - The room to wait for a participant in.\n * @param identity - The identity of the participant to wait for.\n * @param kind - The kind of the participant to wait for.\n * @returns A promise that resolves to the participant.\n */\nexport async function waitForParticipant({\n room,\n identity,\n kind,\n}: {\n room: Room;\n identity?: string;\n kind?: ParticipantKind | ParticipantKind[];\n}): Promise<RemoteParticipant> {\n if (!room.isConnected) {\n throw new Error('Room is not connected');\n }\n\n const fut = new Future<RemoteParticipant>();\n\n const kindMatch = (participant: RemoteParticipant) => {\n if (kind === undefined) return true;\n\n if (Array.isArray(kind)) {\n return kind.includes(participant.kind);\n }\n\n return participant.kind === kind;\n };\n\n const onParticipantConnected = (p: RemoteParticipant) => {\n if ((identity === undefined || p.identity === identity) && kindMatch(p)) {\n if (!fut.done) {\n fut.resolve(p);\n }\n }\n };\n\n room.on(RoomEvent.ParticipantConnected, onParticipantConnected);\n\n try {\n for (const p of room.remoteParticipants.values()) {\n onParticipantConnected(p);\n if (fut.done) {\n break;\n }\n }\n\n return await fut.await;\n } finally {\n room.off(RoomEvent.ParticipantConnected, onParticipantConnected);\n }\n}\n\nexport async function waitForTrackPublication({\n room,\n identity,\n kind,\n}: {\n room: Room;\n identity: string;\n kind: TrackKind;\n}): Promise<RemoteTrackPublication> {\n if (!room.isConnected) {\n throw new Error('Room is not connected');\n }\n\n const fut = new Future<RemoteTrackPublication>();\n\n const kindMatch = (k: TrackKind | undefined) => {\n if (kind === undefined || kind === null) {\n return true;\n }\n return k === kind;\n };\n\n const onTrackPublished = (\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => {\n if (fut.done) return;\n if (\n (identity === undefined || participant.identity === identity) &&\n kindMatch(publication.kind)\n ) {\n fut.resolve(publication);\n }\n };\n\n room.on(RoomEvent.TrackPublished, onTrackPublished);\n\n try {\n for (const p of room.remoteParticipants.values()) {\n for (const publication of p.trackPublications.values()) {\n onTrackPublished(publication, p);\n if (fut.done) break;\n }\n }\n\n return await fut.await;\n } finally {\n room.off(RoomEvent.TrackPublished, onTrackPublished);\n }\n}\n\nexport async function waitForAbort(signal: AbortSignal) {\n const abortFuture = new Future<void>();\n const handler = () => {\n abortFuture.resolve();\n signal.removeEventListener('abort', handler);\n };\n\n signal.addEventListener('abort', handler, { once: true });\n return await abortFuture.await;\n}\n"],"mappings":"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","names":["item","TaskResult","uuidv4"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n ParticipantKind,\n RemoteParticipant,\n RemoteTrackPublication,\n Room,\n TrackKind,\n} from '@livekit/rtc-node';\nimport { AudioFrame, AudioResampler, RoomEvent } from '@livekit/rtc-node';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { EventEmitter, once } from 'node:events';\nimport type { ReadableStream } from 'node:stream/web';\nimport { TransformStream, type TransformStreamDefaultController } from 'node:stream/web';\nimport { v4 as uuidv4 } from 'uuid';\nimport { log } from './log.js';\n\n/**\n * Recursively expands all nested properties of a type,\n * resolving aliases so as to inspect the real shape in IDE.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type Expand<T> = T extends Function\n ? T\n : T extends object\n ? T extends Array<infer U>\n ? Array<Expand<U>>\n : T extends Map<infer K, infer V>\n ? Map<Expand<K>, Expand<V>>\n : T extends Set<infer M>\n ? Set<Expand<M>>\n : { [K in keyof T]: Expand<T[K]> }\n : T;\n\n/** Union of a single and a list of {@link AudioFrame}s */\nexport type AudioBuffer = AudioFrame[] | AudioFrame;\n\nexport const noop = () => {};\n\nexport const isPending = async (promise: Promise<unknown>): Promise<boolean> => {\n const sentinel = Symbol('sentinel');\n const result = await Promise.race([promise, Promise.resolve(sentinel)]);\n return result === sentinel;\n};\n\n/**\n * Merge one or more {@link AudioFrame}s into a single one.\n *\n * @param buffer - Either an {@link AudioFrame} or a list thereof\n * @throws\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n * | TypeError} if sample rate or channel count are mismatched\n */\nexport const mergeFrames = (buffer: AudioBuffer): AudioFrame => {\n if (Array.isArray(buffer)) {\n buffer = buffer as AudioFrame[];\n if (buffer.length == 0) {\n throw new TypeError('buffer is empty');\n }\n\n const sampleRate = buffer[0]!.sampleRate;\n const channels = buffer[0]!.channels;\n let samplesPerChannel = 0;\n let data = new Int16Array();\n\n for (const frame of buffer) {\n if (frame.sampleRate !== sampleRate) {\n throw new TypeError('sample rate mismatch');\n }\n\n if (frame.channels !== channels) {\n throw new TypeError('channel count mismatch');\n }\n\n data = new Int16Array([...data, ...frame.data]);\n samplesPerChannel += frame.samplesPerChannel;\n }\n\n return new AudioFrame(data, sampleRate, channels, samplesPerChannel);\n }\n\n return buffer;\n};\n\n/** @internal */\nexport class Queue<T> {\n /** @internal */\n items: T[] = [];\n #limit?: number;\n #events = new EventEmitter();\n\n constructor(limit?: number) {\n this.#limit = limit;\n }\n\n async get(): Promise<T> {\n const _get = async (): Promise<T> => {\n if (this.items.length === 0) {\n await once(this.#events, 'put');\n }\n let item = this.items.shift();\n if (!item) {\n item = await _get();\n }\n return item;\n };\n\n const item = _get();\n this.#events.emit('get');\n return item;\n }\n\n async put(item: T) {\n if (this.#limit && this.items.length >= this.#limit) {\n await once(this.#events, 'get');\n }\n this.items.push(item);\n this.#events.emit('put');\n }\n}\n\n/** @internal */\nexport class Future<T = void> {\n #await: Promise<T>;\n #resolvePromise!: (value: T) => void;\n #rejectPromise!: (error: Error) => void;\n #done: boolean = false;\n #rejected: boolean = false;\n #result: T | undefined = undefined;\n #error: Error | undefined = undefined;\n\n constructor() {\n this.#await = new Promise<T>((resolve, reject) => {\n this.#resolvePromise = resolve;\n this.#rejectPromise = reject;\n });\n }\n\n get await() {\n return this.#await;\n }\n\n get done() {\n return this.#done;\n }\n\n get result(): T {\n if (!this.#done) {\n throw new Error('Future is not done');\n }\n\n if (this.#rejected) {\n throw this.#error;\n }\n\n return this.#result!;\n }\n\n /** Whether the future was rejected (cancelled) */\n get rejected() {\n return this.#rejected;\n }\n\n resolve(value: T) {\n this.#done = true;\n this.#result = value;\n this.#resolvePromise(value);\n }\n\n reject(error: Error) {\n this.#done = true;\n this.#rejected = true;\n this.#error = error;\n this.#rejectPromise(error);\n // Python calls Future.exception() right after set_exception() to silence\n // \"exception was never retrieved\" warnings. In JS, consume the rejection\n // immediately so Node does not emit unhandled-rejection noise before a\n // later await/catch observes it.\n void this.#await.catch(() => undefined);\n }\n}\n\n/** @internal */\nexport class Event {\n #isSet = false;\n #waiters: Array<() => void> = [];\n\n async wait() {\n if (this.#isSet) return true;\n\n let resolve: () => void = noop;\n const waiter = new Promise<void>((r) => {\n resolve = r;\n this.#waiters.push(resolve);\n });\n\n try {\n await waiter;\n return true;\n } finally {\n const index = this.#waiters.indexOf(resolve);\n if (index !== -1) {\n this.#waiters.splice(index, 1);\n }\n }\n }\n\n get isSet(): boolean {\n return this.#isSet;\n }\n\n set(): void {\n if (this.#isSet) return;\n\n this.#isSet = true;\n this.#waiters.forEach((resolve) => resolve());\n this.#waiters = [];\n }\n\n clear(): void {\n this.#isSet = false;\n }\n}\n\n/** @internal */\nexport class CancellablePromise<T> {\n #promise: Promise<T>;\n #cancelFn: () => void;\n #isCancelled: boolean = false;\n #error: Error | null = null;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: unknown) => void,\n onCancel: (cancelFn: () => void) => void,\n ) => void,\n ) {\n let cancel: () => void;\n\n this.#promise = new Promise<T>((resolve, reject) => {\n executor(\n resolve,\n (reason) => {\n this.#error = reason instanceof Error ? reason : new Error(String(reason));\n reject(reason);\n },\n (cancelFn) => {\n cancel = () => {\n this.#isCancelled = true;\n cancelFn();\n };\n },\n );\n });\n\n this.#cancelFn = cancel!;\n }\n\n get isCancelled(): boolean {\n return this.#isCancelled;\n }\n\n get error(): Error | null {\n return this.#error;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | Promise<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | Promise<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n return this.#promise.then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: unknown) => TResult | Promise<TResult>) | null,\n ): Promise<T | TResult> {\n return this.#promise.catch(onrejected);\n }\n\n finally(onfinally?: (() => void) | null): Promise<T> {\n return this.#promise.finally(onfinally);\n }\n\n cancel(): void {\n this.#cancelFn();\n }\n\n static from<T>(promise: Promise<T>): CancellablePromise<T> {\n return new CancellablePromise<T>((resolve, reject) => {\n promise.then(resolve).catch(reject);\n });\n }\n}\n\n/** @internal */\nexport async function gracefullyCancel<T>(promise: CancellablePromise<T>): Promise<void> {\n if (!promise.isCancelled) {\n promise.cancel();\n }\n try {\n await promise;\n } catch (error) {\n // Ignore the error, as it's expected due to cancellation\n }\n}\n\n/** @internal */\nexport class AsyncIterableQueue<T> implements AsyncIterableIterator<T> {\n private static readonly CLOSE_SENTINEL = Symbol('CLOSE_SENTINEL');\n #queue = new Queue<T | typeof AsyncIterableQueue.CLOSE_SENTINEL>();\n #closed = false;\n\n get closed(): boolean {\n return this.#closed;\n }\n\n put(item: T): void {\n if (this.#closed) {\n throw new Error('Queue is closed');\n }\n this.#queue.put(item);\n }\n\n close(): void {\n this.#closed = true;\n this.#queue.put(AsyncIterableQueue.CLOSE_SENTINEL);\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.#closed && this.#queue.items.length === 0) {\n return { value: undefined, done: true };\n }\n const item = await this.#queue.get();\n if (item === AsyncIterableQueue.CLOSE_SENTINEL && this.#closed) {\n return { value: undefined, done: true };\n }\n return { value: item as T, done: false };\n }\n\n [Symbol.asyncIterator](): AsyncIterableQueue<T> {\n return this;\n }\n}\n\n/** @internal */\nexport class ExpFilter {\n #alpha: number;\n #max?: number;\n #filtered?: number = undefined;\n\n constructor(alpha: number, max?: number) {\n this.#alpha = alpha;\n this.#max = max;\n }\n\n reset(alpha?: number) {\n if (alpha) {\n this.#alpha = alpha;\n }\n this.#filtered = undefined;\n }\n\n apply(exp: number, sample: number): number {\n if (this.#filtered) {\n const a = this.#alpha ** exp;\n this.#filtered = a * this.#filtered + (1 - a) * sample;\n } else {\n this.#filtered = sample;\n }\n\n if (this.#max && this.#filtered > this.#max) {\n this.#filtered = this.#max;\n }\n\n return this.#filtered;\n }\n\n get filtered(): number | undefined {\n return this.#filtered;\n }\n\n set alpha(alpha: number) {\n this.#alpha = alpha;\n }\n}\n\n/** @internal */\nexport class AudioEnergyFilter {\n #cooldownSeconds: number;\n #cooldown: number;\n\n constructor(cooldownSeconds = 1) {\n this.#cooldownSeconds = cooldownSeconds;\n this.#cooldown = cooldownSeconds;\n }\n\n pushFrame(frame: AudioFrame): boolean {\n const arr = Float32Array.from(frame.data, (x) => x / 32768);\n const rms = (arr.map((x) => x ** 2).reduce((acc, x) => acc + x) / arr.length) ** 0.5;\n if (rms > 0.004) {\n this.#cooldown = this.#cooldownSeconds;\n return true;\n }\n\n const durationSeconds = frame.samplesPerChannel / frame.sampleRate;\n this.#cooldown -= durationSeconds;\n if (this.#cooldown > 0) {\n return true;\n }\n\n return false;\n }\n}\n\nexport enum TaskResult {\n Timeout = 'timeout',\n Completed = 'completed',\n Aborted = 'aborted',\n}\n\n/** @internal */\n/**\n * A task that can be cancelled.\n *\n * We recommend using the `Task.from` method to create a task. When creating subtasks, pass the same controller to all subtasks.\n *\n * @example\n * ```ts\n * const parent = Task.from((controller) => {\n * const child1 = Task.from(() => { ... }, controller);\n * const child2 = Task.from(() => { ... }, controller);\n * });\n * parent.cancel();\n * ```\n *\n * This will cancel all subtasks when the parent is cancelled.\n *\n * @param T - The type of the task result\n */\nexport class Task<T> {\n private static readonly currentTaskStorage = new AsyncLocalStorage<Task<unknown>>();\n private resultFuture: Future<T>;\n private doneCallbacks: Set<() => void> = new Set();\n\n #logger = log();\n\n constructor(\n private readonly fn: (controller: AbortController) => Promise<T>,\n private readonly controller: AbortController,\n readonly name?: string,\n ) {\n this.resultFuture = new Future();\n void this.resultFuture.await\n .then(\n () => undefined,\n () => undefined,\n )\n .finally(() => {\n for (const callback of this.doneCallbacks) {\n try {\n callback();\n } catch (error) {\n this.#logger.error({ error }, 'Task done callback failed');\n }\n }\n this.doneCallbacks.clear();\n });\n this.runTask();\n }\n\n /**\n * Creates a new task from a function.\n *\n * @param fn - The function to run\n * @param controller - The abort controller to use\n * @returns A new task\n */\n static from<T>(\n fn: (controller: AbortController) => Promise<T>,\n controller?: AbortController,\n name?: string,\n ) {\n const abortController = controller ?? new AbortController();\n return new Task(fn, abortController, name);\n }\n\n /**\n * Returns the currently running task in this async context, if available.\n */\n static current(): Task<unknown> | undefined {\n return Task.currentTaskStorage.getStore();\n }\n\n private async runTask() {\n const run = async () => {\n if (this.name) {\n this.#logger.debug(`Task.runTask: task ${this.name} started`);\n }\n return await this.fn(this.controller);\n };\n\n return Task.currentTaskStorage\n .run(this as Task<unknown>, run)\n .then((value) => {\n this.resultFuture.resolve(value);\n return value;\n })\n .catch((error) => {\n this.resultFuture.reject(error);\n })\n .finally(() => {\n if (this.name) {\n this.#logger.debug(`Task.runTask: task ${this.name} done`);\n }\n });\n }\n\n /**\n * Cancels the task.\n */\n cancel() {\n this.controller.abort();\n }\n\n /**\n * Cancels the task and waits for it to complete.\n *\n * @param timeout - The timeout in milliseconds\n * @returns The result status of the task (timeout, completed, aborted)\n */\n async cancelAndWait(timeout?: number) {\n this.cancel();\n\n // Race between task completion and timeout\n const promises = [\n this.result\n .then(() => TaskResult.Completed)\n .catch((error) => {\n if (error.name === 'AbortError') {\n return TaskResult.Aborted;\n }\n throw error;\n }),\n ];\n\n if (timeout) {\n promises.push(delay(timeout).then(() => TaskResult.Timeout));\n }\n\n const result = await Promise.race(promises);\n\n // Check what happened\n if (result === TaskResult.Timeout) {\n throw new Error('Task cancellation timed out');\n }\n\n return result;\n }\n\n /**\n * The result of the task.\n */\n get result(): Promise<T> {\n return this.resultFuture.await;\n }\n\n /**\n * Whether the task has completed.\n */\n get done(): boolean {\n return this.resultFuture.done;\n }\n\n addDoneCallback(callback: () => void) {\n if (this.done) {\n queueMicrotask(callback);\n return;\n }\n this.doneCallbacks.add(callback);\n }\n\n removeDoneCallback(callback: () => void) {\n this.doneCallbacks.delete(callback);\n }\n}\n\nexport async function waitFor(tasks: Task<void>[]): Promise<void> {\n await Promise.allSettled(tasks.map((task) => task.result));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function cancelAndWait(tasks: Task<any>[], timeout?: number): Promise<void> {\n await Promise.allSettled(tasks.map((task) => task.cancelAndWait(timeout)));\n}\n\nexport function withResolvers<T = unknown>() {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\n/**\n * Generates a short UUID with a prefix. Mirrors the python agents implementation.\n *\n * @param prefix - The prefix to add to the UUID.\n * @returns A short UUID with the prefix.\n */\nexport function shortuuid(prefix: string = ''): string {\n return `${prefix}${uuidv4().slice(0, 12)}`;\n}\n\nconst READONLY_SYMBOL = Symbol('Readonly');\n\nconst MUTATION_METHODS = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse',\n 'fill',\n 'copyWithin',\n] as const;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n/**\n * Creates a read-only proxy for an array.\n * @param array - The array to make read-only.\n * @param additionalErrorMessage - An additional error message to include in the error thrown when a mutation method is called.\n * @returns A read-only proxy for the array.\n */\nexport function createImmutableArray<T>(array: T[], additionalErrorMessage: string = ''): T[] {\n return new Proxy(array, {\n get(target, key) {\n if (key === READONLY_SYMBOL) {\n return true;\n }\n\n // Intercept mutation methods\n if (\n typeof key === 'string' &&\n MUTATION_METHODS.includes(key as (typeof MUTATION_METHODS)[number])\n ) {\n return function () {\n throw new TypeError(\n `Cannot call ${key}() on a read-only array. ${additionalErrorMessage}`.trim(),\n );\n };\n }\n\n return Reflect.get(target, key);\n },\n set(_, prop) {\n throw new TypeError(\n `Cannot assign to read-only array index \"${String(prop)}\". ${additionalErrorMessage}`.trim(),\n );\n },\n deleteProperty(_, prop) {\n throw new TypeError(\n `Cannot delete read-only array index \"${String(prop)}\". ${additionalErrorMessage}`.trim(),\n );\n },\n defineProperty(_, prop) {\n throw new TypeError(\n `Cannot define property \"${String(prop)}\" on a read-only array. ${additionalErrorMessage}`.trim(),\n );\n },\n setPrototypeOf() {\n throw new TypeError(\n `Cannot change prototype of a read-only array. ${additionalErrorMessage}`.trim(),\n );\n },\n });\n}\n\nexport function isImmutableArray(array: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return typeof array === 'object' && !!(array as any)[READONLY_SYMBOL];\n}\n\n/**\n * Resamples an audio stream to a target sample rate.\n *\n * WARINING: The input stream will be locked until the resampled stream is closed.\n *\n * @param stream - The input stream to resample.\n * @param outputRate - The target sample rate.\n * @returns A new stream with the resampled audio.\n */\nexport function resampleStream({\n stream,\n outputRate,\n}: {\n stream: ReadableStream<AudioFrame>;\n outputRate: number;\n}): ReadableStream<AudioFrame> {\n let resampler: AudioResampler | null = null;\n const transformStream = new TransformStream<AudioFrame, AudioFrame>({\n transform(chunk: AudioFrame, controller: TransformStreamDefaultController<AudioFrame>) {\n if (chunk.samplesPerChannel === 0) {\n controller.enqueue(chunk);\n return;\n }\n if (!resampler) {\n resampler = new AudioResampler(chunk.sampleRate, outputRate);\n }\n for (const frame of resampler.push(chunk)) {\n controller.enqueue(frame);\n }\n },\n flush(controller) {\n if (resampler) {\n for (const frame of resampler.flush()) {\n controller.enqueue(frame);\n }\n }\n },\n });\n return stream.pipeThrough(transformStream);\n}\n\nexport class InvalidErrorType extends Error {\n readonly error: unknown;\n\n constructor(error: unknown) {\n super(`Expected error, got ${error} (${typeof error})`);\n this.error = error;\n Error.captureStackTrace(this, InvalidErrorType);\n }\n}\n\n/**\n * Check if an error is a stream closed error that can be safely ignored during cleanup.\n * This happens during handover/cleanup when close() is called while operations are still running.\n *\n * @param error - The error to check.\n * @returns True if the error is a stream closed error.\n */\nexport function isStreamClosedError(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.message === 'Stream is closed' || error.message === 'Input is closed')\n );\n}\n\n/**\n * In JS an error can be any arbitrary value.\n * This function converts an unknown error to an Error and stores the original value in the error object.\n *\n * @param error - The error to convert.\n * @returns An Error.\n */\nexport function toError(error: unknown): Error {\n if (error instanceof Error) {\n return error;\n }\n throw new InvalidErrorType(error);\n}\n\n/**\n * This is a hack to immitate asyncio.create_task so that\n * func will be run after the current event loop iteration.\n *\n * @param func - The function to run.\n */\nexport function startSoon(func: () => void) {\n setTimeout(func, 0);\n}\n\nexport type DelayOptions = {\n signal?: AbortSignal;\n};\n\n/**\n * Delay for a given number of milliseconds.\n *\n * @param ms - The number of milliseconds to delay.\n * @param options - The options for the delay.\n * @returns A promise that resolves after the delay.\n */\nexport function delay(ms: number, options: DelayOptions = {}): Promise<void> {\n const { signal } = options;\n if (signal?.aborted) return Promise.reject(signal.reason ?? new Error('delay aborted'));\n return new Promise((resolve, reject) => {\n const abort = () => {\n clearTimeout(i);\n reject(signal?.reason ?? new Error('delay aborted'));\n };\n const done = () => {\n signal?.removeEventListener('abort', abort);\n resolve();\n };\n const i = setTimeout(done, ms);\n signal?.addEventListener('abort', abort, { once: true });\n });\n}\n\n/**\n * Returns a participant that matches the given identity. If identity is None, the first\n * participant that joins the room will be returned.\n * If the participant has already joined, the function will return immediately.\n * @param room - The room to wait for a participant in.\n * @param identity - The identity of the participant to wait for.\n * @param kind - The kind of the participant to wait for.\n * @returns A promise that resolves to the participant.\n */\nexport async function waitForParticipant({\n room,\n identity,\n kind,\n}: {\n room: Room;\n identity?: string;\n kind?: ParticipantKind | ParticipantKind[];\n}): Promise<RemoteParticipant> {\n if (!room.isConnected) {\n throw new Error('Room is not connected');\n }\n\n const fut = new Future<RemoteParticipant>();\n\n const kindMatch = (participant: RemoteParticipant) => {\n if (kind === undefined) return true;\n\n if (Array.isArray(kind)) {\n return kind.includes(participant.kind);\n }\n\n return participant.kind === kind;\n };\n\n const onParticipantConnected = (p: RemoteParticipant) => {\n if ((identity === undefined || p.identity === identity) && kindMatch(p)) {\n if (!fut.done) {\n fut.resolve(p);\n }\n }\n };\n\n const onDisconnected = () => {\n fut.reject(new Error('Got disconnected from room while waiting for participant'));\n };\n\n room.on(RoomEvent.ParticipantConnected, onParticipantConnected);\n room.on(RoomEvent.Disconnected, onDisconnected);\n\n try {\n for (const p of room.remoteParticipants.values()) {\n onParticipantConnected(p);\n if (fut.done) {\n break;\n }\n }\n\n return await fut.await;\n } finally {\n room.off(RoomEvent.ParticipantConnected, onParticipantConnected);\n room.off(RoomEvent.Disconnected, onDisconnected);\n }\n}\n\nexport async function waitForTrackPublication({\n room,\n identity,\n kind,\n}: {\n room: Room;\n identity: string;\n kind: TrackKind;\n}): Promise<RemoteTrackPublication> {\n if (!room.isConnected) {\n throw new Error('Room is not connected');\n }\n\n const fut = new Future<RemoteTrackPublication>();\n\n const kindMatch = (k: TrackKind | undefined) => {\n if (kind === undefined || kind === null) {\n return true;\n }\n return k === kind;\n };\n\n const onTrackPublished = (\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => {\n if (fut.done) return;\n if (\n (identity === undefined || participant.identity === identity) &&\n kindMatch(publication.kind)\n ) {\n fut.resolve(publication);\n }\n };\n\n room.on(RoomEvent.TrackPublished, onTrackPublished);\n\n try {\n for (const p of room.remoteParticipants.values()) {\n for (const publication of p.trackPublications.values()) {\n onTrackPublished(publication, p);\n if (fut.done) break;\n }\n }\n\n return await fut.await;\n } finally {\n room.off(RoomEvent.TrackPublished, onTrackPublished);\n }\n}\n\nexport async function waitForAbort(signal: AbortSignal) {\n const abortFuture = new Future<void>();\n const handler = () => {\n abortFuture.resolve();\n signal.removeEventListener('abort', handler);\n };\n\n signal.addEventListener('abort', handler, { once: true });\n return await abortFuture.await;\n}\n\n/**\n * Combines two abort signals into a single abort signal.\n * @param a - The first abort signal.\n * @param b - The second abort signal.\n * @returns A new abort signal that is aborted when either of the input signals is aborted.\n */\nexport const combineSignals = (a: AbortSignal, b: AbortSignal): AbortSignal => {\n const c = new AbortController();\n const abortFrom = (s: AbortSignal) => {\n if (c.signal.aborted) return;\n c.abort((s as any).reason);\n };\n if (a.aborted) {\n abortFrom(a);\n } else {\n a.addEventListener('abort', () => abortFrom(a), { once: true });\n }\n if (b.aborted) {\n abortFrom(b);\n } else {\n b.addEventListener('abort', () => abortFrom(b), { once: true });\n }\n return c.signal;\n};\n\nexport const isCloud = (url: URL) => {\n const hostname = url.hostname;\n return hostname.endsWith('.livekit.cloud') || hostname.endsWith('.livekit.run');\n};\n\n/**\n * Whether the agent is running in development mode (launched via `dev` or `connect`).\n */\nexport const isDevMode = (): boolean => {\n return process.env.LIVEKIT_DEV_MODE === '1';\n};\n\n/**\n * Whether the agent is hosted on LiveKit Cloud.\n */\nexport const isHosted = (): boolean => {\n return process.env.LIVEKIT_REMOTE_EOT_URL !== undefined;\n};\n"],"mappings":"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","names":["item","TaskResult","uuidv4"]}
|
package/dist/utils.d.cts
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
import type { ParticipantKind, RemoteParticipant, RemoteTrackPublication, Room, TrackKind } from '@livekit/rtc-node';
|
|
3
3
|
import { AudioFrame } from '@livekit/rtc-node';
|
|
4
4
|
import type { ReadableStream } from 'node:stream/web';
|
|
5
|
+
/**
|
|
6
|
+
* Recursively expands all nested properties of a type,
|
|
7
|
+
* resolving aliases so as to inspect the real shape in IDE.
|
|
8
|
+
*/
|
|
9
|
+
export type Expand<T> = T extends Function ? T : T extends object ? T extends Array<infer U> ? Array<Expand<U>> : T extends Map<infer K, infer V> ? Map<Expand<K>, Expand<V>> : T extends Set<infer M> ? Set<Expand<M>> : {
|
|
10
|
+
[K in keyof T]: Expand<T[K]>;
|
|
11
|
+
} : T;
|
|
5
12
|
/** Union of a single and a list of {@link AudioFrame}s */
|
|
6
13
|
export type AudioBuffer = AudioFrame[] | AudioFrame;
|
|
7
14
|
export declare const noop: () => void;
|
|
@@ -30,6 +37,9 @@ export declare class Future<T = void> {
|
|
|
30
37
|
constructor();
|
|
31
38
|
get await(): Promise<T>;
|
|
32
39
|
get done(): boolean;
|
|
40
|
+
get result(): T;
|
|
41
|
+
/** Whether the future was rejected (cancelled) */
|
|
42
|
+
get rejected(): boolean;
|
|
33
43
|
resolve(value: T): void;
|
|
34
44
|
reject(error: Error): void;
|
|
35
45
|
}
|
|
@@ -80,7 +90,6 @@ export declare class AudioEnergyFilter {
|
|
|
80
90
|
constructor(cooldownSeconds?: number);
|
|
81
91
|
pushFrame(frame: AudioFrame): boolean;
|
|
82
92
|
}
|
|
83
|
-
export declare const TASK_TIMEOUT_ERROR: Error;
|
|
84
93
|
export declare enum TaskResult {
|
|
85
94
|
Timeout = "timeout",
|
|
86
95
|
Completed = "completed",
|
|
@@ -110,7 +119,9 @@ export declare class Task<T> {
|
|
|
110
119
|
private readonly fn;
|
|
111
120
|
private readonly controller;
|
|
112
121
|
readonly name?: string | undefined;
|
|
122
|
+
private static readonly currentTaskStorage;
|
|
113
123
|
private resultFuture;
|
|
124
|
+
private doneCallbacks;
|
|
114
125
|
constructor(fn: (controller: AbortController) => Promise<T>, controller: AbortController, name?: string | undefined);
|
|
115
126
|
/**
|
|
116
127
|
* Creates a new task from a function.
|
|
@@ -120,6 +131,10 @@ export declare class Task<T> {
|
|
|
120
131
|
* @returns A new task
|
|
121
132
|
*/
|
|
122
133
|
static from<T>(fn: (controller: AbortController) => Promise<T>, controller?: AbortController, name?: string): Task<T>;
|
|
134
|
+
/**
|
|
135
|
+
* Returns the currently running task in this async context, if available.
|
|
136
|
+
*/
|
|
137
|
+
static current(): Task<unknown> | undefined;
|
|
123
138
|
private runTask;
|
|
124
139
|
/**
|
|
125
140
|
* Cancels the task.
|
|
@@ -141,6 +156,7 @@ export declare class Task<T> {
|
|
|
141
156
|
*/
|
|
142
157
|
get done(): boolean;
|
|
143
158
|
addDoneCallback(callback: () => void): void;
|
|
159
|
+
removeDoneCallback(callback: () => void): void;
|
|
144
160
|
}
|
|
145
161
|
export declare function waitFor(tasks: Task<void>[]): Promise<void>;
|
|
146
162
|
export declare function cancelAndWait(tasks: Task<any>[], timeout?: number): Promise<void>;
|
|
@@ -181,6 +197,14 @@ export declare class InvalidErrorType extends Error {
|
|
|
181
197
|
readonly error: unknown;
|
|
182
198
|
constructor(error: unknown);
|
|
183
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if an error is a stream closed error that can be safely ignored during cleanup.
|
|
202
|
+
* This happens during handover/cleanup when close() is called while operations are still running.
|
|
203
|
+
*
|
|
204
|
+
* @param error - The error to check.
|
|
205
|
+
* @returns True if the error is a stream closed error.
|
|
206
|
+
*/
|
|
207
|
+
export declare function isStreamClosedError(error: unknown): boolean;
|
|
184
208
|
/**
|
|
185
209
|
* In JS an error can be any arbitrary value.
|
|
186
210
|
* This function converts an unknown error to an Error and stores the original value in the error object.
|
|
@@ -227,4 +251,20 @@ export declare function waitForTrackPublication({ room, identity, kind, }: {
|
|
|
227
251
|
kind: TrackKind;
|
|
228
252
|
}): Promise<RemoteTrackPublication>;
|
|
229
253
|
export declare function waitForAbort(signal: AbortSignal): Promise<void>;
|
|
254
|
+
/**
|
|
255
|
+
* Combines two abort signals into a single abort signal.
|
|
256
|
+
* @param a - The first abort signal.
|
|
257
|
+
* @param b - The second abort signal.
|
|
258
|
+
* @returns A new abort signal that is aborted when either of the input signals is aborted.
|
|
259
|
+
*/
|
|
260
|
+
export declare const combineSignals: (a: AbortSignal, b: AbortSignal) => AbortSignal;
|
|
261
|
+
export declare const isCloud: (url: URL) => boolean;
|
|
262
|
+
/**
|
|
263
|
+
* Whether the agent is running in development mode (launched via `dev` or `connect`).
|
|
264
|
+
*/
|
|
265
|
+
export declare const isDevMode: () => boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Whether the agent is hosted on LiveKit Cloud.
|
|
268
|
+
*/
|
|
269
|
+
export declare const isHosted: () => boolean;
|
|
230
270
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
import type { ParticipantKind, RemoteParticipant, RemoteTrackPublication, Room, TrackKind } from '@livekit/rtc-node';
|
|
3
3
|
import { AudioFrame } from '@livekit/rtc-node';
|
|
4
4
|
import type { ReadableStream } from 'node:stream/web';
|
|
5
|
+
/**
|
|
6
|
+
* Recursively expands all nested properties of a type,
|
|
7
|
+
* resolving aliases so as to inspect the real shape in IDE.
|
|
8
|
+
*/
|
|
9
|
+
export type Expand<T> = T extends Function ? T : T extends object ? T extends Array<infer U> ? Array<Expand<U>> : T extends Map<infer K, infer V> ? Map<Expand<K>, Expand<V>> : T extends Set<infer M> ? Set<Expand<M>> : {
|
|
10
|
+
[K in keyof T]: Expand<T[K]>;
|
|
11
|
+
} : T;
|
|
5
12
|
/** Union of a single and a list of {@link AudioFrame}s */
|
|
6
13
|
export type AudioBuffer = AudioFrame[] | AudioFrame;
|
|
7
14
|
export declare const noop: () => void;
|
|
@@ -30,6 +37,9 @@ export declare class Future<T = void> {
|
|
|
30
37
|
constructor();
|
|
31
38
|
get await(): Promise<T>;
|
|
32
39
|
get done(): boolean;
|
|
40
|
+
get result(): T;
|
|
41
|
+
/** Whether the future was rejected (cancelled) */
|
|
42
|
+
get rejected(): boolean;
|
|
33
43
|
resolve(value: T): void;
|
|
34
44
|
reject(error: Error): void;
|
|
35
45
|
}
|
|
@@ -80,7 +90,6 @@ export declare class AudioEnergyFilter {
|
|
|
80
90
|
constructor(cooldownSeconds?: number);
|
|
81
91
|
pushFrame(frame: AudioFrame): boolean;
|
|
82
92
|
}
|
|
83
|
-
export declare const TASK_TIMEOUT_ERROR: Error;
|
|
84
93
|
export declare enum TaskResult {
|
|
85
94
|
Timeout = "timeout",
|
|
86
95
|
Completed = "completed",
|
|
@@ -110,7 +119,9 @@ export declare class Task<T> {
|
|
|
110
119
|
private readonly fn;
|
|
111
120
|
private readonly controller;
|
|
112
121
|
readonly name?: string | undefined;
|
|
122
|
+
private static readonly currentTaskStorage;
|
|
113
123
|
private resultFuture;
|
|
124
|
+
private doneCallbacks;
|
|
114
125
|
constructor(fn: (controller: AbortController) => Promise<T>, controller: AbortController, name?: string | undefined);
|
|
115
126
|
/**
|
|
116
127
|
* Creates a new task from a function.
|
|
@@ -120,6 +131,10 @@ export declare class Task<T> {
|
|
|
120
131
|
* @returns A new task
|
|
121
132
|
*/
|
|
122
133
|
static from<T>(fn: (controller: AbortController) => Promise<T>, controller?: AbortController, name?: string): Task<T>;
|
|
134
|
+
/**
|
|
135
|
+
* Returns the currently running task in this async context, if available.
|
|
136
|
+
*/
|
|
137
|
+
static current(): Task<unknown> | undefined;
|
|
123
138
|
private runTask;
|
|
124
139
|
/**
|
|
125
140
|
* Cancels the task.
|
|
@@ -141,6 +156,7 @@ export declare class Task<T> {
|
|
|
141
156
|
*/
|
|
142
157
|
get done(): boolean;
|
|
143
158
|
addDoneCallback(callback: () => void): void;
|
|
159
|
+
removeDoneCallback(callback: () => void): void;
|
|
144
160
|
}
|
|
145
161
|
export declare function waitFor(tasks: Task<void>[]): Promise<void>;
|
|
146
162
|
export declare function cancelAndWait(tasks: Task<any>[], timeout?: number): Promise<void>;
|
|
@@ -181,6 +197,14 @@ export declare class InvalidErrorType extends Error {
|
|
|
181
197
|
readonly error: unknown;
|
|
182
198
|
constructor(error: unknown);
|
|
183
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if an error is a stream closed error that can be safely ignored during cleanup.
|
|
202
|
+
* This happens during handover/cleanup when close() is called while operations are still running.
|
|
203
|
+
*
|
|
204
|
+
* @param error - The error to check.
|
|
205
|
+
* @returns True if the error is a stream closed error.
|
|
206
|
+
*/
|
|
207
|
+
export declare function isStreamClosedError(error: unknown): boolean;
|
|
184
208
|
/**
|
|
185
209
|
* In JS an error can be any arbitrary value.
|
|
186
210
|
* This function converts an unknown error to an Error and stores the original value in the error object.
|
|
@@ -227,4 +251,20 @@ export declare function waitForTrackPublication({ room, identity, kind, }: {
|
|
|
227
251
|
kind: TrackKind;
|
|
228
252
|
}): Promise<RemoteTrackPublication>;
|
|
229
253
|
export declare function waitForAbort(signal: AbortSignal): Promise<void>;
|
|
254
|
+
/**
|
|
255
|
+
* Combines two abort signals into a single abort signal.
|
|
256
|
+
* @param a - The first abort signal.
|
|
257
|
+
* @param b - The second abort signal.
|
|
258
|
+
* @returns A new abort signal that is aborted when either of the input signals is aborted.
|
|
259
|
+
*/
|
|
260
|
+
export declare const combineSignals: (a: AbortSignal, b: AbortSignal) => AbortSignal;
|
|
261
|
+
export declare const isCloud: (url: URL) => boolean;
|
|
262
|
+
/**
|
|
263
|
+
* Whether the agent is running in development mode (launched via `dev` or `connect`).
|
|
264
|
+
*/
|
|
265
|
+
export declare const isDevMode: () => boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Whether the agent is hosted on LiveKit Cloud.
|
|
268
|
+
*/
|
|
269
|
+
export declare const isHosted: () => boolean;
|
|
230
270
|
//# sourceMappingURL=utils.d.ts.map
|