@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,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wake-word detection (openWakeWord) — opt-in, local-mode only.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the previous `onnxruntime-node`-backed implementation with a
|
|
5
|
+
* pure GGML / llama.cpp path. The three-stage openWakeWord pipeline (mel
|
|
6
|
+
* filterbank → speech embedding model → per-phrase classifier head) is
|
|
7
|
+
* compiled into one combined GGUF
|
|
8
|
+
* (`wake/openwakeword.gguf`, produced by
|
|
9
|
+
* `packages/training/scripts/wakeword/convert_openwakeword_to_gguf.py`)
|
|
10
|
+
* and executed natively by the fused `libelizainference` build via the
|
|
11
|
+
* `eliza_inference_wakeword_*` FFI surface (ABI v5).
|
|
12
|
+
*
|
|
13
|
+
* The JS side is now a thin adapter over that surface — there is NO ONNX
|
|
14
|
+
* fallback. When the fused library was built without the wake-word
|
|
15
|
+
* runtime, the JS path throws a structured `WakeWordUnavailableError`
|
|
16
|
+
* (AGENTS.md §3, §8 — no silent fallbacks).
|
|
17
|
+
*
|
|
18
|
+
* Per `packages/inference/AGENTS.md` §1 + the three-mode rules (§1, §5):
|
|
19
|
+
* - openWakeWord (Apache-2.0, ~3 MB) ships in the bundle but is
|
|
20
|
+
* **opt-in**: voice mode works without it (push-to-talk / VAD-gated).
|
|
21
|
+
* - It is **local-mode only**. In `cloud` mode the surface is hidden
|
|
22
|
+
* *and inert* (hide-not-disable §5): the model is not loaded, the
|
|
23
|
+
* setting is rejected by the API, no background job runs it.
|
|
24
|
+
* - Detections feed the same place a push-to-talk press would: they arm
|
|
25
|
+
* a listening window that the VAD gate then bounds.
|
|
26
|
+
*
|
|
27
|
+
* Streaming pipeline shape (16 kHz mono):
|
|
28
|
+
* - 1280-sample (80 ms) PCM frames per `scoreFrame` call.
|
|
29
|
+
* - Internally: mel filterbank → 32-bin frames; embedding model windows
|
|
30
|
+
* 76 mel frames, hop 8 → 96-dim embedding; head windows 16 embeddings
|
|
31
|
+
* → P(wake) in [0, 1].
|
|
32
|
+
* - The native runtime owns the audio tail, mel ring and embedding
|
|
33
|
+
* ring; the JS side feeds frames and reads back probabilities.
|
|
34
|
+
*/
|
|
35
|
+
import type { ElizaInferenceContextHandle, ElizaInferenceFfi } from "./ffi-bindings";
|
|
36
|
+
/** Directory holding the bundled openWakeWord GGUF inside a bundle. */
|
|
37
|
+
export declare const OPENWAKEWORD_DIR_REL_PATH = "wake";
|
|
38
|
+
/**
|
|
39
|
+
* Combined wake-word GGUF: contains the mel filterbank constants, the
|
|
40
|
+
* speech embedding model weights, AND every per-phrase classifier head
|
|
41
|
+
* (`head.<name>.*` tensors). The fused `libelizainference` build mmaps
|
|
42
|
+
* this file from `<bundleRoot>/wake/openwakeword.gguf` (or the shared
|
|
43
|
+
* cache at `<state-dir>/local-inference/wake/openwakeword.gguf`).
|
|
44
|
+
*/
|
|
45
|
+
export declare const OPENWAKEWORD_GGUF_REL_PATH: string;
|
|
46
|
+
/**
|
|
47
|
+
* Default wake-phrase head shipped with a voice bundle. The documented
|
|
48
|
+
* default Eliza-1 wake phrase is **"hey eliza"** — a two-word,
|
|
49
|
+
* four-syllable phrase the openWakeWord TTS-augmented pipeline handles
|
|
50
|
+
* well. It is replaceable: retrain on a different `--phrase` via
|
|
51
|
+
* `packages/training/scripts/wakeword/train_eliza1_wakeword_head.py`,
|
|
52
|
+
* convert to GGUF via
|
|
53
|
+
* `packages/training/scripts/wakeword/convert_openwakeword_to_gguf.py`,
|
|
54
|
+
* and re-point this constant.
|
|
55
|
+
*/
|
|
56
|
+
export declare const OPENWAKEWORD_DEFAULT_HEAD = "hey-eliza";
|
|
57
|
+
/**
|
|
58
|
+
* Heads that are placeholders, not trained on the Eliza-1 wake phrase.
|
|
59
|
+
*
|
|
60
|
+
* `hey-eliza` stays in this set until a head trained against the real
|
|
61
|
+
* phrase ships in every tier bundle (the bundled binary is still the
|
|
62
|
+
* upstream `hey_jarvis_v0.1` weights renamed). `hey_jarvis` stays by
|
|
63
|
+
* definition — it is the wrong phrase.
|
|
64
|
+
*
|
|
65
|
+
* A real "hey eliza" head HAS been trained and verified end-to-end through
|
|
66
|
+
* this exact runtime — ~98% true-accept / ~4-7% false-accept on a held-out set
|
|
67
|
+
* scored via `libwakeword.so` (see
|
|
68
|
+
* `packages/training/scripts/wakeword/HEY_ELIZA_HEAD_PROVENANCE.md`). It must
|
|
69
|
+
* be trained with `train_eliza1_wakeword_head.py --no-mel-rescale` to match
|
|
70
|
+
* this runtime's mel preprocessing.
|
|
71
|
+
*
|
|
72
|
+
* The trained GGUFs are now PUBLISHED to `elizaos/eliza-1` at
|
|
73
|
+
* `voice/wakeword/hey-eliza.{melspec,embedding,classifier}.gguf` and registered
|
|
74
|
+
* in the voice catalog as `wakeword` v0.3.0 (`VOICE_MODEL_VERSIONS` in
|
|
75
|
+
* `@elizaos/shared`). `hey-eliza` nonetheless STAYS in this set until that head
|
|
76
|
+
* ships in every tier BUNDLE's `wake/` dir — the gated `publish_all_eliza1.sh`
|
|
77
|
+
* re-publish — because the bundles users currently download still carry the
|
|
78
|
+
* renamed `hey_jarvis` placeholder; removing the flag before the bundle ships
|
|
79
|
+
* the real head would make the runtime treat the placeholder as authentic.
|
|
80
|
+
* `hey_jarvis` stays by definition (wrong phrase). A future pass should make
|
|
81
|
+
* this data-driven off the bundle manifest's `releaseState` rather than
|
|
82
|
+
* hard-coded.
|
|
83
|
+
*/
|
|
84
|
+
export declare const OPENWAKEWORD_PLACEHOLDER_HEADS: ReadonlySet<string>;
|
|
85
|
+
export declare function isPlaceholderWakeWordHead(head: string): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Per-frame wake-word probability source. openWakeWord runs on 80 ms
|
|
88
|
+
* frames of 16 kHz audio; `scoreFrame` takes one PCM frame and returns
|
|
89
|
+
* the latest P(wake) in [0, 1] (the head only re-runs once enough
|
|
90
|
+
* context has accumulated — early frames return 0). Stateful (the
|
|
91
|
+
* streaming front-end carries its buffers); `reset()` clears it.
|
|
92
|
+
*
|
|
93
|
+
* The default backend (`GgmlWakeWordModel`) calls into the native FFI
|
|
94
|
+
* synchronously; the method is still `async` so the interface fits a
|
|
95
|
+
* async-friendly backend variant (e.g. worker-thread based) and
|
|
96
|
+
* matches the same shape the previous ONNX backend exposed to callers.
|
|
97
|
+
*/
|
|
98
|
+
export type { WakeWordModel } from "./types.js";
|
|
99
|
+
import type { WakeWordModel } from "./types.js";
|
|
100
|
+
export interface WakeWordConfig {
|
|
101
|
+
/** P(wake) above this fires a detection. openWakeWord default ~0.5. */
|
|
102
|
+
threshold?: number;
|
|
103
|
+
/**
|
|
104
|
+
* Refractory frames after a detection during which no new detection
|
|
105
|
+
* fires (debounce a single utterance into one event).
|
|
106
|
+
*/
|
|
107
|
+
refractoryFrames?: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Thrown when the native openWakeWord runtime cannot service this call:
|
|
111
|
+
* - `ffi-missing`: the FFI handle was not provided to the loader (the
|
|
112
|
+
* voice lifecycle hands one in via `loadBundledWakeWordModel`).
|
|
113
|
+
* - `runtime-not-ready`: the fused `libelizainference` build does not
|
|
114
|
+
* export `eliza_inference_wakeword_*` — the wake-word GGUF runtime
|
|
115
|
+
* is not yet compiled into this binary. NOT thrown for an absent
|
|
116
|
+
* bundled GGUF (that is "wake word unavailable for this bundle",
|
|
117
|
+
* not a broken build — `resolveWakeWordModel` returns null instead).
|
|
118
|
+
* - `model-load-failed`: the native side rejected the GGUF or the
|
|
119
|
+
* selected head name at session open.
|
|
120
|
+
*/
|
|
121
|
+
export declare class WakeWordUnavailableError extends Error {
|
|
122
|
+
readonly code: "ffi-missing" | "runtime-not-ready" | "model-load-failed";
|
|
123
|
+
constructor(code: WakeWordUnavailableError["code"], message: string);
|
|
124
|
+
}
|
|
125
|
+
/** Path to the combined wake-word GGUF and the name of the head to bind. */
|
|
126
|
+
export interface WakeWordModelPaths {
|
|
127
|
+
/** Absolute path to `wake/openwakeword.gguf`. */
|
|
128
|
+
gguf: string;
|
|
129
|
+
/** Name of the classifier head inside the GGUF (e.g. "hey-eliza"). */
|
|
130
|
+
head: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The real openWakeWord streaming detector, backed by the native FFI.
|
|
134
|
+
* Owns one `eliza_inference_wakeword_*` session; `scoreFrame` consumes
|
|
135
|
+
* exactly `frameSamples` (1280) samples at 16 kHz and returns the most
|
|
136
|
+
* recent head probability the native pipeline produced. The audio tail,
|
|
137
|
+
* mel ring and embedding ring live on the C side; this class is a thin
|
|
138
|
+
* handle.
|
|
139
|
+
*/
|
|
140
|
+
export declare class GgmlWakeWordModel implements WakeWordModel {
|
|
141
|
+
private readonly ffi;
|
|
142
|
+
private readonly handle;
|
|
143
|
+
readonly frameSamples = 1280;
|
|
144
|
+
readonly sampleRate = 16000;
|
|
145
|
+
private closed;
|
|
146
|
+
private constructor();
|
|
147
|
+
/**
|
|
148
|
+
* True only when the fused `libelizainference` build exports the
|
|
149
|
+
* wake-word ABI and advertises support at runtime. The wake-word
|
|
150
|
+
* loader uses this to surface a structured `runtime-not-ready` error
|
|
151
|
+
* before attempting to open a session.
|
|
152
|
+
*/
|
|
153
|
+
static isSupported(ffi: ElizaInferenceFfi | null | undefined): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Open a native wake-word session. Throws `WakeWordUnavailableError`
|
|
156
|
+
* when the runtime is not present or rejects the head name. No silent
|
|
157
|
+
* fallback (AGENTS.md §3).
|
|
158
|
+
*/
|
|
159
|
+
static load(opts: {
|
|
160
|
+
ffi: ElizaInferenceFfi;
|
|
161
|
+
ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
|
|
162
|
+
headName: string;
|
|
163
|
+
}): Promise<GgmlWakeWordModel>;
|
|
164
|
+
scoreFrame(frame: Float32Array): Promise<number>;
|
|
165
|
+
reset(): void;
|
|
166
|
+
close(): void;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Resolve the bundled wake-word GGUF. Unlike the VAD model this is
|
|
170
|
+
* *optional* — a missing file means "wake word unavailable for this
|
|
171
|
+
* bundle", not "broken bundle". Returns null when the GGUF is absent so
|
|
172
|
+
* callers keep voice mode working (push-to-talk / VAD-gated) without it.
|
|
173
|
+
*
|
|
174
|
+
* Search order:
|
|
175
|
+
* 1. `<bundleRoot>/wake/openwakeword.gguf`
|
|
176
|
+
* 2. `<state-dir>/local-inference/wake/openwakeword.gguf` (shared cache)
|
|
177
|
+
*
|
|
178
|
+
* `head` defaults to the bundle's default wake phrase. The head name is
|
|
179
|
+
* resolved by the native runtime against tensors inside the GGUF, so it
|
|
180
|
+
* is validated at open time, not here.
|
|
181
|
+
*
|
|
182
|
+
* MUST only be called in `local` mode. The cloud-mode router does not
|
|
183
|
+
* reach this (the wake-word setting is rejected there) — see AGENTS.md §5
|
|
184
|
+
* hide-not-disable.
|
|
185
|
+
*/
|
|
186
|
+
export declare function resolveWakeWordModel(opts: {
|
|
187
|
+
bundleRoot?: string;
|
|
188
|
+
head?: string;
|
|
189
|
+
}): WakeWordModelPaths | null;
|
|
190
|
+
/** Resolved triple of standalone wakeword-cpp paths (library + 3 GGUFs). */
|
|
191
|
+
export interface WakeWordStandalonePaths {
|
|
192
|
+
libraryPath: string;
|
|
193
|
+
melspec: string;
|
|
194
|
+
embedding: string;
|
|
195
|
+
classifier: string;
|
|
196
|
+
head: string;
|
|
197
|
+
}
|
|
198
|
+
export declare function resolveWakeWordStandalonePaths(opts: {
|
|
199
|
+
bundleRoot?: string;
|
|
200
|
+
head?: string;
|
|
201
|
+
}): WakeWordStandalonePaths | null;
|
|
202
|
+
/**
|
|
203
|
+
* Open a wake-word session, preferring the fused `libelizainference`
|
|
204
|
+
* wake-word path (the single native engine the whole voice pipeline runs
|
|
205
|
+
* through — the user directive: no separate bun:ffi-musl libs). Falls back to
|
|
206
|
+
* the standalone `wakeword-cpp` build only when the fused build does not carry
|
|
207
|
+
* the wake-word GGUF. Returns `null` when neither provider can serve a session.
|
|
208
|
+
*
|
|
209
|
+
* Provider order:
|
|
210
|
+
* 1. `GgmlWakeWordModel` (this file) — the fused-`libelizainference` path
|
|
211
|
+
* that consumes `wake/openwakeword.gguf` from the bundle cache via the
|
|
212
|
+
* `eliza_inference_wakeword_*` ABI. Tried first whenever the bundled GGUF
|
|
213
|
+
* is on disk; uses the same `ffi`/`ctx` as VAD / speaker / TTS / ASR.
|
|
214
|
+
* 2. `OpenWakeWordGgmlModel` from `./wake-word-ggml.ts` — the standalone
|
|
215
|
+
* `packages/native/plugins/wakeword-cpp` build (three GGUFs). Guarded
|
|
216
|
+
* fallback for paths where the fused build lacks the wake-word runtime.
|
|
217
|
+
*
|
|
218
|
+
* `ffi` and `ctx` come from the voice lifecycle — they are the same
|
|
219
|
+
* `ElizaInferenceFfi` handle and context the VAD / speaker / TTS / ASR paths
|
|
220
|
+
* use. The standalone fallback uses neither.
|
|
221
|
+
*/
|
|
222
|
+
export declare function loadBundledWakeWordModel(opts: {
|
|
223
|
+
ffi: ElizaInferenceFfi;
|
|
224
|
+
ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
|
|
225
|
+
bundleRoot?: string;
|
|
226
|
+
head?: string;
|
|
227
|
+
}): Promise<WakeWordModel | null>;
|
|
228
|
+
/**
|
|
229
|
+
* Streaming wake-word detector. Feed frames; `onWake` fires once per
|
|
230
|
+
* detected utterance (refractory-debounced). The voice loop wires
|
|
231
|
+
* `onWake` to "start a listening window" — exactly what a push-to-talk
|
|
232
|
+
* press does.
|
|
233
|
+
*
|
|
234
|
+
* Only constructed in `local` mode. `cloud` mode never instantiates this
|
|
235
|
+
* (and `resolveWakeWordModel` is never called there), so the surface is
|
|
236
|
+
* inert per the hide-not-disable rule.
|
|
237
|
+
*/
|
|
238
|
+
export declare class OpenWakeWordDetector {
|
|
239
|
+
private readonly model;
|
|
240
|
+
private readonly cfg;
|
|
241
|
+
private cooldown;
|
|
242
|
+
private readonly onWake;
|
|
243
|
+
constructor(args: {
|
|
244
|
+
model: WakeWordModel;
|
|
245
|
+
config?: WakeWordConfig;
|
|
246
|
+
onWake: () => void;
|
|
247
|
+
});
|
|
248
|
+
/**
|
|
249
|
+
* Score one PCM frame; fire `onWake` on a fresh detection. Resolves
|
|
250
|
+
* to true when this frame fired the wake word.
|
|
251
|
+
*/
|
|
252
|
+
pushFrame(frame: Float32Array): Promise<boolean>;
|
|
253
|
+
reset(): void;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=wake-word.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wake-word.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wake-word.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,OAAO,KAAK,EACX,2BAA2B,EAC3B,iBAAiB,EAEjB,MAAM,gBAAgB,CAAC;AAMxB,uEAAuE;AACvE,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAG7D,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAKD;;;;;;;;;;;GAWG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC9B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;gBAC7D,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKnE;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IAMrD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,QAAQ,CAAC,YAAY,QAAiB;IACtC,QAAQ,CAAC,UAAU,SAAU;IAC7B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAKP;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAKtE;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE;QACvB,GAAG,EAAE,iBAAiB,CAAC;QACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;QACvE,QAAQ,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqCxB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBtD,KAAK,IAAI,IAAI;IASb,KAAK,IAAI,IAAI;CAKb;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,kBAAkB,GAAG,IAAI,CAW5B;AAoCD,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,uBAAuB,GAAG,IAAI,CAwDjC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACpD,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmDhC;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,IAAI,EAAE;QACjB,KAAK,EAAE,aAAa,CAAC;QACrB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,EAAE,MAAM,IAAI,CAAC;KACnB;IAMD;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBtD,KAAK,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mono PCM16 WAV codec — dependency-light so corpus / fixture / test code can
|
|
3
|
+
* encode + decode WAV without dragging in the heavy `engine-bridge` module
|
|
4
|
+
* graph. `engine-bridge` re-exports these for its existing callers.
|
|
5
|
+
*/
|
|
6
|
+
import type { TranscriptionAudio } from "./types";
|
|
7
|
+
/** Encode mono float PCM as a 16-bit little-endian WAV byte stream. */
|
|
8
|
+
export declare function encodeMonoPcm16Wav(pcm: Float32Array, sampleRate: number): Uint8Array;
|
|
9
|
+
/** Decode a mono PCM16 WAV byte stream into float PCM + sample rate. */
|
|
10
|
+
export declare function decodeMonoPcm16Wav(bytes: Uint8Array): TranscriptionAudio;
|
|
11
|
+
//# sourceMappingURL=wav-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wav-codec.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wav-codec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgBlD,uEAAuE;AACvE,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,GAChB,UAAU,CA4BZ;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,kBAAkB,CA2CxE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Workbench entrypoint (#8785).
|
|
3
|
+
*
|
|
4
|
+
* One call that generates the corpus for a scenario matrix, runs them headless
|
|
5
|
+
* through the (injected) voice services, and rolls the result into the single
|
|
6
|
+
* JSON + Markdown benchmark report. The CLI (`voice:workbench`) and the CI lane
|
|
7
|
+
* are thin shells over this:
|
|
8
|
+
* - mocked lane (always): pass `groundTruthMockServices()` → runs + passes,
|
|
9
|
+
* exercising corpus → runner → scorers → report end-to-end with no model;
|
|
10
|
+
* - real lane (where provisioned): pass a real services adapter; absent
|
|
11
|
+
* backend → `services: null` → every scenario `skipped` (never `pass`).
|
|
12
|
+
*
|
|
13
|
+
* Pure orchestration over the already-tested pieces, so it is unit-testable
|
|
14
|
+
* without a model or a browser.
|
|
15
|
+
*/
|
|
16
|
+
import { type CorpusTtsSynthesizer } from "./corpus-generator";
|
|
17
|
+
import type { VoiceScenario } from "./voice-scenario";
|
|
18
|
+
import { type VoiceWorkbenchReport } from "./voice-workbench-report";
|
|
19
|
+
import { type VoiceWorkbenchServices } from "./workbench-headless-runner";
|
|
20
|
+
export interface BuildAndRunVoiceWorkbenchArgs {
|
|
21
|
+
/** Scenario matrix to run (defaults to the built-in set). */
|
|
22
|
+
scenarios?: ReadonlyArray<VoiceScenario>;
|
|
23
|
+
/** Voice services; null → every scenario is skipped (no backend). */
|
|
24
|
+
services: VoiceWorkbenchServices | null;
|
|
25
|
+
/** Corpus sample rate (default 16 kHz). */
|
|
26
|
+
sampleRate?: number;
|
|
27
|
+
/** Real TTS for the corpus; omitted → deterministic synthetic speech. */
|
|
28
|
+
synthesizer?: CorpusTtsSynthesizer;
|
|
29
|
+
}
|
|
30
|
+
export interface VoiceWorkbenchResult {
|
|
31
|
+
report: VoiceWorkbenchReport;
|
|
32
|
+
markdown: string;
|
|
33
|
+
}
|
|
34
|
+
/** Generate corpus → run headless → build the report + Markdown. */
|
|
35
|
+
export declare function buildAndRunVoiceWorkbench(args: BuildAndRunVoiceWorkbenchArgs): Promise<VoiceWorkbenchResult>;
|
|
36
|
+
export interface VoiceWorkbenchArtifacts {
|
|
37
|
+
reportJsonPath: string;
|
|
38
|
+
reportMarkdownPath: string;
|
|
39
|
+
}
|
|
40
|
+
/** Persist the workbench result as `report.json` + `report.md` under `outDir`. */
|
|
41
|
+
export declare function writeVoiceWorkbenchResult(result: VoiceWorkbenchResult, outDir: string): VoiceWorkbenchArtifacts;
|
|
42
|
+
//# sourceMappingURL=workbench-entrypoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-entrypoint.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,6BAA6B;IAC7C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACzC,qEAAqE;IACrE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,6BAA6B,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAgB/B;AAED,MAAM,WAAW,uBAAuB;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC3B;AAED,kFAAkF;AAClF,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,MAAM,GACZ,uBAAuB,CAOzB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Workbench headless runner (#8785).
|
|
3
|
+
*
|
|
4
|
+
* Drives a {@link VoiceScenario} + its generated corpus through the real voice
|
|
5
|
+
* services WITHOUT a browser, scores every turn with the shared scorers
|
|
6
|
+
* (`e2e-harness.ts`), and emits one {@link VoiceWorkbenchScenarioRun} the report
|
|
7
|
+
* layer (`voice-workbench-report.ts`) aggregates. The services are injected
|
|
8
|
+
* through {@link VoiceWorkbenchServices} so:
|
|
9
|
+
* - a provisioned local backend wires the real ASR / diarization / EOT /
|
|
10
|
+
* respond / entity / TTS path,
|
|
11
|
+
* - a mock returns ground-truth-derived observations for the CI plumbing lane,
|
|
12
|
+
* - and an ABSENT backend (`services === null`) or absent corpus
|
|
13
|
+
* (`corpus === null`) yields a `skipped` run — never a `pass` (honesty
|
|
14
|
+
* contract).
|
|
15
|
+
*
|
|
16
|
+
* Pure orchestration: it slices the corpus per turn, asks the services to
|
|
17
|
+
* observe the turn, and maps observations onto scorer inputs. No model loading
|
|
18
|
+
* here, so it is unit-testable with a fake services adapter.
|
|
19
|
+
*/
|
|
20
|
+
import type { CorpusGroundTruth, CorpusTurnLabel, GeneratedVoiceCorpus } from "./corpus-generator";
|
|
21
|
+
import type { VoiceScenario } from "./voice-scenario";
|
|
22
|
+
import type { VoiceWorkbenchScenarioRun } from "./voice-workbench-report";
|
|
23
|
+
/** What the real (or mock) services observed for one turn of audio. */
|
|
24
|
+
export interface VoiceTurnObservation {
|
|
25
|
+
/** ASR hypothesis transcript for the turn's audio. */
|
|
26
|
+
hypothesisTranscript: string;
|
|
27
|
+
/** Diarized speaker label, or null when the diarizer missed the turn. */
|
|
28
|
+
predictedSpeakerLabel: string | null;
|
|
29
|
+
/** The EOT classifier decided end-of-turn at this turn's boundary. */
|
|
30
|
+
eotDecided: boolean;
|
|
31
|
+
/** EOT decision latency (ms) from the true boundary, when measured. */
|
|
32
|
+
eotLatencyMs?: number;
|
|
33
|
+
/** The agent decided to respond to this turn. */
|
|
34
|
+
responded: boolean;
|
|
35
|
+
/** Entities inferred from this turn's transcript (name/partner extraction). */
|
|
36
|
+
inferredEntities: string[];
|
|
37
|
+
/** Voice→entity match: the entity the recognized voice resolved to (or null). */
|
|
38
|
+
matchedEntityId: string | null;
|
|
39
|
+
/** First-audio latency (ms) of the agent's spoken reply, when it replied. */
|
|
40
|
+
firstAudioMs?: number;
|
|
41
|
+
/** The system judged this turn to be the device owner (owner-security). */
|
|
42
|
+
predictedOwner?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface VoiceWorkbenchServices {
|
|
45
|
+
/**
|
|
46
|
+
* Optional one-shot hook before a scenario's turns are scored. Real services
|
|
47
|
+
* use this to enroll speaker centroids from the generated corpus; mock
|
|
48
|
+
* services can omit it.
|
|
49
|
+
*/
|
|
50
|
+
prepareScenario?(args: {
|
|
51
|
+
scenario: VoiceScenario;
|
|
52
|
+
corpus: GeneratedVoiceCorpus;
|
|
53
|
+
}): Promise<void> | void;
|
|
54
|
+
/**
|
|
55
|
+
* Feed one turn's audio slice through the real services and report what was
|
|
56
|
+
* observed. The `label` carries the turn's ground truth (so a mock can echo
|
|
57
|
+
* it); the real adapter ignores it and measures.
|
|
58
|
+
*/
|
|
59
|
+
observeTurn(args: {
|
|
60
|
+
turnIndex: number;
|
|
61
|
+
audio: Float32Array;
|
|
62
|
+
sampleRate: number;
|
|
63
|
+
label: CorpusTurnLabel;
|
|
64
|
+
/** Scenario-level ground truth (participants, owner set, agents). */
|
|
65
|
+
groundTruth: CorpusGroundTruth;
|
|
66
|
+
}): Promise<VoiceTurnObservation>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Where to write per-run `.wav` artifacts. When present, the runner encodes the
|
|
70
|
+
* full corpus + each consumed per-turn slice to disk under `dir` and records the
|
|
71
|
+
* paths (relative to `relativeTo`) on the run's `audioArtifacts`. Absent ⇒ no IO.
|
|
72
|
+
*/
|
|
73
|
+
export interface VoiceAudioCaptureSink {
|
|
74
|
+
/** Directory the `.wav` files are written into (created recursively). */
|
|
75
|
+
dir: string;
|
|
76
|
+
/** Artifact paths are recorded relative to this dir (the scenario run dir). */
|
|
77
|
+
relativeTo: string;
|
|
78
|
+
}
|
|
79
|
+
export interface RunVoiceScenarioHeadlessArgs {
|
|
80
|
+
scenario: VoiceScenario;
|
|
81
|
+
/** The generated/loaded corpus; null when its artifacts are absent. */
|
|
82
|
+
corpus: GeneratedVoiceCorpus | null;
|
|
83
|
+
/** The voice services; null when no backend is provisioned. */
|
|
84
|
+
services: VoiceWorkbenchServices | null;
|
|
85
|
+
/** When set, write the run's audio as `.wav` artifacts and record their paths. */
|
|
86
|
+
captureAudio?: VoiceAudioCaptureSink;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Run one scenario headless and score it. Returns a `skipped` run (never a
|
|
90
|
+
* pass) when the corpus or the backend is absent.
|
|
91
|
+
*/
|
|
92
|
+
export declare function runVoiceScenarioHeadless(args: RunVoiceScenarioHeadlessArgs): Promise<VoiceWorkbenchScenarioRun>;
|
|
93
|
+
export interface RunVoiceWorkbenchArgs {
|
|
94
|
+
scenarios: ReadonlyArray<{
|
|
95
|
+
scenario: VoiceScenario;
|
|
96
|
+
corpus: GeneratedVoiceCorpus | null;
|
|
97
|
+
}>;
|
|
98
|
+
services: VoiceWorkbenchServices | null;
|
|
99
|
+
}
|
|
100
|
+
/** Run a matrix of scenarios headless, returning one run per scenario. */
|
|
101
|
+
export declare function runVoiceWorkbenchHeadless(args: RunVoiceWorkbenchArgs): Promise<VoiceWorkbenchScenarioRun[]>;
|
|
102
|
+
//# sourceMappingURL=workbench-headless-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-headless-runner.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-headless-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAEX,yBAAyB,EACzB,MAAM,0BAA0B,CAAC;AAGlC,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACpC,sDAAsD;IACtD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iFAAiF;IACjF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE;QACtB,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,oBAAoB,CAAC;KAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,YAAY,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,eAAe,CAAC;QACvB,qEAAqE;QACrE,WAAW,EAAE,iBAAiB,CAAC;KAC/B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,aAAa,CAAC;IACxB,uEAAuE;IACvE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,kFAAkF;IAClF,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACrC;AA2CD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA+MpC;AAED,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,aAAa,CAAC;QACxB,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;KACpC,CAAC,CAAC;IACH,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACxC;AAED,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,qBAAqB,GACzB,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAYtC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Workbench real-decision-logic services adapter (#8785, #9427).
|
|
3
|
+
*
|
|
4
|
+
* The ground-truth mock (`groundTruthMockServices`) echoes the corpus labels —
|
|
5
|
+
* it proves the runner → scorers → report wiring, but it can never catch a
|
|
6
|
+
* regression in the DECISION logic because it never runs it. This adapter does:
|
|
7
|
+
* for every turn it runs the REAL, shipped modules —
|
|
8
|
+
*
|
|
9
|
+
* - end-of-turn: `scoreEndOfTurnHeuristic` (`@elizaos/shared/voice-eot`)
|
|
10
|
+
* - respond / echo / `buildVoiceTurnSignal` (`@elizaos/shared/voice/respond-gate`)
|
|
11
|
+
* bystander / wake-word — the SAME gate the UI client ships
|
|
12
|
+
* - diarization: `OnlineSpeakerClusterer` clusters each turn BY ITS
|
|
13
|
+
* AUDIO (blind to the ground-truth label), so the DER
|
|
14
|
+
* gate measures a real attribution and can actually fail
|
|
15
|
+
* on a misattribution (#9427).
|
|
16
|
+
* - acoustic self-voice: `selfVoiceSimilarity` measures the turn audio against
|
|
17
|
+
* the agent's TTS imprint — the real value the echo gate
|
|
18
|
+
* consumes (no more hardcoded `0.9`).
|
|
19
|
+
* - name extraction: the inline patterns below (mirrors IDENTIFY_SPEAKER)
|
|
20
|
+
*
|
|
21
|
+
* — so the workbench catches a regression in the gate the moment it lands. It is
|
|
22
|
+
* CI-runnable with NO models or network: it keeps only the perfect-ASR
|
|
23
|
+
* assumption (the transcript comes from ground truth), so it does NOT measure
|
|
24
|
+
* ASR WER or EOT latency — those need the real model lane. Everything else is
|
|
25
|
+
* genuine: EOT decisions, respond/echo/bystander/wake-word, blind speaker
|
|
26
|
+
* clustering, acoustic self-voice, and name extraction.
|
|
27
|
+
*/
|
|
28
|
+
import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
|
|
29
|
+
/**
|
|
30
|
+
* Build a services adapter that runs the real decision logic. Stateful across a
|
|
31
|
+
* scenario's turns (it remembers the agent's last reply so a following
|
|
32
|
+
* `isAgentEcho` turn is gated against a genuine reply string); state resets at
|
|
33
|
+
* each scenario's first turn.
|
|
34
|
+
*/
|
|
35
|
+
export declare function realDecisionLogicServices(): VoiceWorkbenchServices;
|
|
36
|
+
//# sourceMappingURL=workbench-logic-services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-logic-services.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-logic-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAaH,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAmCrC;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,sBAAsB,CAoGlE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Workbench real services adapter (#9147).
|
|
3
|
+
*
|
|
4
|
+
* `voice:workbench --real` must not be an all-skipped honesty stub: the
|
|
5
|
+
* provisioned lane has a fused libelizainference build, ASR/TTS regions,
|
|
6
|
+
* WeSpeaker, pyannote, and ElevenLabs-generated human speech. This adapter
|
|
7
|
+
* drives those real pieces through the existing workbench runner/scorers.
|
|
8
|
+
*/
|
|
9
|
+
import type { CorpusTtsSynthesizer } from "./corpus-generator";
|
|
10
|
+
import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
|
|
11
|
+
export interface RealVoiceWorkbenchRuntime {
|
|
12
|
+
services: VoiceWorkbenchServices;
|
|
13
|
+
synthesizer: CorpusTtsSynthesizer;
|
|
14
|
+
dispose(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createRealVoiceWorkbenchRuntimeFromEnv(env?: NodeJS.ProcessEnv): Promise<RealVoiceWorkbenchRuntime>;
|
|
17
|
+
//# sourceMappingURL=workbench-real-services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-real-services.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-real-services.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,KAAK,EAEX,oBAAoB,EAEpB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAiDrC,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAweD,wBAAsB,sCAAsC,CAC3D,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAkDpC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Voice Workbench scenarios + a ground-truth mock services adapter
|
|
3
|
+
* (#8785).
|
|
4
|
+
*
|
|
5
|
+
* The scenario set spans every {@link VoiceScenarioClass} so the headless runner
|
|
6
|
+
* and the headful spec matrix exercise the whole surface from one source. The
|
|
7
|
+
* mock adapter echoes each turn's ground truth, so the CI plumbing lane runs the
|
|
8
|
+
* runner → scorers → report end-to-end and PASSES without any model — separate
|
|
9
|
+
* from the gated real-backend lane.
|
|
10
|
+
*/
|
|
11
|
+
import type { VoiceScenario } from "./voice-scenario";
|
|
12
|
+
import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
|
|
13
|
+
export declare const VOICE_WORKBENCH_SCENARIOS: VoiceScenario[];
|
|
14
|
+
/**
|
|
15
|
+
* A services adapter that echoes each turn's ground truth — perfect ASR /
|
|
16
|
+
* diarization / EOT / respond / entity / match. Drives the CI plumbing lane
|
|
17
|
+
* (runner → scorers → report) to a real PASS with no model. NOT a stand-in for
|
|
18
|
+
* the real backend: it proves the wiring, not the models.
|
|
19
|
+
*/
|
|
20
|
+
export declare function groundTruthMockServices(opts?: {
|
|
21
|
+
firstAudioMs?: number;
|
|
22
|
+
eotLatencyMs?: number;
|
|
23
|
+
}): VoiceWorkbenchServices;
|
|
24
|
+
//# sourceMappingURL=workbench-scenarios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-scenarios.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-scenarios.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,yBAAyB,EAAE,aAAa,EAmWpD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,sBAAsB,CAuBxB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap a TTS model handler (`ModelType.TEXT_TO_SPEECH`) with the
|
|
3
|
+
* `FirstLineCache` disk-tier.
|
|
4
|
+
*
|
|
5
|
+
* Behaviour on a wrapped handler call:
|
|
6
|
+
* 1. Snip the first sentence of the input text. Reject if > 10 words or
|
|
7
|
+
* no terminator found → defer to the inner handler unchanged.
|
|
8
|
+
* 2. Build the cache key from the snip + caller-supplied
|
|
9
|
+
* `(provider, voiceId, voiceRevision, codec, voiceSettingsFingerprint)`.
|
|
10
|
+
* 3. On hit: if the snip is the WHOLE input, return cached bytes. If the
|
|
11
|
+
* snip is only a prefix, return `cachedBytes ++ synthesize(remainder)`.
|
|
12
|
+
* The concat path is safe for the codecs we cache today (mp3, opus,
|
|
13
|
+
* ogg are self-framed; wav/pcm_f32 are not, and the wrapper falls
|
|
14
|
+
* through for those).
|
|
15
|
+
* 4. On miss: call the inner handler with the full input, return that.
|
|
16
|
+
* In the background, call the inner handler with JUST the snip to get
|
|
17
|
+
* a cleanly-framed cache entry (no mid-stream-byte alignment hazards).
|
|
18
|
+
*
|
|
19
|
+
* The wrapper is provider-agnostic — `WrapOptions.resolveContext` is the
|
|
20
|
+
* single seam where each TTS plugin teaches the cache its provider name +
|
|
21
|
+
* voice id + revision + voice-settings fingerprint.
|
|
22
|
+
*/
|
|
23
|
+
import type { IAgentRuntime } from "@elizaos/core";
|
|
24
|
+
import { type FirstLineCache, type FirstLineCacheKey } from "./first-line-cache";
|
|
25
|
+
export type TtsBytes = Uint8Array | ArrayBuffer | Buffer;
|
|
26
|
+
export type TtsHandlerInput = string | {
|
|
27
|
+
text: string;
|
|
28
|
+
[k: string]: unknown;
|
|
29
|
+
};
|
|
30
|
+
export type TtsHandlerOutput = TtsBytes;
|
|
31
|
+
export type TtsHandler = (runtime: IAgentRuntime, input: TtsHandlerInput) => Promise<TtsHandlerOutput>;
|
|
32
|
+
/** Caller-supplied context resolver — provider name + voice metadata. */
|
|
33
|
+
export interface TtsResolvedContext {
|
|
34
|
+
provider: string;
|
|
35
|
+
voiceId: string;
|
|
36
|
+
voiceRevision: string;
|
|
37
|
+
codec: FirstLineCacheKey["codec"];
|
|
38
|
+
contentType: string;
|
|
39
|
+
sampleRate: number;
|
|
40
|
+
voiceSettingsFingerprint: string;
|
|
41
|
+
/** Optional: if true, bypass the cache entirely on this call. */
|
|
42
|
+
bypass?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface WrapOptions {
|
|
45
|
+
/** Inject for tests. */
|
|
46
|
+
cache?: FirstLineCache;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the per-call provider/voice context. Must be cheap (typically
|
|
49
|
+
* a settings read + a small sha256). Return `null` to bypass the cache.
|
|
50
|
+
*/
|
|
51
|
+
resolveContext: (runtime: IAgentRuntime, input: TtsHandlerInput) => Promise<TtsResolvedContext | null> | TtsResolvedContext | null;
|
|
52
|
+
/**
|
|
53
|
+
* Whether to attempt to concatenate cached bytes + remainder synthesis.
|
|
54
|
+
* Defaults to true for mp3/opus/ogg, false for wav/pcm_f32 (concat would
|
|
55
|
+
* corrupt the RIFF / raw stream).
|
|
56
|
+
*/
|
|
57
|
+
concatRemainder?: boolean;
|
|
58
|
+
/** Optional pre-resolved fingerprint of voiceSettings; rarely needed. */
|
|
59
|
+
enableCachePopulation?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Wrap a TTS handler with first-sentence caching. Returns a new handler with
|
|
63
|
+
* the same signature.
|
|
64
|
+
*
|
|
65
|
+
* The wrapper is safe to apply at runtime registration time — if the cache
|
|
66
|
+
* is disabled (env / no sqlite), the wrapper short-circuits to the inner
|
|
67
|
+
* handler with zero overhead beyond a snip attempt.
|
|
68
|
+
*/
|
|
69
|
+
export declare function wrapWithFirstLineCache(inner: TtsHandler, options: WrapOptions): TtsHandler;
|
|
70
|
+
//# sourceMappingURL=wrap-with-first-line-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-with-first-line-cache.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wrap-with-first-line-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,OAAO,EACN,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAGtB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,CACxB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,KAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,wBAAwB;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,cAAc,EAAE,CACf,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,KAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACpE;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC;AA2CD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW,GAClB,UAAU,CAgEZ"}
|