@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/inference/tts.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { beforeAll, describe, expect, it } from 'vitest';\nimport { normalizeLanguage } from '../language.js';\nimport { initializeLogger } from '../log.js';\nimport { type APIConnectOptions, DEFAULT_API_CONNECT_OPTIONS } from '../types.js';\nimport { TTS, type TTSFallbackModel, normalizeTTSFallback, parseTTSModelString } from './tts.js';\n\nbeforeAll(() => {\n initializeLogger({ level: 'silent', pretty: false });\n});\n\n/** Helper to create TTS with required credentials. */\nfunction makeTts(overrides: Record<string, unknown> = {}) {\n const defaults = {\n model: 'cartesia/sonic' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n };\n return new TTS({ ...defaults, ...overrides });\n}\n\ndescribe('parseTTSModelString', () => {\n it('simple model without voice', () => {\n const [model, voice] = parseTTSModelString('cartesia');\n expect(model).toBe('cartesia');\n expect(voice).toBeUndefined();\n });\n\n it('model with voice suffix', () => {\n const [model, voice] = parseTTSModelString('cartesia:my-voice-id');\n expect(model).toBe('cartesia');\n expect(voice).toBe('my-voice-id');\n });\n\n it('provider/model format without voice', () => {\n const [model, voice] = parseTTSModelString('cartesia/sonic');\n expect(model).toBe('cartesia/sonic');\n expect(voice).toBeUndefined();\n });\n\n it('provider/model format with voice', () => {\n const [model, voice] = parseTTSModelString('cartesia/sonic:my-voice-id');\n expect(model).toBe('cartesia/sonic');\n expect(voice).toBe('my-voice-id');\n });\n\n it.each([\n ['elevenlabs/eleven_flash_v2:voice123', 'elevenlabs/eleven_flash_v2', 'voice123'],\n ['rime:speaker-a', 'rime', 'speaker-a'],\n ['rime/mist:narrator', 'rime/mist', 'narrator'],\n ['inworld/inworld-tts-1:character', 'inworld/inworld-tts-1', 'character'],\n ['cartesia/sonic-turbo:deep-voice', 'cartesia/sonic-turbo', 'deep-voice'],\n ])('various providers and voices: %s', (modelStr, expectedModel, expectedVoice) => {\n const [model, voice] = parseTTSModelString(modelStr);\n expect(model).toBe(expectedModel);\n expect(voice).toBe(expectedVoice);\n });\n\n it('empty voice after colon', () => {\n const [model, voice] = parseTTSModelString('cartesia/sonic:');\n expect(model).toBe('cartesia/sonic');\n expect(voice).toBe('');\n });\n});\n\ndescribe('normalizeTTSFallback', () => {\n it('single string model', () => {\n const result = normalizeTTSFallback('cartesia/sonic');\n expect(result).toEqual([{ model: 'cartesia/sonic', voice: '' }]);\n });\n\n it('single string model with voice', () => {\n const result = normalizeTTSFallback('cartesia/sonic:my-voice');\n expect(result).toEqual([{ model: 'cartesia/sonic', voice: 'my-voice' }]);\n });\n\n it('single FallbackModel dict', () => {\n const fallback: TTSFallbackModel = { model: 'cartesia/sonic', voice: 'narrator' };\n const result = normalizeTTSFallback(fallback);\n expect(result).toEqual([{ model: 'cartesia/sonic', voice: 'narrator' }]);\n });\n\n it('list of string models', () => {\n const result = normalizeTTSFallback(['cartesia/sonic', 'elevenlabs/eleven_flash_v2']);\n expect(result).toEqual([\n { model: 'cartesia/sonic', voice: '' },\n { model: 'elevenlabs/eleven_flash_v2', voice: '' },\n ]);\n });\n\n it('list of string models with voices', () => {\n const result = normalizeTTSFallback(['cartesia/sonic:voice1', 'elevenlabs:voice2']);\n expect(result).toEqual([\n { model: 'cartesia/sonic', voice: 'voice1' },\n { model: 'elevenlabs', voice: 'voice2' },\n ]);\n });\n\n it('list of FallbackModel dicts', () => {\n const fallbacks: TTSFallbackModel[] = [\n { model: 'cartesia/sonic', voice: 'narrator' },\n { model: 'elevenlabs', voice: '' },\n ];\n const result = normalizeTTSFallback(fallbacks);\n expect(result).toEqual([\n { model: 'cartesia/sonic', voice: 'narrator' },\n { model: 'elevenlabs', voice: '' },\n ]);\n });\n\n it('mixed list of strings and dicts', () => {\n const result = normalizeTTSFallback([\n 'cartesia/sonic:voice1',\n { model: 'elevenlabs/eleven_flash_v2', voice: 'custom' } as TTSFallbackModel,\n 'rime/mist',\n ]);\n expect(result).toEqual([\n { model: 'cartesia/sonic', voice: 'voice1' },\n { model: 'elevenlabs/eleven_flash_v2', voice: 'custom' },\n { model: 'rime/mist', voice: '' },\n ]);\n });\n\n it('FallbackModel with extraKwargs is preserved', () => {\n const fallback: TTSFallbackModel = {\n model: 'cartesia/sonic',\n voice: 'narrator',\n extraKwargs: { duration: 30.0, speed: 'fast' },\n };\n const result = normalizeTTSFallback(fallback);\n expect(result).toEqual([\n {\n model: 'cartesia/sonic',\n voice: 'narrator',\n extraKwargs: { duration: 30.0, speed: 'fast' },\n },\n ]);\n });\n\n it('list with extraKwargs preserved', () => {\n const result = normalizeTTSFallback([\n { model: 'cartesia/sonic', voice: 'v1', extraKwargs: { speed: 'slow' } } as TTSFallbackModel,\n 'elevenlabs:voice2',\n { model: 'rime/mist', voice: '', extraKwargs: { custom: true } } as TTSFallbackModel,\n ]);\n expect(result).toEqual([\n { model: 'cartesia/sonic', voice: 'v1', extraKwargs: { speed: 'slow' } },\n { model: 'elevenlabs', voice: 'voice2' },\n { model: 'rime/mist', voice: '', extraKwargs: { custom: true } },\n ]);\n });\n\n it('empty list returns empty list', () => {\n const result = normalizeTTSFallback([]);\n expect(result).toEqual([]);\n });\n\n it('FallbackModel with empty voice', () => {\n const fallback: TTSFallbackModel = { model: 'cartesia/sonic', voice: '' };\n const result = normalizeTTSFallback(fallback);\n expect(result).toEqual([{ model: 'cartesia/sonic', voice: '' }]);\n });\n});\n\ndescribe('TTS constructor fallback and connOptions', () => {\n it('normalizes language in constructor', () => {\n const tts = makeTts({ language: 'english' });\n expect(tts['opts'].language).toBe('en');\n });\n\n it('normalizes updated language values', () => {\n const tts = makeTts();\n tts.updateOptions({ language: 'en_US' });\n expect(tts['opts'].language).toBe(normalizeLanguage('en_US'));\n });\n\n it('fallback not given defaults to undefined', () => {\n const tts = makeTts();\n expect(tts['opts'].fallback).toBeUndefined();\n });\n\n it('fallback single string is normalized', () => {\n const tts = makeTts({ fallback: 'elevenlabs/eleven_flash_v2' });\n expect(tts['opts'].fallback).toEqual([{ model: 'elevenlabs/eleven_flash_v2', voice: '' }]);\n });\n\n it('fallback single string with voice is normalized', () => {\n const tts = makeTts({ fallback: 'cartesia/sonic:my-voice' });\n expect(tts['opts'].fallback).toEqual([{ model: 'cartesia/sonic', voice: 'my-voice' }]);\n });\n\n it('fallback list of strings is normalized', () => {\n const tts = makeTts({ fallback: ['cartesia/sonic', 'elevenlabs'] });\n expect(tts['opts'].fallback).toEqual([\n { model: 'cartesia/sonic', voice: '' },\n { model: 'elevenlabs', voice: '' },\n ]);\n });\n\n it('fallback single FallbackModel is normalized to list', () => {\n const tts = makeTts({ fallback: { model: 'cartesia/sonic', voice: 'narrator' } });\n expect(tts['opts'].fallback).toEqual([{ model: 'cartesia/sonic', voice: 'narrator' }]);\n });\n\n it('fallback with extraKwargs is preserved', () => {\n const tts = makeTts({\n fallback: {\n model: 'cartesia/sonic',\n voice: 'narrator',\n extraKwargs: { duration: 30.0, speed: 'fast' },\n },\n });\n expect(tts['opts'].fallback).toEqual([\n {\n model: 'cartesia/sonic',\n voice: 'narrator',\n extraKwargs: { duration: 30.0, speed: 'fast' },\n },\n ]);\n });\n\n it('fallback mixed list is normalized', () => {\n const tts = makeTts({\n fallback: [\n 'cartesia/sonic:voice1',\n { model: 'elevenlabs', voice: 'custom', extraKwargs: { speed: 'slow' } },\n 'rime/mist',\n ],\n });\n expect(tts['opts'].fallback).toEqual([\n { model: 'cartesia/sonic', voice: 'voice1' },\n { model: 'elevenlabs', voice: 'custom', extraKwargs: { speed: 'slow' } },\n { model: 'rime/mist', voice: '' },\n ]);\n });\n\n it('connOptions not given uses default', () => {\n const tts = makeTts();\n expect(tts['opts'].connOptions).toEqual(DEFAULT_API_CONNECT_OPTIONS);\n });\n\n it('connOptions custom timeout', () => {\n const custom: APIConnectOptions = { timeoutMs: 30000, maxRetry: 3, retryIntervalMs: 2000 };\n const tts = makeTts({ connOptions: custom });\n expect(tts['opts'].connOptions).toEqual(custom);\n expect(tts['opts'].connOptions!.timeoutMs).toBe(30000);\n });\n\n it('connOptions custom maxRetry', () => {\n const custom: APIConnectOptions = { timeoutMs: 10000, maxRetry: 5, retryIntervalMs: 2000 };\n const tts = makeTts({ connOptions: custom });\n expect(tts['opts'].connOptions).toEqual(custom);\n expect(tts['opts'].connOptions!.maxRetry).toBe(5);\n });\n\n it('connOptions full custom', () => {\n const custom: APIConnectOptions = { timeoutMs: 60000, maxRetry: 10, retryIntervalMs: 2000 };\n const tts = makeTts({ connOptions: custom });\n expect(tts['opts'].connOptions).toEqual(custom);\n expect(tts['opts'].connOptions!.timeoutMs).toBe(60000);\n expect(tts['opts'].connOptions!.maxRetry).toBe(10);\n expect(tts['opts'].connOptions!.retryIntervalMs).toBe(2000);\n });\n});\n\ndescribe('TTS provider modelOptions parity', () => {\n it('preserves ElevenLabs inference model options', () => {\n const modelOptions = {\n speed: 1.2,\n stability: 0.5,\n similarity_boost: 0.8,\n enable_logging: false,\n };\n\n const tts = new TTS({\n model: 'elevenlabs/eleven_flash_v2_5' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n modelOptions,\n });\n\n expect(tts['opts'].modelOptions).toEqual(modelOptions);\n });\n\n it('accepts expanded Cartesia inference model options', () => {\n const modelOptions = {\n speed: 1.15,\n emotion: 'curious',\n add_timestamps: true,\n };\n\n const tts = new TTS({\n model: 'cartesia/sonic' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n modelOptions,\n });\n\n expect(tts['opts'].modelOptions).toEqual(modelOptions);\n });\n\n it('accepts Deepgram inference model options', () => {\n const modelOptions = { mip_opt_out: true };\n\n const tts = new TTS({\n model: 'deepgram/aura-2' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n modelOptions,\n });\n\n expect(tts['opts'].modelOptions).toEqual(modelOptions);\n });\n\n it('accepts Rime inference model options', () => {\n const modelOptions = {\n speed_alpha: 0.9,\n pause_between_brackets: true,\n };\n\n const tts = new TTS({\n model: 'rime/mistv2' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n modelOptions,\n });\n\n expect(tts['opts'].modelOptions).toEqual(modelOptions);\n });\n\n it('accepts Inworld inference model options', () => {\n const modelOptions = {\n timestamp_type: 'WORD' as const,\n apply_text_normalization: 'ON' as const,\n };\n\n const tts = new TTS({\n model: 'inworld/inworld-tts-1' as const,\n apiKey: 'test-key',\n apiSecret: 'test-secret',\n baseURL: 'https://example.livekit.cloud',\n modelOptions,\n });\n\n expect(tts['opts'].modelOptions).toEqual(modelOptions);\n });\n});\n"],"mappings":"AAGA,SAAS,WAAW,UAAU,QAAQ,UAAU;AAChD,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAiC,mCAAmC;AACpE,SAAS,KAA4B,sBAAsB,2BAA2B;AAEtF,UAAU,MAAM;AACd,mBAAiB,EAAE,OAAO,UAAU,QAAQ,MAAM,CAAC;AACrD,CAAC;AAGD,SAAS,QAAQ,YAAqC,CAAC,GAAG;AACxD,QAAM,WAAW;AAAA,IACf,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,IAAI,IAAI,EAAE,GAAG,UAAU,GAAG,UAAU,CAAC;AAC9C;AAEA,SAAS,uBAAuB,MAAM;AACpC,KAAG,8BAA8B,MAAM;AACrC,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,UAAU;AACrD,WAAO,KAAK,EAAE,KAAK,UAAU;AAC7B,WAAO,KAAK,EAAE,cAAc;AAAA,EAC9B,CAAC;AAED,KAAG,2BAA2B,MAAM;AAClC,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,sBAAsB;AACjE,WAAO,KAAK,EAAE,KAAK,UAAU;AAC7B,WAAO,KAAK,EAAE,KAAK,aAAa;AAAA,EAClC,CAAC;AAED,KAAG,uCAAuC,MAAM;AAC9C,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,gBAAgB;AAC3D,WAAO,KAAK,EAAE,KAAK,gBAAgB;AACnC,WAAO,KAAK,EAAE,cAAc;AAAA,EAC9B,CAAC;AAED,KAAG,oCAAoC,MAAM;AAC3C,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,4BAA4B;AACvE,WAAO,KAAK,EAAE,KAAK,gBAAgB;AACnC,WAAO,KAAK,EAAE,KAAK,aAAa;AAAA,EAClC,CAAC;AAED,KAAG,KAAK;AAAA,IACN,CAAC,uCAAuC,8BAA8B,UAAU;AAAA,IAChF,CAAC,kBAAkB,QAAQ,WAAW;AAAA,IACtC,CAAC,sBAAsB,aAAa,UAAU;AAAA,IAC9C,CAAC,mCAAmC,yBAAyB,WAAW;AAAA,IACxE,CAAC,mCAAmC,wBAAwB,YAAY;AAAA,EAC1E,CAAC,EAAE,oCAAoC,CAAC,UAAU,eAAe,kBAAkB;AACjF,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,QAAQ;AACnD,WAAO,KAAK,EAAE,KAAK,aAAa;AAChC,WAAO,KAAK,EAAE,KAAK,aAAa;AAAA,EAClC,CAAC;AAED,KAAG,2BAA2B,MAAM;AAClC,UAAM,CAAC,OAAO,KAAK,IAAI,oBAAoB,iBAAiB;AAC5D,WAAO,KAAK,EAAE,KAAK,gBAAgB;AACnC,WAAO,KAAK,EAAE,KAAK,EAAE;AAAA,EACvB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,MAAM;AACrC,KAAG,uBAAuB,MAAM;AAC9B,UAAM,SAAS,qBAAqB,gBAAgB;AACpD,WAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,GAAG,CAAC,CAAC;AAAA,EACjE,CAAC;AAED,KAAG,kCAAkC,MAAM;AACzC,UAAM,SAAS,qBAAqB,yBAAyB;AAC7D,WAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,EACzE,CAAC;AAED,KAAG,6BAA6B,MAAM;AACpC,UAAM,WAA6B,EAAE,OAAO,kBAAkB,OAAO,WAAW;AAChF,UAAM,SAAS,qBAAqB,QAAQ;AAC5C,WAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,EACzE,CAAC;AAED,KAAG,yBAAyB,MAAM;AAChC,UAAM,SAAS,qBAAqB,CAAC,kBAAkB,4BAA4B,CAAC;AACpF,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,EAAE,OAAO,kBAAkB,OAAO,GAAG;AAAA,MACrC,EAAE,OAAO,8BAA8B,OAAO,GAAG;AAAA,IACnD,CAAC;AAAA,EACH,CAAC;AAED,KAAG,qCAAqC,MAAM;AAC5C,UAAM,SAAS,qBAAqB,CAAC,yBAAyB,mBAAmB,CAAC;AAClF,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,EAAE,OAAO,kBAAkB,OAAO,SAAS;AAAA,MAC3C,EAAE,OAAO,cAAc,OAAO,SAAS;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,+BAA+B,MAAM;AACtC,UAAM,YAAgC;AAAA,MACpC,EAAE,OAAO,kBAAkB,OAAO,WAAW;AAAA,MAC7C,EAAE,OAAO,cAAc,OAAO,GAAG;AAAA,IACnC;AACA,UAAM,SAAS,qBAAqB,SAAS;AAC7C,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,EAAE,OAAO,kBAAkB,OAAO,WAAW;AAAA,MAC7C,EAAE,OAAO,cAAc,OAAO,GAAG;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,mCAAmC,MAAM;AAC1C,UAAM,SAAS,qBAAqB;AAAA,MAClC;AAAA,MACA,EAAE,OAAO,8BAA8B,OAAO,SAAS;AAAA,MACvD;AAAA,IACF,CAAC;AACD,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,EAAE,OAAO,kBAAkB,OAAO,SAAS;AAAA,MAC3C,EAAE,OAAO,8BAA8B,OAAO,SAAS;AAAA,MACvD,EAAE,OAAO,aAAa,OAAO,GAAG;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,+CAA+C,MAAM;AACtD,UAAM,WAA6B;AAAA,MACjC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,aAAa,EAAE,UAAU,IAAM,OAAO,OAAO;AAAA,IAC/C;AACA,UAAM,SAAS,qBAAqB,QAAQ;AAC5C,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,aAAa,EAAE,UAAU,IAAM,OAAO,OAAO;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,mCAAmC,MAAM;AAC1C,UAAM,SAAS,qBAAqB;AAAA,MAClC,EAAE,OAAO,kBAAkB,OAAO,MAAM,aAAa,EAAE,OAAO,OAAO,EAAE;AAAA,MACvE;AAAA,MACA,EAAE,OAAO,aAAa,OAAO,IAAI,aAAa,EAAE,QAAQ,KAAK,EAAE;AAAA,IACjE,CAAC;AACD,WAAO,MAAM,EAAE,QAAQ;AAAA,MACrB,EAAE,OAAO,kBAAkB,OAAO,MAAM,aAAa,EAAE,OAAO,OAAO,EAAE;AAAA,MACvE,EAAE,OAAO,cAAc,OAAO,SAAS;AAAA,MACvC,EAAE,OAAO,aAAa,OAAO,IAAI,aAAa,EAAE,QAAQ,KAAK,EAAE;AAAA,IACjE,CAAC;AAAA,EACH,CAAC;AAED,KAAG,iCAAiC,MAAM;AACxC,UAAM,SAAS,qBAAqB,CAAC,CAAC;AACtC,WAAO,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC3B,CAAC;AAED,KAAG,kCAAkC,MAAM;AACzC,UAAM,WAA6B,EAAE,OAAO,kBAAkB,OAAO,GAAG;AACxE,UAAM,SAAS,qBAAqB,QAAQ;AAC5C,WAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,GAAG,CAAC,CAAC;AAAA,EACjE,CAAC;AACH,CAAC;AAED,SAAS,4CAA4C,MAAM;AACzD,KAAG,sCAAsC,MAAM;AAC7C,UAAM,MAAM,QAAQ,EAAE,UAAU,UAAU,CAAC;AAC3C,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI;AAAA,EACxC,CAAC;AAED,KAAG,sCAAsC,MAAM;AAC7C,UAAM,MAAM,QAAQ;AACpB,QAAI,cAAc,EAAE,UAAU,QAAQ,CAAC;AACvC,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,KAAK,kBAAkB,OAAO,CAAC;AAAA,EAC9D,CAAC;AAED,KAAG,4CAA4C,MAAM;AACnD,UAAM,MAAM,QAAQ;AACpB,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,cAAc;AAAA,EAC7C,CAAC;AAED,KAAG,wCAAwC,MAAM;AAC/C,UAAM,MAAM,QAAQ,EAAE,UAAU,6BAA6B,CAAC;AAC9D,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,8BAA8B,OAAO,GAAG,CAAC,CAAC;AAAA,EAC3F,CAAC;AAED,KAAG,mDAAmD,MAAM;AAC1D,UAAM,MAAM,QAAQ,EAAE,UAAU,0BAA0B,CAAC;AAC3D,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,EACvF,CAAC;AAED,KAAG,0CAA0C,MAAM;AACjD,UAAM,MAAM,QAAQ,EAAE,UAAU,CAAC,kBAAkB,YAAY,EAAE,CAAC;AAClE,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACnC,EAAE,OAAO,kBAAkB,OAAO,GAAG;AAAA,MACrC,EAAE,OAAO,cAAc,OAAO,GAAG;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,uDAAuD,MAAM;AAC9D,UAAM,MAAM,QAAQ,EAAE,UAAU,EAAE,OAAO,kBAAkB,OAAO,WAAW,EAAE,CAAC;AAChF,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,EACvF,CAAC;AAED,KAAG,0CAA0C,MAAM;AACjD,UAAM,MAAM,QAAQ;AAAA,MAClB,UAAU;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,QACP,aAAa,EAAE,UAAU,IAAM,OAAO,OAAO;AAAA,MAC/C;AAAA,IACF,CAAC;AACD,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACnC;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,QACP,aAAa,EAAE,UAAU,IAAM,OAAO,OAAO;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,KAAG,qCAAqC,MAAM;AAC5C,UAAM,MAAM,QAAQ;AAAA,MAClB,UAAU;AAAA,QACR;AAAA,QACA,EAAE,OAAO,cAAc,OAAO,UAAU,aAAa,EAAE,OAAO,OAAO,EAAE;AAAA,QACvE;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ;AAAA,MACnC,EAAE,OAAO,kBAAkB,OAAO,SAAS;AAAA,MAC3C,EAAE,OAAO,cAAc,OAAO,UAAU,aAAa,EAAE,OAAO,OAAO,EAAE;AAAA,MACvE,EAAE,OAAO,aAAa,OAAO,GAAG;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,KAAG,sCAAsC,MAAM;AAC7C,UAAM,MAAM,QAAQ;AACpB,WAAO,IAAI,MAAM,EAAE,WAAW,EAAE,QAAQ,2BAA2B;AAAA,EACrE,CAAC;AAED,KAAG,8BAA8B,MAAM;AACrC,UAAM,SAA4B,EAAE,WAAW,KAAO,UAAU,GAAG,iBAAiB,IAAK;AACzF,UAAM,MAAM,QAAQ,EAAE,aAAa,OAAO,CAAC;AAC3C,WAAO,IAAI,MAAM,EAAE,WAAW,EAAE,QAAQ,MAAM;AAC9C,WAAO,IAAI,MAAM,EAAE,YAAa,SAAS,EAAE,KAAK,GAAK;AAAA,EACvD,CAAC;AAED,KAAG,+BAA+B,MAAM;AACtC,UAAM,SAA4B,EAAE,WAAW,KAAO,UAAU,GAAG,iBAAiB,IAAK;AACzF,UAAM,MAAM,QAAQ,EAAE,aAAa,OAAO,CAAC;AAC3C,WAAO,IAAI,MAAM,EAAE,WAAW,EAAE,QAAQ,MAAM;AAC9C,WAAO,IAAI,MAAM,EAAE,YAAa,QAAQ,EAAE,KAAK,CAAC;AAAA,EAClD,CAAC;AAED,KAAG,2BAA2B,MAAM;AAClC,UAAM,SAA4B,EAAE,WAAW,KAAO,UAAU,IAAI,iBAAiB,IAAK;AAC1F,UAAM,MAAM,QAAQ,EAAE,aAAa,OAAO,CAAC;AAC3C,WAAO,IAAI,MAAM,EAAE,WAAW,EAAE,QAAQ,MAAM;AAC9C,WAAO,IAAI,MAAM,EAAE,YAAa,SAAS,EAAE,KAAK,GAAK;AACrD,WAAO,IAAI,MAAM,EAAE,YAAa,QAAQ,EAAE,KAAK,EAAE;AACjD,WAAO,IAAI,MAAM,EAAE,YAAa,eAAe,EAAE,KAAK,GAAI;AAAA,EAC5D,CAAC;AACH,CAAC;AAED,SAAS,oCAAoC,MAAM;AACjD,KAAG,gDAAgD,MAAM;AACvD,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,IAClB;AAEA,UAAM,MAAM,IAAI,IAAI;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,YAAY;AAAA,EACvD,CAAC;AAED,KAAG,qDAAqD,MAAM;AAC5D,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB;AAEA,UAAM,MAAM,IAAI,IAAI;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,YAAY;AAAA,EACvD,CAAC;AAED,KAAG,4CAA4C,MAAM;AACnD,UAAM,eAAe,EAAE,aAAa,KAAK;AAEzC,UAAM,MAAM,IAAI,IAAI;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,YAAY;AAAA,EACvD,CAAC;AAED,KAAG,wCAAwC,MAAM;AAC/C,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,wBAAwB;AAAA,IAC1B;AAEA,UAAM,MAAM,IAAI,IAAI;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,YAAY;AAAA,EACvD,CAAC;AAED,KAAG,2CAA2C,MAAM;AAClD,UAAM,eAAe;AAAA,MACnB,gBAAgB;AAAA,MAChB,0BAA0B;AAAA,IAC5B;AAEA,UAAM,MAAM,IAAI,IAAI;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAO,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,YAAY;AAAA,EACvD,CAAC;AACH,CAAC;","names":[]}
|
package/dist/inference/utils.cjs
CHANGED
|
@@ -18,13 +18,29 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var utils_exports = {};
|
|
20
20
|
__export(utils_exports, {
|
|
21
|
+
DEFAULT_INFERENCE_URL: () => DEFAULT_INFERENCE_URL,
|
|
22
|
+
STAGING_INFERENCE_URL: () => STAGING_INFERENCE_URL,
|
|
21
23
|
connectWs: () => connectWs,
|
|
22
|
-
createAccessToken: () => createAccessToken
|
|
24
|
+
createAccessToken: () => createAccessToken,
|
|
25
|
+
getDefaultInferenceUrl: () => getDefaultInferenceUrl
|
|
23
26
|
});
|
|
24
27
|
module.exports = __toCommonJS(utils_exports);
|
|
25
28
|
var import_livekit_server_sdk = require("livekit-server-sdk");
|
|
26
29
|
var import_ws = require("ws");
|
|
27
|
-
var
|
|
30
|
+
var import_exceptions = require("../_exceptions.cjs");
|
|
31
|
+
const DEFAULT_INFERENCE_URL = "https://agent-gateway.livekit.cloud/v1";
|
|
32
|
+
const STAGING_INFERENCE_URL = "https://agent-gateway.staging.livekit.cloud/v1";
|
|
33
|
+
function getDefaultInferenceUrl() {
|
|
34
|
+
const inferenceUrl = process.env.LIVEKIT_INFERENCE_URL;
|
|
35
|
+
if (inferenceUrl) {
|
|
36
|
+
return inferenceUrl;
|
|
37
|
+
}
|
|
38
|
+
const livekitUrl = process.env.LIVEKIT_URL || "";
|
|
39
|
+
if (livekitUrl.includes(".staging.livekit.cloud")) {
|
|
40
|
+
return STAGING_INFERENCE_URL;
|
|
41
|
+
}
|
|
42
|
+
return DEFAULT_INFERENCE_URL;
|
|
43
|
+
}
|
|
28
44
|
async function createAccessToken(apiKey, apiSecret, ttl = 600) {
|
|
29
45
|
const token = new import_livekit_server_sdk.AccessToken(apiKey, apiSecret, { identity: "agent", ttl });
|
|
30
46
|
token.addInferenceGrant({ perform: true });
|
|
@@ -34,7 +50,7 @@ async function connectWs(url, headers, timeoutMs) {
|
|
|
34
50
|
return new Promise((resolve, reject) => {
|
|
35
51
|
const socket = new import_ws.WebSocket(url, { headers });
|
|
36
52
|
const timeout = setTimeout(() => {
|
|
37
|
-
reject(new
|
|
53
|
+
reject(new import_exceptions.APIConnectionError({ message: "Timeout connecting to LiveKit WebSocket" }));
|
|
38
54
|
}, timeoutMs);
|
|
39
55
|
const onOpen = () => {
|
|
40
56
|
clearTimeout(timeout);
|
|
@@ -44,20 +60,20 @@ async function connectWs(url, headers, timeoutMs) {
|
|
|
44
60
|
clearTimeout(timeout);
|
|
45
61
|
if (err && typeof err === "object" && "code" in err && err.code === 429) {
|
|
46
62
|
reject(
|
|
47
|
-
new
|
|
63
|
+
new import_exceptions.APIStatusError({
|
|
48
64
|
message: "LiveKit gateway quota exceeded",
|
|
49
65
|
options: { statusCode: 429 }
|
|
50
66
|
})
|
|
51
67
|
);
|
|
52
68
|
} else {
|
|
53
|
-
reject(new
|
|
69
|
+
reject(new import_exceptions.APIConnectionError({ message: "Error connecting to LiveKit WebSocket" }));
|
|
54
70
|
}
|
|
55
71
|
};
|
|
56
72
|
const onClose = (code) => {
|
|
57
73
|
clearTimeout(timeout);
|
|
58
74
|
if (code !== 1e3) {
|
|
59
75
|
reject(
|
|
60
|
-
new
|
|
76
|
+
new import_exceptions.APIConnectionError({
|
|
61
77
|
message: "Connection closed unexpectedly"
|
|
62
78
|
})
|
|
63
79
|
);
|
|
@@ -70,7 +86,10 @@ async function connectWs(url, headers, timeoutMs) {
|
|
|
70
86
|
}
|
|
71
87
|
// Annotate the CommonJS export names for ESM import in node:
|
|
72
88
|
0 && (module.exports = {
|
|
89
|
+
DEFAULT_INFERENCE_URL,
|
|
90
|
+
STAGING_INFERENCE_URL,
|
|
73
91
|
connectWs,
|
|
74
|
-
createAccessToken
|
|
92
|
+
createAccessToken,
|
|
93
|
+
getDefaultInferenceUrl
|
|
75
94
|
});
|
|
76
95
|
//# sourceMappingURL=utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/inference/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AccessToken } from 'livekit-server-sdk';\nimport { WebSocket } from 'ws';\nimport { APIConnectionError, APIStatusError } from '../
|
|
1
|
+
{"version":3,"sources":["../../src/inference/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AccessToken } from 'livekit-server-sdk';\nimport { WebSocket } from 'ws';\nimport { APIConnectionError, APIStatusError } from '../_exceptions.js';\n\nexport type AnyString = string & NonNullable<unknown>;\n\n/** Default production inference URL */\nexport const DEFAULT_INFERENCE_URL = 'https://agent-gateway.livekit.cloud/v1';\n\n/** Staging inference URL */\nexport const STAGING_INFERENCE_URL = 'https://agent-gateway.staging.livekit.cloud/v1';\n\n/**\n * Get the default inference URL based on the environment.\n *\n * Priority:\n * 1. LIVEKIT_INFERENCE_URL if set\n * 2. If LIVEKIT_URL contains '.staging.livekit.cloud', use staging gateway\n * 3. Otherwise, use production gateway\n */\nexport function getDefaultInferenceUrl(): string {\n const inferenceUrl = process.env.LIVEKIT_INFERENCE_URL;\n if (inferenceUrl) {\n return inferenceUrl;\n }\n\n const livekitUrl = process.env.LIVEKIT_URL || '';\n if (livekitUrl.includes('.staging.livekit.cloud')) {\n return STAGING_INFERENCE_URL;\n }\n\n return DEFAULT_INFERENCE_URL;\n}\n\nexport async function createAccessToken(\n apiKey: string,\n apiSecret: string,\n ttl: number = 600,\n): Promise<string> {\n const token = new AccessToken(apiKey, apiSecret, { identity: 'agent', ttl });\n token.addInferenceGrant({ perform: true });\n\n return await token.toJwt();\n}\n\nexport async function connectWs(\n url: string,\n headers: Record<string, string>,\n timeoutMs: number,\n): Promise<WebSocket> {\n return new Promise<WebSocket>((resolve, reject) => {\n const socket = new WebSocket(url, { headers: headers });\n\n const timeout = setTimeout(() => {\n reject(new APIConnectionError({ message: 'Timeout connecting to LiveKit WebSocket' }));\n }, timeoutMs);\n\n const onOpen = () => {\n clearTimeout(timeout);\n resolve(socket);\n };\n\n const onError = (err: unknown) => {\n clearTimeout(timeout);\n if (err && typeof err === 'object' && 'code' in err && (err as any).code === 429) {\n reject(\n new APIStatusError({\n message: 'LiveKit gateway quota exceeded',\n options: { statusCode: 429 },\n }),\n );\n } else {\n reject(new APIConnectionError({ message: 'Error connecting to LiveKit WebSocket' }));\n }\n };\n\n const onClose = (code: number) => {\n clearTimeout(timeout);\n if (code !== 1000) {\n reject(\n new APIConnectionError({\n message: 'Connection closed unexpectedly',\n }),\n );\n }\n };\n socket.once('open', onOpen);\n socket.once('error', onError);\n socket.once('close', onClose);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,gCAA4B;AAC5B,gBAA0B;AAC1B,wBAAmD;AAK5C,MAAM,wBAAwB;AAG9B,MAAM,wBAAwB;AAU9B,SAAS,yBAAiC;AAC/C,QAAM,eAAe,QAAQ,IAAI;AACjC,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,IAAI,eAAe;AAC9C,MAAI,WAAW,SAAS,wBAAwB,GAAG;AACjD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAsB,kBACpB,QACA,WACA,MAAc,KACG;AACjB,QAAM,QAAQ,IAAI,sCAAY,QAAQ,WAAW,EAAE,UAAU,SAAS,IAAI,CAAC;AAC3E,QAAM,kBAAkB,EAAE,SAAS,KAAK,CAAC;AAEzC,SAAO,MAAM,MAAM,MAAM;AAC3B;AAEA,eAAsB,UACpB,KACA,SACA,WACoB;AACpB,SAAO,IAAI,QAAmB,CAAC,SAAS,WAAW;AACjD,UAAM,SAAS,IAAI,oBAAU,KAAK,EAAE,QAAiB,CAAC;AAEtD,UAAM,UAAU,WAAW,MAAM;AAC/B,aAAO,IAAI,qCAAmB,EAAE,SAAS,0CAA0C,CAAC,CAAC;AAAA,IACvF,GAAG,SAAS;AAEZ,UAAM,SAAS,MAAM;AACnB,mBAAa,OAAO;AACpB,cAAQ,MAAM;AAAA,IAChB;AAEA,UAAM,UAAU,CAAC,QAAiB;AAChC,mBAAa,OAAO;AACpB,UAAI,OAAO,OAAO,QAAQ,YAAY,UAAU,OAAQ,IAAY,SAAS,KAAK;AAChF;AAAA,UACE,IAAI,iCAAe;AAAA,YACjB,SAAS;AAAA,YACT,SAAS,EAAE,YAAY,IAAI;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,eAAO,IAAI,qCAAmB,EAAE,SAAS,wCAAwC,CAAC,CAAC;AAAA,MACrF;AAAA,IACF;AAEA,UAAM,UAAU,CAAC,SAAiB;AAChC,mBAAa,OAAO;AACpB,UAAI,SAAS,KAAM;AACjB;AAAA,UACE,IAAI,qCAAmB;AAAA,YACrB,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,QAAQ,MAAM;AAC1B,WAAO,KAAK,SAAS,OAAO;AAC5B,WAAO,KAAK,SAAS,OAAO;AAAA,EAC9B,CAAC;AACH;","names":[]}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { WebSocket } from 'ws';
|
|
2
|
-
export type
|
|
2
|
+
export type AnyString = string & NonNullable<unknown>;
|
|
3
|
+
/** Default production inference URL */
|
|
4
|
+
export declare const DEFAULT_INFERENCE_URL = "https://agent-gateway.livekit.cloud/v1";
|
|
5
|
+
/** Staging inference URL */
|
|
6
|
+
export declare const STAGING_INFERENCE_URL = "https://agent-gateway.staging.livekit.cloud/v1";
|
|
7
|
+
/**
|
|
8
|
+
* Get the default inference URL based on the environment.
|
|
9
|
+
*
|
|
10
|
+
* Priority:
|
|
11
|
+
* 1. LIVEKIT_INFERENCE_URL if set
|
|
12
|
+
* 2. If LIVEKIT_URL contains '.staging.livekit.cloud', use staging gateway
|
|
13
|
+
* 3. Otherwise, use production gateway
|
|
14
|
+
*/
|
|
15
|
+
export declare function getDefaultInferenceUrl(): string;
|
|
3
16
|
export declare function createAccessToken(apiKey: string, apiSecret: string, ttl?: number): Promise<string>;
|
|
4
17
|
export declare function connectWs(url: string, headers: Record<string, string>, timeoutMs: number): Promise<WebSocket>;
|
|
5
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { WebSocket } from 'ws';
|
|
2
|
-
export type
|
|
2
|
+
export type AnyString = string & NonNullable<unknown>;
|
|
3
|
+
/** Default production inference URL */
|
|
4
|
+
export declare const DEFAULT_INFERENCE_URL = "https://agent-gateway.livekit.cloud/v1";
|
|
5
|
+
/** Staging inference URL */
|
|
6
|
+
export declare const STAGING_INFERENCE_URL = "https://agent-gateway.staging.livekit.cloud/v1";
|
|
7
|
+
/**
|
|
8
|
+
* Get the default inference URL based on the environment.
|
|
9
|
+
*
|
|
10
|
+
* Priority:
|
|
11
|
+
* 1. LIVEKIT_INFERENCE_URL if set
|
|
12
|
+
* 2. If LIVEKIT_URL contains '.staging.livekit.cloud', use staging gateway
|
|
13
|
+
* 3. Otherwise, use production gateway
|
|
14
|
+
*/
|
|
15
|
+
export declare function getDefaultInferenceUrl(): string;
|
|
3
16
|
export declare function createAccessToken(apiKey: string, apiSecret: string, ttl?: number): Promise<string>;
|
|
4
17
|
export declare function connectWs(url: string, headers: Record<string, string>, timeoutMs: number): Promise<WebSocket>;
|
|
5
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/inference/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAG/B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEtD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAY,GAChB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC,CAyCpB"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/inference/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAG/B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEtD,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,2CAA2C,CAAC;AAE9E,4BAA4B;AAC5B,eAAO,MAAM,qBAAqB,mDAAmD,CAAC;AAEtF;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAY/C;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAY,GAChB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC,CAyCpB"}
|
package/dist/inference/utils.js
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { AccessToken } from "livekit-server-sdk";
|
|
2
2
|
import { WebSocket } from "ws";
|
|
3
|
-
import { APIConnectionError, APIStatusError } from "../
|
|
3
|
+
import { APIConnectionError, APIStatusError } from "../_exceptions.js";
|
|
4
|
+
const DEFAULT_INFERENCE_URL = "https://agent-gateway.livekit.cloud/v1";
|
|
5
|
+
const STAGING_INFERENCE_URL = "https://agent-gateway.staging.livekit.cloud/v1";
|
|
6
|
+
function getDefaultInferenceUrl() {
|
|
7
|
+
const inferenceUrl = process.env.LIVEKIT_INFERENCE_URL;
|
|
8
|
+
if (inferenceUrl) {
|
|
9
|
+
return inferenceUrl;
|
|
10
|
+
}
|
|
11
|
+
const livekitUrl = process.env.LIVEKIT_URL || "";
|
|
12
|
+
if (livekitUrl.includes(".staging.livekit.cloud")) {
|
|
13
|
+
return STAGING_INFERENCE_URL;
|
|
14
|
+
}
|
|
15
|
+
return DEFAULT_INFERENCE_URL;
|
|
16
|
+
}
|
|
4
17
|
async function createAccessToken(apiKey, apiSecret, ttl = 600) {
|
|
5
18
|
const token = new AccessToken(apiKey, apiSecret, { identity: "agent", ttl });
|
|
6
19
|
token.addInferenceGrant({ perform: true });
|
|
@@ -45,7 +58,10 @@ async function connectWs(url, headers, timeoutMs) {
|
|
|
45
58
|
});
|
|
46
59
|
}
|
|
47
60
|
export {
|
|
61
|
+
DEFAULT_INFERENCE_URL,
|
|
62
|
+
STAGING_INFERENCE_URL,
|
|
48
63
|
connectWs,
|
|
49
|
-
createAccessToken
|
|
64
|
+
createAccessToken,
|
|
65
|
+
getDefaultInferenceUrl
|
|
50
66
|
};
|
|
51
67
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/inference/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AccessToken } from 'livekit-server-sdk';\nimport { WebSocket } from 'ws';\nimport { APIConnectionError, APIStatusError } from '../
|
|
1
|
+
{"version":3,"sources":["../../src/inference/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { AccessToken } from 'livekit-server-sdk';\nimport { WebSocket } from 'ws';\nimport { APIConnectionError, APIStatusError } from '../_exceptions.js';\n\nexport type AnyString = string & NonNullable<unknown>;\n\n/** Default production inference URL */\nexport const DEFAULT_INFERENCE_URL = 'https://agent-gateway.livekit.cloud/v1';\n\n/** Staging inference URL */\nexport const STAGING_INFERENCE_URL = 'https://agent-gateway.staging.livekit.cloud/v1';\n\n/**\n * Get the default inference URL based on the environment.\n *\n * Priority:\n * 1. LIVEKIT_INFERENCE_URL if set\n * 2. If LIVEKIT_URL contains '.staging.livekit.cloud', use staging gateway\n * 3. Otherwise, use production gateway\n */\nexport function getDefaultInferenceUrl(): string {\n const inferenceUrl = process.env.LIVEKIT_INFERENCE_URL;\n if (inferenceUrl) {\n return inferenceUrl;\n }\n\n const livekitUrl = process.env.LIVEKIT_URL || '';\n if (livekitUrl.includes('.staging.livekit.cloud')) {\n return STAGING_INFERENCE_URL;\n }\n\n return DEFAULT_INFERENCE_URL;\n}\n\nexport async function createAccessToken(\n apiKey: string,\n apiSecret: string,\n ttl: number = 600,\n): Promise<string> {\n const token = new AccessToken(apiKey, apiSecret, { identity: 'agent', ttl });\n token.addInferenceGrant({ perform: true });\n\n return await token.toJwt();\n}\n\nexport async function connectWs(\n url: string,\n headers: Record<string, string>,\n timeoutMs: number,\n): Promise<WebSocket> {\n return new Promise<WebSocket>((resolve, reject) => {\n const socket = new WebSocket(url, { headers: headers });\n\n const timeout = setTimeout(() => {\n reject(new APIConnectionError({ message: 'Timeout connecting to LiveKit WebSocket' }));\n }, timeoutMs);\n\n const onOpen = () => {\n clearTimeout(timeout);\n resolve(socket);\n };\n\n const onError = (err: unknown) => {\n clearTimeout(timeout);\n if (err && typeof err === 'object' && 'code' in err && (err as any).code === 429) {\n reject(\n new APIStatusError({\n message: 'LiveKit gateway quota exceeded',\n options: { statusCode: 429 },\n }),\n );\n } else {\n reject(new APIConnectionError({ message: 'Error connecting to LiveKit WebSocket' }));\n }\n };\n\n const onClose = (code: number) => {\n clearTimeout(timeout);\n if (code !== 1000) {\n reject(\n new APIConnectionError({\n message: 'Connection closed unexpectedly',\n }),\n );\n }\n };\n socket.once('open', onOpen);\n socket.once('error', onError);\n socket.once('close', onClose);\n });\n}\n"],"mappings":"AAGA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB,sBAAsB;AAK5C,MAAM,wBAAwB;AAG9B,MAAM,wBAAwB;AAU9B,SAAS,yBAAiC;AAC/C,QAAM,eAAe,QAAQ,IAAI;AACjC,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,IAAI,eAAe;AAC9C,MAAI,WAAW,SAAS,wBAAwB,GAAG;AACjD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAsB,kBACpB,QACA,WACA,MAAc,KACG;AACjB,QAAM,QAAQ,IAAI,YAAY,QAAQ,WAAW,EAAE,UAAU,SAAS,IAAI,CAAC;AAC3E,QAAM,kBAAkB,EAAE,SAAS,KAAK,CAAC;AAEzC,SAAO,MAAM,MAAM,MAAM;AAC3B;AAEA,eAAsB,UACpB,KACA,SACA,WACoB;AACpB,SAAO,IAAI,QAAmB,CAAC,SAAS,WAAW;AACjD,UAAM,SAAS,IAAI,UAAU,KAAK,EAAE,QAAiB,CAAC;AAEtD,UAAM,UAAU,WAAW,MAAM;AAC/B,aAAO,IAAI,mBAAmB,EAAE,SAAS,0CAA0C,CAAC,CAAC;AAAA,IACvF,GAAG,SAAS;AAEZ,UAAM,SAAS,MAAM;AACnB,mBAAa,OAAO;AACpB,cAAQ,MAAM;AAAA,IAChB;AAEA,UAAM,UAAU,CAAC,QAAiB;AAChC,mBAAa,OAAO;AACpB,UAAI,OAAO,OAAO,QAAQ,YAAY,UAAU,OAAQ,IAAY,SAAS,KAAK;AAChF;AAAA,UACE,IAAI,eAAe;AAAA,YACjB,SAAS;AAAA,YACT,SAAS,EAAE,YAAY,IAAI;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,eAAO,IAAI,mBAAmB,EAAE,SAAS,wCAAwC,CAAC,CAAC;AAAA,MACrF;AAAA,IACF;AAEA,UAAM,UAAU,CAAC,SAAiB;AAChC,mBAAa,OAAO;AACpB,UAAI,SAAS,KAAM;AACjB;AAAA,UACE,IAAI,mBAAmB;AAAA,YACrB,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,QAAQ,MAAM;AAC1B,WAAO,KAAK,SAAS,OAAO;AAC5B,WAAO,KAAK,SAAS,OAAO;AAAA,EAC9B,CAAC;AACH;","names":[]}
|
|
@@ -24,6 +24,7 @@ module.exports = __toCommonJS(inference_proc_executor_exports);
|
|
|
24
24
|
var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
|
|
25
25
|
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
26
26
|
var import_node_child_process = require("node:child_process");
|
|
27
|
+
var import_node_path = require("node:path");
|
|
27
28
|
var import_log = require("../log.cjs");
|
|
28
29
|
var import_utils = require("../utils.cjs");
|
|
29
30
|
var import_supervised_proc = require("./supervised_proc.cjs");
|
|
@@ -35,6 +36,7 @@ class PendingInference {
|
|
|
35
36
|
arg;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
39
|
+
const currentFileExtension = (0, import_node_path.extname)(importMetaUrl);
|
|
38
40
|
class InferenceProcExecutor extends import_supervised_proc.SupervisedProc {
|
|
39
41
|
#runners;
|
|
40
42
|
#activeRequests = {};
|
|
@@ -61,9 +63,10 @@ class InferenceProcExecutor extends import_supervised_proc.SupervisedProc {
|
|
|
61
63
|
this.#runners = runners;
|
|
62
64
|
}
|
|
63
65
|
createProcess() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
const forkUrl = new URL(`./inference_proc_lazy_main${currentFileExtension}`, importMetaUrl);
|
|
67
|
+
const isTypeScript = currentFileExtension === ".ts";
|
|
68
|
+
const forkOptions = isTypeScript ? { execArgv: process.execArgv } : void 0;
|
|
69
|
+
return (0, import_node_child_process.fork)(forkUrl, [JSON.stringify(this.#runners)], forkOptions);
|
|
67
70
|
}
|
|
68
71
|
async mainTask(proc) {
|
|
69
72
|
proc.on("message", (msg) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ipc/inference_proc_executor.ts","../../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.
|
|
1
|
+
{"version":3,"sources":["../../src/ipc/inference_proc_executor.ts","../../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.5.6_tsx@4.21.0_typescript@5.4.5/node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ChildProcess } from 'node:child_process';\nimport { fork } from 'node:child_process';\nimport { extname } from 'node:path';\nimport { log } from '../log.js';\nimport { shortuuid } from '../utils.js';\nimport type { InferenceExecutor } from './inference_executor.js';\nimport type { IPCMessage } from './message.js';\nimport { SupervisedProc } from './supervised_proc.js';\n\nclass PendingInference {\n promise = new Promise<{ requestId: string; data: unknown; error?: Error }>((resolve) => {\n this.resolve = resolve;\n });\n resolve(arg: { requestId: string; data: unknown; error?: Error }) {\n arg;\n }\n}\n\nconst currentFileExtension = extname(import.meta.url);\n\nexport class InferenceProcExecutor extends SupervisedProc implements InferenceExecutor {\n #runners: { [id: string]: string };\n #activeRequests: { [id: string]: PendingInference } = {};\n #logger = log();\n\n constructor({\n runners,\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n }: {\n runners: { [id: string]: string };\n initializeTimeout: number;\n closeTimeout: number;\n memoryWarnMB: number;\n memoryLimitMB: number;\n pingInterval: number;\n pingTimeout: number;\n highPingThreshold: number;\n }) {\n super(\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n );\n this.#runners = runners;\n }\n\n createProcess(): ChildProcess {\n const forkUrl = new URL(`./inference_proc_lazy_main${currentFileExtension}`, import.meta.url);\n\n // When running via tsx/ts-node (TypeScript files), we need to inherit the parent's\n // execArgv so the child process can also execute TypeScript with the same loader\n const isTypeScript = currentFileExtension === '.ts';\n const forkOptions = isTypeScript ? { execArgv: process.execArgv } : undefined;\n\n return fork(forkUrl, [JSON.stringify(this.#runners)], forkOptions);\n }\n\n async mainTask(proc: ChildProcess) {\n proc.on('message', (msg: IPCMessage) => {\n switch (msg.case) {\n case 'inferenceResponse':\n const res = this.#activeRequests[msg.value.requestId];\n delete this.#activeRequests[msg.value.requestId];\n if (!res) {\n this.#logger\n .child({ requestId: msg.value.requestId })\n .warn('received unexpected inference response');\n return;\n }\n\n res.resolve(msg.value);\n }\n });\n }\n\n async doInference(method: string, data: unknown): Promise<unknown> {\n const requestId = shortuuid('inference_req_');\n const fut = new PendingInference();\n this.proc!.send({ case: 'inferenceRequest', value: { requestId, method, data } });\n this.#activeRequests[requestId] = fut;\n\n const res = await fut.promise;\n if (res.error) {\n throw new Error(`inference of ${method} failed: ${res.error}`);\n }\n return res.data;\n }\n}\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA,IAAM,mBAAmB,MACvB,OAAO,aAAa,cAChB,IAAI,IAAI,QAAQ,UAAU,EAAE,EAAE,OAC7B,SAAS,iBAAiB,SAAS,cAAc,OAClD,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;AAEpC,IAAM,gBAAgC,iCAAiB;ADP9D,gCAAqB;AACrB,uBAAwB;AACxB,iBAAoB;AACpB,mBAA0B;AAG1B,6BAA+B;AAE/B,MAAM,iBAAiB;AAAA,EACrB,UAAU,IAAI,QAA6D,CAAC,YAAY;AACtF,SAAK,UAAU;AAAA,EACjB,CAAC;AAAA,EACD,QAAQ,KAA0D;AAChE;AAAA,EACF;AACF;AAEA,MAAM,2BAAuB,0BAAQ,aAAe;AAE7C,MAAM,8BAA8B,sCAA4C;AAAA,EACrF;AAAA,EACA,kBAAsD,CAAC;AAAA,EACvD,cAAU,gBAAI;AAAA,EAEd,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GASG;AACD;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,gBAA8B;AAC5B,UAAM,UAAU,IAAI,IAAI,6BAA6B,oBAAoB,IAAI,aAAe;AAI5F,UAAM,eAAe,yBAAyB;AAC9C,UAAM,cAAc,eAAe,EAAE,UAAU,QAAQ,SAAS,IAAI;AAEpE,eAAO,gCAAK,SAAS,CAAC,KAAK,UAAU,KAAK,QAAQ,CAAC,GAAG,WAAW;AAAA,EACnE;AAAA,EAEA,MAAM,SAAS,MAAoB;AACjC,SAAK,GAAG,WAAW,CAAC,QAAoB;AACtC,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,gBAAM,MAAM,KAAK,gBAAgB,IAAI,MAAM,SAAS;AACpD,iBAAO,KAAK,gBAAgB,IAAI,MAAM,SAAS;AAC/C,cAAI,CAAC,KAAK;AACR,iBAAK,QACF,MAAM,EAAE,WAAW,IAAI,MAAM,UAAU,CAAC,EACxC,KAAK,wCAAwC;AAChD;AAAA,UACF;AAEA,cAAI,QAAQ,IAAI,KAAK;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,QAAgB,MAAiC;AACjE,UAAM,gBAAY,wBAAU,gBAAgB;AAC5C,UAAM,MAAM,IAAI,iBAAiB;AACjC,SAAK,KAAM,KAAK,EAAE,MAAM,oBAAoB,OAAO,EAAE,WAAW,QAAQ,KAAK,EAAE,CAAC;AAChF,SAAK,gBAAgB,SAAS,IAAI;AAElC,UAAM,MAAM,MAAM,IAAI;AACtB,QAAI,IAAI,OAAO;AACb,YAAM,IAAI,MAAM,gBAAgB,MAAM,YAAY,IAAI,KAAK,EAAE;AAAA,IAC/D;AACA,WAAO,IAAI;AAAA,EACb;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference_proc_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/inference_proc_executor.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"inference_proc_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/inference_proc_executor.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatD,qBAAa,qBAAsB,SAAQ,cAAe,YAAW,iBAAiB;;gBAKxE,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,EAAE;QACD,OAAO,EAAE;YAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QAClC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAaD,aAAa,IAAI,YAAY;IAWvB,QAAQ,CAAC,IAAI,EAAE,YAAY;IAkB3B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAYnE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fork } from "node:child_process";
|
|
2
|
+
import { extname } from "node:path";
|
|
2
3
|
import { log } from "../log.js";
|
|
3
4
|
import { shortuuid } from "../utils.js";
|
|
4
5
|
import { SupervisedProc } from "./supervised_proc.js";
|
|
@@ -10,6 +11,7 @@ class PendingInference {
|
|
|
10
11
|
arg;
|
|
11
12
|
}
|
|
12
13
|
}
|
|
14
|
+
const currentFileExtension = extname(import.meta.url);
|
|
13
15
|
class InferenceProcExecutor extends SupervisedProc {
|
|
14
16
|
#runners;
|
|
15
17
|
#activeRequests = {};
|
|
@@ -36,9 +38,10 @@ class InferenceProcExecutor extends SupervisedProc {
|
|
|
36
38
|
this.#runners = runners;
|
|
37
39
|
}
|
|
38
40
|
createProcess() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
const forkUrl = new URL(`./inference_proc_lazy_main${currentFileExtension}`, import.meta.url);
|
|
42
|
+
const isTypeScript = currentFileExtension === ".ts";
|
|
43
|
+
const forkOptions = isTypeScript ? { execArgv: process.execArgv } : void 0;
|
|
44
|
+
return fork(forkUrl, [JSON.stringify(this.#runners)], forkOptions);
|
|
42
45
|
}
|
|
43
46
|
async mainTask(proc) {
|
|
44
47
|
proc.on("message", (msg) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ipc/inference_proc_executor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ChildProcess } from 'node:child_process';\nimport { fork } from 'node:child_process';\nimport { log } from '../log.js';\nimport { shortuuid } from '../utils.js';\nimport type { InferenceExecutor } from './inference_executor.js';\nimport type { IPCMessage } from './message.js';\nimport { SupervisedProc } from './supervised_proc.js';\n\nclass PendingInference {\n promise = new Promise<{ requestId: string; data: unknown; error?: Error }>((resolve) => {\n this.resolve = resolve;\n });\n resolve(arg: { requestId: string; data: unknown; error?: Error }) {\n arg;\n }\n}\n\nexport class InferenceProcExecutor extends SupervisedProc implements InferenceExecutor {\n #runners: { [id: string]: string };\n #activeRequests: { [id: string]: PendingInference } = {};\n #logger = log();\n\n constructor({\n runners,\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n }: {\n runners: { [id: string]: string };\n initializeTimeout: number;\n closeTimeout: number;\n memoryWarnMB: number;\n memoryLimitMB: number;\n pingInterval: number;\n pingTimeout: number;\n highPingThreshold: number;\n }) {\n super(\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n );\n this.#runners = runners;\n }\n\n createProcess(): ChildProcess {\n
|
|
1
|
+
{"version":3,"sources":["../../src/ipc/inference_proc_executor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ChildProcess } from 'node:child_process';\nimport { fork } from 'node:child_process';\nimport { extname } from 'node:path';\nimport { log } from '../log.js';\nimport { shortuuid } from '../utils.js';\nimport type { InferenceExecutor } from './inference_executor.js';\nimport type { IPCMessage } from './message.js';\nimport { SupervisedProc } from './supervised_proc.js';\n\nclass PendingInference {\n promise = new Promise<{ requestId: string; data: unknown; error?: Error }>((resolve) => {\n this.resolve = resolve;\n });\n resolve(arg: { requestId: string; data: unknown; error?: Error }) {\n arg;\n }\n}\n\nconst currentFileExtension = extname(import.meta.url);\n\nexport class InferenceProcExecutor extends SupervisedProc implements InferenceExecutor {\n #runners: { [id: string]: string };\n #activeRequests: { [id: string]: PendingInference } = {};\n #logger = log();\n\n constructor({\n runners,\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n }: {\n runners: { [id: string]: string };\n initializeTimeout: number;\n closeTimeout: number;\n memoryWarnMB: number;\n memoryLimitMB: number;\n pingInterval: number;\n pingTimeout: number;\n highPingThreshold: number;\n }) {\n super(\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n );\n this.#runners = runners;\n }\n\n createProcess(): ChildProcess {\n const forkUrl = new URL(`./inference_proc_lazy_main${currentFileExtension}`, import.meta.url);\n\n // When running via tsx/ts-node (TypeScript files), we need to inherit the parent's\n // execArgv so the child process can also execute TypeScript with the same loader\n const isTypeScript = currentFileExtension === '.ts';\n const forkOptions = isTypeScript ? { execArgv: process.execArgv } : undefined;\n\n return fork(forkUrl, [JSON.stringify(this.#runners)], forkOptions);\n }\n\n async mainTask(proc: ChildProcess) {\n proc.on('message', (msg: IPCMessage) => {\n switch (msg.case) {\n case 'inferenceResponse':\n const res = this.#activeRequests[msg.value.requestId];\n delete this.#activeRequests[msg.value.requestId];\n if (!res) {\n this.#logger\n .child({ requestId: msg.value.requestId })\n .warn('received unexpected inference response');\n return;\n }\n\n res.resolve(msg.value);\n }\n });\n }\n\n async doInference(method: string, data: unknown): Promise<unknown> {\n const requestId = shortuuid('inference_req_');\n const fut = new PendingInference();\n this.proc!.send({ case: 'inferenceRequest', value: { requestId, method, data } });\n this.#activeRequests[requestId] = fut;\n\n const res = await fut.promise;\n if (res.error) {\n throw new Error(`inference of ${method} failed: ${res.error}`);\n }\n return res.data;\n }\n}\n"],"mappings":"AAIA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,WAAW;AACpB,SAAS,iBAAiB;AAG1B,SAAS,sBAAsB;AAE/B,MAAM,iBAAiB;AAAA,EACrB,UAAU,IAAI,QAA6D,CAAC,YAAY;AACtF,SAAK,UAAU;AAAA,EACjB,CAAC;AAAA,EACD,QAAQ,KAA0D;AAChE;AAAA,EACF;AACF;AAEA,MAAM,uBAAuB,QAAQ,YAAY,GAAG;AAE7C,MAAM,8BAA8B,eAA4C;AAAA,EACrF;AAAA,EACA,kBAAsD,CAAC;AAAA,EACvD,UAAU,IAAI;AAAA,EAEd,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GASG;AACD;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,gBAA8B;AAC5B,UAAM,UAAU,IAAI,IAAI,6BAA6B,oBAAoB,IAAI,YAAY,GAAG;AAI5F,UAAM,eAAe,yBAAyB;AAC9C,UAAM,cAAc,eAAe,EAAE,UAAU,QAAQ,SAAS,IAAI;AAEpE,WAAO,KAAK,SAAS,CAAC,KAAK,UAAU,KAAK,QAAQ,CAAC,GAAG,WAAW;AAAA,EACnE;AAAA,EAEA,MAAM,SAAS,MAAoB;AACjC,SAAK,GAAG,WAAW,CAAC,QAAoB;AACtC,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,gBAAM,MAAM,KAAK,gBAAgB,IAAI,MAAM,SAAS;AACpD,iBAAO,KAAK,gBAAgB,IAAI,MAAM,SAAS;AAC/C,cAAI,CAAC,KAAK;AACR,iBAAK,QACF,MAAM,EAAE,WAAW,IAAI,MAAM,UAAU,CAAC,EACxC,KAAK,wCAAwC;AAChD;AAAA,UACF;AAEA,cAAI,QAAQ,IAAI,KAAK;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,QAAgB,MAAiC;AACjE,UAAM,YAAY,UAAU,gBAAgB;AAC5C,UAAM,MAAM,IAAI,iBAAiB;AACjC,SAAK,KAAM,KAAK,EAAE,MAAM,oBAAoB,OAAO,EAAE,WAAW,QAAQ,KAAK,EAAE,CAAC;AAChF,SAAK,gBAAgB,SAAS,IAAI;AAElC,UAAM,MAAM,MAAM,IAAI;AACtB,QAAI,IAAI,OAAO;AACb,YAAM,IAAI,MAAM,gBAAgB,MAAM,YAAY,IAAI,KAAK,EAAE;AAAA,IAC/D;AACA,WAAO,IAAI;AAAA,EACb;AACF;","names":[]}
|
|
@@ -22,7 +22,19 @@ const ORPHANED_TIMEOUT = 15 * 1e3;
|
|
|
22
22
|
const logger = (0, import_log.log)().child({ pid: process.pid });
|
|
23
23
|
const runners = await Promise.all(
|
|
24
24
|
Object.entries(JSON.parse(process.argv[2])).map(async ([k, v]) => {
|
|
25
|
-
return [
|
|
25
|
+
return [
|
|
26
|
+
k,
|
|
27
|
+
await import(v).then((m) => {
|
|
28
|
+
var _a;
|
|
29
|
+
const Runner = typeof m.default === "function" ? m.default : (_a = m.default) == null ? void 0 : _a.default;
|
|
30
|
+
if (typeof Runner !== "function") {
|
|
31
|
+
throw new Error(
|
|
32
|
+
`Unable to load inference runner: Missing or invalid default export in ${v}`
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
return new Runner();
|
|
36
|
+
})
|
|
37
|
+
];
|
|
26
38
|
})
|
|
27
39
|
).then(Object.fromEntries);
|
|
28
40
|
await Promise.all(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ipc/inference_proc_lazy_main.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { once } from 'node:events';\nimport type { InferenceRunner } from '../inference_runner.js';\nimport { initializeLogger, log } from '../log.js';\nimport { Future } from '../utils.js';\nimport type { IPCMessage } from './message.js';\n\nconst ORPHANED_TIMEOUT = 15 * 1000;\n\n(async () => {\n if (process.send) {\n const join = new Future();\n\n // don't do anything on C-c\n // this is handled in cli, triggering a termination of all child processes at once.\n process.on('SIGINT', () => {\n logger.debug('SIGINT received in inference proc');\n });\n\n // don't do anything on SIGTERM\n // Render uses SIGTERM in autoscale, this ensures the processes are properly drained if needed\n process.on('SIGTERM', () => {\n logger.debug('SIGTERM received in inference proc');\n });\n\n await once(process, 'message').then(([msg]: IPCMessage[]) => {\n msg = msg!;\n if (msg.case !== 'initializeRequest') {\n throw new Error('first message must be InitializeRequest');\n }\n initializeLogger(msg.value.loggerOptions);\n });\n const logger = log().child({ pid: process.pid });\n\n const runners: { [id: string]: InferenceRunner } = await Promise.all(\n Object.entries(JSON.parse(process.argv[2]!)).map(async ([k, v]) => {\n return [k
|
|
1
|
+
{"version":3,"sources":["../../src/ipc/inference_proc_lazy_main.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { once } from 'node:events';\nimport type { InferenceRunner } from '../inference_runner.js';\nimport { initializeLogger, log } from '../log.js';\nimport { Future } from '../utils.js';\nimport type { IPCMessage } from './message.js';\n\nconst ORPHANED_TIMEOUT = 15 * 1000;\n\n(async () => {\n if (process.send) {\n const join = new Future();\n\n // don't do anything on C-c\n // this is handled in cli, triggering a termination of all child processes at once.\n process.on('SIGINT', () => {\n logger.debug('SIGINT received in inference proc');\n });\n\n // don't do anything on SIGTERM\n // Render uses SIGTERM in autoscale, this ensures the processes are properly drained if needed\n process.on('SIGTERM', () => {\n logger.debug('SIGTERM received in inference proc');\n });\n\n await once(process, 'message').then(([msg]: IPCMessage[]) => {\n msg = msg!;\n if (msg.case !== 'initializeRequest') {\n throw new Error('first message must be InitializeRequest');\n }\n initializeLogger(msg.value.loggerOptions);\n });\n const logger = log().child({ pid: process.pid });\n\n const runners: { [id: string]: InferenceRunner } = await Promise.all(\n Object.entries(JSON.parse(process.argv[2]!)).map(async ([k, v]) => {\n return [\n k,\n await import(v as string).then((m) => {\n // Handle both ESM (m.default is the class) and CJS (m.default.default is the class)\n const Runner = typeof m.default === 'function' ? m.default : m.default?.default;\n if (typeof Runner !== 'function') {\n throw new Error(\n `Unable to load inference runner: Missing or invalid default export in ${v}`,\n );\n }\n return new Runner();\n }),\n ];\n }),\n ).then(Object.fromEntries);\n\n await Promise.all(\n Object.entries(runners).map(async ([runner, v]) => {\n logger.child({ runner }).debug('initializing inference runner');\n await v.initialize();\n }),\n );\n logger.debug('all inference runners initialized');\n process.send({ case: 'initializeResponse' });\n\n const orphanedTimeout = setTimeout(() => {\n logger.warn('inference process orphaned, shutting down.');\n process.exit();\n }, ORPHANED_TIMEOUT);\n\n const handleInferenceRequest = async ({\n method,\n requestId,\n data,\n }: {\n method: string;\n requestId: string;\n data: unknown;\n }) => {\n if (!runners[method]) {\n logger.child({ method }).warn('unknown inference method');\n }\n\n try {\n const resp = await runners[method]!.run(data);\n process.send!({ case: 'inferenceResponse', value: { requestId, data: resp } });\n } catch (error) {\n process.send!({ case: 'inferenceResponse', value: { requestId, error } });\n }\n };\n\n const messageHandler = (msg: IPCMessage) => {\n switch (msg.case) {\n case 'pingRequest':\n orphanedTimeout.refresh();\n process.send!({\n case: 'pongResponse',\n value: { lastTimestamp: msg.value.timestamp, timestamp: Date.now() },\n });\n break;\n case 'shutdownRequest':\n logger.debug('inference process received shutdown request');\n clearTimeout(orphanedTimeout);\n // Remove our message handler to stop processing new messages\n process.off('message', messageHandler);\n Promise.all(Object.values(runners).map((r) => r.close()))\n .then(() => {\n logger.debug('Inference runners closed');\n process.send!({ case: 'done' });\n join.resolve();\n })\n .catch((err) => {\n logger.error('Error closing inference runners:', err);\n });\n break;\n case 'inferenceRequest':\n handleInferenceRequest(msg.value);\n }\n };\n\n process.on('message', messageHandler);\n\n await join.await;\n\n logger.debug('Inference process shutdown');\n\n return process.exitCode;\n }\n})();\n"],"mappings":"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","names":[]}
|
|
@@ -21,7 +21,19 @@ const ORPHANED_TIMEOUT = 15 * 1e3;
|
|
|
21
21
|
const logger = log().child({ pid: process.pid });
|
|
22
22
|
const runners = await Promise.all(
|
|
23
23
|
Object.entries(JSON.parse(process.argv[2])).map(async ([k, v]) => {
|
|
24
|
-
return [
|
|
24
|
+
return [
|
|
25
|
+
k,
|
|
26
|
+
await import(v).then((m) => {
|
|
27
|
+
var _a;
|
|
28
|
+
const Runner = typeof m.default === "function" ? m.default : (_a = m.default) == null ? void 0 : _a.default;
|
|
29
|
+
if (typeof Runner !== "function") {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Unable to load inference runner: Missing or invalid default export in ${v}`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
return new Runner();
|
|
35
|
+
})
|
|
36
|
+
];
|
|
25
37
|
})
|
|
26
38
|
).then(Object.fromEntries);
|
|
27
39
|
await Promise.all(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ipc/inference_proc_lazy_main.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { once } from 'node:events';\nimport type { InferenceRunner } from '../inference_runner.js';\nimport { initializeLogger, log } from '../log.js';\nimport { Future } from '../utils.js';\nimport type { IPCMessage } from './message.js';\n\nconst ORPHANED_TIMEOUT = 15 * 1000;\n\n(async () => {\n if (process.send) {\n const join = new Future();\n\n // don't do anything on C-c\n // this is handled in cli, triggering a termination of all child processes at once.\n process.on('SIGINT', () => {\n logger.debug('SIGINT received in inference proc');\n });\n\n // don't do anything on SIGTERM\n // Render uses SIGTERM in autoscale, this ensures the processes are properly drained if needed\n process.on('SIGTERM', () => {\n logger.debug('SIGTERM received in inference proc');\n });\n\n await once(process, 'message').then(([msg]: IPCMessage[]) => {\n msg = msg!;\n if (msg.case !== 'initializeRequest') {\n throw new Error('first message must be InitializeRequest');\n }\n initializeLogger(msg.value.loggerOptions);\n });\n const logger = log().child({ pid: process.pid });\n\n const runners: { [id: string]: InferenceRunner } = await Promise.all(\n Object.entries(JSON.parse(process.argv[2]!)).map(async ([k, v]) => {\n return [k
|
|
1
|
+
{"version":3,"sources":["../../src/ipc/inference_proc_lazy_main.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { once } from 'node:events';\nimport type { InferenceRunner } from '../inference_runner.js';\nimport { initializeLogger, log } from '../log.js';\nimport { Future } from '../utils.js';\nimport type { IPCMessage } from './message.js';\n\nconst ORPHANED_TIMEOUT = 15 * 1000;\n\n(async () => {\n if (process.send) {\n const join = new Future();\n\n // don't do anything on C-c\n // this is handled in cli, triggering a termination of all child processes at once.\n process.on('SIGINT', () => {\n logger.debug('SIGINT received in inference proc');\n });\n\n // don't do anything on SIGTERM\n // Render uses SIGTERM in autoscale, this ensures the processes are properly drained if needed\n process.on('SIGTERM', () => {\n logger.debug('SIGTERM received in inference proc');\n });\n\n await once(process, 'message').then(([msg]: IPCMessage[]) => {\n msg = msg!;\n if (msg.case !== 'initializeRequest') {\n throw new Error('first message must be InitializeRequest');\n }\n initializeLogger(msg.value.loggerOptions);\n });\n const logger = log().child({ pid: process.pid });\n\n const runners: { [id: string]: InferenceRunner } = await Promise.all(\n Object.entries(JSON.parse(process.argv[2]!)).map(async ([k, v]) => {\n return [\n k,\n await import(v as string).then((m) => {\n // Handle both ESM (m.default is the class) and CJS (m.default.default is the class)\n const Runner = typeof m.default === 'function' ? m.default : m.default?.default;\n if (typeof Runner !== 'function') {\n throw new Error(\n `Unable to load inference runner: Missing or invalid default export in ${v}`,\n );\n }\n return new Runner();\n }),\n ];\n }),\n ).then(Object.fromEntries);\n\n await Promise.all(\n Object.entries(runners).map(async ([runner, v]) => {\n logger.child({ runner }).debug('initializing inference runner');\n await v.initialize();\n }),\n );\n logger.debug('all inference runners initialized');\n process.send({ case: 'initializeResponse' });\n\n const orphanedTimeout = setTimeout(() => {\n logger.warn('inference process orphaned, shutting down.');\n process.exit();\n }, ORPHANED_TIMEOUT);\n\n const handleInferenceRequest = async ({\n method,\n requestId,\n data,\n }: {\n method: string;\n requestId: string;\n data: unknown;\n }) => {\n if (!runners[method]) {\n logger.child({ method }).warn('unknown inference method');\n }\n\n try {\n const resp = await runners[method]!.run(data);\n process.send!({ case: 'inferenceResponse', value: { requestId, data: resp } });\n } catch (error) {\n process.send!({ case: 'inferenceResponse', value: { requestId, error } });\n }\n };\n\n const messageHandler = (msg: IPCMessage) => {\n switch (msg.case) {\n case 'pingRequest':\n orphanedTimeout.refresh();\n process.send!({\n case: 'pongResponse',\n value: { lastTimestamp: msg.value.timestamp, timestamp: Date.now() },\n });\n break;\n case 'shutdownRequest':\n logger.debug('inference process received shutdown request');\n clearTimeout(orphanedTimeout);\n // Remove our message handler to stop processing new messages\n process.off('message', messageHandler);\n Promise.all(Object.values(runners).map((r) => r.close()))\n .then(() => {\n logger.debug('Inference runners closed');\n process.send!({ case: 'done' });\n join.resolve();\n })\n .catch((err) => {\n logger.error('Error closing inference runners:', err);\n });\n break;\n case 'inferenceRequest':\n handleInferenceRequest(msg.value);\n }\n };\n\n process.on('message', messageHandler);\n\n await join.await;\n\n logger.debug('Inference process shutdown');\n\n return process.exitCode;\n }\n})();\n"],"mappings":"AAGA,SAAS,YAAY;AAErB,SAAS,kBAAkB,WAAW;AACtC,SAAS,cAAc;AAGvB,MAAM,mBAAmB,KAAK;AAAA,CAE7B,YAAY;AACX,MAAI,QAAQ,MAAM;AAChB,UAAM,OAAO,IAAI,OAAO;AAIxB,YAAQ,GAAG,UAAU,MAAM;AACzB,aAAO,MAAM,mCAAmC;AAAA,IAClD,CAAC;AAID,YAAQ,GAAG,WAAW,MAAM;AAC1B,aAAO,MAAM,oCAAoC;AAAA,IACnD,CAAC;AAED,UAAM,KAAK,SAAS,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,MAAoB;AAC3D,YAAM;AACN,UAAI,IAAI,SAAS,qBAAqB;AACpC,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AACA,uBAAiB,IAAI,MAAM,aAAa;AAAA,IAC1C,CAAC;AACD,UAAM,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,QAAQ,IAAI,CAAC;AAE/C,UAAM,UAA6C,MAAM,QAAQ;AAAA,MAC/D,OAAO,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,CAAE,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;AACjE,eAAO;AAAA,UACL;AAAA,UACA,MAAM,OAAO,GAAa,KAAK,CAAC,MAAM;AAxChD;AA0CY,kBAAM,SAAS,OAAO,EAAE,YAAY,aAAa,EAAE,WAAU,OAAE,YAAF,mBAAW;AACxE,gBAAI,OAAO,WAAW,YAAY;AAChC,oBAAM,IAAI;AAAA,gBACR,yEAAyE,CAAC;AAAA,cAC5E;AAAA,YACF;AACA,mBAAO,IAAI,OAAO;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,EAAE,KAAK,OAAO,WAAW;AAEzB,UAAM,QAAQ;AAAA,MACZ,OAAO,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM;AACjD,eAAO,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,+BAA+B;AAC9D,cAAM,EAAE,WAAW;AAAA,MACrB,CAAC;AAAA,IACH;AACA,WAAO,MAAM,mCAAmC;AAChD,YAAQ,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE3C,UAAM,kBAAkB,WAAW,MAAM;AACvC,aAAO,KAAK,4CAA4C;AACxD,cAAQ,KAAK;AAAA,IACf,GAAG,gBAAgB;AAEnB,UAAM,yBAAyB,OAAO;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,UAAI,CAAC,QAAQ,MAAM,GAAG;AACpB,eAAO,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,0BAA0B;AAAA,MAC1D;AAEA,UAAI;AACF,cAAM,OAAO,MAAM,QAAQ,MAAM,EAAG,IAAI,IAAI;AAC5C,gBAAQ,KAAM,EAAE,MAAM,qBAAqB,OAAO,EAAE,WAAW,MAAM,KAAK,EAAE,CAAC;AAAA,MAC/E,SAAS,OAAO;AACd,gBAAQ,KAAM,EAAE,MAAM,qBAAqB,OAAO,EAAE,WAAW,MAAM,EAAE,CAAC;AAAA,MAC1E;AAAA,IACF;AAEA,UAAM,iBAAiB,CAAC,QAAoB;AAC1C,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,0BAAgB,QAAQ;AACxB,kBAAQ,KAAM;AAAA,YACZ,MAAM;AAAA,YACN,OAAO,EAAE,eAAe,IAAI,MAAM,WAAW,WAAW,KAAK,IAAI,EAAE;AAAA,UACrE,CAAC;AACD;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,6CAA6C;AAC1D,uBAAa,eAAe;AAE5B,kBAAQ,IAAI,WAAW,cAAc;AACrC,kBAAQ,IAAI,OAAO,OAAO,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrD,KAAK,MAAM;AACV,mBAAO,MAAM,0BAA0B;AACvC,oBAAQ,KAAM,EAAE,MAAM,OAAO,CAAC;AAC9B,iBAAK,QAAQ;AAAA,UACf,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,mBAAO,MAAM,oCAAoC,GAAG;AAAA,UACtD,CAAC;AACH;AAAA,QACF,KAAK;AACH,iCAAuB,IAAI,KAAK;AAAA,MACpC;AAAA,IACF;AAEA,YAAQ,GAAG,WAAW,cAAc;AAEpC,UAAM,KAAK;AAEX,WAAO,MAAM,4BAA4B;AAEzC,WAAO,QAAQ;AAAA,EACjB;AACF,GAAG;","names":[]}
|
|
@@ -24,9 +24,11 @@ module.exports = __toCommonJS(job_proc_executor_exports);
|
|
|
24
24
|
var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
|
|
25
25
|
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
|
|
26
26
|
var import_node_child_process = require("node:child_process");
|
|
27
|
+
var import_node_path = require("node:path");
|
|
27
28
|
var import_log = require("../log.cjs");
|
|
28
29
|
var import_job_executor = require("./job_executor.cjs");
|
|
29
30
|
var import_supervised_proc = require("./supervised_proc.cjs");
|
|
31
|
+
const currentFileExtension = (0, import_node_path.extname)(importMetaUrl);
|
|
30
32
|
class JobProcExecutor extends import_supervised_proc.SupervisedProc {
|
|
31
33
|
#userArgs;
|
|
32
34
|
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
@@ -65,7 +67,10 @@ class JobProcExecutor extends import_supervised_proc.SupervisedProc {
|
|
|
65
67
|
return this.#runningJob;
|
|
66
68
|
}
|
|
67
69
|
createProcess() {
|
|
68
|
-
|
|
70
|
+
const forkUrl = new URL(`./job_proc_lazy_main${currentFileExtension}`, importMetaUrl);
|
|
71
|
+
const isTypeScript = currentFileExtension === ".ts";
|
|
72
|
+
const forkOptions = isTypeScript ? { execArgv: process.execArgv } : void 0;
|
|
73
|
+
return (0, import_node_child_process.fork)(forkUrl, [this.#agent], forkOptions);
|
|
69
74
|
}
|
|
70
75
|
async mainTask(proc) {
|
|
71
76
|
proc.on("message", (msg) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ipc/job_proc_executor.ts","../../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.
|
|
1
|
+
{"version":3,"sources":["../../src/ipc/job_proc_executor.ts","../../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.43.7_@types+node@22.15.30__postcss@8.5.6_tsx@4.21.0_typescript@5.4.5/node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { ChildProcess } from 'node:child_process';\nimport { fork } from 'node:child_process';\nimport { extname } from 'node:path';\nimport type { RunningJobInfo } from '../job.js';\nimport { log } from '../log.js';\nimport type { InferenceExecutor } from './inference_executor.js';\nimport type { JobExecutor } from './job_executor.js';\nimport { JobStatus } from './job_executor.js';\nimport type { IPCMessage } from './message.js';\nimport { SupervisedProc } from './supervised_proc.js';\n\nconst currentFileExtension = extname(import.meta.url);\n\nexport class JobProcExecutor extends SupervisedProc implements JobExecutor {\n #userArgs?: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n #jobStatus?: JobStatus;\n #runningJob?: RunningJobInfo;\n #agent: string;\n #inferenceExecutor?: InferenceExecutor;\n #inferenceTasks: Promise<void>[] = [];\n #logger = log();\n\n constructor(\n agent: string,\n inferenceExecutor: InferenceExecutor | undefined,\n initializeTimeout: number,\n closeTimeout: number,\n memoryWarnMB: number,\n memoryLimitMB: number,\n pingInterval: number,\n pingTimeout: number,\n highPingThreshold: number,\n ) {\n super(\n initializeTimeout,\n closeTimeout,\n memoryWarnMB,\n memoryLimitMB,\n pingInterval,\n pingTimeout,\n highPingThreshold,\n );\n this.#agent = agent;\n this.#inferenceExecutor = inferenceExecutor;\n }\n\n get status(): JobStatus {\n if (this.#jobStatus) {\n return this.#jobStatus;\n }\n throw new Error('job status not available');\n }\n\n get userArguments(): any {\n return this.#userArgs;\n }\n\n set userArguments(args: any) {\n this.#userArgs = args;\n }\n\n get runningJob(): RunningJobInfo | undefined {\n return this.#runningJob;\n }\n\n createProcess(): ChildProcess {\n const forkUrl = new URL(`./job_proc_lazy_main${currentFileExtension}`, import.meta.url);\n\n // When running via tsx/ts-node (TypeScript files), we need to inherit the parent's\n // execArgv so the child process can also execute TypeScript with the same loader\n const isTypeScript = currentFileExtension === '.ts';\n const forkOptions = isTypeScript ? { execArgv: process.execArgv } : undefined;\n\n return fork(forkUrl, [this.#agent], forkOptions);\n }\n\n async mainTask(proc: ChildProcess) {\n proc.on('message', (msg: IPCMessage) => {\n switch (msg.case) {\n case 'inferenceRequest':\n this.#inferenceTasks.push(this.#doInferenceTask(proc, msg.value));\n }\n });\n }\n\n async #doInferenceTask(\n proc: ChildProcess,\n req: { method: string; requestId: string; data: unknown },\n ) {\n if (!this.#inferenceExecutor) {\n this.#logger.warn('inference request received but no inference executor');\n proc.send({\n case: 'inferenceResponse',\n value: { requestId: req.requestId, error: new Error('no inference executor') },\n });\n return;\n }\n\n try {\n const data = await this.#inferenceExecutor.doInference(req.method, req.data);\n proc.send({ case: 'inferenceResponse', value: { requestId: req.requestId, data } });\n } catch (error) {\n proc.send({ case: 'inferenceResponse', value: { requestId: req.requestId, error } });\n }\n }\n\n async launchJob(info: RunningJobInfo) {\n if (this.#runningJob) {\n throw Error('process already has a running job');\n }\n if (!this.init.done) {\n throw Error('process not initialized');\n }\n this.#jobStatus = JobStatus.RUNNING;\n this.#runningJob = info;\n\n this.proc!.send({ case: 'startJobRequest', value: { runningJob: info } });\n }\n}\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA,IAAM,mBAAmB,MACvB,OAAO,aAAa,cAChB,IAAI,IAAI,QAAQ,UAAU,EAAE,EAAE,OAC7B,SAAS,iBAAiB,SAAS,cAAc,OAClD,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;AAEpC,IAAM,gBAAgC,iCAAiB;ADP9D,gCAAqB;AACrB,uBAAwB;AAExB,iBAAoB;AAGpB,0BAA0B;AAE1B,6BAA+B;AAE/B,MAAM,2BAAuB,0BAAQ,aAAe;AAE7C,MAAM,wBAAwB,sCAAsC;AAAA,EACzE;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAmC,CAAC;AAAA,EACpC,cAAU,gBAAI;AAAA,EAEd,YACE,OACA,mBACA,mBACA,cACA,cACA,eACA,cACA,aACA,mBACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,SAAS;AACd,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,IAAI,SAAoB;AACtB,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK;AAAA,IACd;AACA,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAAA,EAEA,IAAI,gBAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAAc,MAAW;AAC3B,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IAAI,aAAyC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAA8B;AAC5B,UAAM,UAAU,IAAI,IAAI,uBAAuB,oBAAoB,IAAI,aAAe;AAItF,UAAM,eAAe,yBAAyB;AAC9C,UAAM,cAAc,eAAe,EAAE,UAAU,QAAQ,SAAS,IAAI;AAEpE,eAAO,gCAAK,SAAS,CAAC,KAAK,MAAM,GAAG,WAAW;AAAA,EACjD;AAAA,EAEA,MAAM,SAAS,MAAoB;AACjC,SAAK,GAAG,WAAW,CAAC,QAAoB;AACtC,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,eAAK,gBAAgB,KAAK,KAAK,iBAAiB,MAAM,IAAI,KAAK,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,iBACJ,MACA,KACA;AACA,QAAI,CAAC,KAAK,oBAAoB;AAC5B,WAAK,QAAQ,KAAK,sDAAsD;AACxE,WAAK,KAAK;AAAA,QACR,MAAM;AAAA,QACN,OAAO,EAAE,WAAW,IAAI,WAAW,OAAO,IAAI,MAAM,uBAAuB,EAAE;AAAA,MAC/E,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,mBAAmB,YAAY,IAAI,QAAQ,IAAI,IAAI;AAC3E,WAAK,KAAK,EAAE,MAAM,qBAAqB,OAAO,EAAE,WAAW,IAAI,WAAW,KAAK,EAAE,CAAC;AAAA,IACpF,SAAS,OAAO;AACd,WAAK,KAAK,EAAE,MAAM,qBAAqB,OAAO,EAAE,WAAW,IAAI,WAAW,MAAM,EAAE,CAAC;AAAA,IACrF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAsB;AACpC,QAAI,KAAK,aAAa;AACpB,YAAM,MAAM,mCAAmC;AAAA,IACjD;AACA,QAAI,CAAC,KAAK,KAAK,MAAM;AACnB,YAAM,MAAM,yBAAyB;AAAA,IACvC;AACA,SAAK,aAAa,8BAAU;AAC5B,SAAK,cAAc;AAEnB,SAAK,KAAM,KAAK,EAAE,MAAM,mBAAmB,OAAO,EAAE,YAAY,KAAK,EAAE,CAAC;AAAA,EAC1E;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job_proc_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/job_proc_executor.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"job_proc_executor.d.ts","sourceRoot":"","sources":["../../src/ipc/job_proc_executor.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,eAAgB,SAAQ,cAAe,YAAW,WAAW;;gBAUtE,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAChD,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM;IAe3B,IAAI,MAAM,IAAI,SAAS,CAKtB;IAED,IAAI,aAAa,IAAI,GAAG,CAEvB;IAED,IAAI,aAAa,CAAC,IAAI,EAAE,GAAG,EAE1B;IAED,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IAED,aAAa,IAAI,YAAY;IAWvB,QAAQ,CAAC,IAAI,EAAE,YAAY;IA8B3B,SAAS,CAAC,IAAI,EAAE,cAAc;CAYrC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { fork } from "node:child_process";
|
|
2
|
+
import { extname } from "node:path";
|
|
2
3
|
import { log } from "../log.js";
|
|
3
4
|
import { JobStatus } from "./job_executor.js";
|
|
4
5
|
import { SupervisedProc } from "./supervised_proc.js";
|
|
6
|
+
const currentFileExtension = extname(import.meta.url);
|
|
5
7
|
class JobProcExecutor extends SupervisedProc {
|
|
6
8
|
#userArgs;
|
|
7
9
|
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
@@ -40,7 +42,10 @@ class JobProcExecutor extends SupervisedProc {
|
|
|
40
42
|
return this.#runningJob;
|
|
41
43
|
}
|
|
42
44
|
createProcess() {
|
|
43
|
-
|
|
45
|
+
const forkUrl = new URL(`./job_proc_lazy_main${currentFileExtension}`, import.meta.url);
|
|
46
|
+
const isTypeScript = currentFileExtension === ".ts";
|
|
47
|
+
const forkOptions = isTypeScript ? { execArgv: process.execArgv } : void 0;
|
|
48
|
+
return fork(forkUrl, [this.#agent], forkOptions);
|
|
44
49
|
}
|
|
45
50
|
async mainTask(proc) {
|
|
46
51
|
proc.on("message", (msg) => {
|