@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,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device-tier classifier — maps a `HardwareProbe` to a `DeviceTier`
|
|
3
|
+
* (`MAX | GOOD | OKAY | POOR`) and produces the warning copy + the
|
|
4
|
+
* recommended local-voice policy the runtime + UI consume.
|
|
5
|
+
*
|
|
6
|
+
* Single-pass classifier (no async I/O). The host probe already happened in
|
|
7
|
+
* `hardware.ts`; this module is pure arithmetic on top of the probe.
|
|
8
|
+
*
|
|
9
|
+
* Numeric thresholds and tier definitions are sourced verbatim from R9
|
|
10
|
+
* (`.swarm/research/R9-memory.md` §3.1) — keep this file's per-tier table
|
|
11
|
+
* in sync with that document.
|
|
12
|
+
*
|
|
13
|
+
* - **MAX** — all voice + LM models can be **parallelized** and held
|
|
14
|
+
* resident at once (~24 GB effective model RAM AND ≥ 16 GB free at
|
|
15
|
+
* session start AND a dGPU with ≥ 16 GB VRAM OR an Apple Silicon
|
|
16
|
+
* Pro/Max/Ultra with ≥ 32 GB shared RAM).
|
|
17
|
+
* - **GOOD** — all models can be loaded into memory and run, but
|
|
18
|
+
* serialized (~12 GB effective model RAM AND ≥ 8 GB free at session
|
|
19
|
+
* start AND a dGPU with ≥ 8 GB VRAM, OR Apple Silicon base ≥ 16 GB,
|
|
20
|
+
* OR x86 CPU-only ≥ 32 GB).
|
|
21
|
+
* - **OKAY** — models load and unload per turn; caching breaks across
|
|
22
|
+
* swaps (~6 GB effective model RAM AND ≥ 3 GB free).
|
|
23
|
+
* - **POOR** — severe issues; refuse local voice, recommend cloud.
|
|
24
|
+
*
|
|
25
|
+
* Mobile clamps to **OKAY** at best regardless of RAM because the OS
|
|
26
|
+
* background-task model breaks long-running local inference (iOS jetsam
|
|
27
|
+
* 3–4 GB ceiling; Android foreground-service requirement).
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import type { HardwareProbe } from "./types";
|
|
31
|
+
|
|
32
|
+
/** The four device tiers used by the runtime + UI. */
|
|
33
|
+
export type DeviceTier = "MAX" | "GOOD" | "OKAY" | "POOR";
|
|
34
|
+
|
|
35
|
+
/** Tier ordering (higher index = better device). */
|
|
36
|
+
export const DEVICE_TIER_ORDER: ReadonlyArray<DeviceTier> = [
|
|
37
|
+
"POOR",
|
|
38
|
+
"OKAY",
|
|
39
|
+
"GOOD",
|
|
40
|
+
"MAX",
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Numeric thresholds. R9 §3.1 — keep in sync.
|
|
45
|
+
*
|
|
46
|
+
* "Effective model memory" is the memory the model can actually use, in GB.
|
|
47
|
+
* The math mirrors `recommendation.ts:effectiveMemoryGb()`:
|
|
48
|
+
* - Apple Silicon: `totalRamGb`.
|
|
49
|
+
* - Discrete GPU: `max(gpu.totalVramGb, totalRamGb * 0.5)`.
|
|
50
|
+
* - CPU-only: `totalRamGb * 0.5`.
|
|
51
|
+
*/
|
|
52
|
+
export const DEVICE_TIER_THRESHOLDS = {
|
|
53
|
+
MAX: {
|
|
54
|
+
effectiveModelMemoryGb: 24,
|
|
55
|
+
freeRamGbAtSession: 16,
|
|
56
|
+
dGpuMinVramGb: 16,
|
|
57
|
+
appleSiliconMinMemoryGb: 32,
|
|
58
|
+
},
|
|
59
|
+
GOOD: {
|
|
60
|
+
effectiveModelMemoryGb: 12,
|
|
61
|
+
freeRamGbAtSession: 8,
|
|
62
|
+
dGpuMinVramGb: 8,
|
|
63
|
+
appleSiliconMinMemoryGb: 16,
|
|
64
|
+
x86CpuOnlyMinTotalGb: 32,
|
|
65
|
+
},
|
|
66
|
+
OKAY: {
|
|
67
|
+
effectiveModelMemoryGb: 6,
|
|
68
|
+
freeRamGbAtSession: 3,
|
|
69
|
+
minTotalRamGb: 16,
|
|
70
|
+
mobileMinTotalRamGb: 12,
|
|
71
|
+
},
|
|
72
|
+
} as const;
|
|
73
|
+
|
|
74
|
+
/** What the runtime should do by default given the tier classification. */
|
|
75
|
+
export type RecommendedMode = "local" | "cloud-with-local-voice" | "cloud-only";
|
|
76
|
+
|
|
77
|
+
/** A complete tier assessment — what the UI renders + what the runtime gates on. */
|
|
78
|
+
export interface DeviceTierAssessment {
|
|
79
|
+
tier: DeviceTier;
|
|
80
|
+
/** Human-readable reasons for the decision. */
|
|
81
|
+
reasons: string[];
|
|
82
|
+
/** The top recommendation for the user, in plain text. */
|
|
83
|
+
topRecommendation: string;
|
|
84
|
+
/** True when local LM (eliza-1) is viable at the user's tier. */
|
|
85
|
+
canRunLocalLm: boolean;
|
|
86
|
+
/** True when the local voice stack (ASR + TTS) is viable. */
|
|
87
|
+
canRunLocalVoice: boolean;
|
|
88
|
+
/** Default backend mode for the user. */
|
|
89
|
+
recommendedMode: RecommendedMode;
|
|
90
|
+
/** Numeric snapshot to drive UI badges and first-run copy. */
|
|
91
|
+
numericContext: {
|
|
92
|
+
totalRamGb: number;
|
|
93
|
+
freeRamGb: number;
|
|
94
|
+
effectiveModelMemoryGb: number;
|
|
95
|
+
vramGb: number | null;
|
|
96
|
+
cpuCores: number;
|
|
97
|
+
appleSilicon: boolean;
|
|
98
|
+
mobile: boolean;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const MB_PER_GB = 1024;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Compute the memory the model can actually use, in GB. Apple Silicon uses
|
|
106
|
+
* shared memory; discrete-GPU x86 weights VRAM; CPU-only halves total RAM.
|
|
107
|
+
* Mirrors `recommendation.ts:effectiveMemoryGb`.
|
|
108
|
+
*/
|
|
109
|
+
export function effectiveModelMemoryGb(probe: HardwareProbe): number {
|
|
110
|
+
if (probe.appleSilicon) return probe.totalRamGb;
|
|
111
|
+
if (probe.gpu) {
|
|
112
|
+
return Math.max(probe.gpu.totalVramGb, probe.totalRamGb * 0.5);
|
|
113
|
+
}
|
|
114
|
+
return probe.totalRamGb * 0.5;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Treat the host as a mobile device. Mobile clamps to OKAY at best
|
|
119
|
+
* regardless of RAM because the OS background-task model breaks
|
|
120
|
+
* long-running local inference.
|
|
121
|
+
*/
|
|
122
|
+
function isMobile(probe: HardwareProbe): boolean {
|
|
123
|
+
return (
|
|
124
|
+
probe.mobile?.platform === "ios" || probe.mobile?.platform === "android"
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Compute the CPU SIMD baseline. The hardware probe has no direct AVX2 field
|
|
130
|
+
* today for x86_64, so Linux/Win x86_64 ≥ 4 cores qualifies. ARM must expose
|
|
131
|
+
* NEON/Advanced SIMD in the probe; when ARM feature data is absent, do not
|
|
132
|
+
* claim the CPU route.
|
|
133
|
+
*
|
|
134
|
+
* This is a coarse heuristic; the precise check belongs in the FFI layer
|
|
135
|
+
* (it can `cpuid` the actual flags). The tier classifier just refuses POOR
|
|
136
|
+
* when the probe is clearly under-equipped.
|
|
137
|
+
*/
|
|
138
|
+
function hasAvx2Baseline(probe: HardwareProbe): boolean {
|
|
139
|
+
if (probe.arch === "arm64" || probe.arch === "arm") {
|
|
140
|
+
return probe.cpuFeatures?.neon === true && probe.cpuCores >= 4;
|
|
141
|
+
}
|
|
142
|
+
if (probe.arch !== "x64") return false;
|
|
143
|
+
return probe.cpuCores >= 4;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The free-RAM gate at session start. R9 §3.3: only a *secondary* gate that
|
|
148
|
+
* can demote a device by one tier when `freeRamGb < totalRamGb * 0.25`.
|
|
149
|
+
* Never promotes.
|
|
150
|
+
*/
|
|
151
|
+
function freeRamDemotion(probe: HardwareProbe): boolean {
|
|
152
|
+
return probe.freeRamGb < probe.totalRamGb * 0.25;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** Apple-silicon 8 GB clamp. R9 §3.4: hard ceiling at OKAY. */
|
|
156
|
+
function isAppleSilicon8gb(probe: HardwareProbe): boolean {
|
|
157
|
+
return probe.appleSilicon && probe.totalRamGb <= 9; // 8 GB rounded.
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The single-pass classifier. Returns a complete assessment including the
|
|
162
|
+
* tier, the reasons, the recommended default mode, and the numeric context
|
|
163
|
+
* the UI needs to render the badge.
|
|
164
|
+
*
|
|
165
|
+
* The classifier is pure: same input → same output, no I/O, no clock.
|
|
166
|
+
*/
|
|
167
|
+
export function classifyDeviceTier(probe: HardwareProbe): DeviceTierAssessment {
|
|
168
|
+
const reasons: string[] = [];
|
|
169
|
+
const effective = effectiveModelMemoryGb(probe);
|
|
170
|
+
const mobile = isMobile(probe);
|
|
171
|
+
const avx2 = hasAvx2Baseline(probe);
|
|
172
|
+
const vramGb = probe.gpu?.totalVramGb ?? null;
|
|
173
|
+
const cpuCores = probe.cpuCores;
|
|
174
|
+
const totalRamGb = probe.totalRamGb;
|
|
175
|
+
const freeRamGb = probe.freeRamGb;
|
|
176
|
+
|
|
177
|
+
let tier: DeviceTier = classifyRawTier({
|
|
178
|
+
probe,
|
|
179
|
+
effective,
|
|
180
|
+
avx2,
|
|
181
|
+
mobile,
|
|
182
|
+
reasons,
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Apple Silicon 8 GB clamp — never higher than OKAY.
|
|
186
|
+
if (isAppleSilicon8gb(probe) && tierRank(tier) > tierRank("OKAY")) {
|
|
187
|
+
reasons.push("Apple Silicon 8 GB models clamp to OKAY");
|
|
188
|
+
tier = "OKAY";
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Mobile clamp — at best OKAY regardless of RAM (iOS jetsam, Android
|
|
192
|
+
// foreground-service cost). R9 §6.
|
|
193
|
+
if (mobile && tierRank(tier) > tierRank("OKAY")) {
|
|
194
|
+
reasons.push(
|
|
195
|
+
probe.mobile?.platform === "ios"
|
|
196
|
+
? "iOS clamps to OKAY (jetsam ~3-4 GB ceiling, background-audio only)"
|
|
197
|
+
: "Android clamps to OKAY (foreground-service required for continuous mic)",
|
|
198
|
+
);
|
|
199
|
+
tier = "OKAY";
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Free-RAM gate at session start — secondary demotion only.
|
|
203
|
+
if (freeRamDemotion(probe) && tierRank(tier) > tierRank("POOR")) {
|
|
204
|
+
reasons.push(
|
|
205
|
+
`Low free RAM at session start: ${freeRamGb.toFixed(1)} GB free / ${totalRamGb.toFixed(1)} GB total — demoting one tier`,
|
|
206
|
+
);
|
|
207
|
+
tier = previousTier(tier);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const canRunLocalLm = tier !== "POOR";
|
|
211
|
+
const canRunLocalVoice = tier === "MAX" || tier === "GOOD";
|
|
212
|
+
let recommendedMode: RecommendedMode;
|
|
213
|
+
if (tier === "MAX" || tier === "GOOD") recommendedMode = "local";
|
|
214
|
+
else if (tier === "OKAY")
|
|
215
|
+
recommendedMode = mobile ? "cloud-with-local-voice" : "local";
|
|
216
|
+
else recommendedMode = "cloud-only";
|
|
217
|
+
|
|
218
|
+
if (mobile && tier !== "POOR") {
|
|
219
|
+
// On mobile we default to cloud TTS+ASR per R9 §6.3; only turn-detector
|
|
220
|
+
// + VAD + wake-word run locally by default.
|
|
221
|
+
recommendedMode = "cloud-with-local-voice";
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const topRecommendation = topRecommendationFor(tier, mobile);
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
tier,
|
|
228
|
+
reasons,
|
|
229
|
+
topRecommendation,
|
|
230
|
+
canRunLocalLm,
|
|
231
|
+
canRunLocalVoice,
|
|
232
|
+
recommendedMode,
|
|
233
|
+
numericContext: {
|
|
234
|
+
totalRamGb,
|
|
235
|
+
freeRamGb,
|
|
236
|
+
effectiveModelMemoryGb: effective,
|
|
237
|
+
vramGb,
|
|
238
|
+
cpuCores,
|
|
239
|
+
appleSilicon: probe.appleSilicon,
|
|
240
|
+
mobile,
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
interface ClassifyArgs {
|
|
246
|
+
probe: HardwareProbe;
|
|
247
|
+
effective: number;
|
|
248
|
+
avx2: boolean;
|
|
249
|
+
mobile: boolean;
|
|
250
|
+
reasons: string[];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function classifyRawTier(args: ClassifyArgs): DeviceTier {
|
|
254
|
+
const { probe, effective, avx2, mobile, reasons } = args;
|
|
255
|
+
const vramGb = probe.gpu?.totalVramGb ?? 0;
|
|
256
|
+
const totalRamGb = probe.totalRamGb;
|
|
257
|
+
const freeRamGb = probe.freeRamGb;
|
|
258
|
+
const cpuCores = probe.cpuCores;
|
|
259
|
+
|
|
260
|
+
if (!avx2) {
|
|
261
|
+
reasons.push("No AVX2 baseline (or < 4 CPU cores)");
|
|
262
|
+
return "POOR";
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const max = DEVICE_TIER_THRESHOLDS.MAX;
|
|
266
|
+
const good = DEVICE_TIER_THRESHOLDS.GOOD;
|
|
267
|
+
const okay = DEVICE_TIER_THRESHOLDS.OKAY;
|
|
268
|
+
|
|
269
|
+
// MAX gate.
|
|
270
|
+
const meetsMaxEffective = effective >= max.effectiveModelMemoryGb;
|
|
271
|
+
const meetsMaxFree = freeRamGb >= max.freeRamGbAtSession;
|
|
272
|
+
const meetsMaxGpu = vramGb >= max.dGpuMinVramGb;
|
|
273
|
+
const meetsMaxAppleSilicon =
|
|
274
|
+
probe.appleSilicon && totalRamGb >= max.appleSiliconMinMemoryGb;
|
|
275
|
+
|
|
276
|
+
if (
|
|
277
|
+
!mobile &&
|
|
278
|
+
meetsMaxEffective &&
|
|
279
|
+
meetsMaxFree &&
|
|
280
|
+
(meetsMaxGpu || meetsMaxAppleSilicon)
|
|
281
|
+
) {
|
|
282
|
+
reasons.push(
|
|
283
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${
|
|
284
|
+
meetsMaxAppleSilicon
|
|
285
|
+
? `Apple Silicon ${totalRamGb.toFixed(0)} GB shared`
|
|
286
|
+
: `${vramGb} GB VRAM`
|
|
287
|
+
}`,
|
|
288
|
+
);
|
|
289
|
+
return "MAX";
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// GOOD gate.
|
|
293
|
+
const meetsGoodEffective = effective >= good.effectiveModelMemoryGb;
|
|
294
|
+
const meetsGoodFree = freeRamGb >= good.freeRamGbAtSession;
|
|
295
|
+
const meetsGoodGpu = vramGb >= good.dGpuMinVramGb;
|
|
296
|
+
const meetsGoodAppleSilicon =
|
|
297
|
+
probe.appleSilicon && totalRamGb >= good.appleSiliconMinMemoryGb;
|
|
298
|
+
const meetsGoodCpu =
|
|
299
|
+
!probe.gpu &&
|
|
300
|
+
!probe.appleSilicon &&
|
|
301
|
+
totalRamGb >= good.x86CpuOnlyMinTotalGb &&
|
|
302
|
+
cpuCores >= 4;
|
|
303
|
+
|
|
304
|
+
if (
|
|
305
|
+
!mobile &&
|
|
306
|
+
meetsGoodEffective &&
|
|
307
|
+
meetsGoodFree &&
|
|
308
|
+
(meetsGoodGpu || meetsGoodAppleSilicon || meetsGoodCpu)
|
|
309
|
+
) {
|
|
310
|
+
reasons.push(
|
|
311
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${
|
|
312
|
+
meetsGoodAppleSilicon
|
|
313
|
+
? `Apple Silicon ${totalRamGb.toFixed(0)} GB shared`
|
|
314
|
+
: meetsGoodGpu
|
|
315
|
+
? `${vramGb} GB VRAM`
|
|
316
|
+
: `${totalRamGb.toFixed(0)} GB RAM, ${cpuCores} cores`
|
|
317
|
+
}`,
|
|
318
|
+
);
|
|
319
|
+
return "GOOD";
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// OKAY gate.
|
|
323
|
+
const meetsOkayEffective = effective >= okay.effectiveModelMemoryGb;
|
|
324
|
+
const meetsOkayFree = freeRamGb >= okay.freeRamGbAtSession;
|
|
325
|
+
const meetsOkayTotal =
|
|
326
|
+
totalRamGb >= (mobile ? okay.mobileMinTotalRamGb : okay.minTotalRamGb);
|
|
327
|
+
|
|
328
|
+
if (meetsOkayEffective && meetsOkayFree && meetsOkayTotal) {
|
|
329
|
+
reasons.push(
|
|
330
|
+
`${effective.toFixed(1)} GB effective model RAM, ${freeRamGb.toFixed(1)} GB free, ${totalRamGb.toFixed(1)} GB total`,
|
|
331
|
+
);
|
|
332
|
+
return "OKAY";
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
reasons.push(
|
|
336
|
+
`Below OKAY thresholds — effective ${effective.toFixed(1)} GB / free ${freeRamGb.toFixed(1)} GB / total ${totalRamGb.toFixed(1)} GB`,
|
|
337
|
+
);
|
|
338
|
+
return "POOR";
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
function tierRank(tier: DeviceTier): number {
|
|
342
|
+
return DEVICE_TIER_ORDER.indexOf(tier);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function previousTier(tier: DeviceTier): DeviceTier {
|
|
346
|
+
const idx = tierRank(tier);
|
|
347
|
+
if (idx <= 0) return "POOR";
|
|
348
|
+
return DEVICE_TIER_ORDER[idx - 1];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function topRecommendationFor(tier: DeviceTier, mobile: boolean): string {
|
|
352
|
+
if (mobile) {
|
|
353
|
+
switch (tier) {
|
|
354
|
+
case "MAX":
|
|
355
|
+
case "GOOD":
|
|
356
|
+
return "Run local voice; cloud LM optional for the largest tiers.";
|
|
357
|
+
case "OKAY":
|
|
358
|
+
return "Use cloud voice (cloud TTS + ASR). Local turn detection + VAD + wake-word stay on-device.";
|
|
359
|
+
case "POOR":
|
|
360
|
+
return "Use cloud mode. This device is below the local-voice budget.";
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
switch (tier) {
|
|
364
|
+
case "MAX":
|
|
365
|
+
return "Run everything locally with all models held in memory in parallel.";
|
|
366
|
+
case "GOOD":
|
|
367
|
+
return "Run everything locally; models stay loaded but run one at a time.";
|
|
368
|
+
case "OKAY":
|
|
369
|
+
return "Local voice works but models swap in/out between turns. Consider cloud voice for faster turnaround.";
|
|
370
|
+
case "POOR":
|
|
371
|
+
return "Use cloud mode. Local responses will be very slow on this device.";
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Warning-copy strings for each tier. The exact prose comes from R9 §7;
|
|
377
|
+
* I10 surfaces these via the `voice-tier.json` i18n bundle. Keep this in
|
|
378
|
+
* sync with `packages/ui/src/i18n/voice-tier.json`.
|
|
379
|
+
*/
|
|
380
|
+
export const TIER_WARNING_COPY: Readonly<
|
|
381
|
+
Record<
|
|
382
|
+
DeviceTier,
|
|
383
|
+
{
|
|
384
|
+
header: string;
|
|
385
|
+
body: string;
|
|
386
|
+
}
|
|
387
|
+
>
|
|
388
|
+
> = {
|
|
389
|
+
MAX: {
|
|
390
|
+
header: "Your device is in the MAX tier for on-device Eliza.",
|
|
391
|
+
body: "Your device can run every local model in parallel: text, voice, ASR, turn detection, speaker recognition, and emotion — all resident at the same time. Expected first-audio latency under 250 ms.",
|
|
392
|
+
},
|
|
393
|
+
GOOD: {
|
|
394
|
+
header: "Your device is in the GOOD tier for on-device Eliza.",
|
|
395
|
+
body: "Your device can keep every local model loaded but will run them one at a time. Text responses, voice synthesis, and ASR are all local; only one heavy model is active per turn. Expected first-audio latency 300–600 ms.",
|
|
396
|
+
},
|
|
397
|
+
OKAY: {
|
|
398
|
+
header: "Your device is in the OKAY tier for on-device Eliza.",
|
|
399
|
+
body: "Your device will load and unload local models as they're needed. Caching does not survive a model swap, so the first response after voice + image-gen at once will be slow. Expected first-audio latency 600–1500 ms. Consider cloud voice for faster turnaround.",
|
|
400
|
+
},
|
|
401
|
+
POOR: {
|
|
402
|
+
header: "This device is in the POOR tier for on-device Eliza.",
|
|
403
|
+
body: "This device is below the local-voice memory budget. Local responses will be very slow and may fail to load. We recommend Cloud mode — your turn-detection and VAD still run locally for privacy.",
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
/** Convenience: total RAM in MB. */
|
|
408
|
+
export function totalRamMb(probe: HardwareProbe): number {
|
|
409
|
+
return Math.round(probe.totalRamGb * MB_PER_GB);
|
|
410
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resumable GGUF downloader.
|
|
3
|
+
*
|
|
4
|
+
* Streams directly from HuggingFace to a staging file under
|
|
5
|
+
* `$STATE_DIR/local-inference/downloads/<id>.part`, then atomically moves
|
|
6
|
+
* it into `models/<id>.gguf` on success. On restart the staging file is
|
|
7
|
+
* still there; `resumeIfPossible` sends a Range request starting at the
|
|
8
|
+
* current partial size.
|
|
9
|
+
*
|
|
10
|
+
* Concurrency model: at most one download per model id. Callers use
|
|
11
|
+
* `subscribe()` to receive progress events; the service facade wires that
|
|
12
|
+
* to SSE.
|
|
13
|
+
*
|
|
14
|
+
* The runtime `fetch` follows HuggingFace redirects and still gives us a body
|
|
15
|
+
* stream that can be piped into a Node WriteStream.
|
|
16
|
+
*/
|
|
17
|
+
import { type Eliza1DeviceCaps } from "./manifest";
|
|
18
|
+
import type { CatalogModel, DownloadEvent, DownloadJob } from "./types";
|
|
19
|
+
type DownloadListener = (event: DownloadEvent) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Thrown before any weight byte is fetched when an Eliza-1 bundle's manifest
|
|
22
|
+
* is incompatible with this device — wrong schema version, no overlapping
|
|
23
|
+
* verified backend, or a RAM budget that exceeds the device's memory. Per
|
|
24
|
+
* `packages/inference/AGENTS.md` §7 there is no "download anyway" path.
|
|
25
|
+
*/
|
|
26
|
+
export declare class BundleIncompatibleError extends Error {
|
|
27
|
+
readonly code: "ELIZA1_BUNDLE_INCOMPATIBLE";
|
|
28
|
+
constructor(message: string);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* One-time verify-on-device pass per `packages/inference/AGENTS.md` §7:
|
|
32
|
+
* load → 1-token text generation → 1-phrase voice generation → barge-in
|
|
33
|
+
* cancel. The downloader stays decoupled from the engine — the service
|
|
34
|
+
* layer injects this; when absent the bundle is materialized and registered
|
|
35
|
+
* but its `bundleVerifiedAt` stays unset and it does NOT auto-fill an empty
|
|
36
|
+
* default slot (an unverified bundle must not become the recommended
|
|
37
|
+
* default).
|
|
38
|
+
*/
|
|
39
|
+
export type VerifyBundleOnDevice = (args: {
|
|
40
|
+
modelId: string;
|
|
41
|
+
bundleRoot: string;
|
|
42
|
+
manifestPath: string;
|
|
43
|
+
textGgufPath: string;
|
|
44
|
+
}) => Promise<void>;
|
|
45
|
+
export interface DownloaderOptions {
|
|
46
|
+
/** Override the device-capability probe (tests / headless environments). */
|
|
47
|
+
probeDeviceCaps?: () => Promise<Eliza1DeviceCaps>;
|
|
48
|
+
/** Verify-on-device smoke run; see {@link VerifyBundleOnDevice}. */
|
|
49
|
+
verifyOnDevice?: VerifyBundleOnDevice;
|
|
50
|
+
}
|
|
51
|
+
export declare class Downloader {
|
|
52
|
+
private readonly active;
|
|
53
|
+
private readonly terminal;
|
|
54
|
+
private readonly listeners;
|
|
55
|
+
private readonly lastEmit;
|
|
56
|
+
private readonly probeDeviceCaps;
|
|
57
|
+
private readonly verifyOnDevice?;
|
|
58
|
+
constructor(options?: DownloaderOptions);
|
|
59
|
+
subscribe(listener: DownloadListener): () => void;
|
|
60
|
+
snapshot(): DownloadJob[];
|
|
61
|
+
isActive(modelId: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Start a download for a model. Accepts either a curated catalog id, or
|
|
64
|
+
* a full `CatalogModel` spec for ad-hoc HF-search results. Idempotent —
|
|
65
|
+
* returns the existing job if one is already running for the same id.
|
|
66
|
+
*/
|
|
67
|
+
start(modelIdOrSpec: string | CatalogModel): Promise<DownloadJob>;
|
|
68
|
+
cancel(modelId: string): boolean;
|
|
69
|
+
private emit;
|
|
70
|
+
private updateState;
|
|
71
|
+
private loadTerminalDownloads;
|
|
72
|
+
private persistTerminalDownloads;
|
|
73
|
+
private rememberTerminalDownload;
|
|
74
|
+
private clearTerminalDownload;
|
|
75
|
+
private throttleEmit;
|
|
76
|
+
private runJob;
|
|
77
|
+
private runBundleJob;
|
|
78
|
+
private downloadRemotePath;
|
|
79
|
+
private loadHttpClient;
|
|
80
|
+
}
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgBH,OAAO,EACN,KAAK,gBAAgB,EAMrB,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EAGX,MAAM,SAAS,CAAC;AAUjB,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAGvD;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAG,4BAA4B,CAAU;gBAC1C,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACrB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IACjC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,oEAAoE;IACpE,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAsLD,qBAAa,UAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAuB;gBAE3C,OAAO,GAAE,iBAAsB;IAM3C,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAOjD,QAAQ,IAAI,WAAW,EAAE;IAUzB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQlC;;;;OAIG;IACG,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA2DvE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAchC,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,YAAY;YAQN,MAAM;YAsIN,YAAY;YAwIZ,kBAAkB;YAiHlB,cAAc;CAkC5B"}
|