@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.11-beta.7
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 +81 -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/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 +7 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +54 -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 +1171 -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 +190 -0
- package/src/routes/local-inference-asr-route.ts +213 -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 +423 -0
- package/src/routes/local-inference-compat-routes.ts +782 -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/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 +53 -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 +1398 -0
- package/src/runtime/index.d.ts +14 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +27 -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/asr/errors.d.ts +21 -0
- package/src/services/asr/errors.d.ts.map +1 -0
- package/src/services/asr/errors.ts +50 -0
- package/src/services/asr/hash.d.ts +28 -0
- package/src/services/asr/hash.d.ts.map +1 -0
- package/src/services/asr/hash.ts +49 -0
- package/src/services/asr/index.d.ts +76 -0
- package/src/services/asr/index.d.ts.map +1 -0
- package/src/services/asr/index.ts +178 -0
- package/src/services/asr/types.d.ts +91 -0
- package/src/services/asr/types.d.ts.map +1 -0
- package/src/services/asr/types.ts +95 -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/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 +240 -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 +92 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -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 +724 -0
- package/src/services/downloader.ts +899 -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 +534 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1891 -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.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 +183 -0
- package/src/services/hardware.ts +404 -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 +281 -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 +30 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +225 -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 +693 -0
- package/src/services/manifest/schema.d.ts +715 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +655 -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 +569 -0
- package/src/services/memory-arbiter.d.ts +343 -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 +1000 -0
- package/src/services/memory-monitor.d.ts +119 -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 +296 -0
- package/src/services/memory-pressure.d.ts +127 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +413 -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 +672 -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 +376 -0
- package/src/services/routing-policy.d.ts +55 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.ts +228 -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 +15 -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/transcription-priority.test.ts +211 -0
- package/src/services/tts/errors.ts +46 -0
- package/src/services/tts/index.ts +214 -0
- package/src/services/tts/tts-audio-cache.ts +235 -0
- package/src/services/tts/types.ts +157 -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 +92 -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 +197 -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/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 +148 -0
- package/src/services/voice/embedding.ts +244 -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 +746 -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 +2226 -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 +636 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +671 -0
- package/src/services/voice/ffi-bindings.ts +3050 -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/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.ts +105 -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/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 +420 -0
- package/src/services/voice/voice-budget.ts +656 -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,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-ModelType model assignment store.
|
|
3
|
+
*
|
|
4
|
+
* Separate from the "active loaded model" concept in `ActiveModelCoordinator`.
|
|
5
|
+
* Assignments are a *policy* — the user's declared intent that
|
|
6
|
+
* `ModelType.TEXT_SMALL` should be served by model X and `TEXT_LARGE` by
|
|
7
|
+
* model Y. The runtime's model handlers lazy-load whichever assignment
|
|
8
|
+
* fires; the coordinator handles the actual swap in and out of memory.
|
|
9
|
+
*
|
|
10
|
+
* Stored in `$ELIZA_STATE_DIR/local-inference/assignments.json`. Cheap
|
|
11
|
+
* enough to rewrite on every change — we never mutate in place.
|
|
12
|
+
*/
|
|
13
|
+
import type { AgentModelSlot, InstalledModel, ModelAssignments } from "./types";
|
|
14
|
+
export declare function readAssignments(): Promise<ModelAssignments>;
|
|
15
|
+
/**
|
|
16
|
+
* Build slot recommendations from currently-installed models.
|
|
17
|
+
*
|
|
18
|
+
* Only default-eligible Eliza-1 downloads are auto-recommended.
|
|
19
|
+
* External-scan blobs and ad-hoc Hugging Face downloads are surfaced only
|
|
20
|
+
* through explicit search/manual selection; they are NOT auto-assigned to
|
|
21
|
+
* any agent slot.
|
|
22
|
+
*
|
|
23
|
+
* Why: external blobs may use newer architectures or quant formats outside
|
|
24
|
+
* the bundled `capacitor-llama` binding's supported set. Auto-loading
|
|
25
|
+
* an external blob the user never selected silently breaks PROACTIVE_AGENT
|
|
26
|
+
* and other background tasks at boot. The user opted into the external
|
|
27
|
+
* tool, not into Eliza loading those weights through llama.cpp.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildRecommendedAssignments(installed: InstalledModel[]): ModelAssignments;
|
|
30
|
+
export declare function readEffectiveAssignments(): Promise<ModelAssignments>;
|
|
31
|
+
export declare function writeAssignments(assignments: ModelAssignments): Promise<void>;
|
|
32
|
+
export declare function setAssignment(slot: AgentModelSlot, modelId: string | null): Promise<ModelAssignments>;
|
|
33
|
+
/**
|
|
34
|
+
* Decide which slots a freshly-installed model is a sensible default for.
|
|
35
|
+
*
|
|
36
|
+
* Today the curated catalog tags models with `category` ∈
|
|
37
|
+
* `chat | code | tools | tiny | reasoning` and `bucket` ∈
|
|
38
|
+
* `small | mid | large | xl` — no explicit "embedding" tag, because the
|
|
39
|
+
* default catalog ships only generative models. The defensive check below
|
|
40
|
+
* still recognizes an "embedding" category/bucket for catalog additions and
|
|
41
|
+
* for external-scan models whose ids contain a recognizable
|
|
42
|
+
* embedding-family marker (`nomic-embed`, `bge`, `all-minilm`, `gte`,
|
|
43
|
+
* `e5-`). External GGUFs without a catalog entry default to generative.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isEmbeddingModelId(modelId: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Fill empty assignment slots with `modelId`. Idempotent: never overwrites
|
|
48
|
+
* an existing slot. Embedding models only fill `TEXT_EMBEDDING`; generative
|
|
49
|
+
* models only fill `TEXT_SMALL` and `TEXT_LARGE`. Returns the resulting
|
|
50
|
+
* assignment map (read state is `readAssignments()`, not effective +
|
|
51
|
+
* recommended).
|
|
52
|
+
*
|
|
53
|
+
* Wired from the downloader's success path and the runtime boot's
|
|
54
|
+
* "exactly one model installed, no assignments" branch so first-light
|
|
55
|
+
* users land in chat without a Settings detour. The hard error in
|
|
56
|
+
* `ensure-local-inference-handler.ts` only fires when the operator has
|
|
57
|
+
* actively cleared the assignment.
|
|
58
|
+
*/
|
|
59
|
+
export declare function ensureDefaultAssignment(modelId: string): Promise<ModelAssignments>;
|
|
60
|
+
/**
|
|
61
|
+
* Boot-time helper. If exactly one default-eligible Eliza-1 model is
|
|
62
|
+
* installed and no assignment file exists yet, auto-fill its slots so
|
|
63
|
+
* the first session works without the user opening Settings. No-op when
|
|
64
|
+
* assignments are already present or when more than one default-eligible
|
|
65
|
+
* model is installed (we cannot guess intent).
|
|
66
|
+
*
|
|
67
|
+
* External-scan blobs and custom Hugging Face downloads are intentionally
|
|
68
|
+
* excluded - see `buildRecommendedAssignments` for the rationale.
|
|
69
|
+
*/
|
|
70
|
+
export declare function autoAssignAtBoot(installed: InstalledModel[]): Promise<ModelAssignments | null>;
|
|
71
|
+
//# sourceMappingURL=assignments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignments.d.ts","sourceRoot":"","sources":["assignments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAiBhF,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CASjE;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAC1C,SAAS,EAAE,cAAc,EAAE,GACzB,gBAAgB,CAmBlB;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAS1E;AAED,wBAAsB,gBAAgB,CACrC,WAAW,EAAE,gBAAgB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,aAAa,CAClC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAU3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CA4B3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACrC,SAAS,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAclC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import {
|
|
6
|
+
buildRecommendedAssignments,
|
|
7
|
+
ensureDefaultAssignment,
|
|
8
|
+
readAssignments,
|
|
9
|
+
} from "./assignments";
|
|
10
|
+
import type { InstalledModel } from "./types";
|
|
11
|
+
|
|
12
|
+
const originalEnv = { ...process.env };
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
process.env = { ...originalEnv };
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
function installed(
|
|
19
|
+
id: string,
|
|
20
|
+
sizeBytes: number,
|
|
21
|
+
overrides: Partial<InstalledModel> = {},
|
|
22
|
+
): InstalledModel {
|
|
23
|
+
return {
|
|
24
|
+
id,
|
|
25
|
+
displayName: id,
|
|
26
|
+
path: `/tmp/${id}.gguf`,
|
|
27
|
+
sizeBytes,
|
|
28
|
+
installedAt: "2026-05-11T00:00:00.000Z",
|
|
29
|
+
lastUsedAt: null,
|
|
30
|
+
source: "eliza-download",
|
|
31
|
+
...overrides,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
describe("local inference assignments", () => {
|
|
36
|
+
it("does not auto-recommend ad-hoc Hugging Face downloads", () => {
|
|
37
|
+
const assignments = buildRecommendedAssignments([
|
|
38
|
+
installed("hf:some-org/some-model::model.Q4_K_M.gguf", 10_000),
|
|
39
|
+
installed("eliza-1-2b", 1_000, {
|
|
40
|
+
bundleVerifiedAt: "2026-05-11T01:00:00.000Z",
|
|
41
|
+
}),
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
expect(assignments).toEqual({
|
|
45
|
+
TEXT_SMALL: "eliza-1-2b",
|
|
46
|
+
TEXT_LARGE: "eliza-1-2b",
|
|
47
|
+
TEXT_TO_SPEECH: "eliza-1-2b",
|
|
48
|
+
TRANSCRIPTION: "eliza-1-2b",
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("keeps custom-only installs out of recommended assignments", () => {
|
|
53
|
+
const assignments = buildRecommendedAssignments([
|
|
54
|
+
installed("llama-3.2-3b-instruct", 3_000, {
|
|
55
|
+
source: "external-scan",
|
|
56
|
+
}),
|
|
57
|
+
installed("hf:some-org/custom-model::model.Q4_K_M.gguf", 2_000),
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
expect(assignments).toEqual({});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("does not auto-recommend unverified Eliza-1 downloads", () => {
|
|
64
|
+
const assignments = buildRecommendedAssignments([
|
|
65
|
+
installed("eliza-1-2b", 1_000),
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
expect(assignments).toEqual({});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("does not fill defaults for custom Hugging Face model ids", async () => {
|
|
72
|
+
process.env.ELIZA_STATE_DIR = fs.mkdtempSync(
|
|
73
|
+
path.join(os.tmpdir(), "eliza-assignments-test-"),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
await ensureDefaultAssignment("hf:some-org/some-model::model.Q4_K_M.gguf");
|
|
77
|
+
|
|
78
|
+
expect(await readAssignments()).toEqual({});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-ModelType model assignment store.
|
|
3
|
+
*
|
|
4
|
+
* Separate from the "active loaded model" concept in `ActiveModelCoordinator`.
|
|
5
|
+
* Assignments are a *policy* — the user's declared intent that
|
|
6
|
+
* `ModelType.TEXT_SMALL` should be served by model X and `TEXT_LARGE` by
|
|
7
|
+
* model Y. The runtime's model handlers lazy-load whichever assignment
|
|
8
|
+
* fires; the coordinator handles the actual swap in and out of memory.
|
|
9
|
+
*
|
|
10
|
+
* Stored in `$ELIZA_STATE_DIR/local-inference/assignments.json`. Cheap
|
|
11
|
+
* enough to rewrite on every change — we never mutate in place.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import fs from "node:fs/promises";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { findCatalogModel, isDefaultEligibleId } from "./catalog";
|
|
17
|
+
import { localInferenceRoot } from "./paths";
|
|
18
|
+
import { listInstalledModels } from "./registry";
|
|
19
|
+
import type { AgentModelSlot, InstalledModel, ModelAssignments } from "./types";
|
|
20
|
+
|
|
21
|
+
const ASSIGNMENTS_FILENAME = "assignments.json";
|
|
22
|
+
|
|
23
|
+
interface AssignmentsFile {
|
|
24
|
+
version: 1;
|
|
25
|
+
assignments: ModelAssignments;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function assignmentsPath(): string {
|
|
29
|
+
return path.join(localInferenceRoot(), ASSIGNMENTS_FILENAME);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function ensureRoot(): Promise<void> {
|
|
33
|
+
await fs.mkdir(localInferenceRoot(), { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function readAssignments(): Promise<ModelAssignments> {
|
|
37
|
+
try {
|
|
38
|
+
const raw = await fs.readFile(assignmentsPath(), "utf8");
|
|
39
|
+
const parsed = JSON.parse(raw) as AssignmentsFile;
|
|
40
|
+
if (parsed?.version !== 1 || !parsed.assignments) return {};
|
|
41
|
+
return parsed.assignments;
|
|
42
|
+
} catch {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function pickLargestInstalledModel(
|
|
48
|
+
installed: InstalledModel[],
|
|
49
|
+
): InstalledModel | null {
|
|
50
|
+
return (
|
|
51
|
+
installed
|
|
52
|
+
.filter((model) => typeof model.id === "string" && model.id.length > 0)
|
|
53
|
+
.sort((left, right) => right.sizeBytes - left.sizeBytes)[0] ?? null
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Build slot recommendations from currently-installed models.
|
|
59
|
+
*
|
|
60
|
+
* Only default-eligible Eliza-1 downloads are auto-recommended.
|
|
61
|
+
* External-scan blobs and ad-hoc Hugging Face downloads are surfaced only
|
|
62
|
+
* through explicit search/manual selection; they are NOT auto-assigned to
|
|
63
|
+
* any agent slot.
|
|
64
|
+
*
|
|
65
|
+
* Why: external blobs may use newer architectures or quant formats outside
|
|
66
|
+
* the bundled `capacitor-llama` binding's supported set. Auto-loading
|
|
67
|
+
* an external blob the user never selected silently breaks PROACTIVE_AGENT
|
|
68
|
+
* and other background tasks at boot. The user opted into the external
|
|
69
|
+
* tool, not into Eliza loading those weights through llama.cpp.
|
|
70
|
+
*/
|
|
71
|
+
export function buildRecommendedAssignments(
|
|
72
|
+
installed: InstalledModel[],
|
|
73
|
+
): ModelAssignments {
|
|
74
|
+
const ownDownloads = installed.filter(
|
|
75
|
+
(model) =>
|
|
76
|
+
model.source === "eliza-download" &&
|
|
77
|
+
isDefaultEligibleId(model.id) &&
|
|
78
|
+
typeof model.bundleVerifiedAt === "string" &&
|
|
79
|
+
model.bundleVerifiedAt.length > 0,
|
|
80
|
+
);
|
|
81
|
+
const best = pickLargestInstalledModel(ownDownloads);
|
|
82
|
+
if (best) {
|
|
83
|
+
return {
|
|
84
|
+
TEXT_SMALL: best.id,
|
|
85
|
+
TEXT_LARGE: best.id,
|
|
86
|
+
TEXT_TO_SPEECH: best.id,
|
|
87
|
+
TRANSCRIPTION: best.id,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export async function readEffectiveAssignments(): Promise<ModelAssignments> {
|
|
95
|
+
const [saved, installed] = await Promise.all([
|
|
96
|
+
readAssignments(),
|
|
97
|
+
listInstalledModels(),
|
|
98
|
+
]);
|
|
99
|
+
return {
|
|
100
|
+
...buildRecommendedAssignments(installed),
|
|
101
|
+
...saved,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export async function writeAssignments(
|
|
106
|
+
assignments: ModelAssignments,
|
|
107
|
+
): Promise<void> {
|
|
108
|
+
await ensureRoot();
|
|
109
|
+
const payload: AssignmentsFile = { version: 1, assignments };
|
|
110
|
+
const tmp = `${assignmentsPath()}.tmp`;
|
|
111
|
+
await fs.writeFile(tmp, JSON.stringify(payload, null, 2), "utf8");
|
|
112
|
+
await fs.rename(tmp, assignmentsPath());
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export async function setAssignment(
|
|
116
|
+
slot: AgentModelSlot,
|
|
117
|
+
modelId: string | null,
|
|
118
|
+
): Promise<ModelAssignments> {
|
|
119
|
+
const current = await readAssignments();
|
|
120
|
+
const next: ModelAssignments = { ...current };
|
|
121
|
+
if (modelId) {
|
|
122
|
+
next[slot] = modelId;
|
|
123
|
+
} else {
|
|
124
|
+
delete next[slot];
|
|
125
|
+
}
|
|
126
|
+
await writeAssignments(next);
|
|
127
|
+
return next;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Decide which slots a freshly-installed model is a sensible default for.
|
|
132
|
+
*
|
|
133
|
+
* Today the curated catalog tags models with `category` ∈
|
|
134
|
+
* `chat | code | tools | tiny | reasoning` and `bucket` ∈
|
|
135
|
+
* `small | mid | large | xl` — no explicit "embedding" tag, because the
|
|
136
|
+
* default catalog ships only generative models. The defensive check below
|
|
137
|
+
* still recognizes an "embedding" category/bucket for catalog additions and
|
|
138
|
+
* for external-scan models whose ids contain a recognizable
|
|
139
|
+
* embedding-family marker (`nomic-embed`, `bge`, `all-minilm`, `gte`,
|
|
140
|
+
* `e5-`). External GGUFs without a catalog entry default to generative.
|
|
141
|
+
*/
|
|
142
|
+
export function isEmbeddingModelId(modelId: string): boolean {
|
|
143
|
+
const catalog = findCatalogModel(modelId);
|
|
144
|
+
if (catalog) {
|
|
145
|
+
if ((catalog.category as string) === "embedding") return true;
|
|
146
|
+
if ((catalog.bucket as string) === "embedding") return true;
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
const lowered = modelId.toLowerCase();
|
|
150
|
+
return (
|
|
151
|
+
lowered.includes("nomic-embed") ||
|
|
152
|
+
lowered.includes("bge-") ||
|
|
153
|
+
lowered.includes("all-minilm") ||
|
|
154
|
+
lowered.includes("gte-") ||
|
|
155
|
+
lowered.includes("e5-")
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Fill empty assignment slots with `modelId`. Idempotent: never overwrites
|
|
161
|
+
* an existing slot. Embedding models only fill `TEXT_EMBEDDING`; generative
|
|
162
|
+
* models only fill `TEXT_SMALL` and `TEXT_LARGE`. Returns the resulting
|
|
163
|
+
* assignment map (read state is `readAssignments()`, not effective +
|
|
164
|
+
* recommended).
|
|
165
|
+
*
|
|
166
|
+
* Wired from the downloader's success path and the runtime boot's
|
|
167
|
+
* "exactly one model installed, no assignments" branch so first-light
|
|
168
|
+
* users land in chat without a Settings detour. The hard error in
|
|
169
|
+
* `ensure-local-inference-handler.ts` only fires when the operator has
|
|
170
|
+
* actively cleared the assignment.
|
|
171
|
+
*/
|
|
172
|
+
export async function ensureDefaultAssignment(
|
|
173
|
+
modelId: string,
|
|
174
|
+
): Promise<ModelAssignments> {
|
|
175
|
+
const current = await readAssignments();
|
|
176
|
+
if (!isDefaultEligibleId(modelId)) return current;
|
|
177
|
+
|
|
178
|
+
const next: ModelAssignments = { ...current };
|
|
179
|
+
|
|
180
|
+
if (isEmbeddingModelId(modelId)) {
|
|
181
|
+
if (!next.TEXT_EMBEDDING) next.TEXT_EMBEDDING = modelId;
|
|
182
|
+
} else {
|
|
183
|
+
if (!next.TEXT_SMALL) next.TEXT_SMALL = modelId;
|
|
184
|
+
if (!next.TEXT_LARGE) next.TEXT_LARGE = modelId;
|
|
185
|
+
if (!next.TEXT_TO_SPEECH) next.TEXT_TO_SPEECH = modelId;
|
|
186
|
+
if (!next.TRANSCRIPTION) next.TRANSCRIPTION = modelId;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Cheap shortcut: skip the rewrite when nothing changed.
|
|
190
|
+
if (
|
|
191
|
+
next.TEXT_SMALL === current.TEXT_SMALL &&
|
|
192
|
+
next.TEXT_LARGE === current.TEXT_LARGE &&
|
|
193
|
+
next.TEXT_EMBEDDING === current.TEXT_EMBEDDING &&
|
|
194
|
+
next.TEXT_TO_SPEECH === current.TEXT_TO_SPEECH &&
|
|
195
|
+
next.TRANSCRIPTION === current.TRANSCRIPTION
|
|
196
|
+
) {
|
|
197
|
+
return current;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
await writeAssignments(next);
|
|
201
|
+
return next;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Boot-time helper. If exactly one default-eligible Eliza-1 model is
|
|
206
|
+
* installed and no assignment file exists yet, auto-fill its slots so
|
|
207
|
+
* the first session works without the user opening Settings. No-op when
|
|
208
|
+
* assignments are already present or when more than one default-eligible
|
|
209
|
+
* model is installed (we cannot guess intent).
|
|
210
|
+
*
|
|
211
|
+
* External-scan blobs and custom Hugging Face downloads are intentionally
|
|
212
|
+
* excluded - see `buildRecommendedAssignments` for the rationale.
|
|
213
|
+
*/
|
|
214
|
+
export async function autoAssignAtBoot(
|
|
215
|
+
installed: InstalledModel[],
|
|
216
|
+
): Promise<ModelAssignments | null> {
|
|
217
|
+
const ownDownloads = installed.filter(
|
|
218
|
+
(model) =>
|
|
219
|
+
model.source === "eliza-download" &&
|
|
220
|
+
isDefaultEligibleId(model.id) &&
|
|
221
|
+
typeof model.bundleVerifiedAt === "string" &&
|
|
222
|
+
model.bundleVerifiedAt.length > 0,
|
|
223
|
+
);
|
|
224
|
+
if (ownDownloads.length !== 1) return null;
|
|
225
|
+
const current = await readAssignments();
|
|
226
|
+
if (Object.keys(current).length > 0) return null;
|
|
227
|
+
const onlyInstalled = ownDownloads[0];
|
|
228
|
+
if (!onlyInstalled || typeof onlyInstalled.id !== "string") return null;
|
|
229
|
+
return ensureDefaultAssignment(onlyInstalled.id);
|
|
230
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local-inference backend selector.
|
|
3
|
+
*
|
|
4
|
+
* One choice per host process: route generation through the in-process
|
|
5
|
+
* FFI streaming runner (`ffi-streaming-runner.ts`). The selection is
|
|
6
|
+
* deterministic so callers can mock it in tests and so no platform falls
|
|
7
|
+
* back to a server sidecar by accident.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Mobile (Android / iOS) ALWAYS uses `ffi-streaming`. The
|
|
11
|
+
* `llama-server` child-process path cannot ship on mobile (sandbox
|
|
12
|
+
* restrictions, App Store review, ~10–30 ms HTTP round-trip per
|
|
13
|
+
* token, no slot persistence on Android's APK private dir). When
|
|
14
|
+
* the FFI symbols are absent on a mobile build we throw — there is
|
|
15
|
+
* no second backend to fall back to.
|
|
16
|
+
* - Desktop also uses `ffi-streaming`. Missing streaming-LLM symbols are
|
|
17
|
+
* a bad build, not a reason to start a server backend.
|
|
18
|
+
* - `ELIZA_INFERENCE_BACKEND=ffi` forces the streaming runner and
|
|
19
|
+
* throws if the symbols are absent. `=auto` (or unset) follows the
|
|
20
|
+
* rules above.
|
|
21
|
+
*
|
|
22
|
+
* The selector intentionally does NOT inspect the live process to detect
|
|
23
|
+
* mobile — callers pass that information in. The mobile bootstrap
|
|
24
|
+
* (`aosp-mtp-adapter.ts` / the iOS bridge) knows what it is; tests
|
|
25
|
+
* pass synthetic values. Keeping detection out of the selector matches
|
|
26
|
+
* AGENTS.md §7 (single source of truth for inputs) and lets the
|
|
27
|
+
* decision be replayed offline.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
// MLX (Apple Silicon) is not a separate provider/plugin. If we ever need it
|
|
31
|
+
// for better Apple compatibility than llama.cpp's Metal path, it belongs here
|
|
32
|
+
// as an additional backend compiled into the fused libelizainference target —
|
|
33
|
+
// never an external mlx_lm.server HTTP sidecar.
|
|
34
|
+
export type LocalInferenceBackend = "ffi-streaming";
|
|
35
|
+
|
|
36
|
+
export type LocalInferencePlatform = "desktop" | "mobile";
|
|
37
|
+
|
|
38
|
+
export interface BackendSelectInput {
|
|
39
|
+
/** Where the host is running. */
|
|
40
|
+
platform: LocalInferencePlatform;
|
|
41
|
+
/**
|
|
42
|
+
* `llmStreamSupported()` from the loaded FFI binding. All builds MUST
|
|
43
|
+
* have this true; false means the runtime was built without the unified
|
|
44
|
+
* llama.cpp FFI path.
|
|
45
|
+
*/
|
|
46
|
+
ffiSupported: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Optional env override (`ELIZA_INFERENCE_BACKEND`). `"ffi"` forces
|
|
49
|
+
* the FFI path, while `"auto"` or unset follows the default rule.
|
|
50
|
+
*/
|
|
51
|
+
envOverride?: string | null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Read the `ELIZA_INFERENCE_BACKEND` env var into a normalised value. */
|
|
55
|
+
export function readBackendEnvOverride(
|
|
56
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
57
|
+
): "ffi" | "auto" | null {
|
|
58
|
+
const raw = env.ELIZA_INFERENCE_BACKEND?.trim().toLowerCase();
|
|
59
|
+
if (!raw || raw === "auto") return raw === "auto" ? "auto" : null;
|
|
60
|
+
if (raw === "ffi" || raw === "ffi-streaming") return "ffi";
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Decide which local-inference backend should service text generation.
|
|
66
|
+
* See file header for the full rule set. Throws when the chosen
|
|
67
|
+
* combination is incoherent (no FFI support, explicit FFI with a bad
|
|
68
|
+
* runtime build, …).
|
|
69
|
+
*/
|
|
70
|
+
export function selectBackend(
|
|
71
|
+
input: BackendSelectInput,
|
|
72
|
+
): LocalInferenceBackend {
|
|
73
|
+
const { platform, ffiSupported, envOverride } = input;
|
|
74
|
+
const override = (envOverride ?? "").toLowerCase();
|
|
75
|
+
|
|
76
|
+
if (override === "ffi") {
|
|
77
|
+
if (!ffiSupported) {
|
|
78
|
+
throw new Error(
|
|
79
|
+
"[backend-selector] ELIZA_INFERENCE_BACKEND=ffi but the loaded " +
|
|
80
|
+
"libelizainference does not export the streaming-LLM symbols. " +
|
|
81
|
+
"Rebuild the omnivoice fuse against the current ffi-streaming-llm.h.",
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
return "ffi-streaming";
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (!ffiSupported) {
|
|
88
|
+
const target = platform === "mobile" ? "Mobile build" : "Desktop build";
|
|
89
|
+
throw new Error(
|
|
90
|
+
`[backend-selector] ${target} missing streaming-LLM FFI symbols. ` +
|
|
91
|
+
"Rebuild libelizainference against the current ffi-streaming-llm.h.",
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
return "ffi-streaming";
|
|
95
|
+
}
|