@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,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy engine + latency + cost tracking for cross-provider routing.
|
|
3
|
+
*
|
|
4
|
+
* The policy engine sits on top of the `handlerRegistry` and, given a
|
|
5
|
+
* model type and a user-selected policy, decides which provider's handler
|
|
6
|
+
* should serve the next request. The router-handler (registered at top
|
|
7
|
+
* priority) calls `pickProvider` to make that decision.
|
|
8
|
+
*
|
|
9
|
+
* Policies:
|
|
10
|
+
* - manual — honour `preferredProvider`; when no pref set, fall
|
|
11
|
+
* through to the runtime's native priority order
|
|
12
|
+
* (highest registered priority wins).
|
|
13
|
+
* - auto — capability-driven: consult the device-tier assessment AND
|
|
14
|
+
* the live device signals (thermal + decode throughput). Route
|
|
15
|
+
* local only when the device can comfortably run the slot's
|
|
16
|
+
* modality (text → `canRunLocalLm`, voice → `canRunLocalVoice`)
|
|
17
|
+
* AND it is not currently throttled / below the TPS budget.
|
|
18
|
+
* Otherwise pick the highest-priority cloud provider.
|
|
19
|
+
* - cheapest — pick the provider with the lowest per-token cost.
|
|
20
|
+
* - fastest — pick the provider with the lowest tracked p50 latency
|
|
21
|
+
* (needs at least a few samples; falls back to native).
|
|
22
|
+
* - prefer-local — try local first; if it fails or has no handler,
|
|
23
|
+
* fall through to the next-best non-local. A device that
|
|
24
|
+
* cannot run the slot's modality softly demotes the local
|
|
25
|
+
* pick so an unusable on-device path isn't forced.
|
|
26
|
+
* - local-only — always on-device: never returns a cloud provider. When no
|
|
27
|
+
* local handler is registered, returns `null` so the caller
|
|
28
|
+
* surfaces "no local provider" instead of silently routing
|
|
29
|
+
* to a paid API.
|
|
30
|
+
* - cloud-only — always off-device: never returns a local provider. Returns
|
|
31
|
+
* `null` when only local handlers exist.
|
|
32
|
+
* - round-robin — distribute load evenly across eligible providers.
|
|
33
|
+
*
|
|
34
|
+
* Latency is tracked in a ring buffer per provider per model type. Cost
|
|
35
|
+
* is a static table of published per-million-token rates; local providers
|
|
36
|
+
* are $0. Neither is exact — the goal is "good enough to discriminate"
|
|
37
|
+
* rather than dollar-accurate billing.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
import type { DeviceTierAssessment } from "./device-tier";
|
|
41
|
+
import type { HandlerRegistration } from "./handler-registry";
|
|
42
|
+
import type { LiveDeviceSignals } from "./live-signals";
|
|
43
|
+
import { liveSignalsDemoteLocal } from "./live-signals";
|
|
44
|
+
import type { RoutingPolicy } from "./routing-preferences";
|
|
45
|
+
import type { AgentModelSlot } from "./types";
|
|
46
|
+
|
|
47
|
+
const RING_SIZE = 32;
|
|
48
|
+
|
|
49
|
+
/** Provider IDs that serve inference on-device (no network round-trip). */
|
|
50
|
+
const LOCAL_PROVIDERS: ReadonlySet<string> = new Set([
|
|
51
|
+
"eliza-local-inference",
|
|
52
|
+
"capacitor-llama",
|
|
53
|
+
"eliza-device-bridge",
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
function isLocalProvider(provider: string): boolean {
|
|
57
|
+
return LOCAL_PROVIDERS.has(provider);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Voice slots use `canRunLocalVoice`; text slots use `canRunLocalLm`. */
|
|
61
|
+
const VOICE_SLOTS: ReadonlySet<AgentModelSlot> = new Set([
|
|
62
|
+
"TEXT_TO_SPEECH",
|
|
63
|
+
"TRANSCRIPTION",
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The first registered local handler in priority order, or null. Prefers the
|
|
68
|
+
* in-process / Capacitor backends over the device bridge, matching the
|
|
69
|
+
* `prefer-local` precedence.
|
|
70
|
+
*/
|
|
71
|
+
function findLocalCandidate(
|
|
72
|
+
candidates: HandlerRegistration[],
|
|
73
|
+
): HandlerRegistration | null {
|
|
74
|
+
const inProcess = candidates.find(
|
|
75
|
+
(c) =>
|
|
76
|
+
c.provider === "eliza-local-inference" ||
|
|
77
|
+
c.provider === "capacitor-llama",
|
|
78
|
+
);
|
|
79
|
+
if (inProcess) return inProcess;
|
|
80
|
+
return candidates.find((c) => c.provider === "eliza-device-bridge") ?? null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Whether the device can run this slot's modality locally *at all*, per the
|
|
85
|
+
* static tier assessment. Voice slots gate on `canRunLocalVoice` (the ASR + TTS
|
|
86
|
+
* budget is stricter than text); every other slot gates on `canRunLocalLm`.
|
|
87
|
+
* This is the per-modality independence AC4 requires — one assessment can yield
|
|
88
|
+
* local text + cloud voice (OKAY desktop) simultaneously.
|
|
89
|
+
*/
|
|
90
|
+
function modalityViableForSlot(
|
|
91
|
+
assessment: DeviceTierAssessment,
|
|
92
|
+
slot: AgentModelSlot | undefined,
|
|
93
|
+
): boolean {
|
|
94
|
+
return slot !== undefined && VOICE_SLOTS.has(slot)
|
|
95
|
+
? assessment.canRunLocalVoice
|
|
96
|
+
: assessment.canRunLocalLm;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Whether `auto` should default this slot to local: the modality must be viable
|
|
101
|
+
* AND the device must be a generally local-first machine (recommended "local",
|
|
102
|
+
* or a MAX/GOOD tier). A device that merely *can* run the modality but is steered
|
|
103
|
+
* to cloud by the classifier does not get a local default.
|
|
104
|
+
*/
|
|
105
|
+
function tierFavoursLocalForSlot(
|
|
106
|
+
assessment: DeviceTierAssessment | null,
|
|
107
|
+
slot: AgentModelSlot | undefined,
|
|
108
|
+
): boolean {
|
|
109
|
+
if (!assessment) return false;
|
|
110
|
+
if (!modalityViableForSlot(assessment, slot)) return false;
|
|
111
|
+
return (
|
|
112
|
+
assessment.recommendedMode === "local" ||
|
|
113
|
+
assessment.tier === "MAX" ||
|
|
114
|
+
assessment.tier === "GOOD"
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
interface LatencySample {
|
|
119
|
+
durationMs: number;
|
|
120
|
+
at: number;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
class RingBuffer {
|
|
124
|
+
private buf: LatencySample[] = [];
|
|
125
|
+
push(sample: LatencySample): void {
|
|
126
|
+
this.buf.push(sample);
|
|
127
|
+
if (this.buf.length > RING_SIZE) this.buf.shift();
|
|
128
|
+
}
|
|
129
|
+
p50(): number | null {
|
|
130
|
+
if (this.buf.length === 0) return null;
|
|
131
|
+
const sorted = [...this.buf].map((s) => s.durationMs).sort((a, b) => a - b);
|
|
132
|
+
return sorted[Math.floor(sorted.length / 2)] ?? null;
|
|
133
|
+
}
|
|
134
|
+
size(): number {
|
|
135
|
+
return this.buf.length;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Relative per-million-token costs. Keep conservative: the policy only
|
|
141
|
+
* needs the order to be right for product defaults.
|
|
142
|
+
* Local / device-bridge = 0 because the user already paid for the hardware.
|
|
143
|
+
* Subscriptions get a small marginal cost, direct APIs sit above that,
|
|
144
|
+
* and Eliza Cloud is last because managed fallback is the most expensive
|
|
145
|
+
* path for the user.
|
|
146
|
+
*/
|
|
147
|
+
const COST_PER_MILLION_TOKENS: Partial<
|
|
148
|
+
Record<string, { input: number; output: number }>
|
|
149
|
+
> = {
|
|
150
|
+
"eliza-local-inference": { input: 0, output: 0 },
|
|
151
|
+
"eliza-device-bridge": { input: 0, output: 0 },
|
|
152
|
+
"capacitor-llama": { input: 0, output: 0 },
|
|
153
|
+
"anthropic-subscription": { input: 0.1, output: 0.1 },
|
|
154
|
+
"openai-codex": { input: 0.1, output: 0.1 },
|
|
155
|
+
"openai-subscription": { input: 0.1, output: 0.1 },
|
|
156
|
+
anthropic: { input: 3, output: 15 },
|
|
157
|
+
openai: { input: 2.5, output: 10 },
|
|
158
|
+
grok: { input: 5, output: 15 },
|
|
159
|
+
google: { input: 1.25, output: 5 },
|
|
160
|
+
"google-genai": { input: 1.25, output: 5 },
|
|
161
|
+
moonshot: { input: 1.25, output: 5 },
|
|
162
|
+
kimi: { input: 1.25, output: 5 },
|
|
163
|
+
nearai: { input: 0.85, output: 3.3 },
|
|
164
|
+
zai: { input: 1.25, output: 5 },
|
|
165
|
+
glm: { input: 1.25, output: 5 },
|
|
166
|
+
mistral: { input: 2, output: 6 },
|
|
167
|
+
elizacloud: { input: 30, output: 60 },
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
interface ProviderStats {
|
|
171
|
+
latency: Map<string /* modelType */, RingBuffer>;
|
|
172
|
+
lastPicked: Map<string /* modelType */, number /* timestamp */>;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
class PolicyEngine {
|
|
176
|
+
private stats = new Map<string /* provider */, ProviderStats>();
|
|
177
|
+
|
|
178
|
+
private statsFor(provider: string): ProviderStats {
|
|
179
|
+
let s = this.stats.get(provider);
|
|
180
|
+
if (!s) {
|
|
181
|
+
s = { latency: new Map(), lastPicked: new Map() };
|
|
182
|
+
this.stats.set(provider, s);
|
|
183
|
+
}
|
|
184
|
+
return s;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
recordLatency(provider: string, modelType: string, durationMs: number): void {
|
|
188
|
+
const s = this.statsFor(provider);
|
|
189
|
+
let buf = s.latency.get(modelType);
|
|
190
|
+
if (!buf) {
|
|
191
|
+
buf = new RingBuffer();
|
|
192
|
+
s.latency.set(modelType, buf);
|
|
193
|
+
}
|
|
194
|
+
buf.push({ durationMs, at: Date.now() });
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
recordPick(provider: string, modelType: string): void {
|
|
198
|
+
this.statsFor(provider).lastPicked.set(modelType, Date.now());
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
p50(provider: string, modelType: string): number | null {
|
|
202
|
+
return this.statsFor(provider).latency.get(modelType)?.p50() ?? null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
lastPicked(provider: string, modelType: string): number | null {
|
|
206
|
+
return this.statsFor(provider).lastPicked.get(modelType) ?? null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
costOf(provider: string): number | null {
|
|
210
|
+
const c = COST_PER_MILLION_TOKENS[provider];
|
|
211
|
+
if (!c) return null;
|
|
212
|
+
// Weighted sum (3:1 output:input is a typical chat ratio). Treat missing
|
|
213
|
+
// output pricing as same as input.
|
|
214
|
+
return c.input * 0.25 + c.output * 0.75;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Pick a provider for this (modelType, policy) given the registry.
|
|
219
|
+
* Returns the HandlerRegistration whose handler the router-handler
|
|
220
|
+
* should dispatch to, or null if no eligible handler exists.
|
|
221
|
+
*
|
|
222
|
+
* `preferredProvider` is only honoured for policy === "manual".
|
|
223
|
+
*/
|
|
224
|
+
pickProvider(args: {
|
|
225
|
+
modelType: string;
|
|
226
|
+
policy: RoutingPolicy;
|
|
227
|
+
preferredProvider: string | null;
|
|
228
|
+
candidates: HandlerRegistration[];
|
|
229
|
+
/** Provider ID of the router itself — always excluded from candidates. */
|
|
230
|
+
selfProvider: string;
|
|
231
|
+
/**
|
|
232
|
+
* The agent slot being routed. Drives the per-modality `auto` gate:
|
|
233
|
+
* voice slots (`TEXT_TO_SPEECH` / `TRANSCRIPTION`) check
|
|
234
|
+
* `canRunLocalVoice`; every other slot checks `canRunLocalLm`.
|
|
235
|
+
*/
|
|
236
|
+
slot?: AgentModelSlot;
|
|
237
|
+
/**
|
|
238
|
+
* Static device-capability assessment from `classifyDeviceTier()`.
|
|
239
|
+
* Consulted by `auto` (per-modality gate) and used as a soft hint by
|
|
240
|
+
* `prefer-local`. Null when the host hasn't probed hardware yet — `auto`
|
|
241
|
+
* then falls back to cloud.
|
|
242
|
+
*/
|
|
243
|
+
deviceTier?: DeviceTierAssessment | null;
|
|
244
|
+
/**
|
|
245
|
+
* Live device signals (thermal + decode throughput). When the device is
|
|
246
|
+
* currently throttled or below the TPS budget, `auto` demotes a local
|
|
247
|
+
* pick to cloud even if the static tier favoured local. Null = no live
|
|
248
|
+
* demotion (the static decision stands).
|
|
249
|
+
*/
|
|
250
|
+
liveSignals?: LiveDeviceSignals | null;
|
|
251
|
+
}): HandlerRegistration | null {
|
|
252
|
+
const eligible = args.candidates
|
|
253
|
+
.filter((c) => c.provider !== args.selfProvider)
|
|
254
|
+
.slice()
|
|
255
|
+
// Defensive sort — real callers already sort, but test fixtures and
|
|
256
|
+
// non-registry callers might not, and a silent "pick-wrong" would be
|
|
257
|
+
// worse than the extra O(n log n).
|
|
258
|
+
.sort((a, b) => b.priority - a.priority);
|
|
259
|
+
if (eligible.length === 0) return null;
|
|
260
|
+
|
|
261
|
+
switch (args.policy) {
|
|
262
|
+
case "manual": {
|
|
263
|
+
if (args.preferredProvider) {
|
|
264
|
+
const match = eligible.find(
|
|
265
|
+
(c) => c.provider === args.preferredProvider,
|
|
266
|
+
);
|
|
267
|
+
if (match) return match;
|
|
268
|
+
}
|
|
269
|
+
// Fallback: highest native priority.
|
|
270
|
+
return eligible[0] ?? null;
|
|
271
|
+
}
|
|
272
|
+
case "auto": {
|
|
273
|
+
// Capability-driven: route local only when the device can run this
|
|
274
|
+
// slot's modality (per-modality gate: text → canRunLocalLm, voice →
|
|
275
|
+
// canRunLocalVoice) AND it is not currently throttled / below the TPS
|
|
276
|
+
// budget. Otherwise pick the highest-priority cloud provider.
|
|
277
|
+
const local = findLocalCandidate(eligible);
|
|
278
|
+
const tierFavours = tierFavoursLocalForSlot(
|
|
279
|
+
args.deviceTier ?? null,
|
|
280
|
+
args.slot,
|
|
281
|
+
);
|
|
282
|
+
const liveDemotes =
|
|
283
|
+
args.liveSignals != null && liveSignalsDemoteLocal(args.liveSignals);
|
|
284
|
+
if (local && tierFavours && !liveDemotes) {
|
|
285
|
+
return local;
|
|
286
|
+
}
|
|
287
|
+
const cloud = eligible.find((c) => !isLocalProvider(c.provider));
|
|
288
|
+
return cloud ?? eligible[0] ?? null;
|
|
289
|
+
}
|
|
290
|
+
case "local-only": {
|
|
291
|
+
// Hard local guarantee: only ever return an on-device handler. When
|
|
292
|
+
// none is registered we return null so the dispatch loop fails
|
|
293
|
+
// closed — it never silently falls through to a cloud provider.
|
|
294
|
+
// This is the per-slot canonical replacement for ELIZA_LOCAL_ONLY.
|
|
295
|
+
return findLocalCandidate(eligible);
|
|
296
|
+
}
|
|
297
|
+
case "cloud-only": {
|
|
298
|
+
// Force cloud: never dispatch to an on-device backend. Returns null
|
|
299
|
+
// (→ dispatch fails closed) when only local handlers are registered.
|
|
300
|
+
return eligible.find((c) => !isLocalProvider(c.provider)) ?? null;
|
|
301
|
+
}
|
|
302
|
+
case "cheapest": {
|
|
303
|
+
const ranked = [...eligible].sort((a, b) => {
|
|
304
|
+
const ca = this.costOf(a.provider) ?? Number.POSITIVE_INFINITY;
|
|
305
|
+
const cb = this.costOf(b.provider) ?? Number.POSITIVE_INFINITY;
|
|
306
|
+
if (ca !== cb) return ca - cb;
|
|
307
|
+
return b.priority - a.priority;
|
|
308
|
+
});
|
|
309
|
+
return ranked[0] ?? null;
|
|
310
|
+
}
|
|
311
|
+
case "fastest": {
|
|
312
|
+
const ranked = [...eligible].sort((a, b) => {
|
|
313
|
+
const la = this.p50(a.provider, args.modelType);
|
|
314
|
+
const lb = this.p50(b.provider, args.modelType);
|
|
315
|
+
// Untracked providers get Infinity → deprioritised until we
|
|
316
|
+
// have samples. First call always falls through to native
|
|
317
|
+
// priority via the tie-break.
|
|
318
|
+
const va = la ?? Number.POSITIVE_INFINITY;
|
|
319
|
+
const vb = lb ?? Number.POSITIVE_INFINITY;
|
|
320
|
+
if (va !== vb) return va - vb;
|
|
321
|
+
return b.priority - a.priority;
|
|
322
|
+
});
|
|
323
|
+
return ranked[0] ?? null;
|
|
324
|
+
}
|
|
325
|
+
case "prefer-local": {
|
|
326
|
+
const local = findLocalCandidate(eligible);
|
|
327
|
+
// Soft capability hint: a device that cannot run this slot's
|
|
328
|
+
// modality demotes the local pick so we don't force an unusable
|
|
329
|
+
// on-device path. When no assessment is present, keep the
|
|
330
|
+
// historical local-first behaviour.
|
|
331
|
+
const tier = args.deviceTier ?? null;
|
|
332
|
+
const localUnviable =
|
|
333
|
+
tier !== null && !modalityViableForSlot(tier, args.slot);
|
|
334
|
+
if (local && !localUnviable) return local;
|
|
335
|
+
const cloud = eligible.find((c) => !isLocalProvider(c.provider));
|
|
336
|
+
if (cloud) return cloud;
|
|
337
|
+
return local ?? eligible[0] ?? null;
|
|
338
|
+
}
|
|
339
|
+
case "round-robin": {
|
|
340
|
+
// Pick the one least-recently-picked. Ties broken by priority.
|
|
341
|
+
const ranked = [...eligible].sort((a, b) => {
|
|
342
|
+
const la = this.lastPicked(a.provider, args.modelType) ?? 0;
|
|
343
|
+
const lb = this.lastPicked(b.provider, args.modelType) ?? 0;
|
|
344
|
+
if (la !== lb) return la - lb;
|
|
345
|
+
return b.priority - a.priority;
|
|
346
|
+
});
|
|
347
|
+
return ranked[0] ?? null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return eligible[0] ?? null;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/** For tests and diagnostics. */
|
|
354
|
+
snapshot(): Record<string, Record<string, number | null>> {
|
|
355
|
+
const out: Record<string, Record<string, number | null>> = {};
|
|
356
|
+
for (const [provider, stats] of this.stats) {
|
|
357
|
+
out[provider] = {};
|
|
358
|
+
for (const [modelType, buf] of stats.latency) {
|
|
359
|
+
const row = out[provider];
|
|
360
|
+
if (row) row[modelType] = buf.p50();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return out;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export const policyEngine = new PolicyEngine();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export of the shared routing-preferences 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
|
+
* read/write the same routing.json with identical semantics.
|
|
6
|
+
*/
|
|
7
|
+
export {
|
|
8
|
+
DEFAULT_ROUTING_POLICY,
|
|
9
|
+
isRoutingPolicy,
|
|
10
|
+
ROUTING_POLICIES,
|
|
11
|
+
type RoutingPolicy,
|
|
12
|
+
type RoutingPreferences,
|
|
13
|
+
readRoutingPreferences,
|
|
14
|
+
setPolicy,
|
|
15
|
+
setPreferredProvider,
|
|
16
|
+
writeRoutingPreferences,
|
|
17
|
+
} from "@elizaos/shared/local-inference/routing-preferences";
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inference runtime-target detection.
|
|
3
|
+
*
|
|
4
|
+
* The local-inference subsystem has one shipping operational shape:
|
|
5
|
+
*
|
|
6
|
+
* - `"ffi"` — in-process bun:ffi streaming bindings against the
|
|
7
|
+
* `libelizainference` (fused omnivoice + llama.cpp)
|
|
8
|
+
* shared library. Lives in `voice/ffi-bindings.ts` and
|
|
9
|
+
* `ffi-streaming-runner.ts`. This is mandatory on
|
|
10
|
+
* desktop and mobile so all generation runs in the
|
|
11
|
+
* app's own address space.
|
|
12
|
+
* - `"native-bridge"`— delegate to a Capacitor / JNI-side native runtime
|
|
13
|
+
* plugin (e.g. a Swift / Kotlin host wrapping
|
|
14
|
+
* llama.cpp directly). Reserved for builds where the
|
|
15
|
+
* FFI layer cannot be used (e.g. a build that disables
|
|
16
|
+
* `bun:ffi`); only the env-override path selects it.
|
|
17
|
+
*
|
|
18
|
+
* This module is the single source of truth for the platform → runtime
|
|
19
|
+
* mapping.
|
|
20
|
+
*
|
|
21
|
+
* Detection inputs (in priority order):
|
|
22
|
+
* 1. `ELIZA_INFERENCE_MODE` env var. Values: `ffi` / `native-bridge`.
|
|
23
|
+
* Wins over every heuristic so operators can force a branch from a CI
|
|
24
|
+
* shell or a debug build without recompiling.
|
|
25
|
+
* 2. Capacitor native marker — when `globalThis.Capacitor.isNativePlatform()`
|
|
26
|
+
* returns `true`, we are inside a Capacitor shell on iOS or Android.
|
|
27
|
+
* Force `"ffi"` regardless of Node's `process.platform`.
|
|
28
|
+
* 3. `process.platform` — all recognised and unknown platforms map to
|
|
29
|
+
* `"ffi"` unless explicitly overridden to `"native-bridge"`.
|
|
30
|
+
*
|
|
31
|
+
* The function is pure: same inputs → same answer. All inputs are explicit
|
|
32
|
+
* arguments so tests can replay the decision offline without poking the live
|
|
33
|
+
* `process` / `globalThis`.
|
|
34
|
+
*
|
|
35
|
+
* NOTE: this module does NOT decide whether the FFI library is actually
|
|
36
|
+
* loaded or whether the FFI symbols are present. `backend-selector.ts`
|
|
37
|
+
* handles that (with a hard throw if the mobile build is missing the
|
|
38
|
+
* streaming-LLM symbols). The two work together:
|
|
39
|
+
*
|
|
40
|
+
* inferenceRuntimeMode() === "ffi" → use `ffi-streaming-runner.ts`
|
|
41
|
+
* inferenceRuntimeMode() === "native-bridge"→ use the Capacitor plugin shim
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
export type InferenceRuntimeMode = "ffi" | "native-bridge";
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Node's `process.platform` values, narrowed to the set we care about.
|
|
48
|
+
* `unknown` covers exotic platforms (aix, freebsd, …) without baking them
|
|
49
|
+
* into the public API of this module.
|
|
50
|
+
*/
|
|
51
|
+
export type SupportedHostPlatform =
|
|
52
|
+
| "darwin"
|
|
53
|
+
| "linux"
|
|
54
|
+
| "win32"
|
|
55
|
+
| "ios"
|
|
56
|
+
| "android"
|
|
57
|
+
| "unknown";
|
|
58
|
+
|
|
59
|
+
export interface InferenceRuntimeModeInput {
|
|
60
|
+
/**
|
|
61
|
+
* Raw `process.platform` value (or a synthetic one in tests). Optional —
|
|
62
|
+
* defaults to the live `process.platform`. Anything other than the
|
|
63
|
+
* recognised set is treated as `"unknown"` and routed to `"ffi"`
|
|
64
|
+
* unless an env override selects the native bridge.
|
|
65
|
+
*/
|
|
66
|
+
platform?: SupportedHostPlatform | NodeJS.Platform;
|
|
67
|
+
/**
|
|
68
|
+
* Whether the JS runtime is currently embedded inside a Capacitor
|
|
69
|
+
* native shell. Defaults to inspecting `globalThis.Capacitor`. Tests
|
|
70
|
+
* pass `false` to keep the env-var / platform branches deterministic.
|
|
71
|
+
*/
|
|
72
|
+
isCapacitorNative?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Environment-variable bag. Defaults to `process.env`. The function
|
|
75
|
+
* reads `ELIZA_INFERENCE_MODE` for the override.
|
|
76
|
+
*/
|
|
77
|
+
env?: NodeJS.ProcessEnv;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Read and normalise the `ELIZA_INFERENCE_MODE` env override. Returns `null`
|
|
82
|
+
* when unset or unrecognised.
|
|
83
|
+
*/
|
|
84
|
+
export function readRuntimeModeEnvOverride(
|
|
85
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
86
|
+
): InferenceRuntimeMode | null {
|
|
87
|
+
const raw = (env.ELIZA_INFERENCE_MODE ?? "").trim().toLowerCase();
|
|
88
|
+
if (raw === "") return null;
|
|
89
|
+
if (raw === "ffi" || raw === "ffi-streaming") return "ffi";
|
|
90
|
+
if (
|
|
91
|
+
raw === "native-bridge" ||
|
|
92
|
+
raw === "native" ||
|
|
93
|
+
raw === "bridge" ||
|
|
94
|
+
raw === "capacitor"
|
|
95
|
+
) {
|
|
96
|
+
return "native-bridge";
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Synchronous Capacitor probe. Reads `globalThis.Capacitor.isNativePlatform()`
|
|
103
|
+
* defensively — neither the property nor the call site is guaranteed to
|
|
104
|
+
* exist in every build (desktop, plain Node tests, web-only Vite dev).
|
|
105
|
+
*
|
|
106
|
+
* Surfaces no errors: any failure means "not native". The throw-on-bad-build
|
|
107
|
+
* policy belongs to the backend-selector, not to platform detection.
|
|
108
|
+
*/
|
|
109
|
+
export function isCapacitorNativeRuntime(
|
|
110
|
+
global: typeof globalThis = globalThis,
|
|
111
|
+
): boolean {
|
|
112
|
+
const cap = (global as { Capacitor?: { isNativePlatform?: () => boolean } })
|
|
113
|
+
.Capacitor;
|
|
114
|
+
if (!cap || typeof cap.isNativePlatform !== "function") return false;
|
|
115
|
+
try {
|
|
116
|
+
return cap.isNativePlatform() === true;
|
|
117
|
+
} catch {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Decide which inference runtime mode the host should use. Pure: caller
|
|
124
|
+
* controls every input. See file header for the decision rules.
|
|
125
|
+
*/
|
|
126
|
+
export function inferenceRuntimeMode(
|
|
127
|
+
input: InferenceRuntimeModeInput = {},
|
|
128
|
+
): InferenceRuntimeMode {
|
|
129
|
+
const env = input.env ?? process.env;
|
|
130
|
+
const override = readRuntimeModeEnvOverride(env);
|
|
131
|
+
if (override) return override;
|
|
132
|
+
|
|
133
|
+
const capacitor =
|
|
134
|
+
input.isCapacitorNative !== undefined
|
|
135
|
+
? input.isCapacitorNative
|
|
136
|
+
: isCapacitorNativeRuntime();
|
|
137
|
+
if (capacitor) return "ffi";
|
|
138
|
+
|
|
139
|
+
return "ffi";
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Convenience wrapper for the `backend-selector.ts` boundary: maps the
|
|
144
|
+
* runtime mode onto the `"desktop" | "mobile"` slot the selector expects.
|
|
145
|
+
*
|
|
146
|
+
* `native-bridge` is treated as `"mobile"` because in every shipping
|
|
147
|
+
* configuration where we'd pick it the host has already classified itself
|
|
148
|
+
* as a mobile device (Capacitor shell that opted out of `bun:ffi`).
|
|
149
|
+
*/
|
|
150
|
+
export function inferencePlatformClass(
|
|
151
|
+
mode: InferenceRuntimeMode = inferenceRuntimeMode(),
|
|
152
|
+
): "desktop" | "mobile" {
|
|
153
|
+
return mode === "ffi" ? "desktop" : "mobile";
|
|
154
|
+
}
|