@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,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Final optional IMAGE_DESCRIPTION fallback layer.
|
|
3
|
+
*
|
|
4
|
+
* This mirrors the cloud wrapper shape but only runs when the previous
|
|
5
|
+
* handler explicitly returned a typed fallback outcome.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
ImageDescriptionParams,
|
|
10
|
+
ImageDescriptionResult,
|
|
11
|
+
} from "@elizaos/core";
|
|
12
|
+
import {
|
|
13
|
+
isVisionFallbackOutcome,
|
|
14
|
+
type LocalVisionOutcome,
|
|
15
|
+
type LocalVisionResult,
|
|
16
|
+
normalizeVisionDescription,
|
|
17
|
+
type VisionFallbackReason,
|
|
18
|
+
type WrappedImageDescriptionHandler,
|
|
19
|
+
} from "./cloud-fallback";
|
|
20
|
+
|
|
21
|
+
export interface VisionVastFallbackOptions {
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
fetch?: typeof fetch;
|
|
26
|
+
handler?: (
|
|
27
|
+
params: ImageDescriptionParams | string,
|
|
28
|
+
reason: VisionFallbackReason,
|
|
29
|
+
) => Promise<LocalVisionOutcome>;
|
|
30
|
+
log?: (message: string, detail?: Record<string, unknown>) => void;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function resolveVastApiKey(options: VisionVastFallbackOptions): string | null {
|
|
34
|
+
return (
|
|
35
|
+
options.apiKey?.trim() || process.env.ELIZA_VAST_API_KEY?.trim() || null
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function resolveVastBaseUrl(options: VisionVastFallbackOptions): string {
|
|
40
|
+
return (
|
|
41
|
+
options.baseUrl?.trim() ||
|
|
42
|
+
process.env.ELIZA_VAST_BASE_URL?.trim() ||
|
|
43
|
+
"https://api.vast.ai"
|
|
44
|
+
).replace(/\/+$/, "");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function imageRequestBody(params: ImageDescriptionParams | string): {
|
|
48
|
+
image: { kind: "url"; url: string } | { kind: "data"; data: string };
|
|
49
|
+
prompt?: string;
|
|
50
|
+
} {
|
|
51
|
+
if (typeof params === "string") {
|
|
52
|
+
return params.startsWith("data:")
|
|
53
|
+
? { image: { kind: "data", data: params } }
|
|
54
|
+
: { image: { kind: "url", url: params } };
|
|
55
|
+
}
|
|
56
|
+
const imageUrl = (params as { imageUrl?: string }).imageUrl;
|
|
57
|
+
const image = (params as { image?: string }).image;
|
|
58
|
+
const source = imageUrl ?? image;
|
|
59
|
+
const body = source?.startsWith("data:")
|
|
60
|
+
? { image: { kind: "data" as const, data: source } }
|
|
61
|
+
: { image: { kind: "url" as const, url: source ?? "" } };
|
|
62
|
+
if (params.prompt) return { ...body, prompt: params.prompt };
|
|
63
|
+
return body;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function callVastVision(
|
|
67
|
+
params: ImageDescriptionParams | string,
|
|
68
|
+
options: VisionVastFallbackOptions,
|
|
69
|
+
): Promise<ImageDescriptionResult> {
|
|
70
|
+
const apiKey = resolveVastApiKey(options);
|
|
71
|
+
if (!apiKey) {
|
|
72
|
+
throw new Error("VAST image fallback is not configured");
|
|
73
|
+
}
|
|
74
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
75
|
+
const response = await fetchImpl(
|
|
76
|
+
`${resolveVastBaseUrl(options)}/v1/vision/describe`,
|
|
77
|
+
{
|
|
78
|
+
method: "POST",
|
|
79
|
+
headers: {
|
|
80
|
+
"content-type": "application/json",
|
|
81
|
+
authorization: `Bearer ${apiKey}`,
|
|
82
|
+
},
|
|
83
|
+
body: JSON.stringify(imageRequestBody(params)),
|
|
84
|
+
},
|
|
85
|
+
);
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
throw new Error(`VAST image fallback failed with ${response.status}`);
|
|
88
|
+
}
|
|
89
|
+
return normalizeVisionDescription(
|
|
90
|
+
(await response.json()) as LocalVisionResult,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function wrapImageDescriptionHandlerWithVastFallback(
|
|
95
|
+
previous: WrappedImageDescriptionHandler,
|
|
96
|
+
options: VisionVastFallbackOptions = {},
|
|
97
|
+
): WrappedImageDescriptionHandler {
|
|
98
|
+
const enabled = options.enabled ?? true;
|
|
99
|
+
const log = options.log ?? (() => undefined);
|
|
100
|
+
return async (params): Promise<LocalVisionOutcome> => {
|
|
101
|
+
const outcome = await previous(params);
|
|
102
|
+
if (!isVisionFallbackOutcome(outcome)) {
|
|
103
|
+
return normalizeVisionDescription(outcome);
|
|
104
|
+
}
|
|
105
|
+
if (!enabled) return outcome;
|
|
106
|
+
|
|
107
|
+
const apiKey = resolveVastApiKey(options);
|
|
108
|
+
if (!options.handler && !apiKey) return outcome;
|
|
109
|
+
|
|
110
|
+
log("[vision/vast-fallback] upstream IMAGE_DESCRIPTION fallback", {
|
|
111
|
+
reason: outcome.reason,
|
|
112
|
+
});
|
|
113
|
+
try {
|
|
114
|
+
const vastOutcome = options.handler
|
|
115
|
+
? await options.handler(params, outcome.reason)
|
|
116
|
+
: await callVastVision(params, options);
|
|
117
|
+
if (isVisionFallbackOutcome(vastOutcome)) return vastOutcome;
|
|
118
|
+
return normalizeVisionDescription(vastOutcome);
|
|
119
|
+
} catch (error) {
|
|
120
|
+
return {
|
|
121
|
+
kind: "fallback",
|
|
122
|
+
reason: "vast-error",
|
|
123
|
+
cause: error instanceof Error ? error : new Error(String(error)),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-hashed cache for projected vision-language tokens (WS1 deliverable).
|
|
3
|
+
*
|
|
4
|
+
* Vision models in the Eliza-1 stack (Gemma-VL, Florence-2, Apothic-VL) all
|
|
5
|
+
* go through the same expensive projector step: raw pixel
|
|
6
|
+
* bytes → patch embeddings → projector → tokens that the text decoder
|
|
7
|
+
* actually consumes. When the user pastes the same screenshot three times
|
|
8
|
+
* in a row, or when computer-use takes near-duplicate frames of an idle
|
|
9
|
+
* screen, we want to skip the projector entirely and reuse the cached
|
|
10
|
+
* tokens.
|
|
11
|
+
*
|
|
12
|
+
* Contract:
|
|
13
|
+
* - Caller computes a stable hash of the *normalized* input bytes
|
|
14
|
+
* (downscaled to the model's input resolution, then SHA-256 of the
|
|
15
|
+
* packed pixels). The hash is the cache key.
|
|
16
|
+
* - Caller pairs the hash with the projected token tensor (a flat
|
|
17
|
+
* `Float32Array` of length `tokens * hiddenSize`) AND the geometry
|
|
18
|
+
* `{ tokens, hiddenSize }` so a reader can reshape on the way out.
|
|
19
|
+
* - `get(hash)` returns `null` on miss or expiry, the entry on hit.
|
|
20
|
+
* A hit also "touches" the entry to keep it warm under LRU.
|
|
21
|
+
* - `set(hash, entry, ttlMs?)` inserts with a TTL (default 5 min); if
|
|
22
|
+
* the LRU is full, the coldest entry is evicted.
|
|
23
|
+
*
|
|
24
|
+
* Why a separate module:
|
|
25
|
+
* - The arbiter owns the *model handle*; the cache holds *per-input
|
|
26
|
+
* projected weights* that survive across model loads/unloads of the
|
|
27
|
+
* same family. Keeping the cache in a sibling module lets the vision
|
|
28
|
+
* plugin reuse it even when the arbiter swapped the underlying model
|
|
29
|
+
* for memory pressure (the projector tokens are still valid as long
|
|
30
|
+
* as the model family + hash match — we encode the family in the key
|
|
31
|
+
* to be safe).
|
|
32
|
+
*
|
|
33
|
+
* What this is NOT:
|
|
34
|
+
* - A blob cache for the encoder *weights*. Those live in mmap regions
|
|
35
|
+
* owned by the arbiter / SharedResourceRegistry and are evicted via
|
|
36
|
+
* `MmapRegionHandle.evictPages()`.
|
|
37
|
+
* - A cache for downstream LLM generations. Prefix-cache for text is
|
|
38
|
+
* handled by `cache-bridge.ts` and the backend session pool.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
interface CacheEntry {
|
|
42
|
+
tokens: Float32Array;
|
|
43
|
+
tokenCount: number;
|
|
44
|
+
hiddenSize: number;
|
|
45
|
+
expiresAtMs: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface VisionEmbeddingEntry {
|
|
49
|
+
/** Flat row-major buffer: `tokenCount * hiddenSize` floats. */
|
|
50
|
+
tokens: Float32Array;
|
|
51
|
+
tokenCount: number;
|
|
52
|
+
hiddenSize: number;
|
|
53
|
+
/** True when this entry is still within its TTL. */
|
|
54
|
+
live: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface VisionEmbeddingCacheConfig {
|
|
58
|
+
/** Max entries retained. LRU evicts beyond this. Default 32. */
|
|
59
|
+
maxEntries: number;
|
|
60
|
+
/** Default TTL when `set()` is called without one. Default 5 min. */
|
|
61
|
+
defaultTtlMs: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const DEFAULTS: VisionEmbeddingCacheConfig = {
|
|
65
|
+
maxEntries: 32,
|
|
66
|
+
defaultTtlMs: 5 * 60_000,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export class VisionEmbeddingCache {
|
|
70
|
+
private readonly config: VisionEmbeddingCacheConfig;
|
|
71
|
+
/**
|
|
72
|
+
* `Map` preserves insertion order; we re-insert on hit to bubble entries
|
|
73
|
+
* to the back, so the first key in iteration order is the LRU candidate.
|
|
74
|
+
*/
|
|
75
|
+
private readonly entries = new Map<string, CacheEntry>();
|
|
76
|
+
private readonly now: () => number;
|
|
77
|
+
|
|
78
|
+
constructor(
|
|
79
|
+
opts: {
|
|
80
|
+
config?: Partial<VisionEmbeddingCacheConfig>;
|
|
81
|
+
now?: () => number;
|
|
82
|
+
} = {},
|
|
83
|
+
) {
|
|
84
|
+
this.config = {
|
|
85
|
+
maxEntries: Math.max(1, opts.config?.maxEntries ?? DEFAULTS.maxEntries),
|
|
86
|
+
defaultTtlMs: Math.max(
|
|
87
|
+
0,
|
|
88
|
+
opts.config?.defaultTtlMs ?? DEFAULTS.defaultTtlMs,
|
|
89
|
+
),
|
|
90
|
+
};
|
|
91
|
+
this.now = opts.now ?? (() => Date.now());
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Lookup. Returns the entry on hit (and refreshes LRU position), or null
|
|
96
|
+
* on miss / expiry. Expired entries are deleted on read so they don't
|
|
97
|
+
* silently consume the LRU budget.
|
|
98
|
+
*/
|
|
99
|
+
get(hash: string): VisionEmbeddingEntry | null {
|
|
100
|
+
const found = this.entries.get(hash);
|
|
101
|
+
if (!found) return null;
|
|
102
|
+
if (found.expiresAtMs <= this.now()) {
|
|
103
|
+
this.entries.delete(hash);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
// Touch — re-insert so it moves to the back of the iteration order.
|
|
107
|
+
this.entries.delete(hash);
|
|
108
|
+
this.entries.set(hash, found);
|
|
109
|
+
return {
|
|
110
|
+
tokens: found.tokens,
|
|
111
|
+
tokenCount: found.tokenCount,
|
|
112
|
+
hiddenSize: found.hiddenSize,
|
|
113
|
+
live: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Insert. Replaces any existing entry under the same hash. Evicts the
|
|
119
|
+
* coldest entry if we're at capacity. `ttlMs` overrides the configured
|
|
120
|
+
* default; pass 0 to use the default.
|
|
121
|
+
*/
|
|
122
|
+
set(
|
|
123
|
+
hash: string,
|
|
124
|
+
entry: { tokens: Float32Array; tokenCount: number; hiddenSize: number },
|
|
125
|
+
ttlMs?: number,
|
|
126
|
+
): void {
|
|
127
|
+
if (entry.tokens.length !== entry.tokenCount * entry.hiddenSize) {
|
|
128
|
+
throw new Error(
|
|
129
|
+
`[vision-embedding-cache] token buffer length ${entry.tokens.length} does not match tokenCount*hiddenSize (${entry.tokenCount}*${entry.hiddenSize})`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
const ttl = ttlMs && ttlMs > 0 ? ttlMs : this.config.defaultTtlMs;
|
|
133
|
+
const expiresAtMs = this.now() + ttl;
|
|
134
|
+
this.entries.delete(hash);
|
|
135
|
+
this.entries.set(hash, {
|
|
136
|
+
tokens: entry.tokens,
|
|
137
|
+
tokenCount: entry.tokenCount,
|
|
138
|
+
hiddenSize: entry.hiddenSize,
|
|
139
|
+
expiresAtMs,
|
|
140
|
+
});
|
|
141
|
+
while (this.entries.size > this.config.maxEntries) {
|
|
142
|
+
const firstKey = this.entries.keys().next().value;
|
|
143
|
+
if (firstKey === undefined) break;
|
|
144
|
+
this.entries.delete(firstKey);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Diagnostic: current entry count. */
|
|
149
|
+
size(): number {
|
|
150
|
+
return this.entries.size;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Diagnostic: snapshot of (hash, byteSize, expiresAtMs) for each entry. */
|
|
154
|
+
snapshot(): ReadonlyArray<{
|
|
155
|
+
hash: string;
|
|
156
|
+
bytes: number;
|
|
157
|
+
expiresAtMs: number;
|
|
158
|
+
}> {
|
|
159
|
+
const out: { hash: string; bytes: number; expiresAtMs: number }[] = [];
|
|
160
|
+
for (const [hash, entry] of this.entries) {
|
|
161
|
+
out.push({
|
|
162
|
+
hash,
|
|
163
|
+
bytes: entry.tokens.byteLength,
|
|
164
|
+
expiresAtMs: entry.expiresAtMs,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Drop everything. Cheap; only releases JS-side refs to the Float32Arrays. */
|
|
171
|
+
clear(): void {
|
|
172
|
+
this.entries.clear();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Drop entries whose TTL has expired. Returns the number removed. Cheap
|
|
177
|
+
* to call from the arbiter's pressure tick.
|
|
178
|
+
*/
|
|
179
|
+
purgeExpired(nowMs: number = this.now()): number {
|
|
180
|
+
let removed = 0;
|
|
181
|
+
for (const [hash, entry] of this.entries) {
|
|
182
|
+
if (entry.expiresAtMs <= nowMs) {
|
|
183
|
+
this.entries.delete(hash);
|
|
184
|
+
removed++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return removed;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Voice Workbench
|
|
2
|
+
|
|
3
|
+
Tracking issue: [elizaOS/eliza#8785](https://github.com/elizaOS/eliza/issues/8785).
|
|
4
|
+
|
|
5
|
+
elizaOS ships a mature voice pipeline (VAD, streaming ASR, EOT classifier,
|
|
6
|
+
barge-in, diarization, speaker imprint/profiles, Kokoro/OmniVoice TTS) but its
|
|
7
|
+
test harnesses were **fragmented** across five families with no shared scenario
|
|
8
|
+
format, no shared corpus, divergent metric definitions, and a headful surface
|
|
9
|
+
that only covered a single-speaker, single-turn round-trip. The Voice Workbench
|
|
10
|
+
unifies them onto **one scenario format, one metric module, and one report**.
|
|
11
|
+
|
|
12
|
+
> **Capability assessment + evidence map** (what is CI-proven vs hardware/
|
|
13
|
+
> credential-gated, mapped to every #8785 AC and the product-owner questions):
|
|
14
|
+
> [research/VOICE_8785_ASSESSMENT.md](./research/VOICE_8785_ASSESSMENT.md).
|
|
15
|
+
> Research evidence base (pause lengths, VAD, AEC, diarization, owner verification,
|
|
16
|
+
> model landscape, latency math): [research/VOICE_PIPELINE_RESEARCH_2026.md](./research/VOICE_PIPELINE_RESEARCH_2026.md).
|
|
17
|
+
|
|
18
|
+
## Status
|
|
19
|
+
|
|
20
|
+
The schema, corpus generator (incl. acoustic degradation), metric module,
|
|
21
|
+
headless runner, report, scenario-runner `voice` turn kind, headful scenario
|
|
22
|
+
player, and the `voice:workbench` CLI are all **implemented and unit-tested**.
|
|
23
|
+
The real **acoustic-model** lane (`--real`) is implemented as a provisioned
|
|
24
|
+
hardware lane: it generates distinct human voices with ElevenLabs, synthesizes
|
|
25
|
+
agent echoes with the fused local TTS, and scores the corpus through fused ASR,
|
|
26
|
+
WeSpeaker, pyannote, and the shipped respond/self-voice gate. Missing real
|
|
27
|
+
artifacts are a hard failure in `--real`, not all-skipped evidence.
|
|
28
|
+
|
|
29
|
+
### Execution lanes (`voice:workbench`)
|
|
30
|
+
|
|
31
|
+
| Lane | Services | Proves | CI |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| `--mock` (default) | `groundTruthMockServices` echoes ground truth | runner → scorers → report wiring | ✅ always |
|
|
34
|
+
| `--logic` | `realDecisionLogicServices` runs the SHIPPED EOT + respond/echo/bystander/wake-word gate + name extraction + owner inference | the **decision logic** (catches a regression the moment it lands) | ✅ always (no models) |
|
|
35
|
+
| `--real` | ElevenLabs human speech + fused local TTS/ASR + WeSpeaker + pyannote | real WER/DER/EOT/respond/self-voice/owner-security measurements | ✅ provisioned nightly/hardware lane |
|
|
36
|
+
|
|
37
|
+
The `--logic` lane is the key anti-hollow guarantee: it does NOT echo the corpus,
|
|
38
|
+
it runs the same gate the UI client ships (`@elizaos/shared/voice/respond-gate`),
|
|
39
|
+
so the workbench genuinely suppresses a bystander, rejects the agent's echoed
|
|
40
|
+
reply, and holds on a mid-utterance pause — asserted by tests, not assumed.
|
|
41
|
+
|
|
42
|
+
### Implemented (this directory, unit-tested, no native artifacts)
|
|
43
|
+
|
|
44
|
+
| Piece | File | What it is |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| **Scenario schema** | `voice-scenario.ts` | The declarative `VoiceScenario` format: named `participants` (voice→entity), ordered `turns` (`expectRespond`, `expectedTranscript`, `expectedSpeakerLabel`, `expectedEntity`, `pausesMs`), scenario `assertions` (WER/DER/EOT/latency ceilings), and `classes`. Pure `validateVoiceScenario` reports every consistency error at once. |
|
|
47
|
+
| **Metric module (single source of truth)** | `e2e-harness.ts` | All voice scoring lives here. WER is delegated to `@elizaos/shared/voice-wer` (one definition for headless + headful). Added scorers: `scoreEotDecision` (latency p50/p95 + false-trigger/false-suppression rate), `scoreRespondDecision` (FP/FN split), `scoreDiarization` (DER + confusions/misses), `scoreEntityExtraction` (precision/recall/F1), `scoreVoiceEntityMatch` (recognized-voice→entity accuracy). |
|
|
48
|
+
| **Benchmark report** | `voice-workbench-report.ts` | `buildVoiceWorkbenchReport` rolls a matrix of per-scenario scorer results into one gating report (per-metric mean/worst + percentiles, per-scenario verdict). `formatVoiceWorkbenchMarkdown` renders it; `regressionsAgainstBaseline` flags metrics that worsened past a tolerance. |
|
|
49
|
+
| **WER consolidation** | `@elizaos/shared/voice-wer` | The previously-duplicated `wordErrorRate` (`e2e-harness.ts` **and** `voice-selftest-harness.ts`, with subtly different normalization) is now defined once — Unicode-aware, contraction-preserving — and imported by both. |
|
|
50
|
+
| **Acoustic robustness corpus** | `corpus-augment.ts` | Seeded, deterministic degradation DSP: additive room noise (white/pink at a target SNR), Freeverb reverb, far-field attenuation, telephone/low-quality line (band-limit + µ-law), and competing background talkers. Wired into the corpus generator via a per-turn / per-scenario `environment` so a clean scenario and a noisy one share one schema. |
|
|
51
|
+
| **Real-decision-logic adapter** | `workbench-logic-services.ts` | Runs the SHIPPED EOT + respond/echo/bystander/wake-word gate + name extraction over the corpus (no models). The `--logic` lane. |
|
|
52
|
+
| **Real acoustic adapter** | `workbench-real-services.ts` | The `--real` lane: ElevenLabs-generated human speech, fused local agent TTS, fused ASR, WeSpeaker speaker centroids, pyannote speech/overlap labels, live `selfVoiceSimilarity`, owner inference, and the same respond gate. |
|
|
53
|
+
| **Respond/echo gate (single source)** | `@elizaos/shared/voice/respond-gate` | `shouldRespondToVoiceTurn` + `buildVoiceTurnSignal`, promoted out of the UI so the client and the workbench share one definition. The UI re-exports it. |
|
|
54
|
+
| **Owner inference** | `@elizaos/shared/voice/owner-inference` | `resolveOwnerCandidate` — proposes the owner from who speaks most/most-confidently, only when sufficient AND unambiguous, else UNDECIDED. The logic an owner-detection provider/evaluator runs when no owner is enrolled. |
|
|
55
|
+
| **Echo + owner scorers** | `e2e-harness.ts` | `scoreEchoRejection` (agent-echo turns correctly suppressed) and `scoreOwnerSecurity` (owner-vs-intruder accuracy + impostor-accept rate). |
|
|
56
|
+
|
|
57
|
+
Tests: `voice-workbench.test.ts`, `voice-workbench-report.test.ts`,
|
|
58
|
+
`e2e-harness.test.ts`, `corpus-augment.test.ts`,
|
|
59
|
+
`workbench-logic-services.test.ts`, `corpus-generator.test.ts`, and (in shared)
|
|
60
|
+
`voice/owner-inference.test.ts`.
|
|
61
|
+
|
|
62
|
+
### Scenario classes
|
|
63
|
+
|
|
64
|
+
`multi-voice`, `pauses`, `respond-no-respond`, `multi-speaker`, `diarization`,
|
|
65
|
+
`entity-extraction`, `voice-recognition`, `eot`, `transcription-mode`,
|
|
66
|
+
`multi-agent-room`, `long-form-monologue`, **`robustness`** (noise / reverb /
|
|
67
|
+
far-field / low-quality), **`echo-rejection`** (agent self-voice), **`owner-security`**
|
|
68
|
+
(owner vs intruder), **`overlapping-speech`** (interrupting talkers). The 12
|
|
69
|
+
built-in scenarios in `workbench-scenarios.ts` span every class.
|
|
70
|
+
|
|
71
|
+
### Honesty contract
|
|
72
|
+
|
|
73
|
+
A scenario whose corpus/backend artifacts are absent is reported `skipped`,
|
|
74
|
+
**never `pass`** — matching the existing self-test contract. A workbench report
|
|
75
|
+
is `skipped` overall only when *every* scenario was skipped; one ran-and-failed
|
|
76
|
+
scenario makes the whole report `fail`.
|
|
77
|
+
|
|
78
|
+
## Execution modes (the three the schema feeds)
|
|
79
|
+
|
|
80
|
+
1. **Headless** — feed corpus audio through the real services without a browser:
|
|
81
|
+
`/api/asr/local-inference`, `LiveDiarizationSession` / `/api/voice/audio-frames`,
|
|
82
|
+
the `ELIZA_VOICE_EOT_BACKEND` classifier, respond/room decisions over a real
|
|
83
|
+
`AgentRuntime` (scenario-runner PGLite boot), `VOICE_TURN_OBSERVED` /
|
|
84
|
+
`VOICE_ENTITY_BOUND` / `IDENTIFY_SPEAKER`, and `/api/tts/local-inference`.
|
|
85
|
+
2. **Headful** — extend `VoiceSelfTestShell` (`packages/ui/src/voice/voice-selftest/`)
|
|
86
|
+
from a single-turn self-test into a scenario player that drives the real
|
|
87
|
+
client pipeline (capture → ASR → SSE → TTS → playback) turn-by-turn, with
|
|
88
|
+
per-turn machine-readable + DOM-mirrored verdicts.
|
|
89
|
+
3. **Benchmark/report** — a single `voice:workbench` entrypoint that runs the
|
|
90
|
+
matrix in both modes and rolls up via `voice-workbench-report.ts` into one
|
|
91
|
+
JSON + Markdown report with regression baselines.
|
|
92
|
+
|
|
93
|
+
All three consume the **same** `VoiceScenario` and the **same** scorers, so a
|
|
94
|
+
metric is defined exactly once regardless of where the audio is driven.
|
|
95
|
+
|
|
96
|
+
## Consolidation map (what converges here)
|
|
97
|
+
|
|
98
|
+
The workbench is the convergence point for these previously-disjoint harnesses:
|
|
99
|
+
|
|
100
|
+
| Legacy harness | Convergence |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `e2e-harness.ts:wordErrorRate` + `voice-selftest-harness.ts:wordErrorRate` | **Done** — one `@elizaos/shared/voice-wer`. |
|
|
103
|
+
| Pure scoring lib (`e2e-harness.ts`) | **Promoted** to the single metric module (EOT/diarization/respond/entity scorers added). |
|
|
104
|
+
| `packages/app-core/scripts/voice-duet.mjs` (`voice:duet`), `voice-e2e-hardware.ts`, `voice-vad-smoke.ts`, `voice-attribution-smoke.ts`, `lib/duet-bridge.mjs` | Feed measurements into the shared scorers + report (planned absorb). |
|
|
105
|
+
| `packages/benchmarks/voice/three-voice-scenario.mjs` | Corpus-generation precedent the `VoiceScenario` corpus generator extends (planned). |
|
|
106
|
+
| `packages/benchmarks/voicebench/` (TS latency p95/p99) | The report layer mirrors its p95/p99 shape; remains a research bench linked from the workbench. |
|
|
107
|
+
| Per-spec inline `tinyWav()` fixtures (`packages/app/test/ui-smoke/voice-*.spec.ts`) | Replaced by the versioned corpus (planned). |
|
|
108
|
+
|
|
109
|
+
## External / Device Follow-Ups
|
|
110
|
+
|
|
111
|
+
Full detail + why in
|
|
112
|
+
[research/VOICE_8785_ASSESSMENT.md §5](./research/VOICE_8785_ASSESSMENT.md).
|
|
113
|
+
|
|
114
|
+
- **Live cloud STT/TTS round-trip** — ElevenLabs via `/api/v1/voice/*`; needs an
|
|
115
|
+
authenticated Cloud session (the test account returns HTTP 402 — a billing
|
|
116
|
+
state, not a code bug).
|
|
117
|
+
- **PCM-level AEC** — still a product/runtime feature beyond the workbench
|
|
118
|
+
scorer: it needs a time-aligned playback reference and cancellation path in
|
|
119
|
+
the live audio transport, then the workbench can score the resulting echo
|
|
120
|
+
corpus.
|
|
121
|
+
- **Headful real-backend + recorded A/V** — the 10 `voice-workbench-*.spec.ts`
|
|
122
|
+
run with mocked backends; a real-backend headful lane with audio+video capture
|
|
123
|
+
needs a provisioned local backend on the CI host.
|
|
124
|
+
- **iOS device** — blocked on Apple ID provisioning; simulator local-inference is
|
|
125
|
+
Metal-limited.
|
|
126
|
+
|
|
127
|
+
## Open follow-up: PCM-level acoustic echo cancellation
|
|
128
|
+
|
|
129
|
+
Self-echo is caught at the transcript level only (word overlap). The recommended
|
|
130
|
+
next step is an `agentSpeaking` flag + ~1.5 s post-TTS cooldown (cheap, robust),
|
|
131
|
+
then WebRTC AEC3 with a time-aligned reference, then speaker-embedding self-voice
|
|
132
|
+
rejection. The `scoreEchoRejection` scorer is ready to gate it. See
|
|
133
|
+
[research/VOICE_8785_ASSESSMENT.md §6](./research/VOICE_8785_ASSESSMENT.md).
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"overall": "pass",
|
|
4
|
+
"scenariosTotal": 14,
|
|
5
|
+
"scenariosRan": 14,
|
|
6
|
+
"scenariosSkipped": 0,
|
|
7
|
+
"scenarios": [
|
|
8
|
+
{
|
|
9
|
+
"scenarioId": "multi-voice-greeting",
|
|
10
|
+
"classes": ["multi-voice", "diarization"],
|
|
11
|
+
"status": "ran",
|
|
12
|
+
"verdict": "pass",
|
|
13
|
+
"caseCount": 8,
|
|
14
|
+
"failedCaseKinds": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"scenarioId": "respond-vs-bystander",
|
|
18
|
+
"classes": ["respond-no-respond", "multi-speaker"],
|
|
19
|
+
"status": "ran",
|
|
20
|
+
"verdict": "pass",
|
|
21
|
+
"caseCount": 9,
|
|
22
|
+
"failedCaseKinds": []
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"scenarioId": "pauses-midutterance",
|
|
26
|
+
"classes": ["pauses", "eot"],
|
|
27
|
+
"status": "ran",
|
|
28
|
+
"verdict": "pass",
|
|
29
|
+
"caseCount": 7,
|
|
30
|
+
"failedCaseKinds": []
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"scenarioId": "entity-from-speech",
|
|
34
|
+
"classes": ["entity-extraction", "voice-recognition"],
|
|
35
|
+
"status": "ran",
|
|
36
|
+
"verdict": "pass",
|
|
37
|
+
"caseCount": 7,
|
|
38
|
+
"failedCaseKinds": []
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"scenarioId": "transcription-mode-dictation",
|
|
42
|
+
"classes": ["transcription-mode", "long-form-monologue"],
|
|
43
|
+
"status": "ran",
|
|
44
|
+
"verdict": "pass",
|
|
45
|
+
"caseCount": 5,
|
|
46
|
+
"failedCaseKinds": []
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"scenarioId": "multi-agent-room-address",
|
|
50
|
+
"classes": ["multi-agent-room", "respond-no-respond"],
|
|
51
|
+
"status": "ran",
|
|
52
|
+
"verdict": "pass",
|
|
53
|
+
"caseCount": 8,
|
|
54
|
+
"failedCaseKinds": []
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"scenarioId": "noisy-room-commands",
|
|
58
|
+
"classes": ["robustness", "respond-no-respond"],
|
|
59
|
+
"status": "ran",
|
|
60
|
+
"verdict": "pass",
|
|
61
|
+
"caseCount": 8,
|
|
62
|
+
"failedCaseKinds": []
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"scenarioId": "far-field-reverb",
|
|
66
|
+
"classes": ["robustness", "respond-no-respond"],
|
|
67
|
+
"status": "ran",
|
|
68
|
+
"verdict": "pass",
|
|
69
|
+
"caseCount": 6,
|
|
70
|
+
"failedCaseKinds": []
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"scenarioId": "background-talkers",
|
|
74
|
+
"classes": ["robustness", "overlapping-speech", "multi-speaker"],
|
|
75
|
+
"status": "ran",
|
|
76
|
+
"verdict": "pass",
|
|
77
|
+
"caseCount": 6,
|
|
78
|
+
"failedCaseKinds": []
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"scenarioId": "echo-self-trigger",
|
|
82
|
+
"classes": ["echo-rejection", "respond-no-respond"],
|
|
83
|
+
"status": "ran",
|
|
84
|
+
"verdict": "pass",
|
|
85
|
+
"caseCount": 10,
|
|
86
|
+
"failedCaseKinds": []
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"scenarioId": "multi-speaker-name-capture",
|
|
90
|
+
"classes": [
|
|
91
|
+
"diarization",
|
|
92
|
+
"entity-extraction",
|
|
93
|
+
"multi-speaker",
|
|
94
|
+
"voice-recognition"
|
|
95
|
+
],
|
|
96
|
+
"status": "ran",
|
|
97
|
+
"verdict": "pass",
|
|
98
|
+
"caseCount": 13,
|
|
99
|
+
"failedCaseKinds": []
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"scenarioId": "echo-mistranscribed",
|
|
103
|
+
"classes": ["echo-rejection"],
|
|
104
|
+
"status": "ran",
|
|
105
|
+
"verdict": "pass",
|
|
106
|
+
"caseCount": 8,
|
|
107
|
+
"failedCaseKinds": []
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"scenarioId": "owner-enrollment-inference",
|
|
111
|
+
"classes": ["owner-security", "voice-recognition"],
|
|
112
|
+
"status": "ran",
|
|
113
|
+
"verdict": "pass",
|
|
114
|
+
"caseCount": 15,
|
|
115
|
+
"failedCaseKinds": []
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"scenarioId": "owner-vs-intruder",
|
|
119
|
+
"classes": ["owner-security", "respond-no-respond", "multi-speaker"],
|
|
120
|
+
"status": "ran",
|
|
121
|
+
"verdict": "pass",
|
|
122
|
+
"caseCount": 10,
|
|
123
|
+
"failedCaseKinds": []
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"metrics": {
|
|
127
|
+
"wer": {
|
|
128
|
+
"count": 32,
|
|
129
|
+
"mean": 0,
|
|
130
|
+
"worst": 0
|
|
131
|
+
},
|
|
132
|
+
"eotFalseTriggerRate": {
|
|
133
|
+
"count": 14,
|
|
134
|
+
"mean": 0,
|
|
135
|
+
"worst": 0
|
|
136
|
+
},
|
|
137
|
+
"eotLatencyP50Ms": null,
|
|
138
|
+
"eotLatencyP95Ms": null,
|
|
139
|
+
"der": {
|
|
140
|
+
"count": 14,
|
|
141
|
+
"mean": 0,
|
|
142
|
+
"worst": 0
|
|
143
|
+
},
|
|
144
|
+
"respondAccuracy": {
|
|
145
|
+
"count": 14,
|
|
146
|
+
"mean": 1,
|
|
147
|
+
"worst": 1
|
|
148
|
+
},
|
|
149
|
+
"entityF1": {
|
|
150
|
+
"count": 2,
|
|
151
|
+
"mean": 1,
|
|
152
|
+
"worst": 1
|
|
153
|
+
},
|
|
154
|
+
"voiceEntityMatchRate": {
|
|
155
|
+
"count": 14,
|
|
156
|
+
"mean": 1,
|
|
157
|
+
"worst": 1
|
|
158
|
+
},
|
|
159
|
+
"firstAudioMs": {
|
|
160
|
+
"count": 26,
|
|
161
|
+
"mean": 250,
|
|
162
|
+
"worst": 250
|
|
163
|
+
},
|
|
164
|
+
"echoRejectionRate": {
|
|
165
|
+
"count": 2,
|
|
166
|
+
"mean": 1,
|
|
167
|
+
"worst": 1
|
|
168
|
+
},
|
|
169
|
+
"ownerAccuracy": {
|
|
170
|
+
"count": 2,
|
|
171
|
+
"mean": 1,
|
|
172
|
+
"worst": 1
|
|
173
|
+
},
|
|
174
|
+
"impostorAcceptRate": {
|
|
175
|
+
"count": 2,
|
|
176
|
+
"mean": 0,
|
|
177
|
+
"worst": 0
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|