@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,47 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { readSystemMemory } from "./system-memory.js";
|
|
3
|
+
|
|
4
|
+
const SAMPLE_MEMINFO = `MemTotal: 16277856 kB
|
|
5
|
+
MemFree: 812044 kB
|
|
6
|
+
MemAvailable: 10342988 kB
|
|
7
|
+
Buffers: 204512 kB
|
|
8
|
+
Cached: 7651200 kB
|
|
9
|
+
SwapTotal: 0 kB
|
|
10
|
+
`;
|
|
11
|
+
|
|
12
|
+
describe("readSystemMemory", () => {
|
|
13
|
+
it("prefers MemAvailable + MemTotal from /proc/meminfo", () => {
|
|
14
|
+
const mem = readSystemMemory(() => SAMPLE_MEMINFO);
|
|
15
|
+
expect(mem.totalBytes).toBe(16_277_856 * 1024);
|
|
16
|
+
// MemAvailable (10.3 GB), NOT MemFree (0.8 GB) — the whole point.
|
|
17
|
+
expect(mem.freeBytes).toBe(10_342_988 * 1024);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("does not regress to MemFree when reclaimable cache is large", () => {
|
|
21
|
+
const mem = readSystemMemory(() => SAMPLE_MEMINFO);
|
|
22
|
+
const memFreeBytes = 812_044 * 1024;
|
|
23
|
+
expect(mem.freeBytes).toBeGreaterThan(memFreeBytes * 10);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("falls back to os when the reader returns null (non-Linux)", () => {
|
|
27
|
+
const mem = readSystemMemory(() => null);
|
|
28
|
+
expect(mem.totalBytes).toBeGreaterThan(0);
|
|
29
|
+
expect(mem.freeBytes).toBeGreaterThan(0);
|
|
30
|
+
expect(mem.freeBytes).toBeLessThanOrEqual(mem.totalBytes);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("falls back to os when MemAvailable is absent (pre-3.14 kernel)", () => {
|
|
34
|
+
const noAvail = "MemTotal: 16277856 kB\nMemFree: 812044 kB\n";
|
|
35
|
+
const mem = readSystemMemory(() => noAvail);
|
|
36
|
+
// No MemAvailable → os fallback, so freeBytes is the live os.freemem(),
|
|
37
|
+
// not the parsed MemFree.
|
|
38
|
+
expect(mem.totalBytes).toBeGreaterThan(0);
|
|
39
|
+
expect(mem.freeBytes).toBeGreaterThan(0);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("falls back to os on malformed meminfo", () => {
|
|
43
|
+
const mem = readSystemMemory(() => "garbage\nnot meminfo\n");
|
|
44
|
+
expect(mem.totalBytes).toBeGreaterThan(0);
|
|
45
|
+
expect(mem.freeBytes).toBeGreaterThan(0);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System memory reader — the single source of "how much RAM can we actually
|
|
3
|
+
* allocate right now" for the local-inference memory arbiter and pressure
|
|
4
|
+
* sources.
|
|
5
|
+
*
|
|
6
|
+
* Node's `os.freemem()` returns the kernel's `MemFree` on Linux, which counts
|
|
7
|
+
* only never-touched pages and EXCLUDES reclaimable page cache + slab. On
|
|
8
|
+
* Android — where the app process runs under a large page cache — `MemFree`
|
|
9
|
+
* undercounts allocatable memory by gigabytes, so a `MemFree`-driven arbiter
|
|
10
|
+
* evicts models it didn't need to and refuses loads that would have fit.
|
|
11
|
+
*
|
|
12
|
+
* `/proc/meminfo`'s `MemAvailable` is the kernel's own estimate of how much
|
|
13
|
+
* memory is available for starting new applications without swapping (free +
|
|
14
|
+
* reclaimable cache/slab, minus the low watermark). That is exactly the number
|
|
15
|
+
* the arbiter wants. Read it on Linux/Android; fall back to `os.freemem()` /
|
|
16
|
+
* `os.totalmem()` everywhere else (macOS, Windows) or if `/proc/meminfo` is
|
|
17
|
+
* unreadable or pre-3.14 (no `MemAvailable`).
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { readFileSync } from "node:fs";
|
|
21
|
+
import os from "node:os";
|
|
22
|
+
|
|
23
|
+
export interface SystemMemory {
|
|
24
|
+
freeBytes: number;
|
|
25
|
+
totalBytes: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Injectable for tests: returns the raw `/proc/meminfo` text, or null. */
|
|
29
|
+
export type MeminfoReader = () => string | null;
|
|
30
|
+
|
|
31
|
+
const defaultMeminfoReader: MeminfoReader = () => {
|
|
32
|
+
if (os.platform() !== "linux") return null;
|
|
33
|
+
try {
|
|
34
|
+
return readFileSync("/proc/meminfo", "utf8");
|
|
35
|
+
} catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function parseMeminfoKb(text: string, key: string): number | null {
|
|
41
|
+
// Lines look like: "MemAvailable: 12345678 kB"
|
|
42
|
+
const match = new RegExp(`^${key}:\\s+(\\d+)\\s*kB`, "m").exec(text);
|
|
43
|
+
if (!match) return null;
|
|
44
|
+
const kb = Number.parseInt(match[1], 10);
|
|
45
|
+
return Number.isFinite(kb) ? kb : null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Read available + total system memory in bytes. Prefers `/proc/meminfo`
|
|
50
|
+
* `MemAvailable`/`MemTotal` on Linux; falls back to `os.freemem()/totalmem()`.
|
|
51
|
+
*
|
|
52
|
+
* @param read injectable meminfo reader (tests). Defaults to reading
|
|
53
|
+
* `/proc/meminfo` on Linux and returning null elsewhere.
|
|
54
|
+
*/
|
|
55
|
+
export function readSystemMemory(
|
|
56
|
+
read: MeminfoReader = defaultMeminfoReader,
|
|
57
|
+
): SystemMemory {
|
|
58
|
+
const text = read();
|
|
59
|
+
if (text) {
|
|
60
|
+
const availKb = parseMeminfoKb(text, "MemAvailable");
|
|
61
|
+
const totalKb = parseMeminfoKb(text, "MemTotal");
|
|
62
|
+
if (availKb !== null && totalKb !== null && totalKb > 0) {
|
|
63
|
+
return { freeBytes: availKb * 1024, totalBytes: totalKb * 1024 };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { freeBytes: os.freemem(), totalBytes: os.totalmem() };
|
|
67
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the `TRANSCRIPTION` model handler priority + provider hint
|
|
3
|
+
* semantics on `AgentRuntime`. These exercise the same `registerModel`
|
|
4
|
+
* machinery used by plugin-elizacloud (remote OpenAI Whisper API) and the
|
|
5
|
+
* local fused Gemma ASR handler so callers know exactly:
|
|
6
|
+
*
|
|
7
|
+
* - which handler wins when priorities tie (first-registered),
|
|
8
|
+
* - how an explicit `priority` overrides that,
|
|
9
|
+
* - that a `provider` hint to `useModel` overrides priority entirely,
|
|
10
|
+
* - that the runtime does NOT auto-fall-through on handler errors,
|
|
11
|
+
* - and how a caller can implement an explicit try/catch fallback.
|
|
12
|
+
*
|
|
13
|
+
* The test is intentionally provider-agnostic — it registers fake handlers
|
|
14
|
+
* named "local" and "openai" so the contract is observable without booting
|
|
15
|
+
* any real ASR backend.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { describe, expect, it } from "vitest";
|
|
19
|
+
|
|
20
|
+
import { InMemoryDatabaseAdapter } from "../../../../packages/core/src/database/inMemoryAdapter";
|
|
21
|
+
import { AgentRuntime } from "../../../../packages/core/src/runtime";
|
|
22
|
+
import { ModelType } from "../../../../packages/core/src/types";
|
|
23
|
+
|
|
24
|
+
interface TranscriptionParams {
|
|
25
|
+
audio?: Float32Array | Uint8Array | Buffer | string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface TestRuntimeCtx {
|
|
29
|
+
runtime: AgentRuntime;
|
|
30
|
+
calls: string[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function makeRuntime(): TestRuntimeCtx {
|
|
34
|
+
const runtime = new AgentRuntime({
|
|
35
|
+
character: {
|
|
36
|
+
name: "TranscriptionPriorityTest",
|
|
37
|
+
bio: "asr-priority test",
|
|
38
|
+
settings: {},
|
|
39
|
+
} as never,
|
|
40
|
+
adapter: new InMemoryDatabaseAdapter(),
|
|
41
|
+
logLevel: "fatal",
|
|
42
|
+
});
|
|
43
|
+
const calls: string[] = [];
|
|
44
|
+
return { runtime, calls };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function makeHandler(
|
|
48
|
+
calls: string[],
|
|
49
|
+
label: string,
|
|
50
|
+
result: string | (() => string),
|
|
51
|
+
options: { throws?: boolean } = {},
|
|
52
|
+
) {
|
|
53
|
+
return async (_runtime: unknown, _params: unknown): Promise<string> => {
|
|
54
|
+
calls.push(label);
|
|
55
|
+
if (options.throws) {
|
|
56
|
+
throw new Error(`${label} handler failed`);
|
|
57
|
+
}
|
|
58
|
+
return typeof result === "function" ? result() : result;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
describe("TRANSCRIPTION handler priority on AgentRuntime", () => {
|
|
63
|
+
it("local Gemma ASR wins over remote OpenAI Whisper by registration order when priorities tie", async () => {
|
|
64
|
+
const { runtime, calls } = makeRuntime();
|
|
65
|
+
runtime.registerModel(
|
|
66
|
+
ModelType.TRANSCRIPTION,
|
|
67
|
+
makeHandler(calls, "local", "local transcript"),
|
|
68
|
+
"eliza-local-inference",
|
|
69
|
+
0,
|
|
70
|
+
);
|
|
71
|
+
runtime.registerModel(
|
|
72
|
+
ModelType.TRANSCRIPTION,
|
|
73
|
+
makeHandler(calls, "openai", "openai transcript"),
|
|
74
|
+
"openai",
|
|
75
|
+
0,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const text = await runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
79
|
+
audio: new Float32Array(160),
|
|
80
|
+
} as TranscriptionParams as never);
|
|
81
|
+
|
|
82
|
+
expect(text).toBe("local transcript");
|
|
83
|
+
expect(calls).toEqual(["local"]);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("explicit higher priority always wins regardless of registration order", async () => {
|
|
87
|
+
const { runtime, calls } = makeRuntime();
|
|
88
|
+
runtime.registerModel(
|
|
89
|
+
ModelType.TRANSCRIPTION,
|
|
90
|
+
makeHandler(calls, "remote", "remote transcript"),
|
|
91
|
+
"openai",
|
|
92
|
+
100,
|
|
93
|
+
);
|
|
94
|
+
runtime.registerModel(
|
|
95
|
+
ModelType.TRANSCRIPTION,
|
|
96
|
+
makeHandler(calls, "local", "local transcript"),
|
|
97
|
+
"eliza-local-inference",
|
|
98
|
+
0,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
// Remote wins because priority 100 > 0.
|
|
102
|
+
let text = await runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
103
|
+
audio: new Float32Array(160),
|
|
104
|
+
} as TranscriptionParams as never);
|
|
105
|
+
expect(text).toBe("remote transcript");
|
|
106
|
+
expect(calls).toEqual(["remote"]);
|
|
107
|
+
|
|
108
|
+
// Re-register local with a higher priority — now local wins.
|
|
109
|
+
runtime.registerModel(
|
|
110
|
+
ModelType.TRANSCRIPTION,
|
|
111
|
+
makeHandler(calls, "local-priority", "local-priority transcript"),
|
|
112
|
+
"eliza-local-inference",
|
|
113
|
+
200,
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
text = await runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
117
|
+
audio: new Float32Array(160),
|
|
118
|
+
} as TranscriptionParams as never);
|
|
119
|
+
expect(text).toBe("local-priority transcript");
|
|
120
|
+
expect(calls).toEqual(["remote", "local-priority"]);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("provider hint to useModel overrides priority", async () => {
|
|
124
|
+
const { runtime, calls } = makeRuntime();
|
|
125
|
+
runtime.registerModel(
|
|
126
|
+
ModelType.TRANSCRIPTION,
|
|
127
|
+
makeHandler(calls, "local", "local transcript"),
|
|
128
|
+
"eliza-local-inference",
|
|
129
|
+
200,
|
|
130
|
+
);
|
|
131
|
+
runtime.registerModel(
|
|
132
|
+
ModelType.TRANSCRIPTION,
|
|
133
|
+
makeHandler(calls, "openai", "openai transcript"),
|
|
134
|
+
"openai",
|
|
135
|
+
0,
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
// Default useModel: local wins (priority 200 > 0).
|
|
139
|
+
let text = await runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
140
|
+
audio: new Float32Array(160),
|
|
141
|
+
} as TranscriptionParams as never);
|
|
142
|
+
expect(text).toBe("local transcript");
|
|
143
|
+
|
|
144
|
+
// Explicit provider hint flips it to openai despite the priority gap.
|
|
145
|
+
text = await runtime.useModel(
|
|
146
|
+
ModelType.TRANSCRIPTION,
|
|
147
|
+
{ audio: new Float32Array(160) } as TranscriptionParams as never,
|
|
148
|
+
"openai",
|
|
149
|
+
);
|
|
150
|
+
expect(text).toBe("openai transcript");
|
|
151
|
+
expect(calls).toEqual(["local", "openai"]);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it("runtime does NOT auto-fall-through on handler errors", async () => {
|
|
155
|
+
const { runtime, calls } = makeRuntime();
|
|
156
|
+
runtime.registerModel(
|
|
157
|
+
ModelType.TRANSCRIPTION,
|
|
158
|
+
makeHandler(calls, "local", "should never reach this", { throws: true }),
|
|
159
|
+
"eliza-local-inference",
|
|
160
|
+
200,
|
|
161
|
+
);
|
|
162
|
+
runtime.registerModel(
|
|
163
|
+
ModelType.TRANSCRIPTION,
|
|
164
|
+
makeHandler(calls, "openai", "openai transcript"),
|
|
165
|
+
"openai",
|
|
166
|
+
0,
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
await expect(
|
|
170
|
+
runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
171
|
+
audio: new Float32Array(160),
|
|
172
|
+
} as TranscriptionParams as never),
|
|
173
|
+
).rejects.toThrow(/local handler failed/);
|
|
174
|
+
// The remote handler should NOT have been invoked — there is no
|
|
175
|
+
// implicit fallback chain on the runtime.
|
|
176
|
+
expect(calls).toEqual(["local"]);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("caller can implement fallback via try/catch + provider hint", async () => {
|
|
180
|
+
const { runtime, calls } = makeRuntime();
|
|
181
|
+
runtime.registerModel(
|
|
182
|
+
ModelType.TRANSCRIPTION,
|
|
183
|
+
makeHandler(calls, "local", "boom", { throws: true }),
|
|
184
|
+
"eliza-local-inference",
|
|
185
|
+
200,
|
|
186
|
+
);
|
|
187
|
+
runtime.registerModel(
|
|
188
|
+
ModelType.TRANSCRIPTION,
|
|
189
|
+
makeHandler(calls, "openai", "openai transcript"),
|
|
190
|
+
"openai",
|
|
191
|
+
0,
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
let result: string;
|
|
195
|
+
try {
|
|
196
|
+
result = (await runtime.useModel(ModelType.TRANSCRIPTION, {
|
|
197
|
+
audio: new Float32Array(160),
|
|
198
|
+
} as TranscriptionParams as never)) as string;
|
|
199
|
+
} catch {
|
|
200
|
+
// Caller-controlled fallback: explicit retry with provider hint.
|
|
201
|
+
result = (await runtime.useModel(
|
|
202
|
+
ModelType.TRANSCRIPTION,
|
|
203
|
+
{ audio: new Float32Array(160) } as TranscriptionParams as never,
|
|
204
|
+
"openai",
|
|
205
|
+
)) as string;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
expect(result).toBe("openai transcript");
|
|
209
|
+
expect(calls).toEqual(["local", "openai"]);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local inference type re-exports.
|
|
3
|
+
*
|
|
4
|
+
* The canonical definitions live in `@elizaos/shared/local-inference`.
|
|
5
|
+
* This shim preserves the historical import path
|
|
6
|
+
* `../services/local-inference/types` for server-side code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
type ActiveModelState,
|
|
11
|
+
AGENT_MODEL_SLOTS,
|
|
12
|
+
type AgentModelSlot,
|
|
13
|
+
type CatalogModel,
|
|
14
|
+
type CatalogQuantizationId,
|
|
15
|
+
type CatalogQuantizationMatrix,
|
|
16
|
+
type CatalogQuantizationVariant,
|
|
17
|
+
type CpuFeatureProbe,
|
|
18
|
+
classifyCatalogModelRuntimeClass,
|
|
19
|
+
classifyInstalledModelRuntimeClass,
|
|
20
|
+
type DownloadEvent,
|
|
21
|
+
type DownloadJob,
|
|
22
|
+
type DownloadState,
|
|
23
|
+
type GpuProfile,
|
|
24
|
+
type GpuProfileId,
|
|
25
|
+
type HardwareFitLevel,
|
|
26
|
+
type HardwareProbe,
|
|
27
|
+
type InstalledModel,
|
|
28
|
+
type KvCacheType,
|
|
29
|
+
type LocalInferenceDownloadStatus,
|
|
30
|
+
type LocalInferenceReadiness,
|
|
31
|
+
type LocalInferenceSlotReadiness,
|
|
32
|
+
type LocalRuntimeAcceleration,
|
|
33
|
+
type LocalRuntimeBackend,
|
|
34
|
+
type LocalRuntimeKernel,
|
|
35
|
+
type LocalRuntimeOptimizations,
|
|
36
|
+
type MobileHardwareProbe,
|
|
37
|
+
type ModelAssignments,
|
|
38
|
+
type ModelBucket,
|
|
39
|
+
type ModelCategory,
|
|
40
|
+
type ModelHubSnapshot,
|
|
41
|
+
type OpenVinoDeviceKind,
|
|
42
|
+
type OpenVinoHardwareProbe,
|
|
43
|
+
type RuntimeClass,
|
|
44
|
+
TEXT_GENERATION_SLOTS,
|
|
45
|
+
type TextGenerationSlot,
|
|
46
|
+
type TokenizerFamily,
|
|
47
|
+
withRuntimeClass,
|
|
48
|
+
} from "@elizaos/shared";
|
|
49
|
+
|
|
50
|
+
/** RAM requirements for a model bundle. */
|
|
51
|
+
export interface RamBudget {
|
|
52
|
+
/** Minimum RAM the bundle will boot under, in megabytes. */
|
|
53
|
+
minMb: number;
|
|
54
|
+
/** RAM the bundle expects for nominal workloads, in megabytes. */
|
|
55
|
+
recommendedMb: number;
|
|
56
|
+
/** Where the numbers came from. `manifest` only when both came from
|
|
57
|
+
* a validated `eliza-1.manifest.json` next to the installed bundle. */
|
|
58
|
+
source: "manifest" | "catalog";
|
|
59
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { createVerifyBundleOnDevice } from "./verify-on-device";
|
|
3
|
+
|
|
4
|
+
const engineMock = {
|
|
5
|
+
load: vi.fn(async () => {}),
|
|
6
|
+
generate: vi.fn(async () => "ok"),
|
|
7
|
+
ensureActiveBundleVoiceReady: vi.fn(async () => ({})),
|
|
8
|
+
startVoice: vi.fn(() => {}),
|
|
9
|
+
armVoice: vi.fn(async () => {}),
|
|
10
|
+
synthesizeSpeech: vi.fn(async () => new Uint8Array([1, 2, 3, 4])),
|
|
11
|
+
triggerBargeIn: vi.fn(() => {}),
|
|
12
|
+
stopVoice: vi.fn(async () => {}),
|
|
13
|
+
unload: vi.fn(async () => {}),
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const manifestState: { voiceFiles: number } = { voiceFiles: 0 };
|
|
17
|
+
|
|
18
|
+
function verifier() {
|
|
19
|
+
const deps = {
|
|
20
|
+
engine: engineMock,
|
|
21
|
+
readFile: vi.fn(async () => "{}"),
|
|
22
|
+
parseManifest: () => ({
|
|
23
|
+
files: {
|
|
24
|
+
voice: Array.from({ length: manifestState.voiceFiles }, (_, i) => ({
|
|
25
|
+
path: `tts/v${i}.gguf`,
|
|
26
|
+
sha256: "x",
|
|
27
|
+
})),
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
} as unknown as Parameters<typeof createVerifyBundleOnDevice>[0];
|
|
31
|
+
return createVerifyBundleOnDevice(deps);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const ARGS = {
|
|
35
|
+
modelId: "eliza-1-2b",
|
|
36
|
+
bundleRoot: "/tmp/bundle",
|
|
37
|
+
manifestPath: "/tmp/bundle/eliza-1.manifest.json",
|
|
38
|
+
textGgufPath: "/tmp/bundle/text/eliza-1-2b.gguf",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
vi.clearAllMocks();
|
|
43
|
+
manifestState.voiceFiles = 0;
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe("verifyBundleOnDevice", () => {
|
|
47
|
+
it("loads, runs a 1-token text gen, and unloads for a text-only bundle", async () => {
|
|
48
|
+
manifestState.voiceFiles = 0;
|
|
49
|
+
await verifier()(ARGS);
|
|
50
|
+
expect(engineMock.load).toHaveBeenCalledWith(ARGS.textGgufPath, {
|
|
51
|
+
modelPath: ARGS.textGgufPath,
|
|
52
|
+
modelId: ARGS.modelId,
|
|
53
|
+
});
|
|
54
|
+
expect(engineMock.generate).toHaveBeenCalledWith(
|
|
55
|
+
expect.objectContaining({ maxTokens: 1 }),
|
|
56
|
+
);
|
|
57
|
+
expect(engineMock.ensureActiveBundleVoiceReady).not.toHaveBeenCalled();
|
|
58
|
+
expect(engineMock.startVoice).not.toHaveBeenCalled();
|
|
59
|
+
expect(engineMock.unload).toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("also runs a 1-phrase voice gen + barge-in cancel when the bundle ships voice", async () => {
|
|
63
|
+
manifestState.voiceFiles = 1;
|
|
64
|
+
await verifier()(ARGS);
|
|
65
|
+
expect(engineMock.ensureActiveBundleVoiceReady).toHaveBeenCalled();
|
|
66
|
+
expect(engineMock.startVoice).not.toHaveBeenCalled();
|
|
67
|
+
expect(engineMock.armVoice).not.toHaveBeenCalled();
|
|
68
|
+
expect(engineMock.synthesizeSpeech).toHaveBeenCalled();
|
|
69
|
+
expect(engineMock.triggerBargeIn).toHaveBeenCalled();
|
|
70
|
+
expect(engineMock.stopVoice).toHaveBeenCalled();
|
|
71
|
+
expect(engineMock.unload).toHaveBeenCalled();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("rethrows verify failures and still unloads", async () => {
|
|
75
|
+
manifestState.voiceFiles = 0;
|
|
76
|
+
engineMock.generate.mockRejectedValueOnce(new Error("kernel missing"));
|
|
77
|
+
await expect(verifier()(ARGS)).rejects.toThrow("kernel missing");
|
|
78
|
+
expect(engineMock.unload).toHaveBeenCalled();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("fails verify when voice synthesis yields no PCM", async () => {
|
|
82
|
+
manifestState.voiceFiles = 1;
|
|
83
|
+
engineMock.synthesizeSpeech.mockResolvedValueOnce(new Uint8Array(0));
|
|
84
|
+
await expect(verifier()(ARGS)).rejects.toThrow(/no PCM bytes/);
|
|
85
|
+
expect(engineMock.stopVoice).toHaveBeenCalled();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine-backed `verifyOnDevice` hook for the Eliza-1 downloader
|
|
3
|
+
* (`packages/inference/AGENTS.md` §7): after a bundle is materialized and
|
|
4
|
+
* every file's sha256 checks out, run one cold smoke pass —
|
|
5
|
+
*
|
|
6
|
+
* load → 1-token text generation → (if the bundle ships voice assets)
|
|
7
|
+
* 1-phrase voice generation → barge-in cancel → unload
|
|
8
|
+
*
|
|
9
|
+
* — before the bundle is allowed to auto-fill an empty default slot. The
|
|
10
|
+
* downloader stays decoupled from the engine: it only knows the
|
|
11
|
+
* {@link VerifyBundleOnDevice} shape; this module is the concrete
|
|
12
|
+
* implementation the service layer injects.
|
|
13
|
+
*
|
|
14
|
+
* Failure semantics: any error throws. The downloader catches it and leaves
|
|
15
|
+
* `bundleVerifiedAt` unset, so an unverified bundle is registered but does
|
|
16
|
+
* not become the recommended default. There is no "verified anyway" path —
|
|
17
|
+
* voice is mandatory for Eliza-1 voice tiers (AGENTS.md §3), so a bundle
|
|
18
|
+
* whose fused voice ABI is not loadable on this device legitimately fails
|
|
19
|
+
* verify until the fused build is present.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import fs from "node:fs/promises";
|
|
23
|
+
import type { VerifyBundleOnDevice } from "./downloader";
|
|
24
|
+
import { localInferenceEngine } from "./engine";
|
|
25
|
+
import { parseManifestOrThrow } from "./manifest";
|
|
26
|
+
|
|
27
|
+
/** A short, deterministic prompt — we only care that one token comes back. */
|
|
28
|
+
const VERIFY_PROMPT = "Reply with one word.";
|
|
29
|
+
/** A short phrase to drive a single TTS dispatch through the voice scheduler. */
|
|
30
|
+
const VERIFY_PHRASE = "Ready.";
|
|
31
|
+
|
|
32
|
+
type VerifyEngine = Pick<
|
|
33
|
+
typeof localInferenceEngine,
|
|
34
|
+
| "load"
|
|
35
|
+
| "generate"
|
|
36
|
+
| "ensureActiveBundleVoiceReady"
|
|
37
|
+
| "startVoice"
|
|
38
|
+
| "armVoice"
|
|
39
|
+
| "synthesizeSpeech"
|
|
40
|
+
| "triggerBargeIn"
|
|
41
|
+
| "stopVoice"
|
|
42
|
+
| "unload"
|
|
43
|
+
>;
|
|
44
|
+
|
|
45
|
+
interface VerifyBundleOnDeviceDeps {
|
|
46
|
+
readonly engine: VerifyEngine;
|
|
47
|
+
readonly readFile: typeof fs.readFile;
|
|
48
|
+
readonly parseManifest: typeof parseManifestOrThrow;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function manifestDeclaresVoice(
|
|
52
|
+
manifestPath: string,
|
|
53
|
+
deps: Pick<VerifyBundleOnDeviceDeps, "readFile" | "parseManifest">,
|
|
54
|
+
): Promise<boolean> {
|
|
55
|
+
const raw = await deps.readFile(manifestPath, "utf8");
|
|
56
|
+
const manifest = deps.parseManifest(JSON.parse(String(raw)));
|
|
57
|
+
// Voice tiers ship a TTS GGUF under `files.voice`; the ASR/VAD files are
|
|
58
|
+
// gated on top of that. If there is no voice file, this is a text-only
|
|
59
|
+
// bundle and the voice leg of the smoke is skipped.
|
|
60
|
+
return manifest.files.voice.length > 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async function verifyText(
|
|
64
|
+
engine: VerifyEngine,
|
|
65
|
+
modelId: string,
|
|
66
|
+
textGgufPath: string,
|
|
67
|
+
): Promise<void> {
|
|
68
|
+
await engine.load(textGgufPath, { modelPath: textGgufPath, modelId });
|
|
69
|
+
const out = await engine.generate({
|
|
70
|
+
prompt: VERIFY_PROMPT,
|
|
71
|
+
maxTokens: 1,
|
|
72
|
+
temperature: 0,
|
|
73
|
+
});
|
|
74
|
+
if (typeof out !== "string") {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`[verify-on-device] text generation returned ${typeof out}, expected string`,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function verifyVoice(
|
|
82
|
+
engine: VerifyEngine,
|
|
83
|
+
_bundleRoot: string,
|
|
84
|
+
): Promise<void> {
|
|
85
|
+
await engine.ensureActiveBundleVoiceReady();
|
|
86
|
+
try {
|
|
87
|
+
// One real synthesis through the voice bridge.
|
|
88
|
+
const pcm = await engine.synthesizeSpeech(VERIFY_PHRASE);
|
|
89
|
+
if (!(pcm instanceof Uint8Array) || pcm.byteLength === 0) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
"[verify-on-device] voice synthesis produced no PCM bytes",
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
// Barge-in cancel must be accepted without throwing — exercises the
|
|
95
|
+
// hard-stop path the voice loop uses to abort speculative TTS.
|
|
96
|
+
engine.triggerBargeIn();
|
|
97
|
+
} finally {
|
|
98
|
+
await engine.stopVoice();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function createVerifyBundleOnDevice(
|
|
103
|
+
deps: Partial<VerifyBundleOnDeviceDeps> = {},
|
|
104
|
+
): VerifyBundleOnDevice {
|
|
105
|
+
const engine = deps.engine ?? localInferenceEngine;
|
|
106
|
+
const manifestDeps = {
|
|
107
|
+
readFile: deps.readFile ?? fs.readFile,
|
|
108
|
+
parseManifest: deps.parseManifest ?? parseManifestOrThrow,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return async ({ modelId, bundleRoot, manifestPath, textGgufPath }) => {
|
|
112
|
+
try {
|
|
113
|
+
await verifyText(engine, modelId, textGgufPath);
|
|
114
|
+
if (await manifestDeclaresVoice(manifestPath, manifestDeps)) {
|
|
115
|
+
await verifyVoice(engine, bundleRoot);
|
|
116
|
+
}
|
|
117
|
+
} finally {
|
|
118
|
+
// Always release the model the verify pass loaded — the bundle is not
|
|
119
|
+
// "active" yet, and the active-model coordinator owns load/unload from
|
|
120
|
+
// here on.
|
|
121
|
+
await engine.unload().catch(() => {});
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export const verifyBundleOnDevice: VerifyBundleOnDevice =
|
|
127
|
+
createVerifyBundleOnDevice();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export of the shared model-file verification module. The canonical
|
|
3
|
+
* implementation lives in `@elizaos/shared/local-inference` because both
|
|
4
|
+
* the server (`@elizaos/app-core`) and the UI client (`@elizaos/ui`)
|
|
5
|
+
* compute the same SHA256 / GGUF-magic checks against on-disk models.
|
|
6
|
+
*/
|
|
7
|
+
export {
|
|
8
|
+
__registryPathForTests,
|
|
9
|
+
hashFile,
|
|
10
|
+
type VerifyResult,
|
|
11
|
+
type VerifyState,
|
|
12
|
+
verifyInstalledModel,
|
|
13
|
+
} from "@elizaos/shared/local-inference/verify";
|