@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +82 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.d.ts +29 -0
- package/src/actions/transcription-control.d.ts.map +1 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1082 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +205 -0
- package/src/routes/local-inference-asr-route.ts +163 -0
- package/src/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/src/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +808 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/transcript-audio-store.d.ts +15 -0
- package/src/routes/transcript-audio-store.d.ts.map +1 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.d.ts +36 -0
- package/src/routes/transcripts-routes.d.ts.map +1 -0
- package/src/routes/transcripts-routes.test.ts +144 -0
- package/src/routes/transcripts-routes.ts +159 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +62 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1448 -0
- package/src/runtime/index.d.ts +15 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +33 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bionic-host-loader.d.ts +46 -0
- package/src/services/bionic-host-loader.d.ts.map +1 -0
- package/src/services/bionic-host-loader.test.ts +133 -0
- package/src/services/bionic-host-loader.ts +180 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +238 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +95 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +339 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +747 -0
- package/src/services/downloader.ts +925 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +540 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1909 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.d.ts +56 -0
- package/src/services/gpu-detect.d.ts.map +1 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +231 -0
- package/src/services/hardware.ts +410 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +29 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +211 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +689 -0
- package/src/services/manifest/schema.d.ts +713 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +653 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +567 -0
- package/src/services/memory-arbiter.d.ts +318 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +925 -0
- package/src/services/memory-monitor.d.ts +122 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +297 -0
- package/src/services/memory-pressure.d.ts +130 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +407 -0
- package/src/services/routing-policy.d.ts +69 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.test.ts +164 -0
- package/src/services/routing-policy.ts +297 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.d.ts +33 -0
- package/src/services/system-memory.d.ts.map +1 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/asr-timed.real.test.ts +141 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +131 -0
- package/src/services/voice/embedding.ts +243 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +759 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2302 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +674 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +728 -0
- package/src/services/voice/ffi-bindings.ts +3225 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.d.ts +37 -0
- package/src/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.d.ts +41 -0
- package/src/services/voice/transcript-service.d.ts.map +1 -0
- package/src/services/voice/transcript-service.test.ts +137 -0
- package/src/services/voice/transcript-service.ts +141 -0
- package/src/services/voice/transcript-store.d.ts +53 -0
- package/src/services/voice/transcript-store.d.ts.map +1 -0
- package/src/services/voice/transcript-store.test.ts +153 -0
- package/src/services/voice/transcript-store.ts +132 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +418 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NVIDIA GPU detection + profile mapping.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `nvidia-smi` to identify the host GPU and maps it to a
|
|
5
|
+
* `GpuProfileId` from `@elizaos/shared/local-inference/gpu-profiles`.
|
|
6
|
+
*
|
|
7
|
+
* Single-GPU only: when multiple GPUs are present, we use the first one
|
|
8
|
+
* `nvidia-smi` reports (canonical CUDA device 0). We do NOT try to split
|
|
9
|
+
* the model across multiple cards — that is an explicit non-goal of the
|
|
10
|
+
* single-GPU profile system.
|
|
11
|
+
*
|
|
12
|
+
* Detection is cached after first call. Pass `force: true` to bypass the
|
|
13
|
+
* cache when a fresh probe is needed (e.g. after a GPU hot-swap on a
|
|
14
|
+
* laptop dock — unusual but possible).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { type SpawnSyncReturns, spawnSync } from "node:child_process";
|
|
18
|
+
import {
|
|
19
|
+
GPU_PROFILES,
|
|
20
|
+
type GpuProfile,
|
|
21
|
+
type GpuProfileId,
|
|
22
|
+
matchGpuProfile,
|
|
23
|
+
} from "@elizaos/shared";
|
|
24
|
+
|
|
25
|
+
export interface DetectedGpu {
|
|
26
|
+
/** Raw GPU name from `nvidia-smi --query-gpu=name`. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Total VRAM in MiB as reported by `nvidia-smi`. */
|
|
29
|
+
totalMemoryMiB: number;
|
|
30
|
+
/** Matched profile id, or `null` when the card is not in the supported set. */
|
|
31
|
+
profileId: GpuProfileId | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface GpuDetectionResult {
|
|
35
|
+
/** `true` when `nvidia-smi` ran successfully (even if no GPU matched a profile). */
|
|
36
|
+
nvidiaPresent: boolean;
|
|
37
|
+
/** First GPU reported by `nvidia-smi`; `null` when no NVIDIA GPU is present. */
|
|
38
|
+
gpu: DetectedGpu | null;
|
|
39
|
+
/** Resolved profile, or `null` for unsupported / non-NVIDIA hosts. */
|
|
40
|
+
profile: GpuProfile | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const EMPTY_RESULT: GpuDetectionResult = {
|
|
44
|
+
nvidiaPresent: false,
|
|
45
|
+
gpu: null,
|
|
46
|
+
profile: null,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
let cached: GpuDetectionResult | null = null;
|
|
50
|
+
let spawnSyncForTests:
|
|
51
|
+
| ((
|
|
52
|
+
command: string,
|
|
53
|
+
args: string[],
|
|
54
|
+
options: Parameters<typeof spawnSync>[2],
|
|
55
|
+
) => SpawnSyncReturns<string>)
|
|
56
|
+
| null = null;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Detect the primary NVIDIA GPU and resolve it to a profile. Returns
|
|
60
|
+
* `{ nvidiaPresent: false }` on hosts without `nvidia-smi` on PATH or
|
|
61
|
+
* without an NVIDIA GPU.
|
|
62
|
+
*
|
|
63
|
+
* The probe runs `nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits`
|
|
64
|
+
* with a 3-second timeout so a misbehaving driver cannot stall boot.
|
|
65
|
+
*/
|
|
66
|
+
export function detectGpu(opts: { force?: boolean } = {}): GpuDetectionResult {
|
|
67
|
+
if (cached && !opts.force) return cached;
|
|
68
|
+
cached = probe();
|
|
69
|
+
return cached;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Clear the cached detection result. Used by tests. */
|
|
73
|
+
export function __resetGpuDetectionCacheForTests(): void {
|
|
74
|
+
cached = null;
|
|
75
|
+
spawnSyncForTests = null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Override the nvidia-smi runner. Used by tests without mutating ESM exports. */
|
|
79
|
+
export function __setGpuDetectionSpawnSyncForTests(
|
|
80
|
+
runner:
|
|
81
|
+
| ((
|
|
82
|
+
command: string,
|
|
83
|
+
args: string[],
|
|
84
|
+
options: Parameters<typeof spawnSync>[2],
|
|
85
|
+
) => SpawnSyncReturns<string>)
|
|
86
|
+
| null,
|
|
87
|
+
): void {
|
|
88
|
+
spawnSyncForTests = runner;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function probe(): GpuDetectionResult {
|
|
92
|
+
const run = spawnSyncForTests ?? spawnSync;
|
|
93
|
+
const result = run(
|
|
94
|
+
"nvidia-smi",
|
|
95
|
+
["--query-gpu=name,memory.total", "--format=csv,noheader,nounits"],
|
|
96
|
+
{
|
|
97
|
+
encoding: "utf8",
|
|
98
|
+
timeout: 3000,
|
|
99
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
if (result.error || result.status !== 0) {
|
|
103
|
+
return EMPTY_RESULT;
|
|
104
|
+
}
|
|
105
|
+
const stdout =
|
|
106
|
+
typeof result.stdout === "string"
|
|
107
|
+
? result.stdout
|
|
108
|
+
: String(result.stdout ?? "");
|
|
109
|
+
const firstLine = stdout
|
|
110
|
+
.split(/\r?\n/)
|
|
111
|
+
.find((line: string) => line.trim() !== "");
|
|
112
|
+
if (!firstLine) return EMPTY_RESULT;
|
|
113
|
+
|
|
114
|
+
// Format: "NVIDIA H200, 141248"
|
|
115
|
+
const parts = firstLine.split(",").map((part: string) => part.trim());
|
|
116
|
+
if (parts.length < 2) return EMPTY_RESULT;
|
|
117
|
+
const name = parts[0] ?? "";
|
|
118
|
+
const memMiBRaw = Number.parseInt(parts[1] ?? "", 10);
|
|
119
|
+
const totalMemoryMiB = Number.isFinite(memMiBRaw) ? memMiBRaw : 0;
|
|
120
|
+
|
|
121
|
+
const profileId = matchGpuProfile(name);
|
|
122
|
+
const profile = profileId ? GPU_PROFILES[profileId] : null;
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
nvidiaPresent: true,
|
|
126
|
+
gpu: { name, totalMemoryMiB, profileId },
|
|
127
|
+
profile,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Recommend a `GpuProfileId` for a synthetic GPU descriptor — used by the
|
|
133
|
+
* recommender service when it already has a `HardwareProbe` and does not
|
|
134
|
+
* want to re-shell out to `nvidia-smi`. Returns `null` when nothing
|
|
135
|
+
* matches.
|
|
136
|
+
*/
|
|
137
|
+
export function recommendProfileFromName(name: string): GpuProfileId | null {
|
|
138
|
+
return matchGpuProfile(name);
|
|
139
|
+
}
|
|
@@ -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;AAMH,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;AAwCD,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,CA6B5D;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"}
|