@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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-registry of model handlers registered on an AgentRuntime.
|
|
3
|
+
*
|
|
4
|
+
* The elizaOS core exposes `runtime.registerModel(type, handler, provider,
|
|
5
|
+
* priority)` but no way to list who registered what. This module intercepts
|
|
6
|
+
* `registerModel` at runtime to record every registration in a Map keyed by
|
|
7
|
+
* model type, plus fires status listeners so the UI can render a live
|
|
8
|
+
* [ModelType × Provider] routing table.
|
|
9
|
+
*
|
|
10
|
+
* Because we monkey-patch `registerModel` we also keep the original
|
|
11
|
+
* handler reference — the router-handler (see `router-handler.ts`) uses
|
|
12
|
+
* this to dispatch inference calls by policy without going through
|
|
13
|
+
* `runtime.useModel` (which would loop back to us and recurse).
|
|
14
|
+
*/
|
|
15
|
+
import { AgentRuntime, type IAgentRuntime } from "@elizaos/core";
|
|
16
|
+
export interface HandlerRegistration {
|
|
17
|
+
modelType: string;
|
|
18
|
+
provider: string;
|
|
19
|
+
priority: number;
|
|
20
|
+
registeredAt: string;
|
|
21
|
+
/**
|
|
22
|
+
* The original handler function. Captured so the router-handler can
|
|
23
|
+
* dispatch to it directly, bypassing `runtime.useModel` which would
|
|
24
|
+
* re-enter the router itself.
|
|
25
|
+
*/
|
|
26
|
+
handler: (runtime: IAgentRuntime, params: Record<string, unknown>) => Promise<unknown>;
|
|
27
|
+
}
|
|
28
|
+
type Listener = (registrations: HandlerRegistration[]) => void;
|
|
29
|
+
declare class HandlerRegistry {
|
|
30
|
+
private readonly registrations;
|
|
31
|
+
private readonly listeners;
|
|
32
|
+
private installedOn;
|
|
33
|
+
/**
|
|
34
|
+
* Snapshot of all registrations grouped by model type, sorted by
|
|
35
|
+
* priority descending inside each group (matches core's selection
|
|
36
|
+
* order). Callers must not mutate the returned array.
|
|
37
|
+
*/
|
|
38
|
+
getAll(): HandlerRegistration[];
|
|
39
|
+
/** All registrations for a given model type, sorted by priority desc. */
|
|
40
|
+
getForType(modelType: string): HandlerRegistration[];
|
|
41
|
+
/**
|
|
42
|
+
* Registrations excluding a specific provider. Used by the router-handler
|
|
43
|
+
* to find "all providers except me" when dispatching.
|
|
44
|
+
*/
|
|
45
|
+
getForTypeExcluding(modelType: string, excludeProvider: string): HandlerRegistration[];
|
|
46
|
+
subscribe(listener: Listener): () => void;
|
|
47
|
+
private emit;
|
|
48
|
+
private record;
|
|
49
|
+
/**
|
|
50
|
+
* Install the interception on a runtime. Idempotent per runtime instance.
|
|
51
|
+
* For most boot paths the prototype-level patch below already covers the
|
|
52
|
+
* runtime before any plugin registers; this method is the belt-and-braces
|
|
53
|
+
* fallback for runtimes constructed before the patch ran.
|
|
54
|
+
*/
|
|
55
|
+
installOn(runtime: AgentRuntime): void;
|
|
56
|
+
/** Exposed so the prototype patch can record through the singleton. */
|
|
57
|
+
recordFromPrototype(reg: HandlerRegistration): void;
|
|
58
|
+
}
|
|
59
|
+
export declare const handlerRegistry: HandlerRegistry;
|
|
60
|
+
/**
|
|
61
|
+
* Public type used by the API/UI — omits the handler function for
|
|
62
|
+
* serialisation and to prevent UI code from accidentally calling it.
|
|
63
|
+
*/
|
|
64
|
+
export interface PublicRegistration {
|
|
65
|
+
modelType: string;
|
|
66
|
+
provider: string;
|
|
67
|
+
priority: number;
|
|
68
|
+
registeredAt: string;
|
|
69
|
+
}
|
|
70
|
+
export declare function toPublicRegistration(reg: HandlerRegistration): PublicRegistration;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=handler-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-registry.d.ts","sourceRoot":"","sources":["handler-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,CACR,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,KAAK,QAAQ,GAAG,CAAC,aAAa,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;AAE/D,cAAM,eAAe;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,WAAW,CAAkC;IAErD;;;;OAIG;IACH,MAAM,IAAI,mBAAmB,EAAE;IAQ/B,yEAAyE;IACzE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAKpD;;;OAGG;IACH,mBAAmB,CAClB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACrB,mBAAmB,EAAE;IAMxB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAOzC,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,MAAM;IAYd;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IA2CtC,uEAAuE;IACvE,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;CAGnD;AA8DD,eAAO,MAAM,eAAe,iBAAwB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,mBAAmB,GACtB,kBAAkB,CAOpB"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-registry of model handlers registered on an AgentRuntime.
|
|
3
|
+
*
|
|
4
|
+
* The elizaOS core exposes `runtime.registerModel(type, handler, provider,
|
|
5
|
+
* priority)` but no way to list who registered what. This module intercepts
|
|
6
|
+
* `registerModel` at runtime to record every registration in a Map keyed by
|
|
7
|
+
* model type, plus fires status listeners so the UI can render a live
|
|
8
|
+
* [ModelType × Provider] routing table.
|
|
9
|
+
*
|
|
10
|
+
* Because we monkey-patch `registerModel` we also keep the original
|
|
11
|
+
* handler reference — the router-handler (see `router-handler.ts`) uses
|
|
12
|
+
* this to dispatch inference calls by policy without going through
|
|
13
|
+
* `runtime.useModel` (which would loop back to us and recurse).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { AgentRuntime, type IAgentRuntime } from "@elizaos/core";
|
|
17
|
+
|
|
18
|
+
export interface HandlerRegistration {
|
|
19
|
+
modelType: string;
|
|
20
|
+
provider: string;
|
|
21
|
+
priority: number;
|
|
22
|
+
registeredAt: string;
|
|
23
|
+
/**
|
|
24
|
+
* The original handler function. Captured so the router-handler can
|
|
25
|
+
* dispatch to it directly, bypassing `runtime.useModel` which would
|
|
26
|
+
* re-enter the router itself.
|
|
27
|
+
*/
|
|
28
|
+
handler: (
|
|
29
|
+
runtime: IAgentRuntime,
|
|
30
|
+
params: Record<string, unknown>,
|
|
31
|
+
) => Promise<unknown>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type Listener = (registrations: HandlerRegistration[]) => void;
|
|
35
|
+
|
|
36
|
+
class HandlerRegistry {
|
|
37
|
+
private readonly registrations = new Map<string, HandlerRegistration[]>();
|
|
38
|
+
private readonly listeners = new Set<Listener>();
|
|
39
|
+
private installedOn: WeakSet<object> = new WeakSet();
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Snapshot of all registrations grouped by model type, sorted by
|
|
43
|
+
* priority descending inside each group (matches core's selection
|
|
44
|
+
* order). Callers must not mutate the returned array.
|
|
45
|
+
*/
|
|
46
|
+
getAll(): HandlerRegistration[] {
|
|
47
|
+
const out: HandlerRegistration[] = [];
|
|
48
|
+
for (const list of this.registrations.values()) {
|
|
49
|
+
out.push(...list);
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** All registrations for a given model type, sorted by priority desc. */
|
|
55
|
+
getForType(modelType: string): HandlerRegistration[] {
|
|
56
|
+
const list = this.registrations.get(modelType);
|
|
57
|
+
return list ? [...list] : [];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Registrations excluding a specific provider. Used by the router-handler
|
|
62
|
+
* to find "all providers except me" when dispatching.
|
|
63
|
+
*/
|
|
64
|
+
getForTypeExcluding(
|
|
65
|
+
modelType: string,
|
|
66
|
+
excludeProvider: string,
|
|
67
|
+
): HandlerRegistration[] {
|
|
68
|
+
return this.getForType(modelType).filter(
|
|
69
|
+
(r) => r.provider !== excludeProvider,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
subscribe(listener: Listener): () => void {
|
|
74
|
+
this.listeners.add(listener);
|
|
75
|
+
return () => {
|
|
76
|
+
this.listeners.delete(listener);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private emit(): void {
|
|
81
|
+
const snapshot = this.getAll();
|
|
82
|
+
for (const listener of this.listeners) {
|
|
83
|
+
try {
|
|
84
|
+
listener(snapshot);
|
|
85
|
+
} catch {
|
|
86
|
+
this.listeners.delete(listener);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private record(reg: HandlerRegistration): void {
|
|
92
|
+
const existing = this.registrations.get(reg.modelType) ?? [];
|
|
93
|
+
// Replace any prior registration from the same provider for this
|
|
94
|
+
// model type. Core allows multiple providers per type but only one
|
|
95
|
+
// registration per (type, provider) pair — last write wins.
|
|
96
|
+
const filtered = existing.filter((r) => r.provider !== reg.provider);
|
|
97
|
+
filtered.push(reg);
|
|
98
|
+
filtered.sort((a, b) => b.priority - a.priority);
|
|
99
|
+
this.registrations.set(reg.modelType, filtered);
|
|
100
|
+
this.emit();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Install the interception on a runtime. Idempotent per runtime instance.
|
|
105
|
+
* For most boot paths the prototype-level patch below already covers the
|
|
106
|
+
* runtime before any plugin registers; this method is the belt-and-braces
|
|
107
|
+
* fallback for runtimes constructed before the patch ran.
|
|
108
|
+
*/
|
|
109
|
+
installOn(runtime: AgentRuntime): void {
|
|
110
|
+
installPrototypePatch();
|
|
111
|
+
const rt = runtime as AgentRuntime & {
|
|
112
|
+
registerModel?: unknown;
|
|
113
|
+
};
|
|
114
|
+
if (typeof rt.registerModel !== "function") return;
|
|
115
|
+
if (this.installedOn.has(rt)) return;
|
|
116
|
+
this.installedOn.add(rt);
|
|
117
|
+
|
|
118
|
+
// If the runtime already inherited the patched prototype method the
|
|
119
|
+
// prototype handles every call. Nothing to do per-instance.
|
|
120
|
+
const protoMethod = Object.getPrototypeOf(rt)?.registerModel as
|
|
121
|
+
| PatchMarkedRegisterModel
|
|
122
|
+
| undefined;
|
|
123
|
+
if (protoMethod?.[PATCH_MARK]) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Per-instance wrap only for legacy runtimes whose prototype pre-dates
|
|
128
|
+
// our prototype patch (shouldn't happen in practice).
|
|
129
|
+
const original = rt.registerModel.bind(runtime) as (
|
|
130
|
+
modelType: string,
|
|
131
|
+
handler: HandlerRegistration["handler"],
|
|
132
|
+
provider: string,
|
|
133
|
+
priority?: number,
|
|
134
|
+
) => void;
|
|
135
|
+
rt.registerModel = ((
|
|
136
|
+
modelType: string,
|
|
137
|
+
handler: HandlerRegistration["handler"],
|
|
138
|
+
provider: string,
|
|
139
|
+
priority?: number,
|
|
140
|
+
) => {
|
|
141
|
+
this.record({
|
|
142
|
+
modelType: String(modelType),
|
|
143
|
+
provider: String(provider),
|
|
144
|
+
priority: typeof priority === "number" ? priority : 0,
|
|
145
|
+
registeredAt: new Date().toISOString(),
|
|
146
|
+
handler,
|
|
147
|
+
});
|
|
148
|
+
return original(modelType, handler, provider, priority);
|
|
149
|
+
}) as typeof rt.registerModel;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Exposed so the prototype patch can record through the singleton. */
|
|
153
|
+
recordFromPrototype(reg: HandlerRegistration): void {
|
|
154
|
+
this.record(reg);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const PATCH_MARK = Symbol.for("eliza.local-inference.registerModel.patched");
|
|
159
|
+
let prototypePatched = false;
|
|
160
|
+
|
|
161
|
+
type RegisterModelMethod = (
|
|
162
|
+
this: AgentRuntime,
|
|
163
|
+
modelType: string,
|
|
164
|
+
handler: HandlerRegistration["handler"],
|
|
165
|
+
provider: string,
|
|
166
|
+
priority?: number,
|
|
167
|
+
) => void;
|
|
168
|
+
|
|
169
|
+
type PatchMarkedRegisterModel = RegisterModelMethod & {
|
|
170
|
+
[PATCH_MARK]?: true;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* One-shot patch of `AgentRuntime.prototype.registerModel` so every runtime
|
|
175
|
+
* instance — including ones constructed later in boot — records through
|
|
176
|
+
* the singleton handler registry. Idempotent.
|
|
177
|
+
*/
|
|
178
|
+
function installPrototypePatch(): void {
|
|
179
|
+
if (prototypePatched) return;
|
|
180
|
+
const proto = AgentRuntime.prototype as AgentRuntime & {
|
|
181
|
+
registerModel: RegisterModelMethod;
|
|
182
|
+
};
|
|
183
|
+
const original = proto.registerModel;
|
|
184
|
+
if (typeof original !== "function") return;
|
|
185
|
+
if ((original as PatchMarkedRegisterModel)[PATCH_MARK]) {
|
|
186
|
+
prototypePatched = true;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const patched = function patchedRegisterModel(
|
|
190
|
+
this: AgentRuntime,
|
|
191
|
+
modelType: string,
|
|
192
|
+
handler: HandlerRegistration["handler"],
|
|
193
|
+
provider: string,
|
|
194
|
+
priority?: number,
|
|
195
|
+
): void {
|
|
196
|
+
try {
|
|
197
|
+
handlerRegistry.recordFromPrototype({
|
|
198
|
+
modelType: String(modelType),
|
|
199
|
+
provider: String(provider),
|
|
200
|
+
priority: typeof priority === "number" ? priority : 0,
|
|
201
|
+
registeredAt: new Date().toISOString(),
|
|
202
|
+
handler,
|
|
203
|
+
});
|
|
204
|
+
} catch {
|
|
205
|
+
// Never let registry bookkeeping break the registration path.
|
|
206
|
+
}
|
|
207
|
+
original.call(this, modelType, handler, provider, priority);
|
|
208
|
+
} as typeof original & { [PATCH_MARK]?: true };
|
|
209
|
+
patched[PATCH_MARK] = true;
|
|
210
|
+
proto.registerModel = patched;
|
|
211
|
+
prototypePatched = true;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Install at module-import time. This is a process-wide side effect but a
|
|
215
|
+
// benign one: the patch is idempotent and forwards to the original.
|
|
216
|
+
installPrototypePatch();
|
|
217
|
+
|
|
218
|
+
export const handlerRegistry = new HandlerRegistry();
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Public type used by the API/UI — omits the handler function for
|
|
222
|
+
* serialisation and to prevent UI code from accidentally calling it.
|
|
223
|
+
*/
|
|
224
|
+
export interface PublicRegistration {
|
|
225
|
+
modelType: string;
|
|
226
|
+
provider: string;
|
|
227
|
+
priority: number;
|
|
228
|
+
registeredAt: string;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export function toPublicRegistration(
|
|
232
|
+
reg: HandlerRegistration,
|
|
233
|
+
): PublicRegistration {
|
|
234
|
+
return {
|
|
235
|
+
modelType: reg.modelType,
|
|
236
|
+
provider: reg.provider,
|
|
237
|
+
priority: reg.priority,
|
|
238
|
+
registeredAt: reg.registeredAt,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardware probe for local inference sizing.
|
|
3
|
+
*
|
|
4
|
+
* Uses `capacitor-llama` when available to read GPU backend + VRAM. Falls back
|
|
5
|
+
* to Node's `os` module when the binding isn't installed — we don't require
|
|
6
|
+
* the plugin to be loaded for the probe endpoint to return useful data.
|
|
7
|
+
*
|
|
8
|
+
* Dynamic import is intentional: the binding pulls a native prebuilt that we
|
|
9
|
+
* don't want eagerly required at module-load time (breaks CI environments
|
|
10
|
+
* without the trusted-dependency flag).
|
|
11
|
+
*/
|
|
12
|
+
import type { Eliza1DeviceCaps } from "./manifest";
|
|
13
|
+
import type { CpuFeatureProbe, HardwareProbe, OpenVinoHardwareProbe } from "./types";
|
|
14
|
+
interface CpuFeatureDetectionHost {
|
|
15
|
+
platform?: NodeJS.Platform;
|
|
16
|
+
arch?: NodeJS.Architecture;
|
|
17
|
+
readFileSync?: (path: string, encoding: BufferEncoding) => string;
|
|
18
|
+
execFileSync?: (file: string, args: readonly string[], options: {
|
|
19
|
+
encoding: BufferEncoding;
|
|
20
|
+
stdio: "pipe";
|
|
21
|
+
}) => string;
|
|
22
|
+
}
|
|
23
|
+
export declare function detectCpuFeatures(host?: CpuFeatureDetectionHost): CpuFeatureProbe | undefined;
|
|
24
|
+
export declare function hasUsableArmCpuBackend(probe: HardwareProbe): boolean;
|
|
25
|
+
interface OpenVinoDetectionHost {
|
|
26
|
+
platform?: NodeJS.Platform;
|
|
27
|
+
env?: NodeJS.ProcessEnv;
|
|
28
|
+
existsSync?: (path: string) => boolean;
|
|
29
|
+
readdirSync?: (path: string) => string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function detectOpenVinoDevices(host?: OpenVinoDetectionHost): OpenVinoHardwareProbe;
|
|
32
|
+
/**
|
|
33
|
+
* Read current system + GPU state. Cheap enough to call per-request; no
|
|
34
|
+
* internal caching so the UI always reflects live VRAM usage.
|
|
35
|
+
*/
|
|
36
|
+
export declare function probeHardware(): Promise<HardwareProbe>;
|
|
37
|
+
/**
|
|
38
|
+
* Map a hardware probe onto the Eliza-1 device-capability snapshot used by
|
|
39
|
+
* the manifest validator and the bundle downloader.
|
|
40
|
+
*
|
|
41
|
+
* Backends: `cpu` is always present (the floor). A detected GPU backend is
|
|
42
|
+
* added when `capacitor-llama` reports one (`metal` on Apple Silicon, `cuda`
|
|
43
|
+
* on NVIDIA, `vulkan` on cross-vendor Linux/Android). We do not synthesize
|
|
44
|
+
* `rocm` from the probe — `capacitor-llama` reports AMD as `vulkan` on the
|
|
45
|
+
* builds we ship, and a bundle that only verified ROCm but not Vulkan is
|
|
46
|
+
* legitimately not installable here.
|
|
47
|
+
*
|
|
48
|
+
* `ramMb` is total system RAM. On Apple Silicon that is also the GPU's
|
|
49
|
+
* working memory; on discrete-GPU boxes the recommendation engine layers
|
|
50
|
+
* its own VRAM-vs-RAM heuristics on top, but the bundle's `ramBudgetMb.min`
|
|
51
|
+
* is a system-RAM floor in every manifest.
|
|
52
|
+
*/
|
|
53
|
+
export declare function deviceCapsFromProbe(probe: HardwareProbe): Eliza1DeviceCaps;
|
|
54
|
+
/**
|
|
55
|
+
* Compatibility assessment for a specific model given current hardware.
|
|
56
|
+
*
|
|
57
|
+
* Green/fits: comfortable headroom (model < 70% of effective memory).
|
|
58
|
+
* Yellow/tight: will run but may swap or stutter under load.
|
|
59
|
+
* Red/wontfit: exceeds available memory.
|
|
60
|
+
*/
|
|
61
|
+
export declare function assessFit(probe: HardwareProbe, modelSizeGb: number, minRamGb: number): "fits" | "tight" | "wontfit";
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=hardware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["hardware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EACX,eAAe,EACf,aAAa,EAGb,qBAAqB,EACrB,MAAM,SAAS,CAAC;AA+BjB,UAAU,uBAAuB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,KAAK,MAAM,CAAC;IAClE,YAAY,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;QAAE,QAAQ,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAChD,MAAM,CAAC;CACZ;AAmCD,wBAAgB,iBAAiB,CAChC,IAAI,GAAE,uBAA4B,GAChC,eAAe,GAAG,SAAS,CA+C7B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAGpE;AAiCD,UAAU,qBAAqB;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CACzC;AAoCD,wBAAgB,qBAAqB,CACpC,IAAI,GAAE,qBAA0B,GAC9B,qBAAqB,CAgFvB;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CA+B5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAiB1E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACd,MAAM,GAAG,OAAO,GAAG,SAAS,CAW9B"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
detectCpuFeatures,
|
|
4
|
+
detectOpenVinoDevices,
|
|
5
|
+
deviceCapsFromProbe,
|
|
6
|
+
} from "./hardware";
|
|
7
|
+
|
|
8
|
+
function detector(files: Record<string, string[] | true>) {
|
|
9
|
+
const existsSync = (path: string): boolean => path in files;
|
|
10
|
+
const readdirSync = (path: string): string[] => {
|
|
11
|
+
const value = files[path];
|
|
12
|
+
return Array.isArray(value) ? value : [];
|
|
13
|
+
};
|
|
14
|
+
return { existsSync, readdirSync };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe("detectOpenVinoDevices", () => {
|
|
18
|
+
it("prefers NPU for ASR when OpenVINO runtime and accel node are present", () => {
|
|
19
|
+
const probe = detectOpenVinoDevices({
|
|
20
|
+
platform: "linux",
|
|
21
|
+
env: { OpenVINO_DIR: "/opt/intel/openvino_2026/runtime/cmake" },
|
|
22
|
+
...detector({
|
|
23
|
+
"/dev/accel": ["accel0"],
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
expect(probe.runtimeAvailable).toBe(true);
|
|
28
|
+
expect(probe.devices).toEqual(["CPU", "NPU"]);
|
|
29
|
+
expect(probe.npu.accelNodes).toEqual(["/dev/accel/accel0"]);
|
|
30
|
+
expect(probe.recommendedAsrDevice).toBe("NPU");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("warns when Intel render nodes exist without the Compute Runtime stack", () => {
|
|
34
|
+
const probe = detectOpenVinoDevices({
|
|
35
|
+
platform: "linux",
|
|
36
|
+
env: { OpenVINO_DIR: "/opt/intel/openvino_2026/runtime/cmake" },
|
|
37
|
+
...detector({
|
|
38
|
+
"/dev/dri": ["card0", "renderD128"],
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
expect(probe.devices).toEqual(["CPU"]);
|
|
43
|
+
expect(probe.gpu.renderNodes).toEqual(["/dev/dri/renderD128"]);
|
|
44
|
+
expect(probe.gpu.computeRuntimeReady).toBe(false);
|
|
45
|
+
expect(probe.gpu.missingLinuxPackages).toEqual([
|
|
46
|
+
"intel-opencl-icd",
|
|
47
|
+
"libigc2",
|
|
48
|
+
"libigdfcl2",
|
|
49
|
+
]);
|
|
50
|
+
expect(probe.warnings[0]).toContain("Intel Compute Runtime packages");
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("does not report OpenVINO devices when the runtime is not installed", () => {
|
|
54
|
+
const probe = detectOpenVinoDevices({
|
|
55
|
+
platform: "linux",
|
|
56
|
+
env: {},
|
|
57
|
+
...detector({
|
|
58
|
+
"/dev/accel": ["accel0"],
|
|
59
|
+
"/dev/dri": ["renderD128"],
|
|
60
|
+
"/usr/lib/x86_64-linux-gnu/intel-opencl/libigdrcl.so": true,
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
expect(probe.runtimeAvailable).toBe(false);
|
|
65
|
+
expect(probe.devices).toEqual([]);
|
|
66
|
+
expect(probe.recommendedAsrDevice).toBeNull();
|
|
67
|
+
expect(probe.warnings).toContain(
|
|
68
|
+
"Intel accelerator nodes are present, but OpenVINO Runtime was not found; source setupvars.sh or set OpenVINO_DIR.",
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("treats sandbox-denied optional system paths as unavailable", () => {
|
|
73
|
+
const existsSync = (path: string): boolean => {
|
|
74
|
+
throw Object.assign(
|
|
75
|
+
new Error(`mobile-fs-shim: path escapes workspace root: ${path}`),
|
|
76
|
+
{ code: "EACCES" },
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
const readdirSync = (path: string): string[] => {
|
|
80
|
+
throw new Error(`unexpected readdir for ${path}`);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const probe = detectOpenVinoDevices({
|
|
84
|
+
platform: "linux",
|
|
85
|
+
env: {},
|
|
86
|
+
existsSync,
|
|
87
|
+
readdirSync,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
expect(probe.runtimeAvailable).toBe(false);
|
|
91
|
+
expect(probe.devices).toEqual([]);
|
|
92
|
+
expect(probe.gpu.renderNodes).toEqual([]);
|
|
93
|
+
expect(probe.npu.accelNodes).toEqual([]);
|
|
94
|
+
expect(probe.recommendedAsrDevice).toBeNull();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
describe("detectCpuFeatures", () => {
|
|
99
|
+
it("maps Linux ARM cpuinfo feature tokens to the shared probe shape", () => {
|
|
100
|
+
const cpuinfo = [
|
|
101
|
+
"processor\t: 0",
|
|
102
|
+
"Features\t: fp asimd evtstrm aes asimddp i8mm sve sve2",
|
|
103
|
+
"",
|
|
104
|
+
].join("\n");
|
|
105
|
+
|
|
106
|
+
expect(
|
|
107
|
+
detectCpuFeatures({
|
|
108
|
+
platform: "linux",
|
|
109
|
+
arch: "arm64",
|
|
110
|
+
readFileSync: () => cpuinfo,
|
|
111
|
+
}),
|
|
112
|
+
).toEqual({
|
|
113
|
+
neon: true,
|
|
114
|
+
dotprod: true,
|
|
115
|
+
i8mm: true,
|
|
116
|
+
sve: true,
|
|
117
|
+
sve2: true,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("maps Android ARM cpuinfo aliases without assuming missing features", () => {
|
|
122
|
+
const cpuinfo = "Features\t: fp neon dotprod\n";
|
|
123
|
+
|
|
124
|
+
expect(
|
|
125
|
+
detectCpuFeatures({
|
|
126
|
+
platform: "android",
|
|
127
|
+
arch: "arm64",
|
|
128
|
+
readFileSync: () => cpuinfo,
|
|
129
|
+
}),
|
|
130
|
+
).toEqual({
|
|
131
|
+
neon: true,
|
|
132
|
+
dotprod: true,
|
|
133
|
+
i8mm: false,
|
|
134
|
+
sve: false,
|
|
135
|
+
sve2: false,
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("uses Darwin sysctl keys where available and treats missing keys as false", () => {
|
|
140
|
+
const values: Record<string, string> = {
|
|
141
|
+
"hw.optional.arm.FEAT_DotProd": "1\n",
|
|
142
|
+
"hw.optional.arm.FEAT_I8MM": "0\n",
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
expect(
|
|
146
|
+
detectCpuFeatures({
|
|
147
|
+
platform: "darwin",
|
|
148
|
+
arch: "arm64",
|
|
149
|
+
execFileSync: (_file, args) => {
|
|
150
|
+
const key = args[1];
|
|
151
|
+
if (key in values) return values[key];
|
|
152
|
+
throw new Error(`unknown sysctl ${key}`);
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
).toEqual({
|
|
156
|
+
neon: true,
|
|
157
|
+
dotprod: true,
|
|
158
|
+
i8mm: false,
|
|
159
|
+
sve: false,
|
|
160
|
+
sve2: false,
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("does not claim CPU backend support for ARM when NEON evidence is absent", () => {
|
|
165
|
+
expect(
|
|
166
|
+
deviceCapsFromProbe({
|
|
167
|
+
totalRamGb: 16,
|
|
168
|
+
freeRamGb: 12,
|
|
169
|
+
gpu: null,
|
|
170
|
+
cpuCores: 8,
|
|
171
|
+
platform: "linux",
|
|
172
|
+
arch: "arm64",
|
|
173
|
+
appleSilicon: false,
|
|
174
|
+
recommendedBucket: "mid",
|
|
175
|
+
source: "os-fallback",
|
|
176
|
+
}),
|
|
177
|
+
).toEqual({
|
|
178
|
+
availableBackends: [],
|
|
179
|
+
ramMb: 16 * 1024,
|
|
180
|
+
cpuFeatures: undefined,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|