@elizaos/plugin-local-inference 2.0.3-beta.2 → 2.0.3-beta.4
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/README.md +84 -10
- package/dist/actions/generate-media.d.ts.map +1 -0
- package/dist/actions/identify-speaker.d.ts.map +1 -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.map +1 -0
- package/dist/index.js +39647 -0
- package/dist/index.js.map +217 -0
- package/{src → dist}/local-inference-routes.d.ts +9 -0
- package/dist/local-inference-routes.d.ts.map +1 -0
- package/dist/provider.d.ts.map +1 -0
- package/{src → dist}/routes/compat-helpers.d.ts +1 -1
- package/dist/routes/compat-helpers.d.ts.map +1 -0
- package/dist/routes/family-member-route.d.ts.map +1 -0
- package/{src → dist}/routes/index.d.ts +1 -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/{src → dist}/routes/live-diarization-route.d.ts +7 -0
- package/dist/routes/live-diarization-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/dist/routes/local-inference-compat-routes.d.ts.map +1 -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.map +1 -0
- package/{src → dist}/routes/transcripts-routes.d.ts +8 -0
- package/dist/routes/transcripts-routes.d.ts.map +1 -0
- package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
- package/dist/routes/voice-models-routes.d.ts.map +1 -0
- package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
- package/dist/runtime/embedding-presets.d.ts.map +1 -0
- package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/{src → dist}/runtime/ensure-local-inference-handler.d.ts +8 -0
- package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/{src → dist}/runtime/index.d.ts +1 -1
- 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/{src → dist}/runtime/voice-entity-binding.d.ts +10 -0
- package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
- package/{src → dist}/services/active-model.d.ts +28 -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/{src → dist}/services/assignments.d.ts +16 -3
- 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/{src → dist}/services/backend.d.ts +110 -16
- package/dist/services/backend.d.ts.map +1 -0
- package/{src → dist}/services/bionic-host-loader.d.ts +21 -0
- package/dist/services/bionic-host-loader.d.ts.map +1 -0
- package/dist/services/bundled-models.d.ts.map +1 -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.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.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.map +1 -0
- package/{src → dist}/services/desktop-fused-ffi-backend-runtime.d.ts +22 -6
- package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/dist/services/device-bridge.d.ts.map +1 -0
- package/dist/services/device-resource-metrics.d.ts.map +1 -0
- package/{src → dist}/services/device-tier.d.ts +19 -1
- package/dist/services/device-tier.d.ts.map +1 -0
- package/{src → dist}/services/downloader.d.ts +16 -4
- package/dist/services/downloader.d.ts.map +1 -0
- package/{src → dist}/services/engine.d.ts +43 -4
- 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.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/{src → dist}/services/ffi-streaming-backend.d.ts +28 -7
- package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
- package/{src → dist}/services/ffi-streaming-runner.d.ts +24 -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.map +1 -0
- package/dist/services/handler-registry.d.ts.map +1 -0
- package/dist/services/hardware.d.ts.map +1 -0
- package/dist/services/image-description-runtime.d.ts.map +1 -0
- package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
- package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/errors.d.ts.map +1 -0
- package/dist/services/imagegen/index.d.ts.map +1 -0
- package/dist/services/imagegen/mflux.d.ts.map +1 -0
- package/{src → dist}/services/imagegen/sd-cpp.d.ts +1 -0
- package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/types.d.ts.map +1 -0
- package/{src → dist}/services/index.d.ts +3 -1
- 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.map +1 -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.map +1 -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.map +1 -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/{src → dist}/services/manifest/schema.d.ts +196 -6
- package/dist/services/manifest/schema.d.ts.map +1 -0
- package/{src → dist}/services/manifest/types.d.ts +3 -1
- package/dist/services/manifest/types.d.ts.map +1 -0
- package/dist/services/manifest/validator.d.ts.map +1 -0
- package/{src → dist}/services/memory-arbiter.d.ts +33 -3
- 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/{src → dist}/services/memory-monitor.d.ts +6 -0
- package/dist/services/memory-monitor.d.ts.map +1 -0
- package/dist/services/memory-pressure.d.ts.map +1 -0
- package/dist/services/mtp-doctor.d.ts.map +1 -0
- package/dist/services/network-policy.d.ts.map +1 -0
- package/dist/services/paths.d.ts.map +1 -0
- package/dist/services/planner-skeleton.d.ts.map +1 -0
- package/dist/services/providers.d.ts.map +1 -0
- package/dist/services/ram-budget.d.ts.map +1 -0
- package/dist/services/readiness.d.ts.map +1 -0
- package/dist/services/recommendation.d.ts.map +1 -0
- package/{src → dist}/services/registry.d.ts +11 -13
- package/dist/services/registry.d.ts.map +1 -0
- package/{src → dist}/services/router-handler.d.ts +2 -2
- package/dist/services/router-handler.d.ts.map +1 -0
- package/{src → dist}/services/routing-policy.d.ts +32 -9
- package/dist/services/routing-policy.d.ts.map +1 -0
- package/dist/services/routing-preferences.d.ts.map +1 -0
- package/dist/services/runtime-target.d.ts.map +1 -0
- package/{src → dist}/services/service.d.ts +1 -1
- package/dist/services/service.d.ts.map +1 -0
- package/dist/services/session-pool.d.ts.map +1 -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.map +1 -0
- package/dist/services/system-memory.d.ts.map +1 -0
- package/{src → dist}/services/types.d.ts +1 -1
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/verify-on-device.d.ts.map +1 -0
- package/dist/services/verify.d.ts.map +1 -0
- package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
- package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
- package/dist/services/vision/hash.d.ts.map +1 -0
- package/{src → dist}/services/vision/index.d.ts +1 -1
- package/dist/services/vision/index.d.ts.map +1 -0
- package/dist/services/vision/llama-server.d.ts.map +1 -0
- package/{src → dist}/services/vision/types.d.ts +13 -4
- package/dist/services/vision/types.d.ts.map +1 -0
- package/dist/services/vision/vast-fallback.d.ts.map +1 -0
- package/{src → dist}/services/vision-embedding-cache.d.ts +1 -1
- 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/{src → dist}/services/voice/audio-frame-consumer.d.ts +82 -0
- package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/dist/services/voice/barge-in.d.ts.map +1 -0
- package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -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.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/{src → dist}/services/voice/eliza1-eot-scorer.d.ts +8 -8
- 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/{src → dist}/services/voice/embedding.d.ts +2 -3
- package/dist/services/voice/embedding.d.ts.map +1 -0
- package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
- package/{src → dist}/services/voice/engine-bridge.d.ts +8 -5
- package/dist/services/voice/engine-bridge.d.ts.map +1 -0
- package/{src → dist}/services/voice/eot-classifier-ggml.d.ts +22 -22
- package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/{src → dist}/services/voice/eot-classifier.d.ts +9 -12
- package/dist/services/voice/eot-classifier.d.ts.map +1 -0
- package/{src → dist}/services/voice/errors.d.ts +1 -1
- package/dist/services/voice/errors.d.ts.map +1 -0
- package/{src → dist}/services/voice/expressive-tags.d.ts +5 -5
- package/dist/services/voice/expressive-tags.d.ts.map +1 -0
- package/{src → dist}/services/voice/ffi-bindings.d.ts +26 -4
- package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
- package/dist/services/voice/first-line-cache.d.ts.map +1 -0
- package/{src → dist}/services/voice/fused-eot-scorer.d.ts +6 -6
- package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/{src → dist}/services/voice/index.d.ts +8 -3
- 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/{src → dist}/services/voice/kokoro/kokoro-backend.d.ts +15 -0
- package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/{src → dist}/services/voice/kokoro/kokoro-engine-discovery.d.ts +1 -1
- package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/{src → dist}/services/voice/kokoro/kokoro-ffi-runtime.d.ts +3 -3
- package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -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.map +1 -0
- package/{src → dist}/services/voice/kokoro/pick-runtime.d.ts +1 -1
- 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.map +1 -0
- package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/dist/services/voice/kokoro/voices.d.ts.map +1 -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/{src → dist}/services/voice/mic-source.d.ts +1 -1
- 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.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/{src → dist}/services/voice/partial-stabilizer.d.ts +1 -1
- package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/dist/services/voice/phrase-cache.d.ts.map +1 -0
- package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
- package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
- package/dist/services/voice/pipeline.d.ts.map +1 -0
- package/dist/services/voice/prefill-client.d.ts.map +1 -0
- package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/dist/services/voice/profile-store.d.ts.map +1 -0
- package/dist/services/voice/ring-buffer.d.ts.map +1 -0
- package/dist/services/voice/rollback-queue.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -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/{src → dist}/services/voice/shared-resources.d.ts +14 -0
- package/dist/services/voice/shared-resources.d.ts.map +1 -0
- package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
- package/dist/services/voice/speaker-imprint.d.ts.map +1 -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.map +1 -0
- package/{src → dist}/services/voice/transcriber.d.ts +4 -4
- package/dist/services/voice/transcriber.d.ts.map +1 -0
- package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/{src → dist}/services/voice/transcript-service.d.ts +20 -1
- package/dist/services/voice/transcript-service.d.ts.map +1 -0
- package/{src → dist}/services/voice/transcript-store.d.ts +12 -1
- package/dist/services/voice/transcript-store.d.ts.map +1 -0
- package/dist/services/voice/turn-controller.d.ts.map +1 -0
- package/{src → dist}/services/voice/types.d.ts +6 -6
- package/dist/services/voice/types.d.ts.map +1 -0
- package/{src → dist}/services/voice/vad.d.ts +6 -5
- package/dist/services/voice/vad.d.ts.map +1 -0
- package/dist/services/voice/voice-budget.d.ts.map +1 -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/{src → dist}/services/voice/voice-preset-format.d.ts +2 -2
- package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
- package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -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.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/{src → dist}/services/voice/wake-word-ggml.d.ts +8 -9
- package/dist/services/voice/wake-word-ggml.d.ts.map +1 -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.map +1 -0
- package/dist/services/voice-model-updater.d.ts.map +1 -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 +28 -9
- package/registry-entry.json +137 -0
- package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -0
- package/src/adapters/capacitor-llama/environment.ts +1 -1
- package/src/adapters/capacitor-llama/index.ts +28 -4
- package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +2 -2
- package/src/adapters/capacitor-llama/voice-turn.ts +178 -0
- package/src/backends/apple-foundation.ts +1 -1
- package/src/local-inference-routes.test.ts +57 -11
- package/src/local-inference-routes.ts +90 -8
- package/src/provider.ts +32 -3
- package/src/routes/compat-helpers.ts +2 -1
- package/src/routes/index.ts +1 -0
- package/src/routes/live-diarization-route.test.ts +134 -0
- package/src/routes/live-diarization-route.ts +79 -3
- package/src/routes/local-inference-asr-route.test.ts +43 -2
- package/src/routes/local-inference-asr-route.ts +7 -4
- package/src/routes/local-inference-asr-transcribe.test.ts +4 -4
- package/src/routes/local-inference-asr-transcribe.ts +1 -1
- package/src/routes/local-inference-compat-routes.test.ts +3 -3
- package/src/routes/local-inference-compat-routes.ts +23 -56
- package/src/routes/native-pcm-turn-route.test.ts +136 -0
- package/src/routes/native-pcm-turn-route.ts +121 -0
- package/src/routes/transcripts-routes.test.ts +51 -0
- package/src/routes/transcripts-routes.ts +35 -3
- package/src/runtime/bionic-wire-encoding.test.ts +147 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +203 -5
- package/src/runtime/ensure-local-inference-handler.ts +203 -11
- package/src/runtime/index.ts +4 -1
- package/src/runtime/mobile-local-inference-gate.test.ts +85 -2
- package/src/runtime/mobile-local-inference-gate.ts +60 -5
- package/src/runtime/voice-entity-binding.transcript.test.ts +29 -0
- package/src/runtime/voice-entity-binding.ts +46 -6
- package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
- package/src/services/README.md +2 -2
- package/src/services/__tests__/backend-selector.precedence.test.ts +333 -0
- package/src/services/active-model-context-fit.test.ts +125 -0
- package/src/services/active-model.ts +211 -8
- package/src/services/asr-provenance.ts +68 -0
- package/src/services/assignment-validation.test.ts +118 -0
- package/src/services/assignments.test.ts +26 -0
- package/src/services/assignments.ts +52 -4
- package/src/services/backend.test.ts +84 -0
- package/src/services/backend.ts +198 -19
- package/src/services/bionic-host-loader.test.ts +94 -1
- package/src/services/bionic-host-loader.ts +72 -0
- package/src/services/cache-bridge.test.ts +7 -7
- package/src/services/catalog.test.ts +32 -11
- package/src/services/catalog.ts +6 -0
- package/src/services/cloud-fallback.ts +1 -1
- package/src/services/context-fit.test.ts +121 -0
- package/src/services/context-fit.ts +113 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +99 -7
- package/src/services/device-tier.test.ts +89 -2
- package/src/services/device-tier.ts +103 -11
- package/src/services/downloader.test.ts +199 -58
- package/src/services/downloader.ts +141 -27
- package/src/services/engine-direct-bundle.test.ts +38 -6
- package/src/services/engine.ts +291 -104
- package/src/services/ensure-local-artifacts.ts +1 -1
- package/src/services/ffi-llm-streaming-abi.ts +6 -3
- package/src/services/ffi-streaming-backend.ts +44 -8
- package/src/services/ffi-streaming-runner.test.ts +163 -3
- package/src/services/ffi-streaming-runner.ts +54 -1
- package/src/services/ffi-unload-ordering.test.ts +5 -1
- package/src/services/fused-eliza1-no-regression.test.ts +144 -0
- package/src/services/hardware.test.ts +7 -2
- package/src/services/hardware.ts +28 -0
- package/src/services/imagegen/backend-selector.test.ts +190 -0
- package/src/services/imagegen/sd-cpp.ts +6 -9
- package/src/services/index.ts +18 -0
- package/src/services/ios-llama-streaming.ts +1 -1
- package/src/services/kv-spill.ts +6 -5
- 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/manifest/eliza-1.manifest.v1.json +84 -2
- package/src/services/manifest/index.ts +6 -0
- package/src/services/manifest/manifest.test.ts +156 -54
- package/src/services/manifest/schema.ts +160 -52
- package/src/services/manifest/types.ts +6 -0
- package/src/services/manifest/validator.ts +91 -25
- package/src/services/memory-arbiter.test.ts +139 -0
- package/src/services/memory-arbiter.ts +81 -15
- package/src/services/memory-benchmark.test.ts +91 -0
- package/src/services/memory-benchmark.ts +354 -0
- package/src/services/memory-monitor.test.ts +24 -0
- package/src/services/memory-monitor.ts +12 -0
- package/src/services/mtp-doctor.ts +10 -2
- package/src/services/network-policy.ts +5 -5
- package/src/services/ram-budget-cache.test.ts +2 -1
- package/src/services/ram-budget.ts +0 -0
- package/src/services/recommendation.test.ts +216 -0
- package/src/services/registry.ts +25 -19
- package/src/services/required-kernels-gate.test.ts +64 -0
- package/src/services/router-handler.ts +43 -24
- package/src/services/routing-policy.test.ts +211 -23
- package/src/services/routing-policy.ts +92 -22
- package/src/services/service.test.ts +3 -3
- package/src/services/service.ts +22 -7
- package/src/services/transcription-priority.test.ts +2 -2
- package/src/services/types.ts +4 -0
- package/src/services/verify-on-device.test.ts +2 -2
- package/src/services/vision/hash.ts +1 -1
- package/src/services/vision/index.ts +2 -2
- package/src/services/vision/llama-server.ts +1 -1
- package/src/services/vision/types.ts +13 -4
- package/src/services/vision-embedding-cache.ts +1 -1
- package/src/services/voice/VOICE_WORKBENCH.md +71 -26
- package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +72 -2
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +29 -29
- package/src/services/voice/__tests__/streaming-asr.test.ts +1 -1
- 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 +6 -8
- package/src/services/voice/audio-frame-consumer.test.ts +327 -1
- package/src/services/voice/audio-frame-consumer.ts +165 -5
- package/src/services/voice/barge-in.ts +2 -3
- 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 +2 -2
- package/src/services/voice/e2e-harness.ts +175 -16
- 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 +22 -22
- package/src/services/voice/embedding.ts +2 -3
- package/src/services/voice/engine-bridge-transcript-join.test.ts +278 -0
- package/src/services/voice/engine-bridge.ts +151 -110
- package/src/services/voice/eot-classifier-ggml.ts +42 -39
- package/src/services/voice/eot-classifier.test.ts +98 -0
- package/src/services/voice/eot-classifier.ts +11 -122
- package/src/services/voice/errors.ts +2 -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 +8 -8
- package/src/services/voice/ffi-bindings.test.ts +10 -3
- package/src/services/voice/ffi-bindings.ts +177 -15
- package/src/services/voice/fused-eot-scorer.ts +17 -13
- package/src/services/voice/index.ts +33 -12
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +112 -1
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +88 -3
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +37 -201
- package/src/services/voice/kokoro/kokoro-backend.ts +16 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +1 -1
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +3 -3
- package/src/services/voice/kokoro/pick-runtime.ts +1 -1
- package/src/services/voice/kokoro/runtime-selection.ts +28 -201
- package/src/services/voice/live-diarization-session.echo.test.ts +232 -0
- package/src/services/voice/live-diarization-session.ts +335 -2
- 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.ts +1 -1
- 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/partial-stabilizer.ts +1 -1
- package/src/services/voice/pipeline.ts +3 -4
- 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/samantha-preset-regenerator.wav.test.ts +90 -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 +23 -0
- package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +85 -22
- package/src/services/voice/speaker/encoder-ggml.test.ts +59 -0
- package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
- package/src/services/voice/transcriber.ts +4 -4
- package/src/services/voice/transcript-service.test.ts +58 -0
- package/src/services/voice/transcript-service.ts +64 -0
- package/src/services/voice/transcript-store.test.ts +36 -0
- package/src/services/voice/transcript-store.ts +32 -0
- package/src/services/voice/types.ts +7 -7
- package/src/services/voice/vad.test.ts +33 -15
- package/src/services/voice/vad.ts +25 -20
- package/src/services/voice/voice-budget.test.ts +0 -3
- package/src/services/voice/voice-budget.ts +6 -6
- package/src/services/voice/voice-duet.test.ts +1 -1
- 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 +17 -4
- package/src/services/voice/voice-scenario.test.ts +159 -0
- package/src/services/voice/voice-scenario.ts +133 -7
- package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -0
- package/src/services/voice/voice-workbench-report.ts +58 -17
- package/src/services/voice/wake-word-ggml.ts +12 -13
- 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-prewarm.ts +1 -1
- package/src/voice-workbench.ts +71 -0
- package/src/actions/generate-media.d.ts.map +0 -1
- package/src/actions/identify-speaker.d.ts.map +0 -1
- package/src/actions/transcription-control.d.ts.map +0 -1
- package/src/index.d.ts.map +0 -1
- package/src/local-inference-routes.d.ts.map +0 -1
- package/src/provider.d.ts.map +0 -1
- package/src/routes/compat-helpers.d.ts.map +0 -1
- package/src/routes/family-member-route.d.ts.map +0 -1
- package/src/routes/index.d.ts.map +0 -1
- package/src/routes/live-diarization-route.d.ts.map +0 -1
- package/src/routes/local-inference-asr-route.d.ts.map +0 -1
- package/src/routes/local-inference-asr-transcribe.d.ts.map +0 -1
- package/src/routes/local-inference-compat-routes.d.ts.map +0 -1
- package/src/routes/local-inference-tts-route.d.ts.map +0 -1
- package/src/routes/transcript-audio-store.d.ts.map +0 -1
- package/src/routes/transcripts-routes.d.ts.map +0 -1
- package/src/routes/voice-first-run-routes.d.ts.map +0 -1
- package/src/routes/voice-models-routes.d.ts.map +0 -1
- package/src/routes/voice-profile-plugin-routes.d.ts.map +0 -1
- package/src/routes/voice-profiles-management-routes.d.ts.map +0 -1
- package/src/routes/voice-speaker-profile-routes.d.ts.map +0 -1
- package/src/runtime/embedding-manager-support.d.ts.map +0 -1
- package/src/runtime/embedding-presets.d.ts.map +0 -1
- package/src/runtime/embedding-warmup-policy.d.ts.map +0 -1
- package/src/runtime/ensure-local-inference-handler.d.ts.map +0 -1
- package/src/runtime/index.d.ts.map +0 -1
- package/src/runtime/mobile-local-inference-gate.d.ts +0 -31
- package/src/runtime/mobile-local-inference-gate.d.ts.map +0 -1
- package/src/runtime/voice-entity-binding.d.ts.map +0 -1
- package/src/services/active-model.d.ts.map +0 -1
- package/src/services/assignments.d.ts.map +0 -1
- package/src/services/backend.d.ts.map +0 -1
- package/src/services/bionic-host-loader.d.ts.map +0 -1
- package/src/services/bundled-models.d.ts.map +0 -1
- package/src/services/cache-bridge.d.ts.map +0 -1
- package/src/services/catalog.d.ts +0 -10
- package/src/services/catalog.d.ts.map +0 -1
- package/src/services/checkpoint-client.d.ts.map +0 -1
- package/src/services/cloud-fallback.d.ts.map +0 -1
- package/src/services/conversation-registry.d.ts.map +0 -1
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +0 -1
- package/src/services/device-bridge.d.ts.map +0 -1
- package/src/services/device-resource-metrics.d.ts.map +0 -1
- package/src/services/device-tier.d.ts.map +0 -1
- package/src/services/downloader.d.ts.map +0 -1
- package/src/services/engine.d.ts.map +0 -1
- package/src/services/external-scanner.d.ts.map +0 -1
- package/src/services/ffi-streaming-backend.d.ts.map +0 -1
- package/src/services/ffi-streaming-runner.d.ts.map +0 -1
- package/src/services/gpu-detect.d.ts.map +0 -1
- package/src/services/handler-registry.d.ts.map +0 -1
- package/src/services/hardware.d.ts.map +0 -1
- package/src/services/hf-search.d.ts +0 -26
- package/src/services/hf-search.d.ts.map +0 -1
- package/src/services/hf-search.test.ts +0 -69
- package/src/services/hf-search.ts +0 -420
- package/src/services/image-description-runtime.d.ts.map +0 -1
- package/src/services/imagegen/aosp-unavailable.d.ts.map +0 -1
- package/src/services/imagegen/backend-selector.d.ts.map +0 -1
- package/src/services/imagegen/coreml-unavailable.d.ts.map +0 -1
- package/src/services/imagegen/errors.d.ts.map +0 -1
- package/src/services/imagegen/index.d.ts.map +0 -1
- package/src/services/imagegen/mflux.d.ts.map +0 -1
- package/src/services/imagegen/sd-cpp.d.ts.map +0 -1
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +0 -1
- package/src/services/imagegen/types.d.ts.map +0 -1
- package/src/services/index.d.ts.map +0 -1
- package/src/services/inference-capabilities.d.ts.map +0 -1
- package/src/services/inference-telemetry.d.ts.map +0 -1
- package/src/services/kv-spill.d.ts.map +0 -1
- package/src/services/latency-trace.d.ts.map +0 -1
- package/src/services/llm-streaming-binding.d.ts.map +0 -1
- package/src/services/load-args.d.ts.map +0 -1
- package/src/services/manifest/index.d.ts +0 -4
- package/src/services/manifest/index.d.ts.map +0 -1
- package/src/services/manifest/schema.d.ts.map +0 -1
- package/src/services/manifest/types.d.ts.map +0 -1
- package/src/services/manifest/validator.d.ts.map +0 -1
- package/src/services/memory-arbiter.d.ts.map +0 -1
- package/src/services/memory-monitor.d.ts.map +0 -1
- package/src/services/memory-pressure.d.ts.map +0 -1
- package/src/services/mtp-doctor.d.ts.map +0 -1
- package/src/services/network-policy.d.ts.map +0 -1
- package/src/services/paths.d.ts.map +0 -1
- package/src/services/planner-skeleton.d.ts.map +0 -1
- package/src/services/providers.d.ts.map +0 -1
- package/src/services/ram-budget.d.ts.map +0 -1
- package/src/services/readiness.d.ts.map +0 -1
- package/src/services/recommendation.d.ts.map +0 -1
- package/src/services/registry.d.ts.map +0 -1
- package/src/services/router-handler.d.ts.map +0 -1
- package/src/services/routing-policy.d.ts.map +0 -1
- package/src/services/routing-preferences.d.ts.map +0 -1
- package/src/services/runtime-target.d.ts.map +0 -1
- package/src/services/service.d.ts.map +0 -1
- package/src/services/session-pool.d.ts.map +0 -1
- package/src/services/structured-output/deterministic-repair.d.ts.map +0 -1
- package/src/services/structured-output.d.ts.map +0 -1
- package/src/services/system-memory.d.ts.map +0 -1
- package/src/services/types.d.ts.map +0 -1
- package/src/services/verify-on-device.d.ts.map +0 -1
- package/src/services/verify.d.ts.map +0 -1
- package/src/services/vision/aosp-unavailable.d.ts.map +0 -1
- package/src/services/vision/capacitor-llama.d.ts.map +0 -1
- package/src/services/vision/cloud-fallback.d.ts.map +0 -1
- package/src/services/vision/hash.d.ts.map +0 -1
- package/src/services/vision/index.d.ts.map +0 -1
- package/src/services/vision/llama-server.d.ts.map +0 -1
- package/src/services/vision/types.d.ts.map +0 -1
- package/src/services/vision/vast-fallback.d.ts.map +0 -1
- package/src/services/vision-embedding-cache.d.ts.map +0 -1
- package/src/services/voice/audio-frame-consumer.d.ts.map +0 -1
- package/src/services/voice/barge-in.d.ts.map +0 -1
- package/src/services/voice/cancellation-coordinator.d.ts.map +0 -1
- package/src/services/voice/checkpoint-manager.d.ts.map +0 -1
- package/src/services/voice/eager-context-builder.d.ts.map +0 -1
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +0 -1
- package/src/services/voice/embedding.d.ts.map +0 -1
- package/src/services/voice/emotion-attribution.d.ts.map +0 -1
- package/src/services/voice/engine-bridge.d.ts.map +0 -1
- package/src/services/voice/eot-classifier-ggml.d.ts.map +0 -1
- package/src/services/voice/eot-classifier.d.ts.map +0 -1
- package/src/services/voice/errors.d.ts.map +0 -1
- package/src/services/voice/expressive-tags.d.ts.map +0 -1
- package/src/services/voice/ffi-bindings.d.ts.map +0 -1
- package/src/services/voice/first-line-cache.d.ts.map +0 -1
- package/src/services/voice/fused-eot-scorer.d.ts.map +0 -1
- package/src/services/voice/index.d.ts.map +0 -1
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +0 -1
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +0 -1
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +0 -1
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +0 -1
- package/src/services/voice/kokoro/phonemizer.d.ts.map +0 -1
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +0 -1
- package/src/services/voice/kokoro/runtime-selection.d.ts +0 -92
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +0 -1
- package/src/services/voice/kokoro/types.d.ts.map +0 -1
- package/src/services/voice/kokoro/voice-presets.d.ts.map +0 -1
- package/src/services/voice/kokoro/voices.d.ts.map +0 -1
- package/src/services/voice/lifecycle.d.ts.map +0 -1
- package/src/services/voice/live-diarization-session.d.ts +0 -96
- package/src/services/voice/live-diarization-session.d.ts.map +0 -1
- package/src/services/voice/mic-source.d.ts.map +0 -1
- package/src/services/voice/optimistic-policy.d.ts.map +0 -1
- package/src/services/voice/partial-stabilizer.d.ts.map +0 -1
- package/src/services/voice/phoneme-tokenizer.d.ts.map +0 -1
- package/src/services/voice/phrase-cache.d.ts.map +0 -1
- package/src/services/voice/phrase-chunker.d.ts.map +0 -1
- package/src/services/voice/pipeline-impls.d.ts.map +0 -1
- package/src/services/voice/pipeline.d.ts.map +0 -1
- package/src/services/voice/prefill-client.d.ts.map +0 -1
- package/src/services/voice/prefix-preserving-queue.d.ts.map +0 -1
- package/src/services/voice/profile-store.d.ts.map +0 -1
- package/src/services/voice/ring-buffer.d.ts.map +0 -1
- package/src/services/voice/rollback-queue.d.ts.map +0 -1
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +0 -1
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +0 -1
- package/src/services/voice/scheduler.d.ts.map +0 -1
- package/src/services/voice/shared-resources.d.ts.map +0 -1
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +0 -1
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +0 -1
- package/src/services/voice/speaker/diarizer.d.ts.map +0 -1
- package/src/services/voice/speaker/encoder-fused.d.ts.map +0 -1
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +0 -1
- package/src/services/voice/speaker/encoder.d.ts.map +0 -1
- package/src/services/voice/speaker-imprint.d.ts.map +0 -1
- package/src/services/voice/speaker-preset-cache.d.ts.map +0 -1
- package/src/services/voice/system-audio-sink.d.ts.map +0 -1
- package/src/services/voice/transcriber.d.ts.map +0 -1
- package/src/services/voice/transcript-knowledge.d.ts.map +0 -1
- package/src/services/voice/transcript-service.d.ts.map +0 -1
- package/src/services/voice/transcript-store.d.ts.map +0 -1
- package/src/services/voice/turn-controller.d.ts.map +0 -1
- package/src/services/voice/types.d.ts.map +0 -1
- package/src/services/voice/vad.d.ts.map +0 -1
- package/src/services/voice/voice-budget.d.ts.map +0 -1
- package/src/services/voice/voice-emotion-classifier.d.ts.map +0 -1
- package/src/services/voice/voice-preset-format.d.ts.map +0 -1
- package/src/services/voice/voice-profile-artifact.d.ts.map +0 -1
- package/src/services/voice/voice-profile-routes.d.ts.map +0 -1
- package/src/services/voice/voice-settings.d.ts +0 -82
- package/src/services/voice/voice-settings.d.ts.map +0 -1
- package/src/services/voice/voice-settings.ts +0 -172
- package/src/services/voice/voice-state-machine.d.ts.map +0 -1
- package/src/services/voice/wake-word-ggml.d.ts.map +0 -1
- package/src/services/voice/wake-word.d.ts.map +0 -1
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +0 -1
- package/src/services/voice-model-updater.d.ts.map +0 -1
- package/src/services/voice-prewarm.d.ts.map +0 -1
- /package/{src → dist}/actions/generate-media.d.ts +0 -0
- /package/{src → dist}/actions/identify-speaker.d.ts +0 -0
- /package/{src → dist}/actions/transcription-control.d.ts +0 -0
- /package/{src → dist}/index.d.ts +0 -0
- /package/{src → dist}/provider.d.ts +0 -0
- /package/{src → dist}/routes/family-member-route.d.ts +0 -0
- /package/{src → dist}/routes/local-inference-asr-route.d.ts +0 -0
- /package/{src → dist}/routes/local-inference-asr-transcribe.d.ts +0 -0
- /package/{src → dist}/routes/local-inference-compat-routes.d.ts +0 -0
- /package/{src → dist}/routes/local-inference-tts-route.d.ts +0 -0
- /package/{src → dist}/routes/transcript-audio-store.d.ts +0 -0
- /package/{src → dist}/routes/voice-first-run-routes.d.ts +0 -0
- /package/{src → dist}/routes/voice-models-routes.d.ts +0 -0
- /package/{src → dist}/routes/voice-profile-plugin-routes.d.ts +0 -0
- /package/{src → dist}/routes/voice-profiles-management-routes.d.ts +0 -0
- /package/{src → dist}/routes/voice-speaker-profile-routes.d.ts +0 -0
- /package/{src → dist}/runtime/embedding-manager-support.d.ts +0 -0
- /package/{src → dist}/runtime/embedding-presets.d.ts +0 -0
- /package/{src → dist}/runtime/embedding-warmup-policy.d.ts +0 -0
- /package/{src → dist}/services/bundled-models.d.ts +0 -0
- /package/{src → dist}/services/cache-bridge.d.ts +0 -0
- /package/{src → dist}/services/checkpoint-client.d.ts +0 -0
- /package/{src → dist}/services/cloud-fallback.d.ts +0 -0
- /package/{src → dist}/services/conversation-registry.d.ts +0 -0
- /package/{src → dist}/services/device-bridge.d.ts +0 -0
- /package/{src → dist}/services/device-resource-metrics.d.ts +0 -0
- /package/{src → dist}/services/external-scanner.d.ts +0 -0
- /package/{src → dist}/services/gpu-detect.d.ts +0 -0
- /package/{src → dist}/services/handler-registry.d.ts +0 -0
- /package/{src → dist}/services/hardware.d.ts +0 -0
- /package/{src → dist}/services/image-description-runtime.d.ts +0 -0
- /package/{src → dist}/services/imagegen/aosp-unavailable.d.ts +0 -0
- /package/{src → dist}/services/imagegen/backend-selector.d.ts +0 -0
- /package/{src → dist}/services/imagegen/coreml-unavailable.d.ts +0 -0
- /package/{src → dist}/services/imagegen/errors.d.ts +0 -0
- /package/{src → dist}/services/imagegen/index.d.ts +0 -0
- /package/{src → dist}/services/imagegen/mflux.d.ts +0 -0
- /package/{src → dist}/services/imagegen/tensorrt-unavailable.d.ts +0 -0
- /package/{src → dist}/services/imagegen/types.d.ts +0 -0
- /package/{src → dist}/services/inference-capabilities.d.ts +0 -0
- /package/{src → dist}/services/inference-telemetry.d.ts +0 -0
- /package/{src → dist}/services/kv-spill.d.ts +0 -0
- /package/{src → dist}/services/latency-trace.d.ts +0 -0
- /package/{src → dist}/services/llm-streaming-binding.d.ts +0 -0
- /package/{src → dist}/services/load-args.d.ts +0 -0
- /package/{src → dist}/services/manifest/validator.d.ts +0 -0
- /package/{src → dist}/services/memory-pressure.d.ts +0 -0
- /package/{src → dist}/services/mtp-doctor.d.ts +0 -0
- /package/{src → dist}/services/network-policy.d.ts +0 -0
- /package/{src → dist}/services/paths.d.ts +0 -0
- /package/{src → dist}/services/planner-skeleton.d.ts +0 -0
- /package/{src → dist}/services/providers.d.ts +0 -0
- /package/{src → dist}/services/ram-budget.d.ts +0 -0
- /package/{src → dist}/services/readiness.d.ts +0 -0
- /package/{src → dist}/services/recommendation.d.ts +0 -0
- /package/{src → dist}/services/routing-preferences.d.ts +0 -0
- /package/{src → dist}/services/runtime-target.d.ts +0 -0
- /package/{src → dist}/services/session-pool.d.ts +0 -0
- /package/{src → dist}/services/structured-output/deterministic-repair.d.ts +0 -0
- /package/{src → dist}/services/structured-output.d.ts +0 -0
- /package/{src → dist}/services/system-memory.d.ts +0 -0
- /package/{src → dist}/services/verify-on-device.d.ts +0 -0
- /package/{src → dist}/services/verify.d.ts +0 -0
- /package/{src → dist}/services/vision/aosp-unavailable.d.ts +0 -0
- /package/{src → dist}/services/vision/capacitor-llama.d.ts +0 -0
- /package/{src → dist}/services/vision/cloud-fallback.d.ts +0 -0
- /package/{src → dist}/services/vision/hash.d.ts +0 -0
- /package/{src → dist}/services/vision/llama-server.d.ts +0 -0
- /package/{src → dist}/services/vision/vast-fallback.d.ts +0 -0
- /package/{src → dist}/services/voice/barge-in.d.ts +0 -0
- /package/{src → dist}/services/voice/cancellation-coordinator.d.ts +0 -0
- /package/{src → dist}/services/voice/checkpoint-manager.d.ts +0 -0
- /package/{src → dist}/services/voice/eager-context-builder.d.ts +0 -0
- /package/{src → dist}/services/voice/emotion-attribution.d.ts +0 -0
- /package/{src → dist}/services/voice/first-line-cache.d.ts +0 -0
- /package/{src → dist}/services/voice/kokoro/kokoro-runtime.d.ts +0 -0
- /package/{src → dist}/services/voice/kokoro/phonemizer.d.ts +0 -0
- /package/{src → dist}/services/voice/kokoro/types.d.ts +0 -0
- /package/{src → dist}/services/voice/kokoro/voice-presets.d.ts +0 -0
- /package/{src → dist}/services/voice/kokoro/voices.d.ts +0 -0
- /package/{src → dist}/services/voice/lifecycle.d.ts +0 -0
- /package/{src → dist}/services/voice/optimistic-policy.d.ts +0 -0
- /package/{src → dist}/services/voice/phoneme-tokenizer.d.ts +0 -0
- /package/{src → dist}/services/voice/phrase-cache.d.ts +0 -0
- /package/{src → dist}/services/voice/phrase-chunker.d.ts +0 -0
- /package/{src → dist}/services/voice/pipeline-impls.d.ts +0 -0
- /package/{src → dist}/services/voice/pipeline.d.ts +0 -0
- /package/{src → dist}/services/voice/prefill-client.d.ts +0 -0
- /package/{src → dist}/services/voice/prefix-preserving-queue.d.ts +0 -0
- /package/{src → dist}/services/voice/profile-store.d.ts +0 -0
- /package/{src → dist}/services/voice/ring-buffer.d.ts +0 -0
- /package/{src → dist}/services/voice/rollback-queue.d.ts +0 -0
- /package/{src → dist}/services/voice/samantha-preset-placeholder.d.ts +0 -0
- /package/{src → dist}/services/voice/samantha-preset-regenerator.d.ts +0 -0
- /package/{src → dist}/services/voice/scheduler.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/attribution-pipeline.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/diarizer-fused.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/diarizer.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/encoder-fused.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/encoder-ggml.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker/encoder.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker-imprint.d.ts +0 -0
- /package/{src → dist}/services/voice/speaker-preset-cache.d.ts +0 -0
- /package/{src → dist}/services/voice/system-audio-sink.d.ts +0 -0
- /package/{src → dist}/services/voice/transcript-knowledge.d.ts +0 -0
- /package/{src → dist}/services/voice/turn-controller.d.ts +0 -0
- /package/{src → dist}/services/voice/voice-budget.d.ts +0 -0
- /package/{src → dist}/services/voice/voice-emotion-classifier.d.ts +0 -0
- /package/{src → dist}/services/voice/voice-profile-artifact.d.ts +0 -0
- /package/{src → dist}/services/voice/voice-profile-routes.d.ts +0 -0
- /package/{src → dist}/services/voice/voice-state-machine.d.ts +0 -0
- /package/{src → dist}/services/voice/wake-word.d.ts +0 -0
- /package/{src → dist}/services/voice/wrap-with-first-line-cache.d.ts +0 -0
- /package/{src → dist}/services/voice-model-updater.d.ts +0 -0
- /package/{src → dist}/services/voice-prewarm.d.ts +0 -0
|
@@ -22,15 +22,28 @@ import {
|
|
|
22
22
|
FIRST_RUN_DEFAULT_MODEL_ID,
|
|
23
23
|
findCatalogModel,
|
|
24
24
|
} from "./catalog";
|
|
25
|
+
import {
|
|
26
|
+
computeRuntimeContextFit,
|
|
27
|
+
type RuntimeContextFit,
|
|
28
|
+
} from "./context-fit";
|
|
25
29
|
import { localInferenceEngine } from "./engine";
|
|
26
30
|
import { probeHardware } from "./hardware";
|
|
27
|
-
import
|
|
31
|
+
import {
|
|
32
|
+
type Eliza1Kernel,
|
|
33
|
+
type Eliza1Manifest,
|
|
34
|
+
type Eliza1Tier,
|
|
35
|
+
missingRequiredKernels,
|
|
36
|
+
OPTIONAL_KERNELS_BY_TIER,
|
|
37
|
+
REQUIRED_KERNELS_BY_TIER,
|
|
38
|
+
RUNTIME_TO_ELIZA1_KERNEL,
|
|
39
|
+
} from "./manifest";
|
|
28
40
|
import {
|
|
29
41
|
assessRamFit,
|
|
30
42
|
defaultManifestLoader,
|
|
31
43
|
type ManifestLoader,
|
|
32
44
|
pickFittingContextVariant,
|
|
33
45
|
type RamFitOptions,
|
|
46
|
+
ramHeadroomReserveMb,
|
|
34
47
|
} from "./ram-budget";
|
|
35
48
|
import { recommendForFirstRun } from "./recommendation";
|
|
36
49
|
import { touchElizaModel } from "./registry";
|
|
@@ -262,6 +275,7 @@ export interface LocalInferenceLoadOverrides {
|
|
|
262
275
|
|
|
263
276
|
interface ResolveLocalInferenceLoadArgsOptions {
|
|
264
277
|
manifestLoader?: ManifestLoader;
|
|
278
|
+
hardware?: HardwareProbe;
|
|
265
279
|
}
|
|
266
280
|
|
|
267
281
|
function bundleRootForInstalledModel(installed: InstalledModel): string {
|
|
@@ -368,6 +382,7 @@ function applyCatalogDefaults(
|
|
|
368
382
|
installed: InstalledModel,
|
|
369
383
|
catalog: CatalogModel | undefined,
|
|
370
384
|
manifestLoader: ManifestLoader,
|
|
385
|
+
hardware: HardwareProbe | undefined,
|
|
371
386
|
): void {
|
|
372
387
|
const runtime = catalog?.runtime;
|
|
373
388
|
|
|
@@ -382,9 +397,28 @@ function applyCatalogDefaults(
|
|
|
382
397
|
// happens to use ("auto" → smallest fitting, which historically meant
|
|
383
398
|
// 4k or 8k even for 128k-trained models).
|
|
384
399
|
if (args.contextSize === undefined) {
|
|
385
|
-
|
|
400
|
+
const nativeContext =
|
|
386
401
|
installedBundleContextSize(installed, manifestLoader) ??
|
|
387
402
|
catalog?.contextLength;
|
|
403
|
+
const fit = resolveRuntimeContextFit(
|
|
404
|
+
installed,
|
|
405
|
+
catalog,
|
|
406
|
+
nativeContext,
|
|
407
|
+
hardware,
|
|
408
|
+
);
|
|
409
|
+
args.contextSize = fit?.contextSize ?? nativeContext;
|
|
410
|
+
// Headroom KV-precision upgrade: when the selector chose f16 (opt-in via
|
|
411
|
+
// ELIZA_PREFER_ACCURATE_KV_WHEN_HEADROOM) and the caller/catalog left KV at
|
|
412
|
+
// the default q8_0, raise both cache types to f16. Only ever upgrades, and
|
|
413
|
+
// only when f16 still affords the selected window (#8809 AC#4).
|
|
414
|
+
if (
|
|
415
|
+
fit?.kvQuant === "f16" &&
|
|
416
|
+
(args.cacheTypeK === undefined || args.cacheTypeK === "q8_0") &&
|
|
417
|
+
(args.cacheTypeV === undefined || args.cacheTypeV === "q8_0")
|
|
418
|
+
) {
|
|
419
|
+
args.cacheTypeK = "f16";
|
|
420
|
+
args.cacheTypeV = "f16";
|
|
421
|
+
}
|
|
388
422
|
}
|
|
389
423
|
|
|
390
424
|
// Catalog-declared GPU offload default — only apply when the caller
|
|
@@ -418,6 +452,56 @@ function applyCatalogDefaults(
|
|
|
418
452
|
}
|
|
419
453
|
}
|
|
420
454
|
|
|
455
|
+
function installedWeightMb(
|
|
456
|
+
installed: InstalledModel,
|
|
457
|
+
catalog: CatalogModel | undefined,
|
|
458
|
+
): number {
|
|
459
|
+
if (
|
|
460
|
+
typeof installed.sizeBytes === "number" &&
|
|
461
|
+
Number.isFinite(installed.sizeBytes) &&
|
|
462
|
+
installed.sizeBytes > 0
|
|
463
|
+
) {
|
|
464
|
+
return installed.sizeBytes / (1024 * 1024);
|
|
465
|
+
}
|
|
466
|
+
if (
|
|
467
|
+
catalog &&
|
|
468
|
+
typeof catalog.sizeGb === "number" &&
|
|
469
|
+
Number.isFinite(catalog.sizeGb) &&
|
|
470
|
+
catalog.sizeGb > 0
|
|
471
|
+
) {
|
|
472
|
+
return catalog.sizeGb * 1024;
|
|
473
|
+
}
|
|
474
|
+
return 0;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/** ELIZA_PREFER_ACCURATE_KV_WHEN_HEADROOM=1 opts into the f16-KV-on-headroom path. */
|
|
478
|
+
function preferAccurateKvWhenHeadroom(): boolean {
|
|
479
|
+
const v =
|
|
480
|
+
process.env.ELIZA_PREFER_ACCURATE_KV_WHEN_HEADROOM?.trim().toLowerCase();
|
|
481
|
+
return v === "1" || v === "true" || v === "yes";
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
function resolveRuntimeContextFit(
|
|
485
|
+
installed: InstalledModel,
|
|
486
|
+
catalog: CatalogModel | undefined,
|
|
487
|
+
nativeContext: number | undefined,
|
|
488
|
+
hardware: HardwareProbe | undefined,
|
|
489
|
+
): RuntimeContextFit | null {
|
|
490
|
+
if (!catalog || nativeContext === undefined) return null;
|
|
491
|
+
if (!hardware) return null;
|
|
492
|
+
|
|
493
|
+
return computeRuntimeContextFit({
|
|
494
|
+
params: catalog.params,
|
|
495
|
+
weightMb: installedWeightMb(installed, catalog),
|
|
496
|
+
usableMb: Math.max(
|
|
497
|
+
0,
|
|
498
|
+
hostRamMbFromProbe(hardware) - ramHeadroomReserveMb(),
|
|
499
|
+
),
|
|
500
|
+
nativeContext,
|
|
501
|
+
preferAccurateKvWhenHeadroom: preferAccurateKvWhenHeadroom(),
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
|
|
421
505
|
function mergeOverrides(
|
|
422
506
|
args: LocalInferenceLoadArgs,
|
|
423
507
|
overrides: LocalInferenceLoadOverrides | undefined,
|
|
@@ -557,7 +641,13 @@ export async function resolveLocalInferenceLoadArgs(
|
|
|
557
641
|
const runtime = catalog?.runtime;
|
|
558
642
|
const manifestLoader = options.manifestLoader ?? defaultManifestLoader;
|
|
559
643
|
|
|
560
|
-
applyCatalogDefaults(
|
|
644
|
+
applyCatalogDefaults(
|
|
645
|
+
args,
|
|
646
|
+
installed,
|
|
647
|
+
catalog,
|
|
648
|
+
manifestLoader,
|
|
649
|
+
options.hardware,
|
|
650
|
+
);
|
|
561
651
|
|
|
562
652
|
// WS2: when the tier declares vision and the per-tier mmproj GGUF is
|
|
563
653
|
// already on disk, plumb the path. The text load is never gated on
|
|
@@ -574,10 +664,10 @@ export async function resolveLocalInferenceLoadArgs(
|
|
|
574
664
|
// here; `applyCatalogDefaults` owns the chat-side context. The MTP
|
|
575
665
|
// block only owns the speculative draft window.
|
|
576
666
|
//
|
|
577
|
-
// Two MTP shapes:
|
|
578
|
-
// GGUF (no `drafterFile` in the catalog) and runs with no
|
|
579
|
-
// draft model; separate-drafter MTP declares a `drafterFile`
|
|
580
|
-
// requires the bundled drafter GGUF to be present on disk.
|
|
667
|
+
// Two MTP shapes: embedded-draft-head MTP embeds the draft head in
|
|
668
|
+
// the text GGUF (no `drafterFile` in the catalog) and runs with no
|
|
669
|
+
// separate draft model; separate-drafter MTP declares a `drafterFile`
|
|
670
|
+
// and requires the bundled drafter GGUF to be present on disk.
|
|
581
671
|
const sameFileMtp = !mtp.drafterFile;
|
|
582
672
|
const drafterPath = sameFileMtp
|
|
583
673
|
? undefined
|
|
@@ -895,6 +985,102 @@ function collectFailedEvalNames(manifest: Eliza1Manifest): string[] {
|
|
|
895
985
|
return failed;
|
|
896
986
|
}
|
|
897
987
|
|
|
988
|
+
/**
|
|
989
|
+
* Refusal raised when activation is asked for a manifest-shipping bundle whose
|
|
990
|
+
* declared `kernels.required` is missing one of the kernels its tier requires
|
|
991
|
+
* (`REQUIRED_KERNELS_BY_TIER`). native/CLAUDE.md §3#5 makes this a hard error:
|
|
992
|
+
* a bundle that doesn't declare its required quant/attention kernels would emit
|
|
993
|
+
* garbage (or silently fall back to an un-optimized path), so we refuse to
|
|
994
|
+
* activate it rather than run a broken model.
|
|
995
|
+
*/
|
|
996
|
+
export class MissingRequiredKernelsError extends Error {
|
|
997
|
+
readonly modelId: string;
|
|
998
|
+
readonly tier: Eliza1Tier;
|
|
999
|
+
readonly missing: ReadonlyArray<Eliza1Kernel>;
|
|
1000
|
+
|
|
1001
|
+
constructor(args: {
|
|
1002
|
+
modelId: string;
|
|
1003
|
+
tier: Eliza1Tier;
|
|
1004
|
+
missing: ReadonlyArray<Eliza1Kernel>;
|
|
1005
|
+
}) {
|
|
1006
|
+
super(
|
|
1007
|
+
`Model "${args.modelId}" (tier ${args.tier}) is missing required kernel(s): ${args.missing.join(", ")}. Its manifest declares kernels.required without the tier's mandatory set (${REQUIRED_KERNELS_BY_TIER[args.tier].join(", ")}). Refusing to activate — re-fetch a correctly-built bundle.`,
|
|
1008
|
+
);
|
|
1009
|
+
this.name = "MissingRequiredKernelsError";
|
|
1010
|
+
this.modelId = args.modelId;
|
|
1011
|
+
this.tier = args.tier;
|
|
1012
|
+
this.missing = args.missing;
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
/**
|
|
1017
|
+
* Activation kernel gate (native/CLAUDE.md §3#5). When the installed bundle
|
|
1018
|
+
* ships a manifest, verify it declares every kernel its tier requires; throw
|
|
1019
|
+
* `MissingRequiredKernelsError` otherwise. A bundle with no manifest (bare
|
|
1020
|
+
* GGUF, external scan, dev path) is NOT gated — there is no kernel contract to
|
|
1021
|
+
* check, so it is a no-op.
|
|
1022
|
+
*/
|
|
1023
|
+
export function assertRequiredKernelsPresent(
|
|
1024
|
+
installed: InstalledModel,
|
|
1025
|
+
manifestLoader: ManifestLoader = defaultManifestLoader,
|
|
1026
|
+
): void {
|
|
1027
|
+
const manifest = manifestLoader(installed.id, installed);
|
|
1028
|
+
if (!manifest) return;
|
|
1029
|
+
const missing = missingRequiredKernels(
|
|
1030
|
+
manifest.tier,
|
|
1031
|
+
manifest.kernels.required,
|
|
1032
|
+
);
|
|
1033
|
+
if (missing.length === 0) return;
|
|
1034
|
+
throw new MissingRequiredKernelsError({
|
|
1035
|
+
modelId: installed.id,
|
|
1036
|
+
tier: manifest.tier,
|
|
1037
|
+
missing,
|
|
1038
|
+
});
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* native/CLAUDE.md §3#5: "The runtime MUST log the kernel set on startup."
|
|
1043
|
+
* Emits one structured line per activation naming the resolved required +
|
|
1044
|
+
* optional kernel set and the compute backend. Required is the union of the
|
|
1045
|
+
* tier's mandatory manifest kernels and any catalog-declared `requiresKernel`
|
|
1046
|
+
* (mapped runtime→manifest); optional is the tier's optional set. Best-effort:
|
|
1047
|
+
* never throws — a bad probe or unknown tier degrades the line, never the load.
|
|
1048
|
+
*/
|
|
1049
|
+
function logResolvedKernelSet(
|
|
1050
|
+
installed: InstalledModel,
|
|
1051
|
+
catalog: CatalogModel | undefined,
|
|
1052
|
+
manifest: Eliza1Manifest | undefined,
|
|
1053
|
+
probe: HardwareProbe,
|
|
1054
|
+
): void {
|
|
1055
|
+
const tier: Eliza1Tier | undefined =
|
|
1056
|
+
manifest?.tier ??
|
|
1057
|
+
(installed.id.startsWith("eliza-1-")
|
|
1058
|
+
? (installed.id.slice("eliza-1-".length) as Eliza1Tier)
|
|
1059
|
+
: undefined);
|
|
1060
|
+
if (!tier || !REQUIRED_KERNELS_BY_TIER[tier]) return;
|
|
1061
|
+
|
|
1062
|
+
const required = new Set<Eliza1Kernel>(REQUIRED_KERNELS_BY_TIER[tier]);
|
|
1063
|
+
for (const runtimeKernel of catalog?.runtime?.optimizations?.requiresKernel ??
|
|
1064
|
+
[]) {
|
|
1065
|
+
const mapped = RUNTIME_TO_ELIZA1_KERNEL[runtimeKernel as never];
|
|
1066
|
+
if (mapped) required.add(mapped);
|
|
1067
|
+
}
|
|
1068
|
+
const optional = OPTIONAL_KERNELS_BY_TIER[tier];
|
|
1069
|
+
const backend = resolveComputeBackendLabel(probe);
|
|
1070
|
+
console.info(
|
|
1071
|
+
`[LocalInferenceEngine] kernel set: required=[${[...required].join(", ")}] optional=[${optional.join(", ")}] backend=${backend}`,
|
|
1072
|
+
);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* Best-effort label for the compute backend the fused lib will autoselect.
|
|
1077
|
+
* The actual CPU/GPU pick happens inside the FFI runtime; this reports the
|
|
1078
|
+
* host probe's detected GPU backend (or `cpu`) for the startup log only.
|
|
1079
|
+
*/
|
|
1080
|
+
function resolveComputeBackendLabel(probe: HardwareProbe): string {
|
|
1081
|
+
return probe.gpu ? probe.gpu.backend : "cpu";
|
|
1082
|
+
}
|
|
1083
|
+
|
|
898
1084
|
function isLoader(value: unknown): value is LocalInferenceLoader {
|
|
899
1085
|
if (!value || typeof value !== "object") return false;
|
|
900
1086
|
const candidate = value as Partial<LocalInferenceLoader>;
|
|
@@ -1002,6 +1188,12 @@ export class ActiveModelCoordinator {
|
|
|
1002
1188
|
// it sees the 422 from the route layer directly.
|
|
1003
1189
|
assertManifestEvalsPassed(installed, opts.manifestLoader);
|
|
1004
1190
|
|
|
1191
|
+
// Activation kernel gate (native/CLAUDE.md §3#5). A manifest-shipping
|
|
1192
|
+
// bundle that doesn't declare its tier's required kernels would run an
|
|
1193
|
+
// un-optimized/broken path — refuse it here, before the loading state,
|
|
1194
|
+
// same as the eval gate. No-op for bare-GGUF/dev bundles (no manifest).
|
|
1195
|
+
assertRequiredKernelsPresent(installed, opts.manifestLoader);
|
|
1196
|
+
|
|
1005
1197
|
this.state = {
|
|
1006
1198
|
modelId: installed.id,
|
|
1007
1199
|
loadedAt: null,
|
|
@@ -1131,7 +1323,9 @@ export class ActiveModelCoordinator {
|
|
|
1131
1323
|
`[local-inference] Loading "${installed.id}" with tight RAM headroom (~${admission.minMb} MB floor, ${admission.recommendedMb} MB recommended; ${hostRamMbFromProbe(probe)} MB host). Expect swapping under sustained load.`,
|
|
1132
1324
|
);
|
|
1133
1325
|
}
|
|
1134
|
-
const resolved = await resolveLocalInferenceLoadArgs(installed, overrides
|
|
1326
|
+
const resolved = await resolveLocalInferenceLoadArgs(installed, overrides, {
|
|
1327
|
+
hardware: probe,
|
|
1328
|
+
});
|
|
1135
1329
|
// WS2: warn one-shot when the tier declares vision but the
|
|
1136
1330
|
// per-tier mmproj GGUF isn't on disk yet. The text load still
|
|
1137
1331
|
// proceeds; vision capability is degraded for this session
|
|
@@ -1144,6 +1338,15 @@ export class ActiveModelCoordinator {
|
|
|
1144
1338
|
} else {
|
|
1145
1339
|
await localInferenceEngine.load(installed.path, resolved);
|
|
1146
1340
|
}
|
|
1341
|
+
// native/CLAUDE.md §3#5: log the resolved kernel set once per activation,
|
|
1342
|
+
// after the load lands. Best-effort — never throws.
|
|
1343
|
+
const manifestLoader = opts.manifestLoader ?? defaultManifestLoader;
|
|
1344
|
+
logResolvedKernelSet(
|
|
1345
|
+
installed,
|
|
1346
|
+
findCatalogModel(installed.id),
|
|
1347
|
+
manifestLoader(installed.id, installed) ?? undefined,
|
|
1348
|
+
probe,
|
|
1349
|
+
);
|
|
1147
1350
|
const runtimeLoad = loader
|
|
1148
1351
|
? null
|
|
1149
1352
|
: localInferenceEngine.currentRuntimeLoadConfig();
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
export const QWEN_PROVENANCE_RE = /\bqwen/i;
|
|
5
|
+
|
|
6
|
+
function readStringPath(
|
|
7
|
+
input: unknown,
|
|
8
|
+
keys: readonly string[],
|
|
9
|
+
): string | undefined {
|
|
10
|
+
let current: unknown = input;
|
|
11
|
+
for (const key of keys) {
|
|
12
|
+
if (!current || typeof current !== "object") return undefined;
|
|
13
|
+
current = (current as Record<string, unknown>)[key];
|
|
14
|
+
}
|
|
15
|
+
return typeof current === "string" ? current : undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function collectQwenAsrProvenanceBlockers(input: unknown): string[] {
|
|
19
|
+
const blockers: string[] = [];
|
|
20
|
+
const asrBase = readStringPath(input, ["lineage", "asr", "base"]);
|
|
21
|
+
if (asrBase && QWEN_PROVENANCE_RE.test(asrBase)) {
|
|
22
|
+
blockers.push(
|
|
23
|
+
`lineage.asr.base: a strict/defaultEligible Gemma-4 release must not ship Qwen ASR provenance (${asrBase})`,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
const asrRepo = readStringPath(input, [
|
|
27
|
+
"provenance",
|
|
28
|
+
"sourceModels",
|
|
29
|
+
"asr",
|
|
30
|
+
"repo",
|
|
31
|
+
]);
|
|
32
|
+
if (asrRepo && QWEN_PROVENANCE_RE.test(asrRepo)) {
|
|
33
|
+
blockers.push(
|
|
34
|
+
`provenance.sourceModels.asr.repo: a strict/defaultEligible Gemma-4 release must not source ASR from Qwen (${asrRepo})`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
return blockers;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function readBundleAsrProvenanceBlockers(bundleRoot: string): string[] {
|
|
41
|
+
const manifestPath = path.join(bundleRoot, "eliza-1.manifest.json");
|
|
42
|
+
let parsed: unknown;
|
|
43
|
+
try {
|
|
44
|
+
parsed = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
45
|
+
} catch {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
return collectQwenAsrProvenanceBlockers(parsed);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function directoryHasRegularFile(dir: string): boolean {
|
|
52
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
53
|
+
const child = path.join(dir, entry.name);
|
|
54
|
+
if (entry.isFile()) return true;
|
|
55
|
+
if (entry.isDirectory() && directoryHasRegularFile(child)) return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function bundleHasAsrModelFiles(bundleRoot: string): boolean {
|
|
61
|
+
const asrDir = path.join(bundleRoot, "asr");
|
|
62
|
+
if (!existsSync(asrDir)) return false;
|
|
63
|
+
try {
|
|
64
|
+
return directoryHasRegularFile(asrDir);
|
|
65
|
+
} catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
AssignmentRejectedError,
|
|
8
|
+
readAssignments,
|
|
9
|
+
setAssignment,
|
|
10
|
+
} from "./assignments";
|
|
11
|
+
import { elizaModelsDir } from "./paths";
|
|
12
|
+
import { upsertElizaModel } from "./registry";
|
|
13
|
+
import type { InstalledModel } from "./types";
|
|
14
|
+
|
|
15
|
+
const originalEnv = { ...process.env };
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
process.env.ELIZA_STATE_DIR = fs.mkdtempSync(
|
|
19
|
+
path.join(os.tmpdir(), "eliza-assignment-validate-"),
|
|
20
|
+
);
|
|
21
|
+
// Default to a desktop host (no explicit-modelPath generic binding).
|
|
22
|
+
delete process.env.ELIZA_PLATFORM;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
const dir = process.env.ELIZA_STATE_DIR;
|
|
27
|
+
process.env = { ...originalEnv };
|
|
28
|
+
if (dir?.includes("eliza-assignment-validate-")) {
|
|
29
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
async function registerForeignModel(): Promise<InstalledModel> {
|
|
34
|
+
// A model whose id is NOT a curated Eliza-1 tier. The setAssignment boundary
|
|
35
|
+
// must reject it — the local stack is Eliza-1 only (#8808).
|
|
36
|
+
const dir = elizaModelsDir();
|
|
37
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
38
|
+
const filePath = path.join(dir, "llama-3.2-3b-q4.gguf");
|
|
39
|
+
fs.writeFileSync(filePath, "gguf");
|
|
40
|
+
const model: InstalledModel = {
|
|
41
|
+
id: "hf:meta-llama/Llama-3.2-3B-Instruct-GGUF::Llama-3.2-3B-Instruct-Q4_K_M.gguf",
|
|
42
|
+
displayName: "Llama-3.2-3B-Instruct",
|
|
43
|
+
path: filePath,
|
|
44
|
+
sizeBytes: 4,
|
|
45
|
+
installedAt: new Date().toISOString(),
|
|
46
|
+
lastUsedAt: null,
|
|
47
|
+
source: "eliza-download",
|
|
48
|
+
};
|
|
49
|
+
await upsertElizaModel(model);
|
|
50
|
+
return model;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function registerFusedModel(): Promise<InstalledModel> {
|
|
54
|
+
const bundleRoot = path.join(elizaModelsDir(), "eliza-1-4b");
|
|
55
|
+
const textDir = path.join(bundleRoot, "text");
|
|
56
|
+
fs.mkdirSync(textDir, { recursive: true });
|
|
57
|
+
const filePath = path.join(textDir, "eliza-1-4b-128k.gguf");
|
|
58
|
+
fs.writeFileSync(filePath, "gguf");
|
|
59
|
+
const model: InstalledModel = {
|
|
60
|
+
id: "eliza-1-4b",
|
|
61
|
+
displayName: "eliza-1-4b",
|
|
62
|
+
path: filePath,
|
|
63
|
+
sizeBytes: 4,
|
|
64
|
+
bundleRoot,
|
|
65
|
+
installedAt: new Date().toISOString(),
|
|
66
|
+
lastUsedAt: null,
|
|
67
|
+
source: "eliza-download",
|
|
68
|
+
runtimeClass: "fused-eliza1",
|
|
69
|
+
};
|
|
70
|
+
await upsertElizaModel(model);
|
|
71
|
+
return model;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// (Removed "canServeRuntimeClassOnHost" suite — the generic-gguf runtime
|
|
75
|
+
// class + its host-servability helper were retired in the eliza-1-only
|
|
76
|
+
// cutover (#8808/#9033). The setAssignment boundary tests below now own the
|
|
77
|
+
// "non-eliza-1 models are rejected" contract.)
|
|
78
|
+
|
|
79
|
+
describe("setAssignment boundary validation", () => {
|
|
80
|
+
it("rejects a non-Eliza-1 model on desktop before assignment writes", async () => {
|
|
81
|
+
const model = await registerForeignModel();
|
|
82
|
+
await expect(setAssignment("TEXT_LARGE", model.id)).rejects.toBeInstanceOf(
|
|
83
|
+
AssignmentRejectedError,
|
|
84
|
+
);
|
|
85
|
+
// Nothing was written.
|
|
86
|
+
expect(await readAssignments()).toEqual({});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("rejects a non-Eliza-1 model on mobile too", async () => {
|
|
90
|
+
process.env.ELIZA_PLATFORM = "ios";
|
|
91
|
+
const model = await registerForeignModel();
|
|
92
|
+
await expect(setAssignment("TEXT_LARGE", model.id)).rejects.toThrow(
|
|
93
|
+
/curated Eliza-1/i,
|
|
94
|
+
);
|
|
95
|
+
expect(await readAssignments()).toEqual({});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("always accepts a fused Eliza-1 model on desktop", async () => {
|
|
99
|
+
const model = await registerFusedModel();
|
|
100
|
+
const next = await setAssignment("TEXT_LARGE", model.id);
|
|
101
|
+
expect(next.TEXT_LARGE).toBe(model.id);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("allows a not-yet-installed catalog id through (policy, not load)", async () => {
|
|
105
|
+
// An id that is not in the registry is a declared policy; the readiness
|
|
106
|
+
// layer surfaces the missing file separately — validation must not block.
|
|
107
|
+
const next = await setAssignment("TEXT_SMALL", "eliza-1-9b");
|
|
108
|
+
expect(next.TEXT_SMALL).toBe("eliza-1-9b");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("clearing a slot is never gated", async () => {
|
|
112
|
+
const model = await registerFusedModel();
|
|
113
|
+
await setAssignment("TEXT_LARGE", model.id);
|
|
114
|
+
delete process.env.ELIZA_PLATFORM; // back to desktop
|
|
115
|
+
const next = await setAssignment("TEXT_LARGE", null);
|
|
116
|
+
expect(next.TEXT_LARGE).toBeUndefined();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
buildRecommendedAssignments,
|
|
7
7
|
ensureDefaultAssignment,
|
|
8
8
|
readAssignments,
|
|
9
|
+
setAssignment,
|
|
10
|
+
writeAssignments,
|
|
9
11
|
} from "./assignments";
|
|
10
12
|
import type { InstalledModel } from "./types";
|
|
11
13
|
|
|
@@ -77,4 +79,28 @@ describe("local inference assignments", () => {
|
|
|
77
79
|
|
|
78
80
|
expect(await readAssignments()).toEqual({});
|
|
79
81
|
});
|
|
82
|
+
|
|
83
|
+
it("rejects custom assignment writes", async () => {
|
|
84
|
+
process.env.ELIZA_STATE_DIR = fs.mkdtempSync(
|
|
85
|
+
path.join(os.tmpdir(), "eliza-assignments-test-"),
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
await expect(
|
|
89
|
+
setAssignment("TEXT_LARGE", "hf:some-org/some-model::model.Q4_K_M.gguf"),
|
|
90
|
+
).rejects.toThrow(/curated Eliza-1/i);
|
|
91
|
+
expect(await readAssignments()).toEqual({});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("drops stale custom ids while preserving curated assignments", async () => {
|
|
95
|
+
process.env.ELIZA_STATE_DIR = fs.mkdtempSync(
|
|
96
|
+
path.join(os.tmpdir(), "eliza-assignments-test-"),
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
await writeAssignments({
|
|
100
|
+
TEXT_SMALL: "eliza-1-4b",
|
|
101
|
+
TEXT_LARGE: "hf:some-org/some-model::model.Q4_K_M.gguf",
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
expect(await readAssignments()).toEqual({ TEXT_SMALL: "eliza-1-4b" });
|
|
105
|
+
});
|
|
80
106
|
});
|
|
@@ -20,6 +20,26 @@ import type { AgentModelSlot, InstalledModel, ModelAssignments } from "./types";
|
|
|
20
20
|
|
|
21
21
|
const ASSIGNMENTS_FILENAME = "assignments.json";
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Raised when a slot assignment is outside the curated Eliza-1 catalog. The
|
|
25
|
+
* local stack is Eliza-1 only, so the assignment policy rejects anything else.
|
|
26
|
+
*/
|
|
27
|
+
export class AssignmentRejectedError extends Error {
|
|
28
|
+
readonly code = "ASSIGNMENT_REJECTED" as const;
|
|
29
|
+
readonly slot: AgentModelSlot;
|
|
30
|
+
readonly modelId: string;
|
|
31
|
+
constructor(args: {
|
|
32
|
+
slot: AgentModelSlot;
|
|
33
|
+
modelId: string;
|
|
34
|
+
message: string;
|
|
35
|
+
}) {
|
|
36
|
+
super(args.message);
|
|
37
|
+
this.name = "AssignmentRejectedError";
|
|
38
|
+
this.slot = args.slot;
|
|
39
|
+
this.modelId = args.modelId;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
23
43
|
interface AssignmentsFile {
|
|
24
44
|
version: 1;
|
|
25
45
|
assignments: ModelAssignments;
|
|
@@ -29,6 +49,27 @@ function assignmentsPath(): string {
|
|
|
29
49
|
return path.join(localInferenceRoot(), ASSIGNMENTS_FILENAME);
|
|
30
50
|
}
|
|
31
51
|
|
|
52
|
+
function isCuratedEliza1AssignmentId(modelId: string): boolean {
|
|
53
|
+
const catalog = findCatalogModel(modelId);
|
|
54
|
+
return (
|
|
55
|
+
!!catalog &&
|
|
56
|
+
!catalog.hiddenFromCatalog &&
|
|
57
|
+
catalog.runtimeRole !== "mtp-drafter" &&
|
|
58
|
+
isDefaultEligibleId(catalog.id)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function sanitizeAssignments(assignments: ModelAssignments): ModelAssignments {
|
|
63
|
+
const next: ModelAssignments = {};
|
|
64
|
+
for (const [slot, modelId] of Object.entries(assignments) as Array<
|
|
65
|
+
[AgentModelSlot, string | undefined]
|
|
66
|
+
>) {
|
|
67
|
+
if (!modelId || !isCuratedEliza1AssignmentId(modelId)) continue;
|
|
68
|
+
next[slot] = modelId;
|
|
69
|
+
}
|
|
70
|
+
return next;
|
|
71
|
+
}
|
|
72
|
+
|
|
32
73
|
async function ensureRoot(): Promise<void> {
|
|
33
74
|
await fs.mkdir(localInferenceRoot(), { recursive: true });
|
|
34
75
|
}
|
|
@@ -38,7 +79,7 @@ export async function readAssignments(): Promise<ModelAssignments> {
|
|
|
38
79
|
const raw = await fs.readFile(assignmentsPath(), "utf8");
|
|
39
80
|
const parsed = JSON.parse(raw) as AssignmentsFile;
|
|
40
81
|
if (parsed?.version !== 1 || !parsed.assignments) return {};
|
|
41
|
-
return parsed.assignments;
|
|
82
|
+
return sanitizeAssignments(parsed.assignments);
|
|
42
83
|
} catch {
|
|
43
84
|
return {};
|
|
44
85
|
}
|
|
@@ -58,9 +99,8 @@ function pickLargestInstalledModel(
|
|
|
58
99
|
* Build slot recommendations from currently-installed models.
|
|
59
100
|
*
|
|
60
101
|
* Only default-eligible Eliza-1 downloads are auto-recommended.
|
|
61
|
-
* External-scan blobs and ad-hoc Hugging Face downloads are
|
|
62
|
-
*
|
|
63
|
-
* any agent slot.
|
|
102
|
+
* External-scan blobs and ad-hoc Hugging Face downloads are never assigned to
|
|
103
|
+
* agent slots.
|
|
64
104
|
*
|
|
65
105
|
* Why: external blobs may use newer architectures or quant formats outside
|
|
66
106
|
* the bundled `capacitor-llama` binding's supported set. Auto-loading
|
|
@@ -119,6 +159,14 @@ export async function setAssignment(
|
|
|
119
159
|
const current = await readAssignments();
|
|
120
160
|
const next: ModelAssignments = { ...current };
|
|
121
161
|
if (modelId) {
|
|
162
|
+
if (!isCuratedEliza1AssignmentId(modelId)) {
|
|
163
|
+
throw new AssignmentRejectedError({
|
|
164
|
+
slot,
|
|
165
|
+
modelId,
|
|
166
|
+
message:
|
|
167
|
+
"Local inference assignments are limited to curated Eliza-1 tiers.",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
122
170
|
next[slot] = modelId;
|
|
123
171
|
} else {
|
|
124
172
|
delete next[slot];
|