@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +82 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.d.ts +29 -0
- package/src/actions/transcription-control.d.ts.map +1 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1082 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +205 -0
- package/src/routes/local-inference-asr-route.ts +163 -0
- package/src/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/src/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +808 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/transcript-audio-store.d.ts +15 -0
- package/src/routes/transcript-audio-store.d.ts.map +1 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.d.ts +36 -0
- package/src/routes/transcripts-routes.d.ts.map +1 -0
- package/src/routes/transcripts-routes.test.ts +144 -0
- package/src/routes/transcripts-routes.ts +159 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +62 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1448 -0
- package/src/runtime/index.d.ts +15 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +33 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bionic-host-loader.d.ts +46 -0
- package/src/services/bionic-host-loader.d.ts.map +1 -0
- package/src/services/bionic-host-loader.test.ts +133 -0
- package/src/services/bionic-host-loader.ts +180 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +238 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +95 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +339 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +747 -0
- package/src/services/downloader.ts +925 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +540 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1909 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.d.ts +56 -0
- package/src/services/gpu-detect.d.ts.map +1 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +231 -0
- package/src/services/hardware.ts +410 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +29 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +211 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +689 -0
- package/src/services/manifest/schema.d.ts +713 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +653 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +567 -0
- package/src/services/memory-arbiter.d.ts +318 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +925 -0
- package/src/services/memory-monitor.d.ts +122 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +297 -0
- package/src/services/memory-pressure.d.ts +130 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +407 -0
- package/src/services/routing-policy.d.ts +69 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.test.ts +164 -0
- package/src/services/routing-policy.ts +297 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.d.ts +33 -0
- package/src/services/system-memory.d.ts.map +1 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/asr-timed.real.test.ts +141 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +131 -0
- package/src/services/voice/embedding.ts +243 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +759 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2302 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +674 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +728 -0
- package/src/services/voice/ffi-bindings.ts +3225 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.d.ts +37 -0
- package/src/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.d.ts +41 -0
- package/src/services/voice/transcript-service.d.ts.map +1 -0
- package/src/services/voice/transcript-service.test.ts +137 -0
- package/src/services/voice/transcript-service.ts +141 -0
- package/src/services/voice/transcript-store.d.ts +53 -0
- package/src/services/voice/transcript-store.d.ts.map +1 -0
- package/src/services/voice/transcript-store.test.ts +153 -0
- package/src/services/voice/transcript-store.ts +132 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +418 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { AgentRuntime } from "@elizaos/core";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import {
|
|
4
|
+
ActiveModelCoordinator,
|
|
5
|
+
type LocalInferenceLoadArgs,
|
|
6
|
+
type LocalInferenceLoader,
|
|
7
|
+
} from "./active-model";
|
|
8
|
+
import type { HardwareProbe, InstalledModel } from "./types";
|
|
9
|
+
|
|
10
|
+
function makeInstalledModel(id: string): InstalledModel {
|
|
11
|
+
return {
|
|
12
|
+
id,
|
|
13
|
+
displayName: id,
|
|
14
|
+
// `external-scan` ids are absent from MODEL_CATALOG, so
|
|
15
|
+
// assertModelFitsHost short-circuits and switchTo() exercises the
|
|
16
|
+
// loader path without needing on-disk weights.
|
|
17
|
+
path: `/tmp/${id}.gguf`,
|
|
18
|
+
sizeBytes: 1024,
|
|
19
|
+
installedAt: "2026-05-15T00:00:00.000Z",
|
|
20
|
+
lastUsedAt: null,
|
|
21
|
+
source: "external-scan",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const PROBE: HardwareProbe = {
|
|
26
|
+
totalRamGb: 64,
|
|
27
|
+
freeRamGb: 48,
|
|
28
|
+
gpu: null,
|
|
29
|
+
cpuCores: 8,
|
|
30
|
+
platform: "linux",
|
|
31
|
+
arch: "x64",
|
|
32
|
+
appleSilicon: false,
|
|
33
|
+
recommendedBucket: "mid",
|
|
34
|
+
source: "os-fallback",
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Fake loader satisfying `isLoader` (loadModel/unloadModel/currentModelPath).
|
|
39
|
+
* `loadModel` rejects when `failNext` is set so we can simulate a load failure
|
|
40
|
+
* mid-switch without touching the real engine.
|
|
41
|
+
*/
|
|
42
|
+
class FakeLoader implements LocalInferenceLoader {
|
|
43
|
+
loaded: string | null = null;
|
|
44
|
+
failNextPaths = new Set<string>();
|
|
45
|
+
readonly loadCalls: string[] = [];
|
|
46
|
+
readonly unloadCalls: number[] = [];
|
|
47
|
+
|
|
48
|
+
async loadModel(args: LocalInferenceLoadArgs): Promise<void> {
|
|
49
|
+
this.loadCalls.push(args.modelPath);
|
|
50
|
+
if (this.failNextPaths.has(args.modelPath)) {
|
|
51
|
+
throw new Error(`simulated load failure for ${args.modelPath}`);
|
|
52
|
+
}
|
|
53
|
+
this.loaded = args.modelPath;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async unloadModel(): Promise<void> {
|
|
57
|
+
this.unloadCalls.push(this.unloadCalls.length);
|
|
58
|
+
this.loaded = null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
currentModelPath(): string | null {
|
|
62
|
+
return this.loaded;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function makeRuntime(loader: LocalInferenceLoader): AgentRuntime {
|
|
67
|
+
return {
|
|
68
|
+
agentId: "agent-test",
|
|
69
|
+
getService: (name: string) =>
|
|
70
|
+
name === "localInferenceLoader" ? loader : null,
|
|
71
|
+
} as unknown as AgentRuntime;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
describe("ActiveModelCoordinator switchTo rollback (#13)", () => {
|
|
75
|
+
afterEach(() => {
|
|
76
|
+
vi.restoreAllMocks();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("restores the previously-active model when a switch fails to load", async () => {
|
|
80
|
+
const loader = new FakeLoader();
|
|
81
|
+
const runtime = makeRuntime(loader);
|
|
82
|
+
const coordinator = new ActiveModelCoordinator();
|
|
83
|
+
const modelA = makeInstalledModel("model-a");
|
|
84
|
+
const modelB = makeInstalledModel("model-b");
|
|
85
|
+
|
|
86
|
+
// First load succeeds → A is the active, known-good model.
|
|
87
|
+
const first = await coordinator.switchTo(runtime, modelA, undefined, {
|
|
88
|
+
hardware: PROBE,
|
|
89
|
+
});
|
|
90
|
+
expect(first).toMatchObject({ modelId: "model-a", status: "ready" });
|
|
91
|
+
expect(loader.currentModelPath()).toBe(modelA.path);
|
|
92
|
+
|
|
93
|
+
// Switching to B fails to load. The old model must be restored, not lost.
|
|
94
|
+
loader.failNextPaths.add(modelB.path);
|
|
95
|
+
const second = await coordinator.switchTo(runtime, modelB, undefined, {
|
|
96
|
+
hardware: PROBE,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
expect(second).toMatchObject({ modelId: "model-a", status: "ready" });
|
|
100
|
+
// A working model is loaded — NOT zero models, NOT an error attributed
|
|
101
|
+
// to the requested id.
|
|
102
|
+
expect(second.status).not.toBe("error");
|
|
103
|
+
expect(loader.currentModelPath()).toBe(modelA.path);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("restores the same model when a reload with new overrides fails", async () => {
|
|
107
|
+
const loader = new FakeLoader();
|
|
108
|
+
const runtime = makeRuntime(loader);
|
|
109
|
+
const coordinator = new ActiveModelCoordinator();
|
|
110
|
+
const modelA = makeInstalledModel("model-a");
|
|
111
|
+
|
|
112
|
+
await coordinator.switchTo(
|
|
113
|
+
runtime,
|
|
114
|
+
modelA,
|
|
115
|
+
{ contextSize: 4096 },
|
|
116
|
+
{
|
|
117
|
+
hardware: PROBE,
|
|
118
|
+
},
|
|
119
|
+
);
|
|
120
|
+
expect(loader.currentModelPath()).toBe(modelA.path);
|
|
121
|
+
|
|
122
|
+
let loadCount = 0;
|
|
123
|
+
const originalLoad = loader.loadModel.bind(loader);
|
|
124
|
+
vi.spyOn(loader, "loadModel").mockImplementation(async (args) => {
|
|
125
|
+
loadCount += 1;
|
|
126
|
+
if (loadCount === 1) {
|
|
127
|
+
throw new Error("simulated same-model reload failure");
|
|
128
|
+
}
|
|
129
|
+
await originalLoad(args);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const state = await coordinator.switchTo(
|
|
133
|
+
runtime,
|
|
134
|
+
modelA,
|
|
135
|
+
{ contextSize: 8192 },
|
|
136
|
+
{ hardware: PROBE },
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
expect(state).toMatchObject({ modelId: "model-a", status: "ready" });
|
|
140
|
+
expect(loader.currentModelPath()).toBe(modelA.path);
|
|
141
|
+
expect(loader.loadModel).toHaveBeenCalledTimes(2);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("reports no model loaded (modelId null, error) when no prior model existed", async () => {
|
|
145
|
+
const loader = new FakeLoader();
|
|
146
|
+
const runtime = makeRuntime(loader);
|
|
147
|
+
const coordinator = new ActiveModelCoordinator();
|
|
148
|
+
const modelA = makeInstalledModel("model-a");
|
|
149
|
+
|
|
150
|
+
loader.failNextPaths.add(modelA.path);
|
|
151
|
+
const state = await coordinator.switchTo(runtime, modelA, undefined, {
|
|
152
|
+
hardware: PROBE,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
expect(state.status).toBe("error");
|
|
156
|
+
// Honest: nothing is loaded, so the id is null rather than a phantom
|
|
157
|
+
// "model-a" that callers would treat as a live model.
|
|
158
|
+
expect(state.modelId).toBeNull();
|
|
159
|
+
expect(loader.currentModelPath()).toBeNull();
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("reports no model loaded when both the switch and the restore fail", async () => {
|
|
163
|
+
const loader = new FakeLoader();
|
|
164
|
+
const runtime = makeRuntime(loader);
|
|
165
|
+
const coordinator = new ActiveModelCoordinator();
|
|
166
|
+
const modelA = makeInstalledModel("model-a");
|
|
167
|
+
const modelB = makeInstalledModel("model-b");
|
|
168
|
+
|
|
169
|
+
await coordinator.switchTo(runtime, modelA, undefined, {
|
|
170
|
+
hardware: PROBE,
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Both the new load AND the restore of the old model fail.
|
|
174
|
+
loader.failNextPaths.add(modelB.path);
|
|
175
|
+
loader.failNextPaths.add(modelA.path);
|
|
176
|
+
const state = await coordinator.switchTo(runtime, modelB, undefined, {
|
|
177
|
+
hardware: PROBE,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
expect(state.status).toBe("error");
|
|
181
|
+
expect(state.modelId).toBeNull();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordinates which model is currently loaded into the plugin-local-ai
|
|
3
|
+
* runtime. Eliza runs one inference model at a time; switching models
|
|
4
|
+
* unloads the previous one first so we don't double-allocate VRAM.
|
|
5
|
+
*
|
|
6
|
+
* This module *does not* talk to `capacitor-llama` directly. The plugin
|
|
7
|
+
* owns the native binding; we ask it to swap via a small runtime service
|
|
8
|
+
* registered under the name "localInferenceLoader". When the plugin is not
|
|
9
|
+
* enabled, we still track the user's preferred active model so the
|
|
10
|
+
* preference survives enabling the plugin later.
|
|
11
|
+
*/
|
|
12
|
+
import type { AgentRuntime } from "@elizaos/core";
|
|
13
|
+
import { ELIZA_1_PLACEHOLDER_IDS, FIRST_RUN_DEFAULT_MODEL_ID } from "./catalog";
|
|
14
|
+
import { type ManifestLoader, type RamFitOptions } from "./ram-budget";
|
|
15
|
+
import { recommendForFirstRun } from "./recommendation";
|
|
16
|
+
import type { ActiveModelState, CatalogModel, HardwareProbe, InstalledModel } from "./types";
|
|
17
|
+
export type { KvOffloadMode, LocalInferenceLoadArgs } from "./load-args.js";
|
|
18
|
+
export { ELIZA_1_PLACEHOLDER_IDS, FIRST_RUN_DEFAULT_MODEL_ID, recommendForFirstRun, };
|
|
19
|
+
import type { KvOffloadMode, LocalInferenceLoadArgs } from "./load-args.js";
|
|
20
|
+
export declare function isForkOnlyKvCacheType(name: string | undefined): boolean;
|
|
21
|
+
export declare function isStockKvCacheType(name: string | undefined): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Validate per-load overrides against what the in-process backend can
|
|
24
|
+
* honour. The AOSP loader has its own (broader) acceptance set — pass
|
|
25
|
+
* `{ allowFork: true }` to skip the desktop-only restriction.
|
|
26
|
+
*
|
|
27
|
+
* Throws on the first illegal value so the caller (the API route) can
|
|
28
|
+
* surface a 400 with a useful message instead of letting the load slip
|
|
29
|
+
* through and silently degrade to fp16.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateLocalInferenceLoadArgs(args: Partial<LocalInferenceLoadArgs>, options?: {
|
|
32
|
+
allowFork?: boolean;
|
|
33
|
+
}): void;
|
|
34
|
+
export interface LocalInferenceLoader {
|
|
35
|
+
loadModel(args: LocalInferenceLoadArgs): Promise<void>;
|
|
36
|
+
unloadModel(): Promise<void>;
|
|
37
|
+
currentModelPath(): string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Optional generation surface. When a loader implements this, the runtime
|
|
40
|
+
* handler (`ensure-local-inference-handler.ts`) routes TEXT_SMALL /
|
|
41
|
+
* TEXT_LARGE requests through it instead of the standalone engine. Mobile
|
|
42
|
+
* builds populate this via the Capacitor adapter; desktop omits it and falls
|
|
43
|
+
* back to the `LocalInferenceEngine`.
|
|
44
|
+
*/
|
|
45
|
+
generate?(args: {
|
|
46
|
+
prompt: string;
|
|
47
|
+
stopSequences?: string[];
|
|
48
|
+
maxTokens?: number;
|
|
49
|
+
temperature?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Optional `promptCacheKey` from the runtime cache plan. Loaders
|
|
52
|
+
* that implement prefix caching (the in-process llama.cpp FFI slot
|
|
53
|
+
* pool or node-llama-cpp session pool) use this to pin
|
|
54
|
+
* subsequent calls with the same key to the same KV cache slot.
|
|
55
|
+
* Loaders without prefix caching can ignore the field.
|
|
56
|
+
*/
|
|
57
|
+
cacheKey?: string;
|
|
58
|
+
}): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Optional embedding surface. When a loader implements this, the runtime
|
|
61
|
+
* handler routes `TEXT_EMBEDDING` requests through it. The AOSP bun:ffi
|
|
62
|
+
* loader populates this directly via `llama_get_embeddings_seq`; the
|
|
63
|
+
* device-bridge loader populates it by dispatching an `embed` frame to
|
|
64
|
+
* the connected device. Loaders that cannot embed leave this undefined,
|
|
65
|
+
* and the runtime falls back to its non-local embedding provider chain.
|
|
66
|
+
*/
|
|
67
|
+
embed?(args: {
|
|
68
|
+
input: string;
|
|
69
|
+
}): Promise<{
|
|
70
|
+
embedding: number[];
|
|
71
|
+
tokens: number;
|
|
72
|
+
}>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Per-load override fields the caller can set. Subset of `LocalInferenceLoadArgs`
|
|
76
|
+
* minus `modelPath` (which the coordinator owns) and minus speculative
|
|
77
|
+
* fields (which the catalog `runtime.mtp` block owns end-to-end). The
|
|
78
|
+
* route layer accepts this shape on `POST /api/local-inference/active`.
|
|
79
|
+
*/
|
|
80
|
+
export interface LocalInferenceLoadOverrides {
|
|
81
|
+
contextSize?: number;
|
|
82
|
+
cacheTypeK?: string;
|
|
83
|
+
cacheTypeV?: string;
|
|
84
|
+
gpuLayers?: number;
|
|
85
|
+
kvOffload?: KvOffloadMode;
|
|
86
|
+
flashAttention?: boolean;
|
|
87
|
+
mmap?: boolean;
|
|
88
|
+
mlock?: boolean;
|
|
89
|
+
useGpu?: boolean;
|
|
90
|
+
maxThreads?: number;
|
|
91
|
+
}
|
|
92
|
+
interface ResolveLocalInferenceLoadArgsOptions {
|
|
93
|
+
manifestLoader?: ManifestLoader;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolve the per-tier mmproj GGUF path for a given installed model when
|
|
97
|
+
* the catalog declares the tier ships a vision projector AND the file is
|
|
98
|
+
* actually on disk under the bundle root.
|
|
99
|
+
*
|
|
100
|
+
* Returns:
|
|
101
|
+
* - the absolute path to the mmproj file when the tier has vision and
|
|
102
|
+
* the file exists.
|
|
103
|
+
* - undefined when the tier has no vision component (text-only bundle)
|
|
104
|
+
* or when the file hasn't been downloaded yet. In the latter case
|
|
105
|
+
* the coordinator emits a one-shot warning; vision capability is
|
|
106
|
+
* unavailable for the session but the text load still succeeds.
|
|
107
|
+
*
|
|
108
|
+
* Path layout: the catalog's `sourceModel.components.vision.file` is the
|
|
109
|
+
* Hugging Face-relative path, e.g. `bundles/2b/vision/mmproj-2b.gguf`.
|
|
110
|
+
* Locally the bundleRoot already represents the per-tier "bundles/<tier>"
|
|
111
|
+
* subtree, so we strip the leading `bundles/<tier>/` segment before
|
|
112
|
+
* joining against the local bundleRoot. When that prefix isn't present
|
|
113
|
+
* (e.g. a custom bundle layout), we fall through to the original path
|
|
114
|
+
* unchanged. Manifest-validated bundles (`bundleRoot` set) are the only
|
|
115
|
+
* path that lands a vision component — external-scan models (LM Studio,
|
|
116
|
+
* Jan) don't.
|
|
117
|
+
*/
|
|
118
|
+
export declare function resolveMmprojPath(installed: InstalledModel, catalog: CatalogModel | undefined): string | undefined;
|
|
119
|
+
export declare function resolveLocalInferenceLoadArgs(installed: InstalledModel, overrides?: LocalInferenceLoadOverrides, options?: ResolveLocalInferenceLoadArgsOptions): Promise<LocalInferenceLoadArgs>;
|
|
120
|
+
export declare class ModelDoesNotFitError extends Error {
|
|
121
|
+
readonly modelId: string;
|
|
122
|
+
readonly requiredMb: number;
|
|
123
|
+
readonly usableMb: number;
|
|
124
|
+
readonly hostRamMb: number;
|
|
125
|
+
readonly fittingVariantId: string | null;
|
|
126
|
+
constructor(args: {
|
|
127
|
+
modelId: string;
|
|
128
|
+
requiredMb: number;
|
|
129
|
+
usableMb: number;
|
|
130
|
+
hostRamMb: number;
|
|
131
|
+
fittingVariantId: string | null;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Admission gate: refuse a model load when the host can't fit the bundle's
|
|
136
|
+
* boot floor. `hostRamMb` is the host's total RAM in megabytes. `installed`
|
|
137
|
+
* is forwarded to `assessRamFit` so a manifest-declared `ramBudgetMb` wins
|
|
138
|
+
* over the catalog scalar. Throws `ModelDoesNotFitError` on no-fit; returns
|
|
139
|
+
* the (advisory) fit decision otherwise so callers can log a `tight` warning.
|
|
140
|
+
*
|
|
141
|
+
* Models with no catalog entry (external HF blobs) are not gated — the
|
|
142
|
+
* catalog has no RAM budget for them, so we trust the operator's explicit
|
|
143
|
+
* pick (the dispatcher's load-time error surfaces if it genuinely OOMs).
|
|
144
|
+
*/
|
|
145
|
+
export declare function assertModelFitsHost(installed: InstalledModel, hostRamMb: number, options?: RamFitOptions): {
|
|
146
|
+
level: "fits" | "tight";
|
|
147
|
+
minMb: number;
|
|
148
|
+
recommendedMb: number;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Typed error for refused local-voice sessions. Mirrors
|
|
152
|
+
* `ModelDoesNotFitError` but at the bundle level — emitted by
|
|
153
|
+
* `assertVoiceBundleFitsHost` when the whole co-resident voice + text stack
|
|
154
|
+
* cannot fit a host's RAM (per R9 §2.3 / §3.2).
|
|
155
|
+
*
|
|
156
|
+
* Catch this at the runtime's voice-session-start boundary and surface the
|
|
157
|
+
* tier-warning copy (`TIER_WARNING_COPY[<tier>]`) — DO NOT load weights and
|
|
158
|
+
* watch `MemoryMonitor` evict mid-session.
|
|
159
|
+
*/
|
|
160
|
+
export declare class VoiceBundleDoesNotFitError extends Error {
|
|
161
|
+
readonly tierSlot: string;
|
|
162
|
+
readonly deviceTier: string;
|
|
163
|
+
readonly requiredPeakMb: number;
|
|
164
|
+
readonly requiredSteadyStateMb: number;
|
|
165
|
+
readonly usableMb: number;
|
|
166
|
+
readonly hostRamMb: number;
|
|
167
|
+
constructor(args: {
|
|
168
|
+
tierSlot: string;
|
|
169
|
+
deviceTier: string;
|
|
170
|
+
requiredPeakMb: number;
|
|
171
|
+
requiredSteadyStateMb: number;
|
|
172
|
+
usableMb: number;
|
|
173
|
+
hostRamMb: number;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Cross-model admission gate for the local-voice session. Sums the whole
|
|
178
|
+
* co-resident bundle (LM + ASR + TTS + embedding + VAD +
|
|
179
|
+
* wake-word + turn-detector + emotion + speaker-encoder + transient TTS
|
|
180
|
+
* peak) and refuses entry when the host can't fit it.
|
|
181
|
+
*
|
|
182
|
+
* Returns the decision on `fits`. Throws `VoiceBundleDoesNotFitError` when
|
|
183
|
+
* `wontfit` (when `strict=true`, the default), or just returns the
|
|
184
|
+
* `wontfit` decision when `strict=false` (the runtime then logs and
|
|
185
|
+
* degrades silently). Pair with `TIER_WARNING_COPY[deviceTier]` for
|
|
186
|
+
* user-facing UX.
|
|
187
|
+
*
|
|
188
|
+
* R9 §1.4 + §2.3 + §3.2 spec.
|
|
189
|
+
*/
|
|
190
|
+
export declare function assertVoiceBundleFitsHost(args: {
|
|
191
|
+
tierSlot: string;
|
|
192
|
+
deviceTier: string;
|
|
193
|
+
hostRamMb: number;
|
|
194
|
+
reserveMb?: number;
|
|
195
|
+
strict?: boolean;
|
|
196
|
+
}): {
|
|
197
|
+
level: "fits" | "tight" | "wontfit";
|
|
198
|
+
steadyStateMb: number;
|
|
199
|
+
peakMb: number;
|
|
200
|
+
usableMb: number;
|
|
201
|
+
fits: boolean;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Refusal raised when activation is asked for a model whose own
|
|
205
|
+
* `eliza-1.manifest.json` says its text eval has not passed (`candidate.*` /
|
|
206
|
+
* `weights-staged.*` tiers). Carries the structured payload the route layer
|
|
207
|
+
* surfaces verbatim to the API consumer: `manifestVersion` so the UI can
|
|
208
|
+
* say "this tier isn't ready" with the actual version string, and
|
|
209
|
+
* `failedEvals` so the user sees which checks are still red.
|
|
210
|
+
*
|
|
211
|
+
* Why we gate here, not just at download:
|
|
212
|
+
* - the bundle may already be on disk (hand-staged, manually copied, or
|
|
213
|
+
* downloaded before a fail-state was recorded), so the download gate
|
|
214
|
+
* alone leaves a window where a candidate-only bundle can be flipped
|
|
215
|
+
* into the active model slot and silently emit `[unused]` tokens.
|
|
216
|
+
*
|
|
217
|
+
* See issue #7679 for the original symptom: the runtime activated a
|
|
218
|
+
* candidate `1.0.0-candidate.1` bundle whose every `evals.*.passed`
|
|
219
|
+
* was `false`, then served BERT/WordPiece reserved tokens (`[unused0..99]`
|
|
220
|
+
* / `[PAD]`) as chat output with no actionable error.
|
|
221
|
+
*/
|
|
222
|
+
export declare class CandidateModelActivationError extends Error {
|
|
223
|
+
readonly modelId: string;
|
|
224
|
+
readonly manifestVersion: string;
|
|
225
|
+
readonly failedEvals: ReadonlyArray<string>;
|
|
226
|
+
constructor(args: {
|
|
227
|
+
modelId: string;
|
|
228
|
+
manifestVersion: string;
|
|
229
|
+
failedEvals: ReadonlyArray<string>;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Activation eval gate. Reads the installed bundle's manifest and refuses
|
|
234
|
+
* activation when `evals.textEval.passed` is not `true`. A bundle with no
|
|
235
|
+
* `eliza-1.manifest.json` on disk (third-party HF GGUFs, external scans,
|
|
236
|
+
* pre-bundle installs) is *not* gated — the gate only applies to bundles
|
|
237
|
+
* that ship a published manifest, which is the source of truth for the
|
|
238
|
+
* publish state.
|
|
239
|
+
*
|
|
240
|
+
* Throws `CandidateModelActivationError` on a failing manifest; returns
|
|
241
|
+
* silently otherwise.
|
|
242
|
+
*/
|
|
243
|
+
export declare function assertManifestEvalsPassed(installed: InstalledModel, manifestLoader?: ManifestLoader): void;
|
|
244
|
+
export declare class ActiveModelCoordinator {
|
|
245
|
+
private state;
|
|
246
|
+
/**
|
|
247
|
+
* The last model that successfully reached `status: "ready"`, plus the
|
|
248
|
+
* inputs needed to re-load it. switchTo() tears the active model down
|
|
249
|
+
* before loading the new one (unload-then-load); if the new load fails we
|
|
250
|
+
* restore this so a failed switch never leaves the host with zero models
|
|
251
|
+
* loaded while a working one existed moments earlier. `null` until the
|
|
252
|
+
* first successful load (or after an unload).
|
|
253
|
+
*/
|
|
254
|
+
private lastReady;
|
|
255
|
+
private readonly listeners;
|
|
256
|
+
snapshot(): ActiveModelState;
|
|
257
|
+
subscribe(listener: (state: ActiveModelState) => void): () => void;
|
|
258
|
+
private emit;
|
|
259
|
+
/**
|
|
260
|
+
* WS2: one-shot warning latch per (modelId) — when the tier declares
|
|
261
|
+
* vision but no mmproj GGUF was found on disk, log once so the
|
|
262
|
+
* operator sees that vision is degraded for this session. The
|
|
263
|
+
* arbiter's vision-describe capability stays unregistered for this
|
|
264
|
+
* session; plugin-vision falls back to its non-eliza-1 path.
|
|
265
|
+
*/
|
|
266
|
+
private readonly warnedDegradedVisionFor;
|
|
267
|
+
private warnIfVisionDegraded;
|
|
268
|
+
/** Return the loader service from the current runtime, if registered. */
|
|
269
|
+
private getLoader;
|
|
270
|
+
switchTo(runtime: AgentRuntime | null, installed: InstalledModel, overrides?: LocalInferenceLoadOverrides, opts?: {
|
|
271
|
+
hardware?: HardwareProbe;
|
|
272
|
+
manifestLoader?: ManifestLoader;
|
|
273
|
+
}): Promise<ActiveModelState>;
|
|
274
|
+
/**
|
|
275
|
+
* Run the unload-then-load against the loader (or standalone engine) and
|
|
276
|
+
* build the `status: "ready"` state. Throws on any load failure; never
|
|
277
|
+
* mutates `this.state`/`this.lastReady` so callers control rollback.
|
|
278
|
+
*/
|
|
279
|
+
private performLoad;
|
|
280
|
+
unload(runtime: AgentRuntime | null): Promise<ActiveModelState>;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=active-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-model.d.ts","sourceRoot":"","sources":["active-model.ts"],"names":[],"mappings":"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"}
|