@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,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device-tier classifier — maps a `HardwareProbe` to a `DeviceTier`
|
|
3
|
+
* (`MAX | GOOD | OKAY | POOR`) and produces the warning copy + the
|
|
4
|
+
* recommended local-voice policy the runtime + UI consume.
|
|
5
|
+
*
|
|
6
|
+
* Single-pass classifier (no async I/O). The host probe already happened in
|
|
7
|
+
* `hardware.ts`; this module is pure arithmetic on top of the probe.
|
|
8
|
+
*
|
|
9
|
+
* Numeric thresholds and tier definitions are sourced verbatim from R9
|
|
10
|
+
* (`.swarm/research/R9-memory.md` §3.1) — keep this file's per-tier table
|
|
11
|
+
* in sync with that document.
|
|
12
|
+
*
|
|
13
|
+
* - **MAX** — all voice + LM models can be **parallelized** and held
|
|
14
|
+
* resident at once (~24 GB effective model RAM AND ≥ 16 GB free at
|
|
15
|
+
* session start AND a dGPU with ≥ 16 GB VRAM OR an Apple Silicon
|
|
16
|
+
* Pro/Max/Ultra with ≥ 32 GB shared RAM).
|
|
17
|
+
* - **GOOD** — all models can be loaded into memory and run, but
|
|
18
|
+
* serialized (~12 GB effective model RAM AND ≥ 8 GB free at session
|
|
19
|
+
* start AND a dGPU with ≥ 8 GB VRAM, OR Apple Silicon base ≥ 16 GB,
|
|
20
|
+
* OR x86 CPU-only ≥ 32 GB).
|
|
21
|
+
* - **OKAY** — models load and unload per turn; caching breaks across
|
|
22
|
+
* swaps (~6 GB effective model RAM AND ≥ 3 GB free).
|
|
23
|
+
* - **POOR** — severe issues; refuse local voice, recommend cloud.
|
|
24
|
+
*
|
|
25
|
+
* Mobile clamps to **OKAY** at best regardless of RAM because the OS
|
|
26
|
+
* background-task model breaks long-running local inference (iOS jetsam
|
|
27
|
+
* 3–4 GB ceiling; Android foreground-service requirement).
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { isMobilePlatform } from "@elizaos/shared";
|
|
31
|
+
import {
|
|
32
|
+
type Eliza1Fit,
|
|
33
|
+
// Aliased to a distinct name (no shared `selectBestEliza1Fit*` prefix with the
|
|
34
|
+
// local `selectBestEliza1FitForDevice`) — the mobile Bun.build minifier was
|
|
35
|
+
// observed to mangle the same-prefix pair into a dangling `…Fit2` reference.
|
|
36
|
+
selectBestEliza1Fit as resolveBestEliza1FitForRam,
|
|
37
|
+
} from "@elizaos/shared/local-inference";
|
|
38
|
+
import type { HardwareProbe } from "./types";
|
|
39
|
+
|
|
40
|
+
/** The four device tiers used by the runtime + UI. */
|
|
41
|
+
export type DeviceTier = "MAX" | "GOOD" | "OKAY" | "POOR";
|
|
42
|
+
|
|
43
|
+
/** Tier ordering (higher index = better device). */
|
|
44
|
+
export const DEVICE_TIER_ORDER: ReadonlyArray<DeviceTier> = [
|
|
45
|
+
"POOR",
|
|
46
|
+
"OKAY",
|
|
47
|
+
"GOOD",
|
|
48
|
+
"MAX",
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Numeric thresholds. R9 §3.1 — keep in sync.
|
|
53
|
+
*
|
|
54
|
+
* "Effective model memory" is the memory the model can actually use, in GB.
|
|
55
|
+
* The math mirrors `recommendation.ts:effectiveMemoryGb()`:
|
|
56
|
+
* - Apple Silicon: `totalRamGb`.
|
|
57
|
+
* - Discrete GPU: `max(gpu.totalVramGb, totalRamGb * 0.5)`.
|
|
58
|
+
* - CPU-only: `totalRamGb * 0.5`.
|
|
59
|
+
*/
|
|
60
|
+
export const DEVICE_TIER_THRESHOLDS = {
|
|
61
|
+
MAX: {
|
|
62
|
+
effectiveModelMemoryGb: 24,
|
|
63
|
+
freeRamGbAtSession: 16,
|
|
64
|
+
dGpuMinVramGb: 16,
|
|
65
|
+
appleSiliconMinMemoryGb: 32,
|
|
66
|
+
},
|
|
67
|
+
GOOD: {
|
|
68
|
+
effectiveModelMemoryGb: 12,
|
|
69
|
+
freeRamGbAtSession: 8,
|
|
70
|
+
dGpuMinVramGb: 8,
|
|
71
|
+
appleSiliconMinMemoryGb: 16,
|
|
72
|
+
x86CpuOnlyMinTotalGb: 32,
|
|
73
|
+
},
|
|
74
|
+
OKAY: {
|
|
75
|
+
effectiveModelMemoryGb: 6,
|
|
76
|
+
freeRamGbAtSession: 3,
|
|
77
|
+
minTotalRamGb: 16,
|
|
78
|
+
// A phone can run eliza-1 2B (≈2.5 GB resident) locally — 6 GB+ total /
|
|
79
|
+
// ≈3 GB effective is enough — so an 8 GB Pixel is OKAY (local-capable),
|
|
80
|
+
// not POOR/cloud-only. The desktop floors stay higher.
|
|
81
|
+
mobileMinTotalRamGb: 6,
|
|
82
|
+
mobileEffectiveModelMemoryGb: 3,
|
|
83
|
+
},
|
|
84
|
+
} as const;
|
|
85
|
+
|
|
86
|
+
/** What the runtime should do by default given the tier classification. */
|
|
87
|
+
export type RecommendedMode = "local" | "cloud-with-local-voice" | "cloud-only";
|
|
88
|
+
|
|
89
|
+
/** A complete tier assessment — what the UI renders + what the runtime gates on. */
|
|
90
|
+
export interface DeviceTierAssessment {
|
|
91
|
+
tier: DeviceTier;
|
|
92
|
+
/** Human-readable reasons for the decision. */
|
|
93
|
+
reasons: string[];
|
|
94
|
+
/** The top recommendation for the user, in plain text. */
|
|
95
|
+
topRecommendation: string;
|
|
96
|
+
/** True when local LM (eliza-1) is viable at the user's tier. */
|
|
97
|
+
canRunLocalLm: boolean;
|
|
98
|
+
/** True when the local voice stack (ASR + TTS) is viable. */
|
|
99
|
+
canRunLocalVoice: boolean;
|
|
100
|
+
/** Default backend mode for the user. */
|
|
101
|
+
recommendedMode: RecommendedMode;
|
|
102
|
+
/**
|
|
103
|
+
* The biggest eliza-1 tier (+ 128k-targeted QJL context) that fits this device,
|
|
104
|
+
* or `null` when nothing local fits and the modality should route to Cloud.
|
|
105
|
+
* This is the single forced-model decision the consumer UI renders read-only.
|
|
106
|
+
*/
|
|
107
|
+
recommendedFit: Eliza1Fit | null;
|
|
108
|
+
/** Numeric snapshot to drive UI badges and first-run copy. */
|
|
109
|
+
numericContext: {
|
|
110
|
+
totalRamGb: number;
|
|
111
|
+
freeRamGb: number;
|
|
112
|
+
effectiveModelMemoryGb: number;
|
|
113
|
+
vramGb: number | null;
|
|
114
|
+
cpuCores: number;
|
|
115
|
+
appleSilicon: boolean;
|
|
116
|
+
mobile: boolean;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const MB_PER_GB = 1024;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Compute the memory the model can actually use, in GB. Apple Silicon uses
|
|
124
|
+
* shared memory; discrete-GPU x86 weights VRAM; CPU-only halves total RAM.
|
|
125
|
+
* Mirrors `recommendation.ts:effectiveMemoryGb`.
|
|
126
|
+
*/
|
|
127
|
+
export function effectiveModelMemoryGb(probe: HardwareProbe): number {
|
|
128
|
+
if (probe.appleSilicon) return probe.totalRamGb;
|
|
129
|
+
if (probe.gpu) {
|
|
130
|
+
return Math.max(probe.gpu.totalVramGb, probe.totalRamGb * 0.5);
|
|
131
|
+
}
|
|
132
|
+
return probe.totalRamGb * 0.5;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Mobile OS background-task model makes large local tiers unsafe regardless of how
|
|
137
|
+
* much RAM the phone reports, so cap mobile fit at the 4B floor. A strong phone may
|
|
138
|
+
* run 4B; a typical one lands on 2B; both still flow through `selectBestEliza1Fit`.
|
|
139
|
+
*/
|
|
140
|
+
const MOBILE_FIT_CEILING_GB = 6;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Largest context window we advertise on a phone. A full 128k QJL KV cache does
|
|
144
|
+
* not fit alongside the weights in a handset's real free RAM (the resident agent +
|
|
145
|
+
* WebView + OS leave well under `totalRam × 0.5`), so we clamp mobile windows here
|
|
146
|
+
* even when the coarse RAM math would allow more.
|
|
147
|
+
*/
|
|
148
|
+
const MOBILE_CONTEXT_CEILING = 65536; // 64k
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* True when this host should be treated as a phone for fit purposes. The on-device
|
|
152
|
+
* bun agent's hardware probe often reports `platform: "linux"` with no `mobile`
|
|
153
|
+
* field (it sees the bionic/musl env as linux), so the probe alone under-detects
|
|
154
|
+
* Android/iOS — fall back to the runtime `ELIZA_PLATFORM` signal so the mobile cap
|
|
155
|
+
* still applies. Without this, a high-RAM phone would be handed a 9B+ tier.
|
|
156
|
+
*/
|
|
157
|
+
function isMobileHost(probe: HardwareProbe): boolean {
|
|
158
|
+
return isMobile(probe) || isMobilePlatform();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* The canonical "biggest eliza-1 that fits this device" decision: normalize the
|
|
163
|
+
* hardware probe to usable model memory, then pick the largest tier at a 128k QJL
|
|
164
|
+
* window (or a downscaled 2B window, or `null` → route to Cloud). This is the one
|
|
165
|
+
* function callers should use to answer "what local model runs here" — it always
|
|
166
|
+
* applies TurboQuant weights + the QJL KV cache and targets a 128k window. On
|
|
167
|
+
* mobile it caps the tier at 4B and the context at 64k (a phone cannot hold a 128k
|
|
168
|
+
* cache).
|
|
169
|
+
*/
|
|
170
|
+
export function selectBestEliza1FitForDevice(
|
|
171
|
+
probe: HardwareProbe,
|
|
172
|
+
): Eliza1Fit | null {
|
|
173
|
+
const mobile = isMobileHost(probe);
|
|
174
|
+
let memGb = effectiveModelMemoryGb(probe);
|
|
175
|
+
if (mobile) memGb = Math.min(memGb, MOBILE_FIT_CEILING_GB);
|
|
176
|
+
let fit: Eliza1Fit | null;
|
|
177
|
+
try {
|
|
178
|
+
fit = resolveBestEliza1FitForRam(memGb);
|
|
179
|
+
} catch (err) {
|
|
180
|
+
// `recommendedFit` is an advisory hint, never a routing gate — but
|
|
181
|
+
// `classifyDeviceTier` (which embeds it) IS called on the routing hot path.
|
|
182
|
+
// A mobile-bundle minifier artifact has been observed to leave a dangling
|
|
183
|
+
// reference at this cross-module call, so guard it: degrade to no
|
|
184
|
+
// recommendation rather than letting an undefined-symbol error crash the
|
|
185
|
+
// whole device-tier assessment (and with it the AUTO router) on-device.
|
|
186
|
+
console.warn(
|
|
187
|
+
`[device-tier] recommendedFit unavailable: ${err instanceof Error ? err.message : String(err)}`,
|
|
188
|
+
);
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
if (fit && mobile && fit.contextLength > MOBILE_CONTEXT_CEILING) {
|
|
192
|
+
return {
|
|
193
|
+
...fit,
|
|
194
|
+
contextLength: MOBILE_CONTEXT_CEILING,
|
|
195
|
+
contextDownscaled: true,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return fit;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Treat the host as a mobile device. Mobile clamps to OKAY at best
|
|
203
|
+
* regardless of RAM because the OS background-task model breaks
|
|
204
|
+
* long-running local inference.
|
|
205
|
+
*/
|
|
206
|
+
function isMobile(probe: HardwareProbe): boolean {
|
|
207
|
+
return (
|
|
208
|
+
probe.mobile?.platform === "ios" || probe.mobile?.platform === "android"
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Compute the CPU SIMD baseline. The hardware probe has no direct AVX2 field
|
|
214
|
+
* today for x86_64, so Linux/Win x86_64 ≥ 4 cores qualifies.
|
|
215
|
+
*
|
|
216
|
+
* **arm64 / ARMv8-A architecturally MANDATES NEON (Advanced SIMD)** — every arm64
|
|
217
|
+
* phone has it — so we trust the architecture rather than the probe's
|
|
218
|
+
* `cpuFeatures.neon` (the on-device os-fallback probe omits it, which used to
|
|
219
|
+
* misclassify every Pixel as POOR → cloud-only even though it runs local 2B fine).
|
|
220
|
+
* We do not support 32-bit ARM (ARMv7), so it (and any other non-x64 arch) is
|
|
221
|
+
* treated as unsupported.
|
|
222
|
+
*
|
|
223
|
+
* This is a coarse heuristic; the precise check belongs in the FFI layer
|
|
224
|
+
* (it can `cpuid` the actual flags). The tier classifier just refuses POOR
|
|
225
|
+
* when the probe is clearly under-equipped.
|
|
226
|
+
*/
|
|
227
|
+
function hasAvx2Baseline(probe: HardwareProbe): boolean {
|
|
228
|
+
if (probe.arch === "arm64") return probe.cpuCores >= 4;
|
|
229
|
+
if (probe.arch !== "x64") return false; // 32-bit ARM + others: unsupported
|
|
230
|
+
return probe.cpuCores >= 4;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* The free-RAM gate at session start. R9 §3.3: only a *secondary* gate that
|
|
235
|
+
* can demote a device by one tier when `freeRamGb < totalRamGb * 0.25`.
|
|
236
|
+
* Never promotes.
|
|
237
|
+
*/
|
|
238
|
+
function freeRamDemotion(probe: HardwareProbe): boolean {
|
|
239
|
+
return probe.freeRamGb < probe.totalRamGb * 0.25;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Apple-silicon 8 GB clamp. R9 §3.4: hard ceiling at OKAY. */
|
|
243
|
+
function isAppleSilicon8gb(probe: HardwareProbe): boolean {
|
|
244
|
+
return probe.appleSilicon && probe.totalRamGb <= 9; // 8 GB rounded.
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The single-pass classifier. Returns a complete assessment including the
|
|
249
|
+
* tier, the reasons, the recommended default mode, and the numeric context
|
|
250
|
+
* the UI needs to render the badge.
|
|
251
|
+
*
|
|
252
|
+
* The classifier is pure: same input → same output, no I/O, no clock.
|
|
253
|
+
*/
|
|
254
|
+
export function classifyDeviceTier(probe: HardwareProbe): DeviceTierAssessment {
|
|
255
|
+
const reasons: string[] = [];
|
|
256
|
+
const effective = effectiveModelMemoryGb(probe);
|
|
257
|
+
// isMobileHost (not isMobile) so a phone whose bun-agent probe reports
|
|
258
|
+
// platform:"linux" with no mobile field still gets mobile thresholds + clamp.
|
|
259
|
+
const mobile = isMobileHost(probe);
|
|
260
|
+
const avx2 = hasAvx2Baseline(probe);
|
|
261
|
+
const vramGb = probe.gpu?.totalVramGb ?? null;
|
|
262
|
+
const cpuCores = probe.cpuCores;
|
|
263
|
+
const totalRamGb = probe.totalRamGb;
|
|
264
|
+
const freeRamGb = probe.freeRamGb;
|
|
265
|
+
|
|
266
|
+
let tier: DeviceTier = classifyRawTier({
|
|
267
|
+
probe,
|
|
268
|
+
effective,
|
|
269
|
+
avx2,
|
|
270
|
+
mobile,
|
|
271
|
+
reasons,
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// Apple Silicon 8 GB clamp — never higher than OKAY.
|
|
275
|
+
if (isAppleSilicon8gb(probe) && tierRank(tier) > tierRank("OKAY")) {
|
|
276
|
+
reasons.push("Apple Silicon 8 GB models clamp to OKAY");
|
|
277
|
+
tier = "OKAY";
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Mobile clamp — at best OKAY regardless of RAM (iOS jetsam, Android
|
|
281
|
+
// foreground-service cost). R9 §6.
|
|
282
|
+
if (mobile && tierRank(tier) > tierRank("OKAY")) {
|
|
283
|
+
reasons.push(
|
|
284
|
+
probe.mobile?.platform === "ios"
|
|
285
|
+
? "iOS clamps to OKAY (jetsam ~3-4 GB ceiling, background-audio only)"
|
|
286
|
+
: "Android clamps to OKAY (foreground-service required for continuous mic)",
|
|
287
|
+
);
|
|
288
|
+
tier = "OKAY";
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Free-RAM gate at session start — secondary demotion only.
|
|
292
|
+
if (freeRamDemotion(probe) && tierRank(tier) > tierRank("POOR")) {
|
|
293
|
+
reasons.push(
|
|
294
|
+
`Low free RAM at session start: ${freeRamGb.toFixed(1)} GB free / ${totalRamGb.toFixed(1)} GB total — demoting one tier`,
|
|
295
|
+
);
|
|
296
|
+
tier = previousTier(tier);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const canRunLocalLm = tier !== "POOR";
|
|
300
|
+
const canRunLocalVoice = tier === "MAX" || tier === "GOOD";
|
|
301
|
+
let recommendedMode: RecommendedMode;
|
|
302
|
+
if (tier === "MAX" || tier === "GOOD") recommendedMode = "local";
|
|
303
|
+
else if (tier === "OKAY")
|
|
304
|
+
recommendedMode = mobile ? "cloud-with-local-voice" : "local";
|
|
305
|
+
else recommendedMode = "cloud-only";
|
|
306
|
+
|
|
307
|
+
if (mobile && tier !== "POOR") {
|
|
308
|
+
// On mobile we default to cloud TTS+ASR per R9 §6.3; only turn-detector
|
|
309
|
+
// + VAD + wake-word run locally by default.
|
|
310
|
+
recommendedMode = "cloud-with-local-voice";
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const topRecommendation = topRecommendationFor(tier, mobile);
|
|
314
|
+
|
|
315
|
+
return {
|
|
316
|
+
tier,
|
|
317
|
+
reasons,
|
|
318
|
+
topRecommendation,
|
|
319
|
+
canRunLocalLm,
|
|
320
|
+
canRunLocalVoice,
|
|
321
|
+
recommendedMode,
|
|
322
|
+
recommendedFit: selectBestEliza1FitForDevice(probe),
|
|
323
|
+
numericContext: {
|
|
324
|
+
totalRamGb,
|
|
325
|
+
freeRamGb,
|
|
326
|
+
effectiveModelMemoryGb: effective,
|
|
327
|
+
vramGb,
|
|
328
|
+
cpuCores,
|
|
329
|
+
appleSilicon: probe.appleSilicon,
|
|
330
|
+
mobile,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
interface ClassifyArgs {
|
|
336
|
+
probe: HardwareProbe;
|
|
337
|
+
effective: number;
|
|
338
|
+
avx2: boolean;
|
|
339
|
+
mobile: boolean;
|
|
340
|
+
reasons: string[];
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function classifyRawTier(args: ClassifyArgs): DeviceTier {
|
|
344
|
+
const { probe, effective, avx2, mobile, reasons } = args;
|
|
345
|
+
const vramGb = probe.gpu?.totalVramGb ?? 0;
|
|
346
|
+
const totalRamGb = probe.totalRamGb;
|
|
347
|
+
const freeRamGb = probe.freeRamGb;
|
|
348
|
+
const cpuCores = probe.cpuCores;
|
|
349
|
+
|
|
350
|
+
if (!avx2) {
|
|
351
|
+
reasons.push("No AVX2 baseline (or < 4 CPU cores)");
|
|
352
|
+
return "POOR";
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
const max = DEVICE_TIER_THRESHOLDS.MAX;
|
|
356
|
+
const good = DEVICE_TIER_THRESHOLDS.GOOD;
|
|
357
|
+
const okay = DEVICE_TIER_THRESHOLDS.OKAY;
|
|
358
|
+
|
|
359
|
+
// MAX gate.
|
|
360
|
+
const meetsMaxEffective = effective >= max.effectiveModelMemoryGb;
|
|
361
|
+
const meetsMaxFree = freeRamGb >= max.freeRamGbAtSession;
|
|
362
|
+
const meetsMaxGpu = vramGb >= max.dGpuMinVramGb;
|
|
363
|
+
const meetsMaxAppleSilicon =
|
|
364
|
+
probe.appleSilicon && totalRamGb >= max.appleSiliconMinMemoryGb;
|
|
365
|
+
|
|
366
|
+
if (
|
|
367
|
+
!mobile &&
|
|
368
|
+
meetsMaxEffective &&
|
|
369
|
+
meetsMaxFree &&
|
|
370
|
+
(meetsMaxGpu || meetsMaxAppleSilicon)
|
|
371
|
+
) {
|
|
372
|
+
reasons.push(
|
|
373
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${
|
|
374
|
+
meetsMaxAppleSilicon
|
|
375
|
+
? `Apple Silicon ${totalRamGb.toFixed(0)} GB shared`
|
|
376
|
+
: `${vramGb} GB VRAM`
|
|
377
|
+
}`,
|
|
378
|
+
);
|
|
379
|
+
return "MAX";
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// GOOD gate.
|
|
383
|
+
const meetsGoodEffective = effective >= good.effectiveModelMemoryGb;
|
|
384
|
+
const meetsGoodFree = freeRamGb >= good.freeRamGbAtSession;
|
|
385
|
+
const meetsGoodGpu = vramGb >= good.dGpuMinVramGb;
|
|
386
|
+
const meetsGoodAppleSilicon =
|
|
387
|
+
probe.appleSilicon && totalRamGb >= good.appleSiliconMinMemoryGb;
|
|
388
|
+
const meetsGoodCpu =
|
|
389
|
+
!probe.gpu &&
|
|
390
|
+
!probe.appleSilicon &&
|
|
391
|
+
totalRamGb >= good.x86CpuOnlyMinTotalGb &&
|
|
392
|
+
cpuCores >= 4;
|
|
393
|
+
|
|
394
|
+
if (
|
|
395
|
+
!mobile &&
|
|
396
|
+
meetsGoodEffective &&
|
|
397
|
+
meetsGoodFree &&
|
|
398
|
+
(meetsGoodGpu || meetsGoodAppleSilicon || meetsGoodCpu)
|
|
399
|
+
) {
|
|
400
|
+
reasons.push(
|
|
401
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${
|
|
402
|
+
meetsGoodAppleSilicon
|
|
403
|
+
? `Apple Silicon ${totalRamGb.toFixed(0)} GB shared`
|
|
404
|
+
: meetsGoodGpu
|
|
405
|
+
? `${vramGb} GB VRAM`
|
|
406
|
+
: `${totalRamGb.toFixed(0)} GB RAM, ${cpuCores} cores`
|
|
407
|
+
}`,
|
|
408
|
+
);
|
|
409
|
+
return "GOOD";
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// OKAY gate. Mobile uses lower effective/total floors — a phone runs 2B fine.
|
|
413
|
+
const meetsOkayEffective =
|
|
414
|
+
effective >=
|
|
415
|
+
(mobile ? okay.mobileEffectiveModelMemoryGb : okay.effectiveModelMemoryGb);
|
|
416
|
+
const meetsOkayFree = freeRamGb >= okay.freeRamGbAtSession;
|
|
417
|
+
const meetsOkayTotal =
|
|
418
|
+
totalRamGb >= (mobile ? okay.mobileMinTotalRamGb : okay.minTotalRamGb);
|
|
419
|
+
|
|
420
|
+
if (meetsOkayEffective && meetsOkayFree && meetsOkayTotal) {
|
|
421
|
+
reasons.push(
|
|
422
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${totalRamGb.toFixed(1)} GB total`,
|
|
423
|
+
);
|
|
424
|
+
return "OKAY";
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
reasons.push(
|
|
428
|
+
`Below OKAY thresholds — effective ${effective.toFixed(1)} GB / free ${freeRamGb.toFixed(1)} GB / total ${totalRamGb.toFixed(1)} GB`,
|
|
429
|
+
);
|
|
430
|
+
return "POOR";
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
function tierRank(tier: DeviceTier): number {
|
|
434
|
+
return DEVICE_TIER_ORDER.indexOf(tier);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
function previousTier(tier: DeviceTier): DeviceTier {
|
|
438
|
+
const idx = tierRank(tier);
|
|
439
|
+
if (idx <= 0) return "POOR";
|
|
440
|
+
return DEVICE_TIER_ORDER[idx - 1];
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
function topRecommendationFor(tier: DeviceTier, mobile: boolean): string {
|
|
444
|
+
if (mobile) {
|
|
445
|
+
switch (tier) {
|
|
446
|
+
case "MAX":
|
|
447
|
+
case "GOOD":
|
|
448
|
+
return "Run local voice; cloud LM optional for the largest tiers.";
|
|
449
|
+
case "OKAY":
|
|
450
|
+
return "Use cloud voice (cloud TTS + ASR). Local turn detection + VAD + wake-word stay on-device.";
|
|
451
|
+
case "POOR":
|
|
452
|
+
return "Use cloud mode. This device is below the local-voice budget.";
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
switch (tier) {
|
|
456
|
+
case "MAX":
|
|
457
|
+
return "Run everything locally with all models held in memory in parallel.";
|
|
458
|
+
case "GOOD":
|
|
459
|
+
return "Run everything locally; models stay loaded but run one at a time.";
|
|
460
|
+
case "OKAY":
|
|
461
|
+
return "Local voice works but models swap in/out between turns. Consider cloud voice for faster turnaround.";
|
|
462
|
+
case "POOR":
|
|
463
|
+
return "Use cloud mode. Local responses will be very slow on this device.";
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Warning-copy strings for each tier. The exact prose comes from R9 §7;
|
|
469
|
+
* I10 surfaces these via the `voice-tier.json` i18n bundle. Keep this in
|
|
470
|
+
* sync with `packages/ui/src/i18n/voice-tier.json`.
|
|
471
|
+
*/
|
|
472
|
+
export const TIER_WARNING_COPY: Readonly<
|
|
473
|
+
Record<
|
|
474
|
+
DeviceTier,
|
|
475
|
+
{
|
|
476
|
+
header: string;
|
|
477
|
+
body: string;
|
|
478
|
+
}
|
|
479
|
+
>
|
|
480
|
+
> = {
|
|
481
|
+
MAX: {
|
|
482
|
+
header: "Your device is in the MAX tier for on-device Eliza.",
|
|
483
|
+
body: "Your device can run every local model in parallel: text, voice, ASR, turn detection, speaker recognition, and emotion — all resident at the same time. Expected first-audio latency under 250 ms.",
|
|
484
|
+
},
|
|
485
|
+
GOOD: {
|
|
486
|
+
header: "Your device is in the GOOD tier for on-device Eliza.",
|
|
487
|
+
body: "Your device can keep every local model loaded but will run them one at a time. Text responses, voice synthesis, and ASR are all local; only one heavy model is active per turn. Expected first-audio latency 300–600 ms.",
|
|
488
|
+
},
|
|
489
|
+
OKAY: {
|
|
490
|
+
header: "Your device is in the OKAY tier for on-device Eliza.",
|
|
491
|
+
body: "Your device will load and unload local models as they're needed. Caching does not survive a model swap, so the first response after voice + image-gen at once will be slow. Expected first-audio latency 600–1500 ms. Consider cloud voice for faster turnaround.",
|
|
492
|
+
},
|
|
493
|
+
POOR: {
|
|
494
|
+
header: "This device is in the POOR tier for on-device Eliza.",
|
|
495
|
+
body: "This device is below the local-voice memory budget. Local responses will be very slow and may fail to load. We recommend Cloud mode — your turn-detection and VAD still run locally for privacy.",
|
|
496
|
+
},
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
/** Convenience: total RAM in MB. */
|
|
500
|
+
export function totalRamMb(probe: HardwareProbe): number {
|
|
501
|
+
return Math.round(probe.totalRamGb * MB_PER_GB);
|
|
502
|
+
}
|