@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.3
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 +157 -0
- package/dist/actions/generate-media.d.ts +59 -0
- package/dist/actions/generate-media.d.ts.map +1 -0
- package/dist/actions/identify-speaker.d.ts +23 -0
- package/dist/actions/identify-speaker.d.ts.map +1 -0
- package/dist/actions/transcription-control.d.ts +29 -0
- package/dist/actions/transcription-control.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
- package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
- package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/index.d.ts +18 -0
- package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
- package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
- package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
- package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
- package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/types.d.ts +338 -0
- package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
- package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
- package/dist/backends/apple-foundation.d.ts +56 -0
- package/dist/backends/apple-foundation.d.ts.map +1 -0
- package/dist/index.d.ts +8 -37
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38979 -430
- package/dist/index.js.map +217 -0
- package/dist/local-inference-routes.d.ts +47 -0
- package/dist/local-inference-routes.d.ts.map +1 -0
- package/dist/provider.d.ts +21 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/routes/compat-helpers.d.ts +18 -0
- package/dist/routes/compat-helpers.d.ts.map +1 -0
- package/dist/routes/family-member-route.d.ts +62 -0
- package/dist/routes/family-member-route.d.ts.map +1 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +42040 -0
- package/dist/routes/index.js.map +236 -0
- package/dist/routes/live-diarization-route.d.ts +33 -0
- package/dist/routes/live-diarization-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-route.d.ts +4 -0
- package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/dist/routes/local-inference-compat-routes.d.ts +16 -0
- package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/dist/routes/local-inference-tts-route.d.ts +7 -0
- package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
- package/dist/routes/native-pcm-turn-route.d.ts +3 -0
- package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
- package/dist/routes/transcript-audio-store.d.ts +15 -0
- package/dist/routes/transcript-audio-store.d.ts.map +1 -0
- package/dist/routes/transcripts-routes.d.ts +44 -0
- package/dist/routes/transcripts-routes.d.ts.map +1 -0
- package/dist/routes/voice-first-run-routes.d.ts +62 -0
- package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
- package/dist/routes/voice-models-routes.d.ts +62 -0
- package/dist/routes/voice-models-routes.d.ts.map +1 -0
- package/dist/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/dist/routes/voice-profiles-management-routes.d.ts +52 -0
- package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/dist/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/dist/runtime/embedding-manager-support.d.ts +77 -0
- package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
- package/dist/runtime/embedding-presets.d.ts +16 -0
- package/dist/runtime/embedding-presets.d.ts.map +1 -0
- package/dist/runtime/embedding-warmup-policy.d.ts +14 -0
- package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/dist/runtime/ensure-local-inference-handler.d.ts +70 -0
- package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +15 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +38768 -0
- package/dist/runtime/index.js.map +217 -0
- package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
- package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/dist/runtime/voice-entity-binding.d.ts +113 -0
- package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
- package/dist/services/active-model.d.ts +310 -0
- package/dist/services/active-model.d.ts.map +1 -0
- package/dist/services/asr-provenance.d.ts +5 -0
- package/dist/services/asr-provenance.d.ts.map +1 -0
- package/dist/services/assignments.d.ts +84 -0
- package/dist/services/assignments.d.ts.map +1 -0
- package/dist/services/backend-selector.d.ts +55 -0
- package/dist/services/backend-selector.d.ts.map +1 -0
- package/dist/services/backend.d.ts +440 -0
- package/dist/services/backend.d.ts.map +1 -0
- package/dist/services/bionic-host-loader.d.ts +67 -0
- package/dist/services/bionic-host-loader.d.ts.map +1 -0
- package/dist/services/bundled-models.d.ts +34 -0
- package/dist/services/bundled-models.d.ts.map +1 -0
- package/dist/services/cache-bridge.d.ts +206 -0
- package/dist/services/cache-bridge.d.ts.map +1 -0
- package/dist/services/catalog.d.ts +10 -0
- package/dist/services/catalog.d.ts.map +1 -0
- package/dist/services/checkpoint-client.d.ts +109 -0
- package/dist/services/checkpoint-client.d.ts.map +1 -0
- package/dist/services/checkpoint-manager.d.ts +217 -0
- package/dist/services/checkpoint-manager.d.ts.map +1 -0
- package/dist/services/cloud-fallback.d.ts +102 -0
- package/dist/services/cloud-fallback.d.ts.map +1 -0
- package/dist/services/context-fit.d.ts +36 -0
- package/dist/services/context-fit.d.ts.map +1 -0
- package/dist/services/conversation-registry.d.ts +142 -0
- package/dist/services/conversation-registry.d.ts.map +1 -0
- package/dist/services/desktop-fused-ffi-backend-runtime.d.ts +111 -0
- package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/dist/services/device-bridge.d.ts +188 -0
- package/dist/services/device-bridge.d.ts.map +1 -0
- package/dist/services/device-resource-metrics.d.ts +149 -0
- package/dist/services/device-resource-metrics.d.ts.map +1 -0
- package/dist/services/device-tier.d.ts +133 -0
- package/dist/services/device-tier.d.ts.map +1 -0
- package/dist/services/downloader.d.ts +94 -0
- package/dist/services/downloader.d.ts.map +1 -0
- package/dist/services/engine.d.ts +579 -0
- package/dist/services/engine.d.ts.map +1 -0
- package/dist/services/ensure-local-artifacts.d.ts +82 -0
- package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
- package/dist/services/external-scanner.d.ts +17 -0
- package/dist/services/external-scanner.d.ts.map +1 -0
- package/dist/services/ffi-llm-mock.d.ts +90 -0
- package/dist/services/ffi-llm-mock.d.ts.map +1 -0
- package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
- package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
- package/dist/services/ffi-streaming-backend.d.ts +201 -0
- package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
- package/dist/services/ffi-streaming-runner.d.ts +146 -0
- package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
- package/dist/services/gpu-autotune.d.ts +150 -0
- package/dist/services/gpu-autotune.d.ts.map +1 -0
- package/dist/services/gpu-detect.d.ts +56 -0
- package/dist/services/gpu-detect.d.ts.map +1 -0
- package/dist/services/handler-registry.d.ts +72 -0
- package/dist/services/handler-registry.d.ts.map +1 -0
- package/dist/services/hardware.d.ts +63 -0
- package/dist/services/hardware.d.ts.map +1 -0
- package/dist/services/image-description-runtime.d.ts +14 -0
- package/dist/services/image-description-runtime.d.ts.map +1 -0
- package/dist/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/backend-selector.d.ts +118 -0
- package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
- package/dist/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/errors.d.ts +16 -0
- package/dist/services/imagegen/errors.d.ts.map +1 -0
- package/dist/services/imagegen/index.d.ts +58 -0
- package/dist/services/imagegen/index.d.ts.map +1 -0
- package/dist/services/imagegen/mflux.d.ts +74 -0
- package/dist/services/imagegen/mflux.d.ts.map +1 -0
- package/dist/services/imagegen/sd-cpp.d.ts +181 -0
- package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/dist/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/types.d.ts +181 -0
- package/dist/services/imagegen/types.d.ts.map +1 -0
- package/dist/services/index.d.ts +31 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +39453 -0
- package/dist/services/index.js.map +227 -0
- package/dist/services/inference-capabilities.d.ts +132 -0
- package/dist/services/inference-capabilities.d.ts.map +1 -0
- package/dist/services/inference-telemetry.d.ts +59 -0
- package/dist/services/inference-telemetry.d.ts.map +1 -0
- package/dist/services/ios-llama-streaming.d.ts +119 -0
- package/dist/services/ios-llama-streaming.d.ts.map +1 -0
- package/dist/services/kv-spill.d.ts +189 -0
- package/dist/services/kv-spill.d.ts.map +1 -0
- package/dist/services/latency-trace.d.ts +346 -0
- package/dist/services/latency-trace.d.ts.map +1 -0
- package/dist/services/lib-target.d.ts +55 -0
- package/dist/services/lib-target.d.ts.map +1 -0
- package/dist/services/live-signals.d.ts +86 -0
- package/dist/services/live-signals.d.ts.map +1 -0
- package/dist/services/llama-server-metrics.d.ts +114 -0
- package/dist/services/llama-server-metrics.d.ts.map +1 -0
- package/dist/services/llm-streaming-binding.d.ts +96 -0
- package/dist/services/llm-streaming-binding.d.ts.map +1 -0
- package/dist/services/load-args.d.ts +82 -0
- package/dist/services/load-args.d.ts.map +1 -0
- package/dist/services/manifest/index.d.ts +4 -0
- package/dist/services/manifest/index.d.ts.map +1 -0
- package/dist/services/manifest/schema.d.ts +903 -0
- package/dist/services/manifest/schema.d.ts.map +1 -0
- package/dist/services/manifest/types.d.ts +32 -0
- package/dist/services/manifest/types.d.ts.map +1 -0
- package/dist/services/manifest/validator.d.ts +66 -0
- package/dist/services/manifest/validator.d.ts.map +1 -0
- package/dist/services/memory-arbiter.d.ts +348 -0
- package/dist/services/memory-arbiter.d.ts.map +1 -0
- package/dist/services/memory-benchmark.d.ts +76 -0
- package/dist/services/memory-benchmark.d.ts.map +1 -0
- package/dist/services/memory-monitor.d.ts +128 -0
- package/dist/services/memory-monitor.d.ts.map +1 -0
- package/dist/services/memory-pressure.d.ts +130 -0
- package/dist/services/memory-pressure.d.ts.map +1 -0
- package/dist/services/mtp-doctor.d.ts +13 -0
- package/dist/services/mtp-doctor.d.ts.map +1 -0
- package/dist/services/network-policy.d.ts +127 -0
- package/dist/services/network-policy.d.ts.map +1 -0
- package/dist/services/paths.d.ts +6 -0
- package/dist/services/paths.d.ts.map +1 -0
- package/dist/services/planner-skeleton.d.ts +124 -0
- package/dist/services/planner-skeleton.d.ts.map +1 -0
- package/dist/services/providers.d.ts +38 -0
- package/dist/services/providers.d.ts.map +1 -0
- package/dist/services/ram-budget.d.ts +110 -0
- package/dist/services/ram-budget.d.ts.map +1 -0
- package/dist/services/readiness.d.ts +9 -0
- package/dist/services/readiness.d.ts.map +1 -0
- package/dist/services/recommendation.d.ts +111 -0
- package/dist/services/recommendation.d.ts.map +1 -0
- package/dist/services/registry.d.ts +33 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/services/router-handler.d.ts +92 -0
- package/dist/services/router-handler.d.ts.map +1 -0
- package/dist/services/routing-policy.d.ts +92 -0
- package/dist/services/routing-policy.d.ts.map +1 -0
- package/dist/services/routing-preferences.d.ts +8 -0
- package/dist/services/routing-preferences.d.ts.map +1 -0
- package/dist/services/runtime-target.d.ts +98 -0
- package/dist/services/runtime-target.d.ts.map +1 -0
- package/dist/services/service.d.ts +128 -0
- package/dist/services/service.d.ts.map +1 -0
- package/dist/services/session-pool.d.ts +72 -0
- package/dist/services/session-pool.d.ts.map +1 -0
- package/dist/services/structured-output/deterministic-repair.d.ts +23 -0
- package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/dist/services/structured-output/index.d.ts +2 -0
- package/dist/services/structured-output/index.d.ts.map +1 -0
- package/dist/services/structured-output.d.ts +311 -0
- package/dist/services/structured-output.d.ts.map +1 -0
- package/dist/services/system-memory.d.ts +33 -0
- package/dist/services/system-memory.d.ts.map +1 -0
- package/dist/services/types.d.ts +19 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/verify-on-device.d.ts +34 -0
- package/dist/services/verify-on-device.d.ts.map +1 -0
- package/dist/services/verify.d.ts +8 -0
- package/dist/services/verify.d.ts.map +1 -0
- package/dist/services/vision/aosp-unavailable.d.ts +115 -0
- package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/vision/capacitor-llama.d.ts +99 -0
- package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
- package/dist/services/vision/cloud-fallback.d.ts +47 -0
- package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
- package/dist/services/vision/hash.d.ts +71 -0
- package/dist/services/vision/hash.d.ts.map +1 -0
- package/dist/services/vision/index.d.ts +95 -0
- package/dist/services/vision/index.d.ts.map +1 -0
- package/dist/services/vision/llama-server.d.ts +73 -0
- package/dist/services/vision/llama-server.d.ts.map +1 -0
- package/dist/services/vision/types.d.ts +162 -0
- package/dist/services/vision/types.d.ts.map +1 -0
- package/dist/services/vision/vast-fallback.d.ts +18 -0
- package/dist/services/vision/vast-fallback.d.ts.map +1 -0
- package/dist/services/vision-embedding-cache.d.ts +98 -0
- package/dist/services/vision-embedding-cache.d.ts.map +1 -0
- package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
- package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
- package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
- package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
- package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
- package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
- package/dist/services/voice/audio-frame-consumer.d.ts +294 -0
- package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/dist/services/voice/barge-in.d.ts +112 -0
- package/dist/services/voice/barge-in.d.ts.map +1 -0
- package/dist/services/voice/cancellation-coordinator.d.ts +127 -0
- package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/dist/services/voice/checkpoint-manager.d.ts +199 -0
- package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/dist/services/voice/checkpoint-policy.d.ts +178 -0
- package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
- package/dist/services/voice/corpus-augment.d.ts +111 -0
- package/dist/services/voice/corpus-augment.d.ts.map +1 -0
- package/dist/services/voice/corpus-generator.d.ts +134 -0
- package/dist/services/voice/corpus-generator.d.ts.map +1 -0
- package/dist/services/voice/diarization-error-rate.d.ts +40 -0
- package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
- package/dist/services/voice/e2e-harness.d.ts +297 -0
- package/dist/services/voice/e2e-harness.d.ts.map +1 -0
- package/dist/services/voice/eager-context-builder.d.ts +170 -0
- package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
- package/dist/services/voice/echo-delay.d.ts +67 -0
- package/dist/services/voice/echo-delay.d.ts.map +1 -0
- package/dist/services/voice/echo-metrics.d.ts +7 -0
- package/dist/services/voice/echo-metrics.d.ts.map +1 -0
- package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
- package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
- package/dist/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/dist/services/voice/embedding-server.d.ts +37 -0
- package/dist/services/voice/embedding-server.d.ts.map +1 -0
- package/dist/services/voice/embedding.d.ts +132 -0
- package/dist/services/voice/embedding.d.ts.map +1 -0
- package/dist/services/voice/emotion-attribution.d.ts +68 -0
- package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
- package/dist/services/voice/engine-bridge.d.ts +762 -0
- package/dist/services/voice/engine-bridge.d.ts.map +1 -0
- package/dist/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/dist/services/voice/eot-classifier.d.ts +211 -0
- package/dist/services/voice/eot-classifier.d.ts.map +1 -0
- package/dist/services/voice/errors.d.ts +20 -0
- package/dist/services/voice/errors.d.ts.map +1 -0
- package/dist/services/voice/expressive-tags.d.ts +158 -0
- package/dist/services/voice/expressive-tags.d.ts.map +1 -0
- package/dist/services/voice/ffi-bindings.d.ts +696 -0
- package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
- package/dist/services/voice/first-line-cache.d.ts +181 -0
- package/dist/services/voice/first-line-cache.d.ts.map +1 -0
- package/dist/services/voice/fused-eot-scorer.d.ts +51 -0
- package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/dist/services/voice/index.d.ts +96 -0
- package/dist/services/voice/index.d.ts.map +1 -0
- package/dist/services/voice/kokoro/index.d.ts +24 -0
- package/dist/services/voice/kokoro/index.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-backend.d.ts +87 -0
- package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
- package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
- package/dist/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/dist/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
- package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/dist/services/voice/kokoro/types.d.ts +82 -0
- package/dist/services/voice/kokoro/types.d.ts.map +1 -0
- package/dist/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/dist/services/voice/kokoro/voices.d.ts +30 -0
- package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
- package/dist/services/voice/lifecycle.d.ts +135 -0
- package/dist/services/voice/lifecycle.d.ts.map +1 -0
- package/dist/services/voice/live-diarization-session.d.ts +196 -0
- package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
- package/dist/services/voice/metric-math.d.ts +10 -0
- package/dist/services/voice/metric-math.d.ts.map +1 -0
- package/dist/services/voice/mic-source.d.ts +136 -0
- package/dist/services/voice/mic-source.d.ts.map +1 -0
- package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
- package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
- package/dist/services/voice/optimistic-policy.d.ts +109 -0
- package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
- package/dist/services/voice/optimistic-rollback.d.ts +151 -0
- package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
- package/dist/services/voice/partial-stabilizer.d.ts +73 -0
- package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/dist/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/dist/services/voice/phrase-cache.d.ts +76 -0
- package/dist/services/voice/phrase-cache.d.ts.map +1 -0
- package/dist/services/voice/phrase-chunker.d.ts +62 -0
- package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
- package/dist/services/voice/pipeline-impls.d.ts +151 -0
- package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
- package/dist/services/voice/pipeline.d.ts +216 -0
- package/dist/services/voice/pipeline.d.ts.map +1 -0
- package/dist/services/voice/prefill-client.d.ts +123 -0
- package/dist/services/voice/prefill-client.d.ts.map +1 -0
- package/dist/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/dist/services/voice/profile-store.d.ts +248 -0
- package/dist/services/voice/profile-store.d.ts.map +1 -0
- package/dist/services/voice/ring-buffer.d.ts +40 -0
- package/dist/services/voice/ring-buffer.d.ts.map +1 -0
- package/dist/services/voice/rollback-queue.d.ts +24 -0
- package/dist/services/voice/rollback-queue.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/dist/services/voice/scheduler.d.ts +146 -0
- package/dist/services/voice/scheduler.d.ts.map +1 -0
- package/dist/services/voice/self-voice-imprint.d.ts +33 -0
- package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
- package/dist/services/voice/shared-resources.d.ts +204 -0
- package/dist/services/voice/shared-resources.d.ts.map +1 -0
- package/dist/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer.d.ts +75 -0
- package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder.d.ts +37 -0
- package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
- package/dist/services/voice/speaker-imprint.d.ts +83 -0
- package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
- package/dist/services/voice/speaker-preset-cache.d.ts +77 -0
- package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
- package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
- package/dist/services/voice/system-audio-sink.d.ts +73 -0
- package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
- package/dist/services/voice/transcriber.d.ts +244 -0
- package/dist/services/voice/transcriber.d.ts.map +1 -0
- package/dist/services/voice/transcript-knowledge.d.ts +37 -0
- package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/dist/services/voice/transcript-service.d.ts +60 -0
- package/dist/services/voice/transcript-service.d.ts.map +1 -0
- package/dist/services/voice/transcript-store.d.ts +64 -0
- package/dist/services/voice/transcript-store.d.ts.map +1 -0
- package/dist/services/voice/turn-controller.d.ts +183 -0
- package/dist/services/voice/turn-controller.d.ts.map +1 -0
- package/dist/services/voice/types.d.ts +643 -0
- package/dist/services/voice/types.d.ts.map +1 -0
- package/dist/services/voice/vad.d.ts +283 -0
- package/dist/services/voice/vad.d.ts.map +1 -0
- package/dist/services/voice/voice-budget.d.ts +241 -0
- package/dist/services/voice/voice-budget.d.ts.map +1 -0
- package/dist/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
- package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
- package/dist/services/voice/voice-preset-format.d.ts +158 -0
- package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
- package/dist/services/voice/voice-profile-artifact.d.ts +116 -0
- package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/dist/services/voice/voice-profile-routes.d.ts +83 -0
- package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/dist/services/voice/voice-scenario.d.ts +131 -0
- package/dist/services/voice/voice-scenario.d.ts.map +1 -0
- package/dist/services/voice/voice-state-machine.d.ts +364 -0
- package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
- package/dist/services/voice/voice-workbench-report.d.ts +117 -0
- package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
- package/dist/services/voice/wake-word-ggml.d.ts +100 -0
- package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/dist/services/voice/wake-word.d.ts +255 -0
- package/dist/services/voice/wake-word.d.ts.map +1 -0
- package/dist/services/voice/wav-codec.d.ts +11 -0
- package/dist/services/voice/wav-codec.d.ts.map +1 -0
- package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
- package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
- package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
- package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
- package/dist/services/voice/workbench-logic-services.d.ts +36 -0
- package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
- package/dist/services/voice/workbench-real-services.d.ts +17 -0
- package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
- package/dist/services/voice/workbench-scenarios.d.ts +24 -0
- package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
- package/dist/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/dist/services/voice-model-updater.d.ts +240 -0
- package/dist/services/voice-model-updater.d.ts.map +1 -0
- package/dist/services/voice-prewarm.d.ts +3 -0
- package/dist/services/voice-prewarm.d.ts.map +1 -0
- package/dist/voice-workbench.d.ts +18 -0
- package/dist/voice-workbench.d.ts.map +1 -0
- package/dist/voice-workbench.js +5259 -0
- package/dist/voice-workbench.js.map +34 -0
- package/package.json +101 -15
- package/registry-entry.json +137 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -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/__tests__/voice-turn.test.ts +293 -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 +831 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -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/adapters/capacitor-llama/voice-turn.ts +178 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.test.ts +390 -0
- package/src/local-inference-routes.ts +1625 -0
- package/src/provider.ts +1111 -0
- package/src/routes/compat-helpers.ts +275 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.ts +61 -0
- package/src/routes/live-diarization-route.test.ts +347 -0
- package/src/routes/live-diarization-route.ts +198 -0
- package/src/routes/local-inference-asr-route.test.ts +246 -0
- package/src/routes/local-inference-asr-route.ts +166 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +775 -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/native-pcm-turn-route.test.ts +136 -0
- package/src/routes/native-pcm-turn-route.ts +121 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.test.ts +195 -0
- package/src/routes/transcripts-routes.ts +191 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -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/bionic-wire-encoding.test.ts +147 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.ts +81 -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.test.ts +726 -0
- package/src/runtime/ensure-local-inference-handler.ts +1640 -0
- package/src/runtime/index.ts +36 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +152 -0
- package/src/runtime/mobile-local-inference-gate.ts +99 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +98 -0
- package/src/runtime/voice-entity-binding.ts +368 -0
- package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.precedence.test.ts +333 -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-context-fit.test.ts +125 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.ts +1416 -0
- package/src/services/asr-provenance.ts +68 -0
- package/src/services/assignment-validation.test.ts +118 -0
- package/src/services/assignments.test.ts +106 -0
- package/src/services/assignments.ts +278 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.test.ts +84 -0
- package/src/services/backend.ts +791 -0
- package/src/services/bionic-host-loader.test.ts +226 -0
- package/src/services/bionic-host-loader.ts +252 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.test.ts +259 -0
- package/src/services/catalog.ts +33 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/context-fit.test.ts +121 -0
- package/src/services/context-fit.ts +113 -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.ts +431 -0
- package/src/services/device-bridge.ts +1237 -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.test.ts +458 -0
- package/src/services/device-tier.ts +502 -0
- package/src/services/downloader.test.ts +888 -0
- package/src/services/downloader.ts +1039 -0
- package/src/services/engine-direct-bundle.test.ts +90 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.ts +2096 -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.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +445 -0
- package/src/services/ffi-streaming-backend.ts +418 -0
- package/src/services/ffi-streaming-runner.test.ts +220 -0
- package/src/services/ffi-streaming-runner.ts +407 -0
- package/src/services/ffi-unload-ordering.test.ts +166 -0
- package/src/services/fused-eliza1-no-regression.test.ts +144 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.test.ts +236 -0
- package/src/services/hardware.ts +438 -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.ts +229 -0
- package/src/services/imagegen/backend-selector.test.ts +190 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.ts +715 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.ts +229 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +357 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/lib-target.test.ts +145 -0
- package/src/services/lib-target.ts +102 -0
- package/src/services/live-signals.test.ts +132 -0
- package/src/services/live-signals.ts +177 -0
- package/src/services/llama-server-metrics.test.ts +168 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +790 -0
- package/src/services/manifest/index.ts +72 -0
- package/src/services/manifest/manifest.test.ts +791 -0
- package/src/services/manifest/schema.ts +761 -0
- package/src/services/manifest/types.ts +61 -0
- package/src/services/manifest/validator.ts +633 -0
- package/src/services/memory-arbiter.test.ts +558 -0
- package/src/services/memory-arbiter.ts +991 -0
- package/src/services/memory-benchmark.test.ts +91 -0
- package/src/services/memory-benchmark.ts +354 -0
- package/src/services/memory-monitor.test.ts +232 -0
- package/src/services/memory-monitor.ts +309 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.ts +86 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +164 -0
- package/src/services/ram-budget.ts +309 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.test.ts +216 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.ts +157 -0
- package/src/services/required-kernels-gate.test.ts +64 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +426 -0
- package/src/services/routing-policy.test.ts +352 -0
- package/src/services/routing-policy.ts +367 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +750 -0
- package/src/services/session-pool.ts +153 -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.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.ts +59 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.ts +255 -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.ts +157 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.ts +163 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +133 -0
- package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +194 -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 +195 -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/acoustic-speaker-attribution.test.ts +165 -0
- package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
- package/src/services/voice/asr-timed.real.test.ts +139 -0
- package/src/services/voice/audio-frame-consumer.test.ts +669 -0
- package/src/services/voice/audio-frame-consumer.ts +651 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +335 -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.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/corpus-augment.test.ts +276 -0
- package/src/services/voice/corpus-augment.ts +451 -0
- package/src/services/voice/corpus-generator.test.ts +201 -0
- package/src/services/voice/corpus-generator.ts +413 -0
- package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
- package/src/services/voice/diarization-error-rate.test.ts +100 -0
- package/src/services/voice/diarization-error-rate.ts +249 -0
- package/src/services/voice/e2e-harness.der.test.ts +94 -0
- package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
- package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +902 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/echo-delay.test.ts +118 -0
- package/src/services/voice/echo-delay.ts +135 -0
- package/src/services/voice/echo-metrics.test.ts +17 -0
- package/src/services/voice/echo-metrics.ts +20 -0
- package/src/services/voice/echo-reference-buffer.test.ts +86 -0
- package/src/services/voice/echo-reference-buffer.ts +165 -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.test.ts +131 -0
- package/src/services/voice/embedding.ts +242 -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-transcript-join.test.ts +278 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2343 -0
- package/src/services/voice/eot-classifier-ggml.ts +569 -0
- package/src/services/voice/eot-classifier.test.ts +98 -0
- package/src/services/voice/eot-classifier.ts +422 -0
- package/src/services/voice/errors.ts +34 -0
- package/src/services/voice/expressive-tags.asr.test.ts +77 -0
- package/src/services/voice/expressive-tags.test.ts +102 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.test.ts +735 -0
- package/src/services/voice/ffi-bindings.ts +3387 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.ts +139 -0
- package/src/services/voice/index.ts +502 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +262 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +236 -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 +67 -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.ts +223 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -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.ts +344 -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.ts +64 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.ts +64 -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.echo.test.ts +232 -0
- package/src/services/voice/live-diarization-session.ts +622 -0
- package/src/services/voice/metric-math.test.ts +61 -0
- package/src/services/voice/metric-math.ts +25 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
- package/src/services/voice/nlms-echo-canceller.ts +317 -0
- package/src/services/voice/optimistic-policy.power-source.test.ts +36 -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.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -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.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -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.ts +504 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
- package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
- package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.ts +74 -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.ts +393 -0
- package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/self-voice-imprint.test.ts +59 -0
- package/src/services/voice/self-voice-imprint.ts +102 -0
- package/src/services/voice/shared-resources.ts +343 -0
- package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +449 -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.ts +218 -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.test.ts +59 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.ts +105 -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.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.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.test.ts +195 -0
- package/src/services/voice/transcript-service.ts +205 -0
- package/src/services/voice/transcript-store.test.ts +189 -0
- package/src/services/voice/transcript-store.ts +164 -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.ts +699 -0
- package/src/services/voice/vad.test.ts +498 -0
- package/src/services/voice/vad.ts +832 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.test.ts +415 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -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-hardening.fuzz.test.ts +116 -0
- package/src/services/voice/voice-preload-predictor.test.ts +130 -0
- package/src/services/voice/voice-preload-predictor.ts +113 -0
- package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
- package/src/services/voice/voice-preset-format.test.ts +75 -0
- package/src/services/voice/voice-preset-format.ts +713 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -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.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.test.ts +159 -0
- package/src/services/voice/voice-scenario.ts +280 -0
- package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -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 +367 -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.ts +319 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
- package/src/services/voice/wav-codec.test.ts +32 -0
- package/src/services/voice/wav-codec.ts +101 -0
- package/src/services/voice/workbench-entrypoint.test.ts +55 -0
- package/src/services/voice/workbench-entrypoint.ts +88 -0
- package/src/services/voice/workbench-headless-runner.test.ts +162 -0
- package/src/services/voice/workbench-headless-runner.ts +396 -0
- package/src/services/voice/workbench-logic-services.test.ts +225 -0
- package/src/services/voice/workbench-logic-services.ts +184 -0
- package/src/services/voice/workbench-real-services.ts +629 -0
- package/src/services/voice/workbench-scenarios.ts +407 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/src/voice-workbench.ts +71 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice ⇄ entity binding seam (producer + round-trip consumer).
|
|
3
|
+
*
|
|
4
|
+
* Producer (`emitVoiceTurnObserved`): emit `VOICE_TURN_OBSERVED` so a
|
|
5
|
+
* merge-engine owner (plugin-lifeops) can fold the recognized voice turn
|
|
6
|
+
* into the entity/relationship graph. The voice-profile store is owned
|
|
7
|
+
* here; the entity graph is owned there; the only shared surface is the
|
|
8
|
+
* core event seam — neither plugin imports the other.
|
|
9
|
+
*
|
|
10
|
+
* Consumer (`handleVoiceEntityBound`): when the merge engine reports a
|
|
11
|
+
* binding via `VOICE_ENTITY_BOUND`, persist the resulting `entityId` onto
|
|
12
|
+
* every profile in that imprint cluster (`VoiceProfileStore.bindEntity`).
|
|
13
|
+
* This is the runtime path that was missing in issue #8234 — without it a
|
|
14
|
+
* profile's `entityId` stayed `null` and recognized speakers never reached
|
|
15
|
+
* the relationship graph.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import crypto from "node:crypto";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
import {
|
|
21
|
+
EventType,
|
|
22
|
+
type IAgentRuntime,
|
|
23
|
+
logger,
|
|
24
|
+
resolveStateDir,
|
|
25
|
+
type VoiceEntityBoundPayload,
|
|
26
|
+
} from "@elizaos/core";
|
|
27
|
+
import {
|
|
28
|
+
AGENT_SELF_VOICE_THRESHOLD,
|
|
29
|
+
ECHO_WINDOW_MS,
|
|
30
|
+
} from "@elizaos/shared/voice/respond-gate";
|
|
31
|
+
import type {
|
|
32
|
+
VoiceNextSpeaker,
|
|
33
|
+
VoiceTurnSignal,
|
|
34
|
+
} from "../services/voice/eot-classifier.js";
|
|
35
|
+
import { VoiceProfileStore } from "../services/voice/profile-store.js";
|
|
36
|
+
import type { VoiceAttributionOutput } from "../services/voice/speaker/attribution-pipeline.js";
|
|
37
|
+
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Store wiring (injectable for tests, mirrors the route handlers)
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
let storeOverride: VoiceProfileStore | null = null;
|
|
43
|
+
|
|
44
|
+
export function setVoiceEntityBindingStore(
|
|
45
|
+
store: VoiceProfileStore | null,
|
|
46
|
+
): void {
|
|
47
|
+
storeOverride = store;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export async function getVoiceProfileStore(): Promise<VoiceProfileStore> {
|
|
51
|
+
if (storeOverride) return storeOverride;
|
|
52
|
+
const store = new VoiceProfileStore({
|
|
53
|
+
rootDir: path.join(resolveStateDir(), "voice-profiles"),
|
|
54
|
+
});
|
|
55
|
+
await store.init();
|
|
56
|
+
return store;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Producer
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
|
|
63
|
+
export interface EmitVoiceTurnObservedArgs {
|
|
64
|
+
/** Stable utterance id; a random one is minted when omitted. */
|
|
65
|
+
turnId?: string;
|
|
66
|
+
/** Recognized text (drives name/partner-claim extraction downstream). */
|
|
67
|
+
text: string;
|
|
68
|
+
/** Imprint cluster id from the voice-profile store. */
|
|
69
|
+
imprintClusterId: string;
|
|
70
|
+
/** Confidence of the imprint match (0..1). */
|
|
71
|
+
matchConfidence: number;
|
|
72
|
+
/** Entity the imprint already resolved to, or `null`/omitted when unbound. */
|
|
73
|
+
matchedEntityId?: string | null;
|
|
74
|
+
/** True when the OWNER spoke this turn. */
|
|
75
|
+
isOwner?: boolean;
|
|
76
|
+
/** ISO timestamp; defaults to now. */
|
|
77
|
+
observedAt?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Emit `VOICE_TURN_OBSERVED`. No-op in effect when no merge-engine plugin
|
|
82
|
+
* is loaded (the event simply has no handler). `emitEvent` awaits every
|
|
83
|
+
* handler, so by the time this resolves the binding round-trip (including
|
|
84
|
+
* `VOICE_ENTITY_BOUND` → profile persist) has completed.
|
|
85
|
+
*/
|
|
86
|
+
export async function emitVoiceTurnObserved(
|
|
87
|
+
runtime: IAgentRuntime,
|
|
88
|
+
args: EmitVoiceTurnObservedArgs,
|
|
89
|
+
): Promise<void> {
|
|
90
|
+
await runtime.emitEvent(EventType.VOICE_TURN_OBSERVED, {
|
|
91
|
+
runtime,
|
|
92
|
+
turnId: args.turnId ?? `vturn_${crypto.randomUUID()}`,
|
|
93
|
+
text: args.text,
|
|
94
|
+
imprintClusterId: args.imprintClusterId,
|
|
95
|
+
matchConfidence: args.matchConfidence,
|
|
96
|
+
matchedEntityId: args.matchedEntityId ?? null,
|
|
97
|
+
observedAt: args.observedAt ?? new Date().toISOString(),
|
|
98
|
+
...(args.isOwner !== undefined ? { isOwner: args.isOwner } : {}),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Live-turn attribution → VOICE_TURN_OBSERVED + voiceTurnSignal (gating)
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
|
|
106
|
+
/** Server SUPPRESS threshold for EOT — below this reads as "user still talking". */
|
|
107
|
+
const SERVER_EOT_SUPPRESS_THRESHOLD = 0.4;
|
|
108
|
+
/** Only a CONFIDENT bystander attribution is allowed to silence a turn. */
|
|
109
|
+
const BYSTANDER_SUPPRESS_CONFIDENCE = 0.7;
|
|
110
|
+
|
|
111
|
+
export interface HandleLiveVoiceAttributionOptions {
|
|
112
|
+
/**
|
|
113
|
+
* Entity id the agent treats as the device owner / primary enrolled
|
|
114
|
+
* speaker. A turn attributed to this entity is always allowed to speak.
|
|
115
|
+
*/
|
|
116
|
+
ownerEntityId?: string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Entity ids the agent answers to without a wake word (owner + enrolled
|
|
119
|
+
* household members). A confident bystander is anyone attributed to an
|
|
120
|
+
* entity NOT in this set.
|
|
121
|
+
*/
|
|
122
|
+
knownSpeakerEntityIds?: readonly string[];
|
|
123
|
+
/**
|
|
124
|
+
* The EOT-based turn signal the turn-controller already computed for this
|
|
125
|
+
* turn (from `eot-classifier` / `turn-controller`). The speaker decision is
|
|
126
|
+
* folded into it. When omitted, a neutral base is synthesized from
|
|
127
|
+
* `endOfTurnProbability` (default 0.5 — "unknown", fail open).
|
|
128
|
+
*/
|
|
129
|
+
baseSignal?: VoiceTurnSignal;
|
|
130
|
+
/** P(turn complete) when no `baseSignal` is supplied (default 0.5). */
|
|
131
|
+
endOfTurnProbability?: number;
|
|
132
|
+
/** True when a wake word fired within the recent listen window. */
|
|
133
|
+
wakeWordActive?: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* The ASR transcript for this turn, joined from the streaming-ASR path. When
|
|
136
|
+
* provided it rides on `VOICE_TURN_OBSERVED` (and the turn signal) so the
|
|
137
|
+
* merge engine's name/partner extraction (`VoiceObserver.ingestTurn`) runs
|
|
138
|
+
* from LIVE audio — previously this was hardcoded `""`, so live recognition
|
|
139
|
+
* could identify *who* spoke but never *what* they said (#8786). Diarization-
|
|
140
|
+
* only callers (audio-frame path) leave it unset; the in-process voice engine
|
|
141
|
+
* (which has both ASR + diarization) passes the real transcript.
|
|
142
|
+
*/
|
|
143
|
+
transcript?: string;
|
|
144
|
+
/**
|
|
145
|
+
* Cosine similarity (0..1) between this turn's live WeSpeaker embedding and
|
|
146
|
+
* the agent's own TTS-voice centroid. High means the open mic is hearing the
|
|
147
|
+
* agent's playback, not a human user.
|
|
148
|
+
*/
|
|
149
|
+
selfVoiceSimilarity?: number | null;
|
|
150
|
+
/** True while the agent is currently playing TTS. */
|
|
151
|
+
agentSpeaking?: boolean;
|
|
152
|
+
/** Age of the most recent agent-spoken reply in ms. */
|
|
153
|
+
replyAgeMs?: number;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Resolve owner / enrolled state for the attributed primary speaker.
|
|
158
|
+
*
|
|
159
|
+
* `isOwner` is `entityId === ownerEntityId`; "enrolled" is owner OR an entity
|
|
160
|
+
* id present in `knownSpeakerEntityIds`. An unbound speaker (`entityId == null`)
|
|
161
|
+
* is neither — it can never be a "confident bystander" (fail open).
|
|
162
|
+
*/
|
|
163
|
+
function resolveSpeakerStanding(
|
|
164
|
+
output: VoiceAttributionOutput,
|
|
165
|
+
opts: HandleLiveVoiceAttributionOptions,
|
|
166
|
+
): {
|
|
167
|
+
entityId: string | null;
|
|
168
|
+
confidence: number;
|
|
169
|
+
isOwner: boolean;
|
|
170
|
+
enrolled: boolean;
|
|
171
|
+
} {
|
|
172
|
+
const speaker = output.primarySpeaker;
|
|
173
|
+
const entityId = speaker?.entityId ?? output.observation?.entityId ?? null;
|
|
174
|
+
const confidence = speaker?.confidence ?? output.observation?.confidence ?? 0;
|
|
175
|
+
const ownerEntityId = opts.ownerEntityId ?? null;
|
|
176
|
+
const isOwner = entityId !== null && entityId === ownerEntityId;
|
|
177
|
+
const known = new Set<string>(opts.knownSpeakerEntityIds ?? []);
|
|
178
|
+
const enrolled = isOwner || (entityId !== null && known.has(entityId));
|
|
179
|
+
return { entityId, confidence, isOwner, enrolled };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Compose the EOT base signal with the live speaker decision.
|
|
184
|
+
*
|
|
185
|
+
* Mirrors `packages/ui/src/voice/voice-turn-signal.ts buildVoiceTurnSignal`
|
|
186
|
+
* (the transcript-only producer) on the audio-frame side: a CONFIDENT bystander
|
|
187
|
+
* who did NOT say the wake word is cross-talk → suppress. A wake word is an
|
|
188
|
+
* explicit address → always speak. Uncertain attribution never silences a real
|
|
189
|
+
* turn. The server gate `core.voice_turn_signal` reads the returned object.
|
|
190
|
+
*/
|
|
191
|
+
function foldSpeakerIntoSignal(
|
|
192
|
+
base: VoiceTurnSignal,
|
|
193
|
+
standing: {
|
|
194
|
+
entityId: string | null;
|
|
195
|
+
confidence: number;
|
|
196
|
+
isOwner: boolean;
|
|
197
|
+
enrolled: boolean;
|
|
198
|
+
},
|
|
199
|
+
opts: HandleLiveVoiceAttributionOptions,
|
|
200
|
+
): VoiceTurnSignal {
|
|
201
|
+
let agentShouldSpeak = base.agentShouldSpeak !== false;
|
|
202
|
+
|
|
203
|
+
const confidentBystander =
|
|
204
|
+
!standing.enrolled &&
|
|
205
|
+
standing.entityId !== null &&
|
|
206
|
+
standing.confidence >= BYSTANDER_SUPPRESS_CONFIDENCE;
|
|
207
|
+
if (agentShouldSpeak && opts.wakeWordActive !== true && confidentBystander) {
|
|
208
|
+
agentShouldSpeak = false;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Wake word overrides bystander doubt — the user deliberately summoned us.
|
|
212
|
+
if (opts.wakeWordActive === true) agentShouldSpeak = true;
|
|
213
|
+
|
|
214
|
+
const replyRecent =
|
|
215
|
+
opts.agentSpeaking === true ||
|
|
216
|
+
(opts.replyAgeMs ?? Number.POSITIVE_INFINITY) <= ECHO_WINDOW_MS;
|
|
217
|
+
const isSelfVoice =
|
|
218
|
+
typeof opts.selfVoiceSimilarity === "number" &&
|
|
219
|
+
opts.selfVoiceSimilarity >= AGENT_SELF_VOICE_THRESHOLD &&
|
|
220
|
+
replyRecent;
|
|
221
|
+
if (isSelfVoice) agentShouldSpeak = false;
|
|
222
|
+
|
|
223
|
+
const eot = base.endOfTurnProbability;
|
|
224
|
+
const nextSpeaker: VoiceNextSpeaker = !agentShouldSpeak
|
|
225
|
+
? "user"
|
|
226
|
+
: eot < SERVER_EOT_SUPPRESS_THRESHOLD
|
|
227
|
+
? "user"
|
|
228
|
+
: "agent";
|
|
229
|
+
|
|
230
|
+
const source = isSelfVoice
|
|
231
|
+
? "voice-bridge+self-voice"
|
|
232
|
+
: opts.wakeWordActive
|
|
233
|
+
? "voice-bridge+wakeword"
|
|
234
|
+
: "voice-bridge+diarization";
|
|
235
|
+
|
|
236
|
+
return {
|
|
237
|
+
endOfTurnProbability: eot,
|
|
238
|
+
nextSpeaker,
|
|
239
|
+
agentShouldSpeak,
|
|
240
|
+
source: "custom",
|
|
241
|
+
transcript: base.transcript,
|
|
242
|
+
...(base.model ? { model: base.model } : {}),
|
|
243
|
+
...(base.latencyMs !== undefined ? { latencyMs: base.latencyMs } : {}),
|
|
244
|
+
// Stash the human-readable provenance so traces show the fold source even
|
|
245
|
+
// though the typed `source` enum stays "custom".
|
|
246
|
+
metadata: {
|
|
247
|
+
provenance: source,
|
|
248
|
+
...(typeof opts.selfVoiceSimilarity === "number"
|
|
249
|
+
? { selfVoiceSimilarity: opts.selfVoiceSimilarity }
|
|
250
|
+
: {}),
|
|
251
|
+
},
|
|
252
|
+
} as VoiceTurnSignal & {
|
|
253
|
+
metadata: { provenance: string; selfVoiceSimilarity?: number };
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Handle a live per-turn attribution result. This is the single automatic seam
|
|
259
|
+
* the engine bridge calls from its `onAttribution` path: any caller that wires a
|
|
260
|
+
* `profileStore` gets diarization-driven gating for free.
|
|
261
|
+
*
|
|
262
|
+
* 1. Emits `VOICE_TURN_OBSERVED` when the turn produced a profile observation
|
|
263
|
+
* (so the merge engine can fold the recognized speaker into the entity
|
|
264
|
+
* graph and round-trip the binding back onto the profile).
|
|
265
|
+
* 2. Composes the EOT-based turn signal with the speaker decision and stamps it
|
|
266
|
+
* onto `output.turn.metadata.voiceTurnSignal`, which the chat-view producer
|
|
267
|
+
* forwards to the server gate verbatim.
|
|
268
|
+
*
|
|
269
|
+
* Returns the composed signal (also written onto the turn metadata in place).
|
|
270
|
+
* Never throws on the emit path — observation emission is best-effort and is
|
|
271
|
+
* logged, never propagated, so an attribution turn never crashes a voice turn.
|
|
272
|
+
*/
|
|
273
|
+
export async function handleLiveVoiceAttribution(
|
|
274
|
+
runtime: IAgentRuntime,
|
|
275
|
+
output: VoiceAttributionOutput,
|
|
276
|
+
opts: HandleLiveVoiceAttributionOptions = {},
|
|
277
|
+
): Promise<VoiceTurnSignal> {
|
|
278
|
+
const standing = resolveSpeakerStanding(output, opts);
|
|
279
|
+
// Carry the real ASR transcript when the caller joined it (in-process engine);
|
|
280
|
+
// fall back to a base-signal transcript, else "" for diarization-only callers.
|
|
281
|
+
const transcript = opts.transcript ?? opts.baseSignal?.transcript ?? "";
|
|
282
|
+
|
|
283
|
+
if (output.observation) {
|
|
284
|
+
const obs = output.observation;
|
|
285
|
+
try {
|
|
286
|
+
await emitVoiceTurnObserved(runtime, {
|
|
287
|
+
turnId: output.turnId,
|
|
288
|
+
text: transcript,
|
|
289
|
+
imprintClusterId: obs.imprintClusterId,
|
|
290
|
+
matchConfidence: obs.confidence,
|
|
291
|
+
matchedEntityId: obs.entityId,
|
|
292
|
+
isOwner: standing.isOwner,
|
|
293
|
+
});
|
|
294
|
+
} catch (err) {
|
|
295
|
+
logger.warn(
|
|
296
|
+
{
|
|
297
|
+
turnId: output.turnId,
|
|
298
|
+
imprintClusterId: obs.imprintClusterId,
|
|
299
|
+
error: err instanceof Error ? err.message : String(err),
|
|
300
|
+
},
|
|
301
|
+
"[local-inference] VOICE_TURN_OBSERVED emit failed during live attribution",
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const base: VoiceTurnSignal = opts.baseSignal ?? {
|
|
307
|
+
endOfTurnProbability: opts.endOfTurnProbability ?? 0.5,
|
|
308
|
+
nextSpeaker: "unknown",
|
|
309
|
+
agentShouldSpeak: null,
|
|
310
|
+
source: "custom",
|
|
311
|
+
transcript,
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
const signal = foldSpeakerIntoSignal(base, standing, opts);
|
|
315
|
+
|
|
316
|
+
const turn = output.turn;
|
|
317
|
+
// Stamp the resolved speaker entity onto the turn (#8786): the imprint →
|
|
318
|
+
// entityId match rides with the transcript so the server/providers/extraction
|
|
319
|
+
// attribute the turn to the right person (not just the EOT gate). Omitted when
|
|
320
|
+
// the speaker is unbound (`entityId == null`) — never write a null speaker.
|
|
321
|
+
turn.metadata = {
|
|
322
|
+
...(turn.metadata ?? {}),
|
|
323
|
+
voiceTurnSignal: signal,
|
|
324
|
+
...(standing.entityId ? { speakerEntityId: standing.entityId } : {}),
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
return signal;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
// Consumer
|
|
332
|
+
// ---------------------------------------------------------------------------
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Handler for `VOICE_ENTITY_BOUND`. Persists `entityId` onto every profile
|
|
336
|
+
* in the cluster that is not already bound to it. Returns nothing (the
|
|
337
|
+
* `EventHandler` contract); the bound count is logged.
|
|
338
|
+
*/
|
|
339
|
+
export async function handleVoiceEntityBound(
|
|
340
|
+
payload: VoiceEntityBoundPayload,
|
|
341
|
+
): Promise<void> {
|
|
342
|
+
const store = await getVoiceProfileStore();
|
|
343
|
+
const records = await store.list();
|
|
344
|
+
const targets = records.filter(
|
|
345
|
+
(r) =>
|
|
346
|
+
r.imprintClusterId === payload.imprintClusterId &&
|
|
347
|
+
r.entityId !== payload.entityId,
|
|
348
|
+
);
|
|
349
|
+
let bound = 0;
|
|
350
|
+
for (const record of targets) {
|
|
351
|
+
const updated = await store.bindEntity({
|
|
352
|
+
profileId: record.profileId,
|
|
353
|
+
entityId: payload.entityId,
|
|
354
|
+
...(payload.displayName ? { label: payload.displayName } : {}),
|
|
355
|
+
});
|
|
356
|
+
if (updated) bound += 1;
|
|
357
|
+
}
|
|
358
|
+
if (bound > 0) {
|
|
359
|
+
logger.info(
|
|
360
|
+
{
|
|
361
|
+
imprintClusterId: payload.imprintClusterId,
|
|
362
|
+
entityId: payload.entityId,
|
|
363
|
+
bound,
|
|
364
|
+
},
|
|
365
|
+
"[local-inference] persisted voice→entity binding onto profile(s)",
|
|
366
|
+
);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { IAgentRuntime, Memory } from "@elizaos/core";
|
|
2
|
+
import { ChannelType, type UUID } from "@elizaos/core";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import type { VoiceAttributionOutput } from "../services/voice/speaker/attribution-pipeline.js";
|
|
5
|
+
import { handleLiveVoiceAttribution } from "./voice-entity-binding.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Producer ⇄ consumer contract for the resolved-speaker stamp (#8786, commit
|
|
9
|
+
* 2cea841d8a).
|
|
10
|
+
*
|
|
11
|
+
* The PRODUCER is `handleLiveVoiceAttribution` (this plugin): it stamps the
|
|
12
|
+
* imprint → entityId match onto `turn.metadata.speakerEntityId`. That turn
|
|
13
|
+
* metadata is what rides onto the message's `content.metadata` for a VOICE_DM.
|
|
14
|
+
*
|
|
15
|
+
* The CONSUMER is the core message handler's private `getVoiceSpeakerEntityId`
|
|
16
|
+
* reader (`packages/core/src/services/message.ts`), which — per its documented
|
|
17
|
+
* contract — reads the id from EITHER `content.speakerEntityId` (the top-level
|
|
18
|
+
* in-process engine path) OR `content.metadata.speakerEntityId` (the nested
|
|
19
|
+
* chat-client path), then canonicalizes it onto `content.metadata.speaker
|
|
20
|
+
* EntityId` of the voice turn so providers / extraction / the facts +
|
|
21
|
+
* relationships stage attribute the turn to the right person.
|
|
22
|
+
*
|
|
23
|
+
* The core reader is not exported, so this test locks the contract at the seam
|
|
24
|
+
* that matters: it (1) runs the real producer, then (2) asserts the producer
|
|
25
|
+
* writes the id at the exact `metadata.speakerEntityId` key the documented
|
|
26
|
+
* reader consumes, and (3) exercises a reference of the reader contract against
|
|
27
|
+
* a producer-shaped VOICE_DM message to prove a recognized speaker's entityId
|
|
28
|
+
* lands on the message. A future rename of the key on either half breaks this.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
const ROOM = "11111111-1111-1111-1111-111111111111" as UUID;
|
|
32
|
+
const ENTITY = "55555555-5555-5555-5555-555555555555" as UUID;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Reference of the core `getVoiceSpeakerEntityId` reader contract (kept in sync
|
|
36
|
+
* with `packages/core/src/services/message.ts`). Reads top-level first, then
|
|
37
|
+
* the nested `content.metadata` entry; trims; null for an unbound speaker.
|
|
38
|
+
*/
|
|
39
|
+
function readSpeakerEntityIdContract(
|
|
40
|
+
message: Pick<Memory, "content">,
|
|
41
|
+
): string | null {
|
|
42
|
+
const content = message.content;
|
|
43
|
+
const nested =
|
|
44
|
+
content?.metadata &&
|
|
45
|
+
typeof content.metadata === "object" &&
|
|
46
|
+
!Array.isArray(content.metadata)
|
|
47
|
+
? (content.metadata as Record<string, unknown>).speakerEntityId
|
|
48
|
+
: undefined;
|
|
49
|
+
const value =
|
|
50
|
+
(content as { speakerEntityId?: unknown } | undefined)?.speakerEntityId ??
|
|
51
|
+
nested;
|
|
52
|
+
if (typeof value !== "string") return null;
|
|
53
|
+
const trimmed = value.trim();
|
|
54
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function captureRuntime(): IAgentRuntime {
|
|
58
|
+
return {
|
|
59
|
+
emitEvent: async () => {},
|
|
60
|
+
} as unknown as IAgentRuntime;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function boundOutput(entityId: string): VoiceAttributionOutput {
|
|
64
|
+
return {
|
|
65
|
+
turnId: "t-bound",
|
|
66
|
+
primarySpeaker: { entityId, confidence: 0.7 },
|
|
67
|
+
observation: { imprintClusterId: "cluster-1", confidence: 0.7, entityId },
|
|
68
|
+
turn: { metadata: {} },
|
|
69
|
+
segments: [],
|
|
70
|
+
} as unknown as VoiceAttributionOutput;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Build the VOICE_DM the nested chat-client path produces from a turn. */
|
|
74
|
+
function voiceDmFromTurn(turnMetadata: Record<string, unknown>): Memory {
|
|
75
|
+
return {
|
|
76
|
+
id: "66666666-6666-6666-6666-666666666666" as UUID,
|
|
77
|
+
entityId: ENTITY,
|
|
78
|
+
roomId: ROOM,
|
|
79
|
+
content: {
|
|
80
|
+
text: "what's on my calendar",
|
|
81
|
+
channelType: ChannelType.VOICE_DM,
|
|
82
|
+
metadata: turnMetadata,
|
|
83
|
+
},
|
|
84
|
+
} as Memory;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
describe("voice speaker-entity producer ⇄ consumer contract (#8786)", () => {
|
|
88
|
+
it("producer stamps the id at the exact key the core reader consumes", async () => {
|
|
89
|
+
const runtime = captureRuntime();
|
|
90
|
+
const out = boundOutput("entity-jill");
|
|
91
|
+
await handleLiveVoiceAttribution(runtime, out, {
|
|
92
|
+
ownerEntityId: "entity-jill",
|
|
93
|
+
transcript: "I'm Jill",
|
|
94
|
+
});
|
|
95
|
+
// The reader contract resolves the producer's turn metadata directly.
|
|
96
|
+
const message = voiceDmFromTurn(
|
|
97
|
+
out.turn.metadata as Record<string, unknown>,
|
|
98
|
+
);
|
|
99
|
+
expect(readSpeakerEntityIdContract(message)).toBe("entity-jill");
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("a recognized speaker's entityId lands on the VOICE_DM message (nested entry)", () => {
|
|
103
|
+
const message = voiceDmFromTurn({
|
|
104
|
+
voiceTurnSignal: { agentShouldSpeak: true },
|
|
105
|
+
speakerEntityId: "entity-bob",
|
|
106
|
+
});
|
|
107
|
+
expect(readSpeakerEntityIdContract(message)).toBe("entity-bob");
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it("resolves the top-level in-process entry too", () => {
|
|
111
|
+
const message = {
|
|
112
|
+
id: "77777777-7777-7777-7777-777777777777" as UUID,
|
|
113
|
+
entityId: ENTITY,
|
|
114
|
+
roomId: ROOM,
|
|
115
|
+
content: {
|
|
116
|
+
text: "remind me later",
|
|
117
|
+
channelType: ChannelType.VOICE_DM,
|
|
118
|
+
speakerEntityId: "entity-top",
|
|
119
|
+
metadata: {},
|
|
120
|
+
},
|
|
121
|
+
} as unknown as Memory;
|
|
122
|
+
expect(readSpeakerEntityIdContract(message)).toBe("entity-top");
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("an unbound speaker resolves to null (never a null speaker on the message)", async () => {
|
|
126
|
+
const runtime = captureRuntime();
|
|
127
|
+
const out = {
|
|
128
|
+
turnId: "t-unbound",
|
|
129
|
+
primarySpeaker: { entityId: null, confidence: 0.2 },
|
|
130
|
+
observation: undefined,
|
|
131
|
+
turn: { metadata: {} },
|
|
132
|
+
segments: [],
|
|
133
|
+
} as unknown as VoiceAttributionOutput;
|
|
134
|
+
await handleLiveVoiceAttribution(runtime, out, {});
|
|
135
|
+
const message = voiceDmFromTurn(
|
|
136
|
+
out.turn.metadata as Record<string, unknown>,
|
|
137
|
+
);
|
|
138
|
+
expect(readSpeakerEntityIdContract(message)).toBeNull();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("a blank / whitespace id resolves to null", () => {
|
|
142
|
+
expect(
|
|
143
|
+
readSpeakerEntityIdContract(voiceDmFromTurn({ speakerEntityId: " " })),
|
|
144
|
+
).toBeNull();
|
|
145
|
+
expect(
|
|
146
|
+
readSpeakerEntityIdContract(voiceDmFromTurn({ speakerEntityId: "" })),
|
|
147
|
+
).toBeNull();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# `services/local-inference/` (app-core, server-side)
|
|
2
|
+
|
|
3
|
+
This is the **server-side** local-inference service used by the agent
|
|
4
|
+
runtime (`@elizaos/app-core`). It owns:
|
|
5
|
+
|
|
6
|
+
- KV-cache slot management (`cache-bridge.ts`, `mtp-cache-flow.test.ts`).
|
|
7
|
+
- llama-server lifecycle (`ffi-streaming-backend.ts`, `mtp-doctor.ts`,
|
|
8
|
+
`llama-server-metrics.ts`, `session-pool.ts`).
|
|
9
|
+
- Conversation registry (`conversation-registry.ts`).
|
|
10
|
+
- Backend dispatch (`backend.ts`, `engine.ts`, `handler-registry.ts`,
|
|
11
|
+
`router-handler.ts`, `service.ts`).
|
|
12
|
+
- Provider snapshot, hardware probe, model catalog, recommendation, and
|
|
13
|
+
download orchestration (`providers.ts`, `hardware.ts`, `catalog.ts`,
|
|
14
|
+
`recommendation.ts`, `downloader.ts`, `assignments.ts`,
|
|
15
|
+
`bundled-models.ts`, `external-scanner.ts`, `hf-search.ts`,
|
|
16
|
+
`registry.ts`, `paths.ts`, `routing-policy.ts`).
|
|
17
|
+
|
|
18
|
+
## Server / client split
|
|
19
|
+
|
|
20
|
+
The UI client mirror lives in
|
|
21
|
+
[`packages/ui/src/services/local-inference/`](../../../../ui/src/services/local-inference/README.md).
|
|
22
|
+
That mirror exists because UI code (panels, hooks, the iOS/Android local
|
|
23
|
+
agent kernel) needs access to the **catalog**, **recommendation**, and
|
|
24
|
+
the **type contract** for status payloads, but must not pull in the
|
|
25
|
+
server runtime (KV cache, llama-server lifecycle, conversation
|
|
26
|
+
registry).
|
|
27
|
+
|
|
28
|
+
Some files are byte-identical between the two trees and have identical
|
|
29
|
+
semantics. Those have been extracted to `@elizaos/shared/local-inference`
|
|
30
|
+
and the local files in this directory are thin re-exports:
|
|
31
|
+
|
|
32
|
+
- `paths.ts` — re-exports `localInferenceRoot` etc. from
|
|
33
|
+
`@elizaos/shared`.
|
|
34
|
+
- `routing-preferences.ts` — re-exports `readRoutingPreferences` etc.
|
|
35
|
+
from `@elizaos/shared`.
|
|
36
|
+
- `verify.ts` — re-exports `verifyInstalledModel` etc. from
|
|
37
|
+
`@elizaos/shared`.
|
|
38
|
+
- `types.ts` — re-exports `AgentModelSlot`, `InstalledModel`,
|
|
39
|
+
`ModelAssignments`, `TextGenerationSlot`, and `AGENT_MODEL_SLOTS` from
|
|
40
|
+
`@elizaos/shared`. Server-only types (MTP kernel metadata,
|
|
41
|
+
`LocalRuntimeOptimizations`, `loadedCacheTypeK`/`...V`/`GpuLayers`,
|
|
42
|
+
etc.) remain declared in this file because the UI public client has
|
|
43
|
+
no consumer for them.
|
|
44
|
+
|
|
45
|
+
## What stays a twin (and why)
|
|
46
|
+
|
|
47
|
+
These files exist in both `packages/app-core` and `packages/ui` and are
|
|
48
|
+
intentionally **not bundled**:
|
|
49
|
+
|
|
50
|
+
- `catalog.ts` — server adds `contextLength`, `optimizations.requiresKernel`,
|
|
51
|
+
and same-file MTP metadata that the UI public catalog does not surface.
|
|
52
|
+
- `recommendation.ts` — server has kernel-availability filtering
|
|
53
|
+
(`recommendation.test.ts` covers MTP gating) that depends on
|
|
54
|
+
server-only `LocalRuntimeOptimizations.requiresKernel`.
|
|
55
|
+
- `active-model.ts` — server resolves load args against the loader's
|
|
56
|
+
KV-cache type / GPU-layer overrides (server-only types).
|
|
57
|
+
- `device-bridge.ts` — server forwards `promptCacheKey` from the runtime
|
|
58
|
+
cache plan.
|
|
59
|
+
- `ffi-streaming-backend.ts` — server owns the full llama-server lifecycle, the
|
|
60
|
+
in-process binding fallback, and metrics scraping.
|
|
61
|
+
- `mtp-doctor.ts` — uses tokenizer parity catalog metadata that only
|
|
62
|
+
the server catalog declares.
|
|
63
|
+
- `engine.ts`, `handler-registry.ts`, `hardware.ts`, `index.ts`,
|
|
64
|
+
`providers.ts`, `router-handler.ts`, `service.ts` — server-side
|
|
65
|
+
superset; the UI mirror keeps a slim subset of the same surface for
|
|
66
|
+
type-only / catalog-only consumers.
|
|
67
|
+
|
|
68
|
+
If a twin pair becomes byte-identical with identical semantics, extract
|
|
69
|
+
it to `packages/shared/src/local-inference/` and replace both copies
|
|
70
|
+
with a thin re-export, the same way `paths.ts` / `verify.ts` /
|
|
71
|
+
`routing-preferences.ts` were handled.
|