@elizaos/plugin-local-inference 2.0.3-beta.2 → 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/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
|
@@ -2,11 +2,21 @@ import { type AgentRuntime, ModelType } from "@elizaos/core";
|
|
|
2
2
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
3
|
|
|
4
4
|
const modeState = vi.hoisted(() => ({ mode: "local" }));
|
|
5
|
+
const assignmentsState = vi.hoisted(() => ({
|
|
6
|
+
assignments: {} as Record<string, string>,
|
|
7
|
+
}));
|
|
8
|
+
const registryState = vi.hoisted(() => ({
|
|
9
|
+
installed: [] as Array<{ id: string; path: string }>,
|
|
10
|
+
}));
|
|
11
|
+
const hardwareState = vi.hoisted(() => ({
|
|
12
|
+
probe: { memory: { totalGb: 8 } },
|
|
13
|
+
}));
|
|
5
14
|
const engineState = vi.hoisted(() => ({
|
|
6
15
|
activeBackendId: vi.fn(() => "llama-server"),
|
|
7
16
|
available: vi.fn(async () => true),
|
|
8
17
|
conversation: vi.fn(() => null),
|
|
9
18
|
currentModelPath: vi.fn(() => null),
|
|
19
|
+
ensureActiveBundleAsrReady: vi.fn(async () => undefined),
|
|
10
20
|
ensureActiveBundleVoiceReady: vi.fn(async () => undefined),
|
|
11
21
|
generate: vi.fn(async () => "ok"),
|
|
12
22
|
generateInConversation: vi.fn(async () => ({
|
|
@@ -42,7 +52,7 @@ vi.mock("../services/active-model", () => ({
|
|
|
42
52
|
|
|
43
53
|
vi.mock("../services/assignments", () => ({
|
|
44
54
|
autoAssignAtBoot: vi.fn(async () => null),
|
|
45
|
-
readEffectiveAssignments: vi.fn(async () =>
|
|
55
|
+
readEffectiveAssignments: vi.fn(async () => assignmentsState.assignments),
|
|
46
56
|
}));
|
|
47
57
|
|
|
48
58
|
vi.mock("../services/cache-bridge", () => ({
|
|
@@ -71,12 +81,16 @@ vi.mock("../services/handler-registry", () => ({
|
|
|
71
81
|
},
|
|
72
82
|
}));
|
|
73
83
|
|
|
84
|
+
vi.mock("../services/hardware", () => ({
|
|
85
|
+
probeHardware: vi.fn(async () => hardwareState.probe),
|
|
86
|
+
}));
|
|
87
|
+
|
|
74
88
|
vi.mock("../services/memory-arbiter", () => ({
|
|
75
89
|
tryGetMemoryArbiter: vi.fn(() => arbiterState),
|
|
76
90
|
}));
|
|
77
91
|
|
|
78
92
|
vi.mock("../services/registry", () => ({
|
|
79
|
-
listInstalledModels: vi.fn(async () =>
|
|
93
|
+
listInstalledModels: vi.fn(async () => registryState.installed),
|
|
80
94
|
}));
|
|
81
95
|
|
|
82
96
|
vi.mock("../services/router-handler", () => ({
|
|
@@ -90,6 +104,8 @@ vi.mock("../services/voice", () => ({
|
|
|
90
104
|
})),
|
|
91
105
|
}));
|
|
92
106
|
|
|
107
|
+
import { resolveLocalInferenceLoadArgs } from "../services/active-model";
|
|
108
|
+
import { probeHardware } from "../services/hardware";
|
|
93
109
|
import { installRouterHandler } from "../services/router-handler";
|
|
94
110
|
import { VoiceStartupError } from "../services/voice/errors";
|
|
95
111
|
import { ensureLocalInferenceHandler } from "./ensure-local-inference-handler";
|
|
@@ -151,6 +167,9 @@ function findRegisteredHandler(
|
|
|
151
167
|
beforeEach(() => {
|
|
152
168
|
vi.clearAllMocks();
|
|
153
169
|
modeState.mode = "local";
|
|
170
|
+
assignmentsState.assignments = {};
|
|
171
|
+
registryState.installed = [];
|
|
172
|
+
hardwareState.probe = { memory: { totalGb: 8 } };
|
|
154
173
|
delete process.env.ELIZA_LOCAL_LLAMA;
|
|
155
174
|
delete process.env.ELIZA_DEVICE_BRIDGE_ENABLED;
|
|
156
175
|
delete process.env.ELIZA_DISABLE_LOCAL_EMBEDDINGS;
|
|
@@ -164,6 +183,9 @@ beforeEach(() => {
|
|
|
164
183
|
title: "A small image",
|
|
165
184
|
description: "A tiny synthetic image.",
|
|
166
185
|
});
|
|
186
|
+
vi.mocked(resolveLocalInferenceLoadArgs).mockImplementation(
|
|
187
|
+
async (target) => target,
|
|
188
|
+
);
|
|
167
189
|
});
|
|
168
190
|
|
|
169
191
|
describe("ensureLocalInferenceHandler", () => {
|
|
@@ -297,6 +319,88 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
297
319
|
);
|
|
298
320
|
});
|
|
299
321
|
|
|
322
|
+
it("uses a fine-grained maxTokensPerStep for user-visible streaming, coarse for internal calls", async () => {
|
|
323
|
+
const prior = process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP;
|
|
324
|
+
delete process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP;
|
|
325
|
+
try {
|
|
326
|
+
const { registrations, runtime } = makeRuntime();
|
|
327
|
+
engineState.hasLoadedModel.mockReturnValue(true);
|
|
328
|
+
|
|
329
|
+
await ensureLocalInferenceHandler(runtime);
|
|
330
|
+
const handler = findRegisteredHandler(
|
|
331
|
+
registrations,
|
|
332
|
+
ModelType.TEXT_LARGE,
|
|
333
|
+
);
|
|
334
|
+
|
|
335
|
+
// Streaming reply (onStreamChunk wired) → tuned fine-grained step (8).
|
|
336
|
+
await handler(runtime, {
|
|
337
|
+
prompt: "hi",
|
|
338
|
+
stream: true,
|
|
339
|
+
onStreamChunk: () => {},
|
|
340
|
+
});
|
|
341
|
+
expect(engineState.generate).toHaveBeenLastCalledWith(
|
|
342
|
+
expect.objectContaining({ maxTokensPerStep: 8 }),
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
// Internal / non-streamed call → no override (runner keeps coarse 32).
|
|
346
|
+
await handler(runtime, { prompt: "hi" });
|
|
347
|
+
expect(engineState.generate).toHaveBeenLastCalledWith(
|
|
348
|
+
expect.objectContaining({ maxTokensPerStep: undefined }),
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
// The shared env knob overrides the tuned streaming default.
|
|
352
|
+
process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP = "4";
|
|
353
|
+
await handler(runtime, {
|
|
354
|
+
prompt: "hi",
|
|
355
|
+
stream: true,
|
|
356
|
+
onStreamChunk: () => {},
|
|
357
|
+
});
|
|
358
|
+
expect(engineState.generate).toHaveBeenLastCalledWith(
|
|
359
|
+
expect.objectContaining({ maxTokensPerStep: 4 }),
|
|
360
|
+
);
|
|
361
|
+
} finally {
|
|
362
|
+
if (prior === undefined) {
|
|
363
|
+
delete process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP;
|
|
364
|
+
} else {
|
|
365
|
+
process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP = prior;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it("passes hardware-aware load args through desktop lazy assignment loads", async () => {
|
|
371
|
+
const installed = {
|
|
372
|
+
id: "eliza-1-2b",
|
|
373
|
+
path: "/models/eliza-1-2b.gguf",
|
|
374
|
+
};
|
|
375
|
+
const resolved = {
|
|
376
|
+
...installed,
|
|
377
|
+
modelPath: installed.path,
|
|
378
|
+
contextSize: 32_768,
|
|
379
|
+
};
|
|
380
|
+
assignmentsState.assignments = { TEXT_SMALL: installed.id };
|
|
381
|
+
registryState.installed = [installed];
|
|
382
|
+
engineState.hasLoadedModel.mockReturnValue(true);
|
|
383
|
+
vi.mocked(resolveLocalInferenceLoadArgs).mockResolvedValueOnce(
|
|
384
|
+
resolved as never,
|
|
385
|
+
);
|
|
386
|
+
const { registrations, runtime } = makeRuntime();
|
|
387
|
+
|
|
388
|
+
await ensureLocalInferenceHandler(runtime);
|
|
389
|
+
const handler = findRegisteredHandler(registrations, ModelType.TEXT_SMALL);
|
|
390
|
+
|
|
391
|
+
await handler(runtime, {
|
|
392
|
+
messages: [{ role: "user", content: "hello" }],
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
expect(probeHardware).toHaveBeenCalledTimes(1);
|
|
396
|
+
expect(resolveLocalInferenceLoadArgs).toHaveBeenCalledWith(
|
|
397
|
+
installed,
|
|
398
|
+
undefined,
|
|
399
|
+
{ hardware: hardwareState.probe },
|
|
400
|
+
);
|
|
401
|
+
expect(engineState.load).toHaveBeenCalledWith(installed.path, resolved);
|
|
402
|
+
});
|
|
403
|
+
|
|
300
404
|
it.each([
|
|
301
405
|
[ModelType.TEXT_SMALL, "TEXT_SMALL"],
|
|
302
406
|
[ModelType.TEXT_LARGE, "TEXT_LARGE"],
|
|
@@ -348,6 +452,8 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
348
452
|
|
|
349
453
|
it("routes image description through the Eliza-1 vision arbiter", async () => {
|
|
350
454
|
const { registrations, runtime } = makeRuntime();
|
|
455
|
+
const signal = new AbortController().signal;
|
|
456
|
+
const onStreamChunk = vi.fn();
|
|
351
457
|
|
|
352
458
|
await ensureLocalInferenceHandler(runtime);
|
|
353
459
|
const registration = registrations.find(
|
|
@@ -365,24 +471,65 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
365
471
|
handler?.(runtime, {
|
|
366
472
|
imageUrl: "data:image/png;base64,AAAA",
|
|
367
473
|
prompt: "describe this",
|
|
474
|
+
stream: true,
|
|
475
|
+
signal,
|
|
476
|
+
onStreamChunk,
|
|
368
477
|
}),
|
|
369
478
|
).resolves.toEqual({
|
|
370
479
|
title: "A small image",
|
|
371
480
|
description: "A tiny synthetic image.",
|
|
372
481
|
});
|
|
373
482
|
expect(arbiterState.requestVisionDescribe).toHaveBeenCalledWith({
|
|
374
|
-
modelKey: "
|
|
483
|
+
modelKey: "gemma-vl",
|
|
375
484
|
payload: {
|
|
376
485
|
image: { kind: "dataUrl", dataUrl: "data:image/png;base64,AAAA" },
|
|
377
486
|
prompt: "describe this",
|
|
487
|
+
signal,
|
|
488
|
+
onTextChunk: expect.any(Function),
|
|
378
489
|
},
|
|
379
490
|
});
|
|
491
|
+
const payload = arbiterState.requestVisionDescribe.mock.calls[0]?.[0]
|
|
492
|
+
?.payload as { onTextChunk?: (chunk: string) => void | Promise<void> };
|
|
493
|
+
await payload.onTextChunk?.("token");
|
|
494
|
+
expect(onStreamChunk).toHaveBeenCalledWith("token");
|
|
380
495
|
expect(runtime.setSetting).toHaveBeenCalledWith(
|
|
381
496
|
"ELIZA1_VISION_HANDLER_PRESENT",
|
|
382
497
|
"1",
|
|
383
498
|
);
|
|
384
499
|
});
|
|
385
500
|
|
|
501
|
+
it("keeps image description buffered unless stream is explicitly true", async () => {
|
|
502
|
+
const { registrations, runtime } = makeRuntime();
|
|
503
|
+
const onStreamChunk = vi.fn();
|
|
504
|
+
|
|
505
|
+
await ensureLocalInferenceHandler(runtime);
|
|
506
|
+
const registration = registrations.find(
|
|
507
|
+
(entry) => entry.modelType === ModelType.IMAGE_DESCRIPTION,
|
|
508
|
+
);
|
|
509
|
+
const handler = registration?.handler as
|
|
510
|
+
| ((
|
|
511
|
+
runtime: AgentRuntime,
|
|
512
|
+
params: Record<string, unknown>,
|
|
513
|
+
) => Promise<{ title: string; description: string }>)
|
|
514
|
+
| undefined;
|
|
515
|
+
expect(handler).toBeDefined();
|
|
516
|
+
|
|
517
|
+
await handler?.(runtime, {
|
|
518
|
+
imageUrl: "https://example.test/image.png",
|
|
519
|
+
prompt: "describe this",
|
|
520
|
+
onStreamChunk,
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
expect(arbiterState.requestVisionDescribe).toHaveBeenCalledWith({
|
|
524
|
+
modelKey: "gemma-vl",
|
|
525
|
+
payload: {
|
|
526
|
+
image: { kind: "url", url: "https://example.test/image.png" },
|
|
527
|
+
prompt: "describe this",
|
|
528
|
+
},
|
|
529
|
+
});
|
|
530
|
+
expect(onStreamChunk).not.toHaveBeenCalled();
|
|
531
|
+
});
|
|
532
|
+
|
|
386
533
|
it("arms the active voice bundle before TRANSCRIPTION", async () => {
|
|
387
534
|
const { registrations, runtime } = makeRuntime();
|
|
388
535
|
|
|
@@ -402,10 +549,12 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
402
549
|
handler?.(runtime, { audio: new Uint8Array([82, 73, 70, 70]) }),
|
|
403
550
|
).resolves.toBe("transcribed");
|
|
404
551
|
|
|
405
|
-
expect(engineState.
|
|
552
|
+
expect(engineState.ensureActiveBundleAsrReady).toHaveBeenCalledTimes(1);
|
|
553
|
+
expect(engineState.ensureActiveBundleVoiceReady).not.toHaveBeenCalled();
|
|
406
554
|
expect(engineState.transcribePcm).toHaveBeenCalledWith(
|
|
407
555
|
{ pcm: new Float32Array([0]), sampleRate: 16_000 },
|
|
408
556
|
undefined,
|
|
557
|
+
undefined,
|
|
409
558
|
);
|
|
410
559
|
});
|
|
411
560
|
|
|
@@ -413,7 +562,7 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
413
562
|
// The fused libelizainference ASR runtime is the sole on-device
|
|
414
563
|
// transcriber. A startup failure must propagate (AGENTS.md §3) — there is
|
|
415
564
|
// no whisper.cpp second attempt and no silent empty transcript.
|
|
416
|
-
engineState.
|
|
565
|
+
engineState.ensureActiveBundleAsrReady.mockRejectedValueOnce(
|
|
417
566
|
new VoiceStartupError("missing-bundle-root", "no bundle"),
|
|
418
567
|
);
|
|
419
568
|
const { registrations, runtime } = makeRuntime();
|
|
@@ -434,6 +583,7 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
434
583
|
handler?.(runtime, { audio: new Uint8Array([82, 73, 70, 70]) }),
|
|
435
584
|
).rejects.toThrow(VoiceStartupError);
|
|
436
585
|
|
|
586
|
+
expect(engineState.ensureActiveBundleAsrReady).toHaveBeenCalledTimes(1);
|
|
437
587
|
expect(engineState.transcribePcm).not.toHaveBeenCalled();
|
|
438
588
|
});
|
|
439
589
|
|
|
@@ -504,6 +654,54 @@ describe("ensureLocalInferenceHandler", () => {
|
|
|
504
654
|
expect(received.length).toBeGreaterThan(1);
|
|
505
655
|
});
|
|
506
656
|
|
|
657
|
+
it("wires onTextChunk for a plain (non-structured) stream request", async () => {
|
|
658
|
+
// The chat path can ask for token streaming via `stream: true` without a
|
|
659
|
+
// response skeleton. The handler must still bridge onStreamChunk →
|
|
660
|
+
// onTextChunk so cloud-parity token streaming works for the local model.
|
|
661
|
+
const { registrations, runtime } = makeRuntime();
|
|
662
|
+
engineState.hasLoadedModel.mockReturnValue(true);
|
|
663
|
+
|
|
664
|
+
await ensureLocalInferenceHandler(runtime);
|
|
665
|
+
const handler = findRegisteredHandler(
|
|
666
|
+
registrations,
|
|
667
|
+
ModelType.RESPONSE_HANDLER,
|
|
668
|
+
);
|
|
669
|
+
|
|
670
|
+
await handler(runtime, {
|
|
671
|
+
messages: [{ role: "user", content: "hello" }],
|
|
672
|
+
stream: true,
|
|
673
|
+
onStreamChunk: vi.fn(),
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
expect(engineState.generate).toHaveBeenCalledWith(
|
|
677
|
+
expect.objectContaining({ onTextChunk: expect.any(Function) }),
|
|
678
|
+
);
|
|
679
|
+
});
|
|
680
|
+
|
|
681
|
+
it("does not wire onTextChunk for a non-streaming request", async () => {
|
|
682
|
+
// Non-streaming callers must not pay the per-chunk callback overhead:
|
|
683
|
+
// engineGenerateArgsFromParams only bridges the callback when the caller
|
|
684
|
+
// asked for streaming (`stream` or `streamStructured`).
|
|
685
|
+
const { registrations, runtime } = makeRuntime();
|
|
686
|
+
engineState.hasLoadedModel.mockReturnValue(true);
|
|
687
|
+
|
|
688
|
+
await ensureLocalInferenceHandler(runtime);
|
|
689
|
+
const handler = findRegisteredHandler(
|
|
690
|
+
registrations,
|
|
691
|
+
ModelType.RESPONSE_HANDLER,
|
|
692
|
+
);
|
|
693
|
+
|
|
694
|
+
await handler(runtime, {
|
|
695
|
+
messages: [{ role: "user", content: "hello" }],
|
|
696
|
+
onStreamChunk: vi.fn(),
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
const args = engineState.generate.mock.calls.at(-1)?.[0] as {
|
|
700
|
+
onTextChunk?: unknown;
|
|
701
|
+
};
|
|
702
|
+
expect(args.onTextChunk).toBeUndefined();
|
|
703
|
+
});
|
|
704
|
+
|
|
507
705
|
it("threads eliza thinking provider options into local engine args", async () => {
|
|
508
706
|
const { registrations, runtime } = makeRuntime();
|
|
509
707
|
engineState.hasLoadedModel.mockReturnValue(true);
|
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
import { deviceBridge } from "../services/device-bridge";
|
|
58
58
|
import { localInferenceEngine } from "../services/engine";
|
|
59
59
|
import { handlerRegistry } from "../services/handler-registry";
|
|
60
|
+
import { probeHardware } from "../services/hardware";
|
|
60
61
|
import { tryGetMemoryArbiter } from "../services/memory-arbiter";
|
|
61
62
|
import { listInstalledModels } from "../services/registry";
|
|
62
63
|
import { installRouterHandler } from "../services/router-handler";
|
|
@@ -270,10 +271,18 @@ async function ensureAssignedModelLoaded(
|
|
|
270
271
|
}
|
|
271
272
|
|
|
272
273
|
if (loader) {
|
|
274
|
+
const hardware = await probeHardware();
|
|
275
|
+
const resolved = await resolveLocalInferenceLoadArgs(target, undefined, {
|
|
276
|
+
hardware,
|
|
277
|
+
});
|
|
273
278
|
await loader.unloadModel();
|
|
274
|
-
await loader.loadModel(
|
|
279
|
+
await loader.loadModel(resolved);
|
|
275
280
|
} else {
|
|
276
|
-
await
|
|
281
|
+
const hardware = await probeHardware();
|
|
282
|
+
const resolved = await resolveLocalInferenceLoadArgs(target, undefined, {
|
|
283
|
+
hardware,
|
|
284
|
+
});
|
|
285
|
+
await localInferenceEngine.load(target.path, resolved);
|
|
277
286
|
}
|
|
278
287
|
}
|
|
279
288
|
|
|
@@ -337,6 +346,26 @@ function extractThinkingControl(
|
|
|
337
346
|
* honours them (the forced-span / prefill / grammar / prefill-plan path is
|
|
338
347
|
* local-model-only).
|
|
339
348
|
*/
|
|
349
|
+
/**
|
|
350
|
+
* Per-step token cap for USER-VISIBLE local streaming (chat replies).
|
|
351
|
+
*
|
|
352
|
+
* Benchmarked on the fused eliza-1 model (#9174): the per-`llmStreamNext` step
|
|
353
|
+
* carries a large fixed FFI overhead, so the throughput↔smoothness curve has a
|
|
354
|
+
* knee around 8 — `8` yields ~10 UI updates per 80 tokens (clearly streaming)
|
|
355
|
+
* at a modest decode-throughput cost, whereas 1–4 fall off a throughput cliff
|
|
356
|
+
* and 16–32 look jumpy. Internal / planner / voice calls do NOT set this and
|
|
357
|
+
* keep the coarse, throughput-tuned runner default (32). Overridable via the
|
|
358
|
+
* shared `ELIZA_LOCAL_STREAM_TOKENS_PER_STEP` env knob; the runner clamps it.
|
|
359
|
+
*/
|
|
360
|
+
const DEFAULT_CHAT_STREAM_TOKENS_PER_STEP = 8;
|
|
361
|
+
function resolveChatStreamTokensPerStep(): number {
|
|
362
|
+
const raw = process.env.ELIZA_LOCAL_STREAM_TOKENS_PER_STEP?.trim();
|
|
363
|
+
const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;
|
|
364
|
+
return Number.isFinite(parsed) && parsed > 0
|
|
365
|
+
? parsed
|
|
366
|
+
: DEFAULT_CHAT_STREAM_TOKENS_PER_STEP;
|
|
367
|
+
}
|
|
368
|
+
|
|
340
369
|
function engineGenerateArgsFromParams(
|
|
341
370
|
params: GenerateTextParams,
|
|
342
371
|
cacheKey: string | undefined,
|
|
@@ -356,6 +385,7 @@ function engineGenerateArgsFromParams(
|
|
|
356
385
|
spanSamplerPlan?: GenerateTextParams["spanSamplerPlan"];
|
|
357
386
|
thinking?: "auto" | "on" | "off";
|
|
358
387
|
onTextChunk?: (chunk: string) => void | Promise<void>;
|
|
388
|
+
maxTokensPerStep?: number;
|
|
359
389
|
voiceOutput?: "user-visible" | "internal";
|
|
360
390
|
} {
|
|
361
391
|
const renderContent = (content: unknown): string => {
|
|
@@ -419,6 +449,13 @@ function engineGenerateArgsFromParams(
|
|
|
419
449
|
spanSamplerPlan: params.spanSamplerPlan,
|
|
420
450
|
thinking: extractThinkingControl(params.providerOptions),
|
|
421
451
|
onTextChunk,
|
|
452
|
+
// Stream user-visible replies in fine-grained steps so the dashboard
|
|
453
|
+
// renders token-by-token instead of in ~32-token jumps. Only when
|
|
454
|
+
// streaming (onTextChunk set) — internal/planner calls keep the coarse,
|
|
455
|
+
// throughput-tuned default. See resolveChatStreamTokensPerStep (#9174).
|
|
456
|
+
maxTokensPerStep: onTextChunk
|
|
457
|
+
? resolveChatStreamTokensPerStep()
|
|
458
|
+
: undefined,
|
|
422
459
|
voiceOutput:
|
|
423
460
|
params.voiceOutput ??
|
|
424
461
|
(typeof params.onStreamChunk === "function" ? "user-visible" : undefined),
|
|
@@ -847,9 +884,32 @@ function makeTranscriptionHandler(): TranscriptionHandler {
|
|
|
847
884
|
// The fused libelizainference ASR runtime is the sole on-device
|
|
848
885
|
// transcriber. A startup/availability failure propagates (AGENTS.md §3) —
|
|
849
886
|
// there is no whisper.cpp second attempt and no silent empty transcript.
|
|
850
|
-
await localInferenceEngine.
|
|
887
|
+
await localInferenceEngine.ensureActiveBundleAsrReady();
|
|
851
888
|
throwIfAborted(signal);
|
|
852
|
-
|
|
889
|
+
// Stream partial transcripts through the same pipe as chat text when the
|
|
890
|
+
// runtime wired a chunk sink (useModel injects onStreamChunk into local
|
|
891
|
+
// model params inside a streaming reply turn). The fused streaming-ASR
|
|
892
|
+
// session surfaces each running partial; we forward the deltas. Read the
|
|
893
|
+
// sink structurally so this stays robust to the core param type surface.
|
|
894
|
+
const streamSink =
|
|
895
|
+
params && typeof params === "object"
|
|
896
|
+
? (
|
|
897
|
+
params as {
|
|
898
|
+
onStreamChunk?: (chunk: string) => void | Promise<void>;
|
|
899
|
+
}
|
|
900
|
+
).onStreamChunk
|
|
901
|
+
: undefined;
|
|
902
|
+
const onPartial =
|
|
903
|
+
typeof streamSink === "function"
|
|
904
|
+
? (delta: string) => {
|
|
905
|
+
void streamSink(delta);
|
|
906
|
+
}
|
|
907
|
+
: undefined;
|
|
908
|
+
const transcript = await localInferenceEngine.transcribePcm(
|
|
909
|
+
audio,
|
|
910
|
+
signal,
|
|
911
|
+
onPartial,
|
|
912
|
+
);
|
|
853
913
|
throwIfAborted(signal);
|
|
854
914
|
return transcript;
|
|
855
915
|
};
|
|
@@ -858,6 +918,8 @@ function makeTranscriptionHandler(): TranscriptionHandler {
|
|
|
858
918
|
function paramsToVisionRequest(params: ImageDescriptionParams | string): {
|
|
859
919
|
image: { kind: "dataUrl"; dataUrl: string } | { kind: "url"; url: string };
|
|
860
920
|
prompt?: string;
|
|
921
|
+
signal?: AbortSignal;
|
|
922
|
+
onTextChunk?: (chunk: string) => void | Promise<void>;
|
|
861
923
|
} {
|
|
862
924
|
const url = typeof params === "string" ? params : params.imageUrl;
|
|
863
925
|
if (typeof url !== "string" || url.length === 0) {
|
|
@@ -866,10 +928,36 @@ function paramsToVisionRequest(params: ImageDescriptionParams | string): {
|
|
|
866
928
|
);
|
|
867
929
|
}
|
|
868
930
|
const prompt = typeof params === "object" ? params.prompt : undefined;
|
|
931
|
+
const signal =
|
|
932
|
+
typeof params === "object"
|
|
933
|
+
? (params as { signal?: AbortSignal }).signal
|
|
934
|
+
: undefined;
|
|
935
|
+
const wantsStream =
|
|
936
|
+
typeof params === "object" &&
|
|
937
|
+
(params as { stream?: boolean }).stream === true;
|
|
938
|
+
const streamSink =
|
|
939
|
+
wantsStream && typeof params === "object"
|
|
940
|
+
? (params as { onStreamChunk?: (chunk: string) => void | Promise<void> })
|
|
941
|
+
.onStreamChunk
|
|
942
|
+
: undefined;
|
|
943
|
+
const onTextChunk =
|
|
944
|
+
typeof streamSink === "function"
|
|
945
|
+
? (chunk: string) => streamSink(chunk)
|
|
946
|
+
: undefined;
|
|
869
947
|
if (url.startsWith("data:")) {
|
|
870
|
-
return {
|
|
948
|
+
return {
|
|
949
|
+
image: { kind: "dataUrl", dataUrl: url },
|
|
950
|
+
prompt,
|
|
951
|
+
...(signal ? { signal } : {}),
|
|
952
|
+
...(onTextChunk ? { onTextChunk } : {}),
|
|
953
|
+
};
|
|
871
954
|
}
|
|
872
|
-
return {
|
|
955
|
+
return {
|
|
956
|
+
image: { kind: "url", url },
|
|
957
|
+
prompt,
|
|
958
|
+
...(signal ? { signal } : {}),
|
|
959
|
+
...(onTextChunk ? { onTextChunk } : {}),
|
|
960
|
+
};
|
|
873
961
|
}
|
|
874
962
|
|
|
875
963
|
function normalizeImageDescription(
|
|
@@ -948,7 +1036,7 @@ function makeImageDescriptionHandler(): ImageDescriptionHandler {
|
|
|
948
1036
|
const modelKey =
|
|
949
1037
|
typeof modelKeyCandidate === "string" && modelKeyCandidate
|
|
950
1038
|
? modelKeyCandidate
|
|
951
|
-
: "
|
|
1039
|
+
: "gemma-vl";
|
|
952
1040
|
const request = paramsToVisionRequest(params);
|
|
953
1041
|
const result = await arbiter.requestVisionDescribe<
|
|
954
1042
|
typeof request,
|
|
@@ -958,6 +1046,102 @@ function makeImageDescriptionHandler(): ImageDescriptionHandler {
|
|
|
958
1046
|
};
|
|
959
1047
|
}
|
|
960
1048
|
|
|
1049
|
+
// ── Bionic-host TRANSCRIPTION / IMAGE_DESCRIPTION (Android GPU delegation) ──
|
|
1050
|
+
//
|
|
1051
|
+
// On the bionic-delegated path the musl agent can't load the fused
|
|
1052
|
+
// libelizainference, so the engine-driven transcriber / memory-arbiter vision
|
|
1053
|
+
// paths above can't run here. Instead the audio / image bytes are forwarded to
|
|
1054
|
+
// the in-process bionic host over the UDS (op="asr" / op="image"), which runs
|
|
1055
|
+
// the fused Gemma ASR + mmproj vision path on the Mali GPU and returns text.
|
|
1056
|
+
// This is the same delegation `BionicHostLoader` already does for text
|
|
1057
|
+
// generation.
|
|
1058
|
+
|
|
1059
|
+
/** The bionic-host loader when registered (exposes transcribe + describeImage). */
|
|
1060
|
+
function getBionicHostLoader(runtime: IAgentRuntime): BionicHostLoader | null {
|
|
1061
|
+
const svc = (
|
|
1062
|
+
runtime as { getService?: (name: string) => unknown }
|
|
1063
|
+
).getService?.("localInferenceLoader");
|
|
1064
|
+
if (
|
|
1065
|
+
svc &&
|
|
1066
|
+
typeof (svc as BionicHostLoader).transcribe === "function" &&
|
|
1067
|
+
typeof (svc as BionicHostLoader).describeImage === "function"
|
|
1068
|
+
) {
|
|
1069
|
+
return svc as BionicHostLoader;
|
|
1070
|
+
}
|
|
1071
|
+
return null;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
/** Pack a mono fp32 PCM buffer little-endian and base64-encode it for the UDS frame. */
|
|
1075
|
+
export function float32ToBase64LE(pcm: Float32Array): string {
|
|
1076
|
+
const buf = Buffer.allocUnsafe(pcm.length * 4);
|
|
1077
|
+
for (let i = 0; i < pcm.length; i++) {
|
|
1078
|
+
buf.writeFloatLE(pcm[i] ?? 0, i * 4);
|
|
1079
|
+
}
|
|
1080
|
+
return buf.toString("base64");
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
/** Resolve a vision request to base64 image bytes for the bionic host. */
|
|
1084
|
+
export async function imageRequestToBase64(image: {
|
|
1085
|
+
kind: "dataUrl" | "url";
|
|
1086
|
+
dataUrl?: string;
|
|
1087
|
+
url?: string;
|
|
1088
|
+
}): Promise<string> {
|
|
1089
|
+
if (image.kind === "dataUrl" && image.dataUrl) {
|
|
1090
|
+
const comma = image.dataUrl.indexOf(",");
|
|
1091
|
+
return comma >= 0 ? image.dataUrl.slice(comma + 1) : image.dataUrl;
|
|
1092
|
+
}
|
|
1093
|
+
if (image.kind === "url" && image.url) {
|
|
1094
|
+
const resp = await fetch(image.url);
|
|
1095
|
+
if (!resp.ok) {
|
|
1096
|
+
throw new Error(
|
|
1097
|
+
`[local-inference] IMAGE_DESCRIPTION failed to fetch ${image.url}: ${resp.status}`,
|
|
1098
|
+
);
|
|
1099
|
+
}
|
|
1100
|
+
return Buffer.from(await resp.arrayBuffer()).toString("base64");
|
|
1101
|
+
}
|
|
1102
|
+
throw new Error(
|
|
1103
|
+
"[local-inference] IMAGE_DESCRIPTION could not resolve image bytes",
|
|
1104
|
+
);
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
function makeBionicTranscriptionHandler(): TranscriptionHandler {
|
|
1108
|
+
return async (runtime, params) => {
|
|
1109
|
+
const signal = extractTranscriptionSignal(params);
|
|
1110
|
+
throwIfAborted(signal);
|
|
1111
|
+
const loader = getBionicHostLoader(runtime);
|
|
1112
|
+
if (!loader) {
|
|
1113
|
+
throw new Error(
|
|
1114
|
+
"[local-inference] bionic-host TRANSCRIPTION requires the bionic-host loader (localInferenceLoader service)",
|
|
1115
|
+
);
|
|
1116
|
+
}
|
|
1117
|
+
const audio = extractTranscriptionAudio(params);
|
|
1118
|
+
throwIfAborted(signal);
|
|
1119
|
+
const transcript = await loader.transcribe({
|
|
1120
|
+
pcmBase64: float32ToBase64LE(audio.pcm),
|
|
1121
|
+
sampleRate: audio.sampleRate,
|
|
1122
|
+
});
|
|
1123
|
+
throwIfAborted(signal);
|
|
1124
|
+
return transcript;
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
function makeBionicImageDescriptionHandler(): ImageDescriptionHandler {
|
|
1129
|
+
return async (runtime, params) => {
|
|
1130
|
+
const loader = getBionicHostLoader(runtime);
|
|
1131
|
+
if (!loader) {
|
|
1132
|
+
throw new Error(
|
|
1133
|
+
"[local-inference] bionic-host IMAGE_DESCRIPTION requires the bionic-host loader (localInferenceLoader service)",
|
|
1134
|
+
);
|
|
1135
|
+
}
|
|
1136
|
+
const request = paramsToVisionRequest(params);
|
|
1137
|
+
const description = await loader.describeImage({
|
|
1138
|
+
imageBase64: await imageRequestToBase64(request.image),
|
|
1139
|
+
prompt: request.prompt,
|
|
1140
|
+
});
|
|
1141
|
+
return normalizeImageDescription(description);
|
|
1142
|
+
};
|
|
1143
|
+
}
|
|
1144
|
+
|
|
961
1145
|
/**
|
|
962
1146
|
* Register the device-bridge loader on the runtime. Accepts load/generate
|
|
963
1147
|
* calls whether or not a mobile device is currently connected — parked
|
|
@@ -1395,25 +1579,33 @@ export async function ensureLocalInferenceHandler(
|
|
|
1395
1579
|
// priority (0). It is the last-resort handler: any cloud / other-plugin
|
|
1396
1580
|
// TRANSCRIPTION handler registers above 0 and wins. When the handler
|
|
1397
1581
|
// does run, it drives the fused libelizainference ASR runtime — the sole
|
|
1398
|
-
// on-device transcriber (
|
|
1582
|
+
// on-device transcriber (Gemma ASR streaming → fused batch interim →
|
|
1399
1583
|
// AsrUnavailableError) via the engine's armed voice bridge — see
|
|
1400
1584
|
// makeTranscriptionHandler / EngineVoiceBridge.createStreamingTranscriber.
|
|
1401
1585
|
// (The old ELIZA_LOCAL_TRANSCRIPTION env gate is removed — voice is a
|
|
1402
1586
|
// first-class Eliza-1 surface, not opt-in.)
|
|
1587
|
+
// On the bionic-delegated path the fused lib lives in the app process, not
|
|
1588
|
+
// this musl agent — so transcription + vision must forward audio/image
|
|
1589
|
+
// bytes to the bionic host (op="asr" / op="image") rather than the
|
|
1590
|
+
// in-process engine / memory-arbiter, which can't load the lib here.
|
|
1403
1591
|
runtimeWithRegistration.registerModel(
|
|
1404
1592
|
ModelType.TRANSCRIPTION,
|
|
1405
|
-
|
|
1593
|
+
bionicHostRegistered
|
|
1594
|
+
? makeBionicTranscriptionHandler()
|
|
1595
|
+
: makeTranscriptionHandler(),
|
|
1406
1596
|
provider,
|
|
1407
1597
|
LOCAL_INFERENCE_PRIORITY,
|
|
1408
1598
|
);
|
|
1409
1599
|
runtimeWithRegistration.registerModel(
|
|
1410
1600
|
ModelType.IMAGE_DESCRIPTION,
|
|
1411
|
-
|
|
1601
|
+
bionicHostRegistered
|
|
1602
|
+
? makeBionicImageDescriptionHandler()
|
|
1603
|
+
: makeImageDescriptionHandler(),
|
|
1412
1604
|
provider,
|
|
1413
1605
|
LOCAL_INFERENCE_PRIORITY,
|
|
1414
1606
|
);
|
|
1415
1607
|
logger.info(
|
|
1416
|
-
`[local-inference] Registered ${provider} voice and vision handlers for TEXT_TO_SPEECH / TRANSCRIPTION / IMAGE_DESCRIPTION at priority ${LOCAL_INFERENCE_PRIORITY}`,
|
|
1608
|
+
`[local-inference] Registered ${provider} voice and vision handlers for TEXT_TO_SPEECH / TRANSCRIPTION / IMAGE_DESCRIPTION at priority ${LOCAL_INFERENCE_PRIORITY}${bionicHostRegistered ? " (bionic-host delegated)" : ""}`,
|
|
1417
1609
|
);
|
|
1418
1610
|
} catch (err) {
|
|
1419
1611
|
logger.warn(
|
package/src/runtime/index.ts
CHANGED
|
@@ -23,7 +23,10 @@ export {
|
|
|
23
23
|
export { detectEmbeddingPreset } from "./embedding-presets.js";
|
|
24
24
|
export { shouldWarmupLocalEmbeddingModel } from "./embedding-warmup-policy.js";
|
|
25
25
|
export { ensureLocalInferenceHandler } from "./ensure-local-inference-handler.js";
|
|
26
|
-
export {
|
|
26
|
+
export {
|
|
27
|
+
shouldEnableMobileLocalInference,
|
|
28
|
+
warnIfMobileGateActiveWithoutPlatform,
|
|
29
|
+
} from "./mobile-local-inference-gate.js";
|
|
27
30
|
export {
|
|
28
31
|
type EmitVoiceTurnObservedArgs,
|
|
29
32
|
emitVoiceTurnObserved,
|