@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.11-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +81 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +7 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +54 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1171 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +190 -0
- package/src/routes/local-inference-asr-route.ts +213 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +423 -0
- package/src/routes/local-inference-compat-routes.ts +782 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1398 -0
- package/src/runtime/index.d.ts +14 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +27 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/asr/errors.d.ts +21 -0
- package/src/services/asr/errors.d.ts.map +1 -0
- package/src/services/asr/errors.ts +50 -0
- package/src/services/asr/hash.d.ts +28 -0
- package/src/services/asr/hash.d.ts.map +1 -0
- package/src/services/asr/hash.ts +49 -0
- package/src/services/asr/index.d.ts +76 -0
- package/src/services/asr/index.d.ts.map +1 -0
- package/src/services/asr/index.ts +178 -0
- package/src/services/asr/types.d.ts +91 -0
- package/src/services/asr/types.d.ts.map +1 -0
- package/src/services/asr/types.ts +95 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +240 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +724 -0
- package/src/services/downloader.ts +899 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +534 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1891 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +183 -0
- package/src/services/hardware.ts +404 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +281 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +30 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +225 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +693 -0
- package/src/services/manifest/schema.d.ts +715 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +655 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +569 -0
- package/src/services/memory-arbiter.d.ts +343 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +1000 -0
- package/src/services/memory-monitor.d.ts +119 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +296 -0
- package/src/services/memory-pressure.d.ts +127 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +413 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +672 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +376 -0
- package/src/services/routing-policy.d.ts +55 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.ts +228 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +15 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/tts/errors.ts +46 -0
- package/src/services/tts/index.ts +214 -0
- package/src/services/tts/tts-audio-cache.ts +235 -0
- package/src/services/tts/types.ts +157 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +148 -0
- package/src/services/voice/embedding.ts +244 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +746 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2226 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +636 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +671 -0
- package/src/services/voice/ffi-bindings.ts +3050 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.ts +105 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +420 -0
- package/src/services/voice/voice-budget.ts +656 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice settings — the user-facing knobs the runtime + UI consume to
|
|
3
|
+
* decide local vs cloud, model quality, RAM cap, and quant downgrade.
|
|
4
|
+
*
|
|
5
|
+
* R9 §5 spells out the five knobs:
|
|
6
|
+
*
|
|
7
|
+
* 1. `voice.forceLocal` / `voice.forceCloud` / `voice.autoSwap` — backend
|
|
8
|
+
* mode (auto by default).
|
|
9
|
+
* 2. `voice.modelQualityPreset` — `"max" | "balanced" | "minimal"`.
|
|
10
|
+
* 3. `voice.maxRamMB` — hard cap on the allocator's total budget.
|
|
11
|
+
* 4. `voice.allowQuantDowngrade` — auto-pick smaller quants if RAM tight.
|
|
12
|
+
*
|
|
13
|
+
* This module is the env-var resolver + the canonical default table. The
|
|
14
|
+
* dashboard's Settings panel writes the same fields to `messages.voice.*`
|
|
15
|
+
* config; I10 wires the persistent store. For now (I9 scope), the resolver
|
|
16
|
+
* reads env + an optional `Partial<VoiceSettings>` overlay so tests can
|
|
17
|
+
* lock in deterministic behaviour.
|
|
18
|
+
*
|
|
19
|
+
* There is no central `settings.ts` to extend in `plugins/plugin-local-
|
|
20
|
+
* inference/src/services/` today (R9 §1 path inventory confirms it).
|
|
21
|
+
* Keeping this file in `voice/` makes its surface area obvious.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import type { DeviceTier } from "../device-tier";
|
|
25
|
+
|
|
26
|
+
export type VoiceBackendMode = "auto" | "force-local" | "force-cloud";
|
|
27
|
+
export type VoiceModelQualityPreset = "max" | "balanced" | "minimal";
|
|
28
|
+
|
|
29
|
+
export interface VoiceSettings {
|
|
30
|
+
/** Backend selection mode. `auto` consults the device tier. */
|
|
31
|
+
backendMode: VoiceBackendMode;
|
|
32
|
+
/** When `backendMode === "auto"`, allow the runtime to swap between
|
|
33
|
+
* cloud and local in mid-session to keep latency bounded. */
|
|
34
|
+
autoSwap: boolean;
|
|
35
|
+
/** Quality vs RAM tradeoff. Maps to a quant ladder for the LM + voice
|
|
36
|
+
* stack — see `qualityPresetQuantizationRanking()`. */
|
|
37
|
+
modelQualityPreset: VoiceModelQualityPreset;
|
|
38
|
+
/** Hard cap on the allocator's total budget, in MB. 0 / null = use the
|
|
39
|
+
* tier's natural total. */
|
|
40
|
+
maxRamMb: number | null;
|
|
41
|
+
/** When true (default), an OOM-pending reservation may pick a smaller
|
|
42
|
+
* quant variant instead of refusing. When false, `reserve()` throws. */
|
|
43
|
+
allowQuantDowngrade: boolean;
|
|
44
|
+
/** Continuous local recording on mobile when on battery. Off by default. */
|
|
45
|
+
continuousLocalRecordingOnBattery: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const DEFAULT_VOICE_SETTINGS: VoiceSettings = {
|
|
49
|
+
backendMode: "auto",
|
|
50
|
+
autoSwap: true,
|
|
51
|
+
modelQualityPreset: "balanced",
|
|
52
|
+
maxRamMb: null,
|
|
53
|
+
allowQuantDowngrade: true,
|
|
54
|
+
continuousLocalRecordingOnBattery: false,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
function parseBackendMode(value: string | undefined): VoiceBackendMode | null {
|
|
58
|
+
if (!value) return null;
|
|
59
|
+
const v = value.trim().toLowerCase();
|
|
60
|
+
if (v === "auto") return "auto";
|
|
61
|
+
if (v === "force-local" || v === "local") return "force-local";
|
|
62
|
+
if (v === "force-cloud" || v === "cloud") return "force-cloud";
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function parseQualityPreset(
|
|
67
|
+
value: string | undefined,
|
|
68
|
+
): VoiceModelQualityPreset | null {
|
|
69
|
+
if (!value) return null;
|
|
70
|
+
const v = value.trim().toLowerCase();
|
|
71
|
+
if (v === "max") return "max";
|
|
72
|
+
if (v === "balanced") return "balanced";
|
|
73
|
+
if (v === "minimal" || v === "efficient" || v === "min") return "minimal";
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function parseBool(value: string | undefined): boolean | null {
|
|
78
|
+
if (!value) return null;
|
|
79
|
+
const v = value.trim().toLowerCase();
|
|
80
|
+
if (v === "1" || v === "true" || v === "yes" || v === "on") return true;
|
|
81
|
+
if (v === "0" || v === "false" || v === "no" || v === "off") return false;
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function parseNumberMb(value: string | undefined): number | null {
|
|
86
|
+
if (!value) return null;
|
|
87
|
+
const n = Number.parseInt(value, 10);
|
|
88
|
+
if (!Number.isFinite(n) || n <= 0) return null;
|
|
89
|
+
return n;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Resolve voice settings from environment + an optional overlay.
|
|
94
|
+
* Env wins over defaults; overlay wins over env (so tests / UI can lock
|
|
95
|
+
* specific fields). All fields are required in the returned settings.
|
|
96
|
+
*
|
|
97
|
+
* Env knobs (canonical ELIZA_* prefix; ELIZA_* aliases honored upstream):
|
|
98
|
+
*
|
|
99
|
+
* - `ELIZA_VOICE_BACKEND_MODE` → backendMode
|
|
100
|
+
* - `ELIZA_VOICE_AUTO_SWAP` → autoSwap
|
|
101
|
+
* - `ELIZA_VOICE_QUALITY_PRESET` → modelQualityPreset
|
|
102
|
+
* - `ELIZA_VOICE_MAX_RAM_MB` → maxRamMb
|
|
103
|
+
* - `ELIZA_VOICE_ALLOW_QUANT_DOWNGRADE` → allowQuantDowngrade
|
|
104
|
+
* - `ELIZA_VOICE_CONTINUOUS_ON_BATTERY` → continuousLocalRecordingOnBattery
|
|
105
|
+
*/
|
|
106
|
+
export function resolveVoiceSettings(
|
|
107
|
+
overlay: Partial<VoiceSettings> = {},
|
|
108
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
109
|
+
): VoiceSettings {
|
|
110
|
+
const fromEnv: Partial<VoiceSettings> = {};
|
|
111
|
+
const backendMode = parseBackendMode(env.ELIZA_VOICE_BACKEND_MODE);
|
|
112
|
+
if (backendMode) fromEnv.backendMode = backendMode;
|
|
113
|
+
const autoSwap = parseBool(env.ELIZA_VOICE_AUTO_SWAP);
|
|
114
|
+
if (autoSwap !== null) fromEnv.autoSwap = autoSwap;
|
|
115
|
+
const preset = parseQualityPreset(env.ELIZA_VOICE_QUALITY_PRESET);
|
|
116
|
+
if (preset) fromEnv.modelQualityPreset = preset;
|
|
117
|
+
const maxRamMb = parseNumberMb(env.ELIZA_VOICE_MAX_RAM_MB);
|
|
118
|
+
if (maxRamMb !== null) fromEnv.maxRamMb = maxRamMb;
|
|
119
|
+
const allowQuantDowngrade = parseBool(env.ELIZA_VOICE_ALLOW_QUANT_DOWNGRADE);
|
|
120
|
+
if (allowQuantDowngrade !== null)
|
|
121
|
+
fromEnv.allowQuantDowngrade = allowQuantDowngrade;
|
|
122
|
+
const continuousBattery = parseBool(env.ELIZA_VOICE_CONTINUOUS_ON_BATTERY);
|
|
123
|
+
if (continuousBattery !== null)
|
|
124
|
+
fromEnv.continuousLocalRecordingOnBattery = continuousBattery;
|
|
125
|
+
|
|
126
|
+
return { ...DEFAULT_VOICE_SETTINGS, ...fromEnv, ...overlay };
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Default backend mode given the user's settings + the device tier. R9 §5:
|
|
131
|
+
*
|
|
132
|
+
* - `force-local` overrides the mobile-cloud-default;
|
|
133
|
+
* - `force-cloud` overrides the desktop-local-default;
|
|
134
|
+
* - `auto` consults the tier (MAX/GOOD → local; OKAY/POOR → cloud).
|
|
135
|
+
*
|
|
136
|
+
* Returns the resolved mode the runtime should *act on*, taking the tier
|
|
137
|
+
* into account.
|
|
138
|
+
*/
|
|
139
|
+
export function effectiveBackendMode(
|
|
140
|
+
settings: VoiceSettings,
|
|
141
|
+
tier: DeviceTier,
|
|
142
|
+
): "local" | "cloud" {
|
|
143
|
+
if (settings.backendMode === "force-local") return "local";
|
|
144
|
+
if (settings.backendMode === "force-cloud") return "cloud";
|
|
145
|
+
// auto
|
|
146
|
+
if (tier === "MAX" || tier === "GOOD") return "local";
|
|
147
|
+
return "cloud";
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Ordered quant ladder per quality preset. Most-preferred first. Loaders
|
|
152
|
+
* pick the most-preferred variant that fits the budget; `allowQuantDowngrade`
|
|
153
|
+
* controls whether they slide down the ladder when the top choice doesn't
|
|
154
|
+
* fit.
|
|
155
|
+
*
|
|
156
|
+
* Names match the catalog ids in `recommendation.ts:textQuantizationMatrix`
|
|
157
|
+
* + the voice stack's documented variants.
|
|
158
|
+
*/
|
|
159
|
+
export function qualityPresetQuantizationRanking(
|
|
160
|
+
preset: VoiceModelQualityPreset,
|
|
161
|
+
): ReadonlyArray<string> {
|
|
162
|
+
switch (preset) {
|
|
163
|
+
case "max":
|
|
164
|
+
return ["Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M", "Q3_K_M"];
|
|
165
|
+
case "balanced":
|
|
166
|
+
return ["Q4_K_M", "Q5_K_M", "Q6_K", "Q3_K_M", "Q8_0"];
|
|
167
|
+
case "minimal":
|
|
168
|
+
return ["Q3_K_M", "Q4_K_M", "Q5_K_M", "Q6_K"];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export { DEFAULT_VOICE_SETTINGS };
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice state machine — explicit state-machine wrapper that drives the
|
|
3
|
+
* optimistic-rollback path the C1 checkpoint enables.
|
|
4
|
+
*
|
|
5
|
+
* This is the thin layer the brief calls for: the existing
|
|
6
|
+
* `OptimisticRollbackController` already covers the pre-draft / draft-response
|
|
7
|
+
* path; this module adds the SPEAKING state and the barge-in restore path on
|
|
8
|
+
* top, exposed as a single state-machine surface (`getState`, `dispatch`)
|
|
9
|
+
* that the voice loop drives from VAD events + scheduler events.
|
|
10
|
+
*
|
|
11
|
+
* IDLE
|
|
12
|
+
* │ speech-start
|
|
13
|
+
* ▼
|
|
14
|
+
* LISTENING ────────────── speech-pause ────────────▶ PAUSE_TENTATIVE
|
|
15
|
+
* ▲ │
|
|
16
|
+
* │ speech-active (within 2× hangover) │
|
|
17
|
+
* │ ──── discard C1 ──────────────────────────────────────┤
|
|
18
|
+
* │ │
|
|
19
|
+
* │ │ speech-end
|
|
20
|
+
* │ ▼
|
|
21
|
+
* │ SPEAKING
|
|
22
|
+
* │ │
|
|
23
|
+
* │ ◀──── restore C1, re-enter LISTENING ───── barge-in ──┘
|
|
24
|
+
*
|
|
25
|
+
* Key transitions (all wired to a `CheckpointManagerLike`):
|
|
26
|
+
*
|
|
27
|
+
* - `speech-pause` (LISTENING → PAUSE_TENTATIVE)
|
|
28
|
+
* Save checkpoint named "pre-draft" (C1). Kick the drafter on the
|
|
29
|
+
* current partial transcript via the caller-supplied `startDrafter`.
|
|
30
|
+
*
|
|
31
|
+
* - `speech-active` within 2× hangover (PAUSE_TENTATIVE → LISTENING)
|
|
32
|
+
* Discard C1. Abort the speculative drafter. No rollback is required
|
|
33
|
+
* because the drafter's KV writes were speculative against a snapshot
|
|
34
|
+
* we never committed.
|
|
35
|
+
*
|
|
36
|
+
* - `speech-end` (PAUSE_TENTATIVE → SPEAKING)
|
|
37
|
+
* Commit the ASR final. The drafter's output is promoted: callers
|
|
38
|
+
* wire the verifier on top via `onCommit`. **Retain** C1 — a barge-in
|
|
39
|
+
* while the agent is speaking must roll the KV cache back to the
|
|
40
|
+
* pre-draft point so the next user turn doesn't see the agent's own
|
|
41
|
+
* half-spoken response in the prompt.
|
|
42
|
+
*
|
|
43
|
+
* - `barge-in` (SPEAKING → LISTENING)
|
|
44
|
+
* Restore C1. Hand the new user speech to the next LISTENING turn.
|
|
45
|
+
* The same C1 may be restored multiple times — useful when two
|
|
46
|
+
* consecutive barge-ins land before the next checkpoint is taken
|
|
47
|
+
* (the test suite covers this).
|
|
48
|
+
*
|
|
49
|
+
* No fallback sludge: a checkpoint failure surfaces via `onError`. The
|
|
50
|
+
* state machine never silently downgrades to a non-checkpointed path —
|
|
51
|
+
* callers turn the feature off via the constructor option.
|
|
52
|
+
*/
|
|
53
|
+
import type { CheckpointHandle, CheckpointManagerLike } from "./checkpoint-manager";
|
|
54
|
+
import type { ContextPartial } from "./eager-context-builder";
|
|
55
|
+
import { type EotClassifier } from "./eot-classifier";
|
|
56
|
+
import type { OptimisticGenerationPolicy } from "./optimistic-policy";
|
|
57
|
+
import { type PrefillOptimisticOptions, type PrefillOptimisticResult } from "./prefill-client";
|
|
58
|
+
/** Public state. Closed union — exhaustive switches catch new variants. */
|
|
59
|
+
export type VoiceState = "IDLE" | "LISTENING" | "PAUSE_TENTATIVE" | "SPEAKING";
|
|
60
|
+
/**
|
|
61
|
+
* Events that drive the state machine. Wall-clock timestamps are caller-
|
|
62
|
+
* supplied so the machine is testable without a fake clock.
|
|
63
|
+
*/
|
|
64
|
+
export type VoiceStateEvent = {
|
|
65
|
+
type: "speech-start";
|
|
66
|
+
timestampMs: number;
|
|
67
|
+
} | {
|
|
68
|
+
type: "speech-pause";
|
|
69
|
+
timestampMs: number;
|
|
70
|
+
partialTranscript: string;
|
|
71
|
+
} | {
|
|
72
|
+
type: "speech-active";
|
|
73
|
+
timestampMs: number;
|
|
74
|
+
} | {
|
|
75
|
+
type: "speech-end";
|
|
76
|
+
timestampMs: number;
|
|
77
|
+
finalTranscript: string;
|
|
78
|
+
} | {
|
|
79
|
+
type: "barge-in";
|
|
80
|
+
timestampMs: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Tier-3 — streamed partial transcript chunk from the ASR. When an
|
|
84
|
+
* `eotClassifier` is configured the machine will run `checkEot()` and may
|
|
85
|
+
* transition to PAUSE_TENTATIVE early or commit immediately depending on
|
|
86
|
+
* the returned probability and the elapsed silence since the last speech
|
|
87
|
+
* audio frame (provided by the caller via `silenceSinceMs`).
|
|
88
|
+
*/
|
|
89
|
+
| {
|
|
90
|
+
type: "partial-transcript";
|
|
91
|
+
timestampMs: number;
|
|
92
|
+
text: string;
|
|
93
|
+
/** Milliseconds of silence elapsed since the last speech audio frame. */
|
|
94
|
+
silenceSinceMs: number;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Reason a speculative drafter handle was aborted by the state machine.
|
|
98
|
+
*
|
|
99
|
+
* - `resumed` — `speech-active` re-entered LISTENING; the draft was
|
|
100
|
+
* speculative against a transcript that turned out to be
|
|
101
|
+
* still provisional.
|
|
102
|
+
* - `barge-in` — the user interrupted while the agent was speaking; the
|
|
103
|
+
* draft's downstream TTS has already been hard-stopped.
|
|
104
|
+
* - `shutdown` — `dispose()` was called.
|
|
105
|
+
*/
|
|
106
|
+
export type DrafterAbortReason = "resumed" | "barge-in" | "shutdown";
|
|
107
|
+
/**
|
|
108
|
+
* Handle returned by `startDrafter`. The state machine calls `abort()`
|
|
109
|
+
* (idempotent) when the draft must be cancelled.
|
|
110
|
+
*/
|
|
111
|
+
export interface DrafterHandle {
|
|
112
|
+
abort(reason: DrafterAbortReason): void;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Caller-supplied drafter starter. Receives the partial transcript at the
|
|
116
|
+
* `speech-pause` instant and a turn id. Must return synchronously; the
|
|
117
|
+
* draft itself runs in the background until the state machine calls
|
|
118
|
+
* `abort()` or the draft completes (which is observed via `onCommit`).
|
|
119
|
+
*/
|
|
120
|
+
export type StartDrafterFn = (args: {
|
|
121
|
+
partialTranscript: string;
|
|
122
|
+
turnId: string;
|
|
123
|
+
/** Aborted when the drafter must be cancelled. */
|
|
124
|
+
signal: AbortSignal;
|
|
125
|
+
}) => DrafterHandle;
|
|
126
|
+
export interface VoiceStateMachineEvents {
|
|
127
|
+
/** State transition occurred. Called AFTER the new state is set. */
|
|
128
|
+
onStateChange?(prev: VoiceState, next: VoiceState, turnId: string): void;
|
|
129
|
+
/** Speculative drafter was started on `speech-pause`. */
|
|
130
|
+
onDrafterStart?(turnId: string, partialTranscript: string): void;
|
|
131
|
+
/** Speculative drafter was aborted (resumed / barge-in / shutdown). */
|
|
132
|
+
onDrafterAbort?(turnId: string, reason: DrafterAbortReason): void;
|
|
133
|
+
/**
|
|
134
|
+
* `speech-end` reached SPEAKING. The verifier should now run on top of
|
|
135
|
+
* the speculative drafter output against the final transcript.
|
|
136
|
+
*
|
|
137
|
+
* `prefillResult` is present when the C7 optimistic prefill completed
|
|
138
|
+
* before `speech-end` arrived. The verifier can resume generation from
|
|
139
|
+
* `prefillResult.checkpointHandle` to skip one full prefill RTT.
|
|
140
|
+
*/
|
|
141
|
+
onCommit?(turnId: string, finalTranscript: string, prefillResult?: PrefillOptimisticResult): void;
|
|
142
|
+
/**
|
|
143
|
+
* A barge-in restored C1. The voice loop should drop any in-flight TTS
|
|
144
|
+
* (separate concern owned by the barge-in controller) and begin a new
|
|
145
|
+
* LISTENING turn with the new user audio.
|
|
146
|
+
*/
|
|
147
|
+
onRollback?(turnId: string, restoredFrom: CheckpointHandle): void;
|
|
148
|
+
/**
|
|
149
|
+
* Surfaced when `CheckpointManager.{save,restore,discard}` rejects.
|
|
150
|
+
* The state machine continues — checkpoint failures must not break the
|
|
151
|
+
* voice loop — but the operator can flip the feature flag off in
|
|
152
|
+
* response.
|
|
153
|
+
*/
|
|
154
|
+
onError?(op: "save" | "restore" | "discard", error: unknown, turnId: string): void;
|
|
155
|
+
/**
|
|
156
|
+
* Fired when the Tier-3 EOT classifier scores a partial transcript.
|
|
157
|
+
* Useful for telemetry and debugging — P values are emitted before the
|
|
158
|
+
* state machine decides whether to act on them.
|
|
159
|
+
*/
|
|
160
|
+
onEotScore?(turnId: string, text: string, pDone: number): void;
|
|
161
|
+
/**
|
|
162
|
+
* Fired when the C7 optimistic prefill completes (either successfully or
|
|
163
|
+
* with an error). On success `result` is set; on error `error` is set.
|
|
164
|
+
* The state machine never blocks on the prefill result — it resolves or
|
|
165
|
+
* rejects in the background while PAUSE_TENTATIVE is active.
|
|
166
|
+
*/
|
|
167
|
+
onPrefill?(turnId: string, result: PrefillOptimisticResult | null, error: unknown | null): void;
|
|
168
|
+
}
|
|
169
|
+
export interface VoiceStateMachineOptions {
|
|
170
|
+
/** Slot identifier for the conversation pinning. */
|
|
171
|
+
slotId: string;
|
|
172
|
+
/**
|
|
173
|
+
* Whether to actually call into the `CheckpointManager`. When `false`,
|
|
174
|
+
* the state machine still transitions through the same states but
|
|
175
|
+
* never saves/restores. Default `true` — callers turn the feature off
|
|
176
|
+
* here when upstream `--ctx-checkpoints` is unavailable.
|
|
177
|
+
*/
|
|
178
|
+
enableCheckpoints?: boolean;
|
|
179
|
+
/**
|
|
180
|
+
* VAD pause hangover (ms). The rollback window is `2 × hangoverMs`. If
|
|
181
|
+
* a `speech-active` arrives later than this after a `speech-pause`, the
|
|
182
|
+
* machine treats the pause as a real speech-end equivalent (it commits
|
|
183
|
+
* instead of discarding).
|
|
184
|
+
*/
|
|
185
|
+
pauseHangoverMs?: number;
|
|
186
|
+
checkpointManager: CheckpointManagerLike;
|
|
187
|
+
/** Drafter starter — see `StartDrafterFn`. */
|
|
188
|
+
startDrafter: StartDrafterFn;
|
|
189
|
+
/** Events sink. */
|
|
190
|
+
events?: VoiceStateMachineEvents;
|
|
191
|
+
/**
|
|
192
|
+
* Tier-3 semantic EOT classifier. When provided, partial transcripts are
|
|
193
|
+
* scored on each `partial-transcript` dispatch:
|
|
194
|
+
*
|
|
195
|
+
* P ≥ 0.9 AND silence ≥ 50 ms → commit immediately (skip remaining hangover)
|
|
196
|
+
* P ≥ 0.6 AND silence ≥ 20 ms → enter PAUSE_TENTATIVE early (start drafter)
|
|
197
|
+
* P < 0.4 → extend hangover by 50 ms (user is mid-clause)
|
|
198
|
+
*
|
|
199
|
+
* When absent the machine behaves as before (tiers 1 + 2 only).
|
|
200
|
+
*/
|
|
201
|
+
eotClassifier?: EotClassifier;
|
|
202
|
+
/**
|
|
203
|
+
* C7 — optimistic prefill configuration. When provided the machine fires
|
|
204
|
+
* `prefillOptimistic` on `PAUSE_TENTATIVE` entry (fire-and-forget) so the
|
|
205
|
+
* KV cache is pre-warmed with the partial transcript by the time ASR
|
|
206
|
+
* finalizes. The prefill result is passed to `onCommit` via `prefillResult`.
|
|
207
|
+
*
|
|
208
|
+
* Omit to disable the prefill path entirely.
|
|
209
|
+
*/
|
|
210
|
+
prefillConfig?: {
|
|
211
|
+
/** Base URL of the llama-server (`http://host:port`). */
|
|
212
|
+
baseUrl: string;
|
|
213
|
+
/** `CheckpointManager` options forwarded to `prefillOptimistic`. */
|
|
214
|
+
checkpointOptions?: Omit<PrefillOptimisticOptions, "checkpointManager">;
|
|
215
|
+
/**
|
|
216
|
+
* Optional deterministic context from `EagerContextBuilder` (C3).
|
|
217
|
+
* When supplied, the prefill `/completion` call includes the system
|
|
218
|
+
* prompt + conversation history so the KV cache is maximally warm.
|
|
219
|
+
*/
|
|
220
|
+
getContext?: () => ContextPartial | null;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* W3-9 / F1 — optional optimistic-generation policy. When provided, the
|
|
224
|
+
* machine consults `policy.shouldStartOptimisticLm(eotProb)` at the
|
|
225
|
+
* `firePrefill` site before kicking off the speculative prefill. When
|
|
226
|
+
* the policy says no (e.g. on battery, or below the configured EOT
|
|
227
|
+
* threshold) `firePrefill` is a no-op and `handleSpeechEnd` falls back
|
|
228
|
+
* to a regular (non-prefilled) verifier pass. Omit to keep the prior
|
|
229
|
+
* behaviour (fire on every PAUSE_TENTATIVE entry regardless of EOT
|
|
230
|
+
* probability).
|
|
231
|
+
*/
|
|
232
|
+
optimisticPolicy?: OptimisticGenerationPolicy;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Explicit state-machine implementation. Stateful (state + active
|
|
236
|
+
* checkpoint + drafter handle); methods are NOT thread-safe — call them
|
|
237
|
+
* from a single event loop.
|
|
238
|
+
*/
|
|
239
|
+
export declare class VoiceStateMachine {
|
|
240
|
+
private readonly slotId;
|
|
241
|
+
private readonly enabled;
|
|
242
|
+
private readonly pauseHangoverMs;
|
|
243
|
+
private readonly mgr;
|
|
244
|
+
private readonly startDrafterFn;
|
|
245
|
+
private readonly events;
|
|
246
|
+
/** Tier-3 semantic EOT classifier. Optional — omit for tiers 1+2 only. */
|
|
247
|
+
private readonly eotClassifier;
|
|
248
|
+
private state;
|
|
249
|
+
private turnCounter;
|
|
250
|
+
/** Most recent C1 handle. Retained across `speech-end` until barge-in or next IDLE. */
|
|
251
|
+
private checkpoint;
|
|
252
|
+
private activeDraft;
|
|
253
|
+
private pauseTimestampMs;
|
|
254
|
+
private disposed;
|
|
255
|
+
/**
|
|
256
|
+
* Accumulated hangover extension from EOT mid-clause detections (ms).
|
|
257
|
+
* Reset on each new turn (speech-start). Added to the effective hangover
|
|
258
|
+
* so that consecutive mid-clause detections stack.
|
|
259
|
+
*/
|
|
260
|
+
private eotHangoverExtensionMs;
|
|
261
|
+
/**
|
|
262
|
+
* C7 — in-flight prefill promise. Set on PAUSE_TENTATIVE entry; awaited
|
|
263
|
+
* (or discarded) on SPEECH_END / SPEECH_ACTIVE_REBOUND. Fire-and-forget
|
|
264
|
+
* from the perspective of the state machine — the result is surfaced via
|
|
265
|
+
* `onPrefill` and `onCommit(prefillResult)`.
|
|
266
|
+
*/
|
|
267
|
+
private prefillPromise;
|
|
268
|
+
private readonly prefillConfig;
|
|
269
|
+
/** W3-9 / F1 — optimistic-generation policy gate for `firePrefill`. */
|
|
270
|
+
private readonly optimisticPolicy;
|
|
271
|
+
/**
|
|
272
|
+
* Most recently observed EOT probability from the Tier-3 classifier.
|
|
273
|
+
* Used as the `eotProb` argument to `prefillOptimistic` when PAUSE_TENTATIVE
|
|
274
|
+
* is entered. Starts at 0.5 (uncertain). Updated on each `partial-transcript`
|
|
275
|
+
* event when an EOT classifier is wired.
|
|
276
|
+
*/
|
|
277
|
+
private latestEotProb;
|
|
278
|
+
constructor(opts: VoiceStateMachineOptions);
|
|
279
|
+
/** Current state — read-only view for tests / telemetry. */
|
|
280
|
+
getState(): VoiceState;
|
|
281
|
+
/** Internal turn id for the current turn. Stable across pause/active. */
|
|
282
|
+
getTurnId(): string;
|
|
283
|
+
/**
|
|
284
|
+
* Active checkpoint handle, if any. Exposed for tests; production code
|
|
285
|
+
* should use `onCommit` / `onRollback` events instead.
|
|
286
|
+
*/
|
|
287
|
+
getActiveCheckpoint(): CheckpointHandle | null;
|
|
288
|
+
/**
|
|
289
|
+
* Accumulated EOT hangover extension (ms). The `VadDetector` (Tier 2)
|
|
290
|
+
* should add this to its effective pause hangover so mid-clause pauses
|
|
291
|
+
* are not committed prematurely. Resets to 0 on each `speech-start`.
|
|
292
|
+
*/
|
|
293
|
+
getEotHangoverExtensionMs(): number;
|
|
294
|
+
/**
|
|
295
|
+
* Drive the machine. Returns a promise that resolves after any async
|
|
296
|
+
* checkpoint work for this event finishes (await it in tests for
|
|
297
|
+
* deterministic assertions). Callers in production may ignore the
|
|
298
|
+
* returned promise — events fire synchronously regardless.
|
|
299
|
+
*/
|
|
300
|
+
dispatch(event: VoiceStateEvent): Promise<void>;
|
|
301
|
+
/**
|
|
302
|
+
* Tear down: abort any in-flight drafter, discard the live checkpoint.
|
|
303
|
+
* Safe to call multiple times. After `dispose` the machine ignores
|
|
304
|
+
* further events.
|
|
305
|
+
*/
|
|
306
|
+
dispose(): Promise<void>;
|
|
307
|
+
private handleSpeechStart;
|
|
308
|
+
private handleSpeechPause;
|
|
309
|
+
private handleSpeechActive;
|
|
310
|
+
private handleSpeechEnd;
|
|
311
|
+
private handleBargeIn;
|
|
312
|
+
/**
|
|
313
|
+
* Handle a partial transcript chunk from streaming ASR.
|
|
314
|
+
*
|
|
315
|
+
* When an `eotClassifier` is configured, scores the text and applies:
|
|
316
|
+
*
|
|
317
|
+
* P ≥ EOT_COMMIT_THRESHOLD AND silence ≥ EOT_COMMIT_SILENCE_MS
|
|
318
|
+
* → behave as `speech-end` (commit immediately, skip remaining hangover)
|
|
319
|
+
*
|
|
320
|
+
* P ≥ EOT_TENTATIVE_THRESHOLD AND silence ≥ EOT_TENTATIVE_SILENCE_MS
|
|
321
|
+
* AND state is LISTENING
|
|
322
|
+
* → behave as `speech-pause` (enter PAUSE_TENTATIVE, start drafter)
|
|
323
|
+
*
|
|
324
|
+
* P < EOT_MID_CLAUSE_THRESHOLD
|
|
325
|
+
* → accumulate EOT_HANGOVER_EXTENSION_MS into the hangover extension
|
|
326
|
+
* (the VadDetector reads this via `getEotHangoverExtensionMs()`)
|
|
327
|
+
*
|
|
328
|
+
* No-ops when `eotClassifier` is not set, or when the machine is not in
|
|
329
|
+
* LISTENING or PAUSE_TENTATIVE.
|
|
330
|
+
*/
|
|
331
|
+
private handlePartialTranscript;
|
|
332
|
+
/**
|
|
333
|
+
* Score the partial transcript with the Tier-3 EOT classifier.
|
|
334
|
+
* Returns 0.5 when no classifier is configured (uncertain — let tiers 1+2 decide).
|
|
335
|
+
*/
|
|
336
|
+
private checkEot;
|
|
337
|
+
/**
|
|
338
|
+
* C7 — fire the optimistic prefill in the background and store the
|
|
339
|
+
* promise so `handleSpeechEnd` can await it. The machine never awaits
|
|
340
|
+
* here — it stays in PAUSE_TENTATIVE whether or not the prefill has
|
|
341
|
+
* finished. On `SPEECH_ACTIVE_REBOUND` the promise is discarded; on
|
|
342
|
+
* `SPEECH_END` it is awaited (or its cached result used) and passed
|
|
343
|
+
* through `onCommit(prefillResult)`.
|
|
344
|
+
*
|
|
345
|
+
* W3-9 / F1 — when an `optimisticPolicy` is configured, this is gated on
|
|
346
|
+
* `policy.shouldStartOptimisticLm(eotProb)`. The policy folds the
|
|
347
|
+
* device's power source (plugged-in / battery / unknown), the user's
|
|
348
|
+
* explicit override, and the EOT threshold into a single decision; when
|
|
349
|
+
* it returns false the prefill is suppressed and `handleSpeechEnd`
|
|
350
|
+
* runs a regular (non-prefilled) verifier pass.
|
|
351
|
+
*/
|
|
352
|
+
private firePrefill;
|
|
353
|
+
private startSpeculativeDrafter;
|
|
354
|
+
private abortActiveDraft;
|
|
355
|
+
private setState;
|
|
356
|
+
/**
|
|
357
|
+
* Returns `this.state` as the wider `VoiceState` union. Used in
|
|
358
|
+
* post-`await` re-checks where the entry-guard narrowing would
|
|
359
|
+
* otherwise convince TS the state can't have changed (it doesn't track
|
|
360
|
+
* mutations through `setState`).
|
|
361
|
+
*/
|
|
362
|
+
private currentState;
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=voice-state-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-state-machine.d.ts","sourceRoot":"","sources":["voice-state-machine.ts"],"names":[],"mappings":"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"}
|