@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,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice-emotion types and pure projection functions — consumed by the
|
|
3
|
+
* attribution pipeline (`emotion-attribution.ts`).
|
|
4
|
+
*
|
|
5
|
+
* The ONNX-backed `VoiceEmotionClassifier` class was removed when
|
|
6
|
+
* `onnxruntime-node` was dropped. No resident voice-emotion classifier
|
|
7
|
+
* remains; only the pure types and projection helpers below are kept.
|
|
8
|
+
*
|
|
9
|
+
* Pure exports here:
|
|
10
|
+
* - Model id constants (`WAV2SMALL_INT8_MODEL_ID`, etc.)
|
|
11
|
+
* - Sample rate / window constants
|
|
12
|
+
* - `VoiceEmotionVad`, `VoiceEmotionClassifierOutput` interfaces
|
|
13
|
+
* - `VoiceEmotionHead` type
|
|
14
|
+
* - `VoiceEmotionClassifierError` error class
|
|
15
|
+
* - `projectVadToExpressiveEmotion` — V-A-D → ExpressiveEmotion projection
|
|
16
|
+
* - `interpretCls7Output` — 7-class logit → structured output
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
EXPRESSIVE_EMOTION_TAGS,
|
|
21
|
+
type ExpressiveEmotion,
|
|
22
|
+
} from "./expressive-tags";
|
|
23
|
+
|
|
24
|
+
/** Stable identifier for the Wav2Small student head we ship. */
|
|
25
|
+
export const WAV2SMALL_INT8_MODEL_ID = "wav2small-msp-dim-int8" as const;
|
|
26
|
+
/** Stable identifier for the floating-point parent we use in eval. */
|
|
27
|
+
export const WAV2SMALL_FP32_MODEL_ID = "wav2small-msp-dim-fp32" as const;
|
|
28
|
+
export type VoiceEmotionModelId =
|
|
29
|
+
| typeof WAV2SMALL_INT8_MODEL_ID
|
|
30
|
+
| typeof WAV2SMALL_FP32_MODEL_ID;
|
|
31
|
+
|
|
32
|
+
/** Required sample rate for the Wav2Small log-mel front-end. */
|
|
33
|
+
export const WAV2SMALL_SAMPLE_RATE = 16_000;
|
|
34
|
+
/** Hard minimum window: anything shorter is rejected. */
|
|
35
|
+
export const WAV2SMALL_MIN_SAMPLES = WAV2SMALL_SAMPLE_RATE; // 1.0 s
|
|
36
|
+
/** Soft maximum window: longer inputs are truncated to the trailing window. */
|
|
37
|
+
export const WAV2SMALL_MAX_SAMPLES = WAV2SMALL_SAMPLE_RATE * 12; // 12 s
|
|
38
|
+
|
|
39
|
+
/** Raised when the bundled model file can not be loaded or run. */
|
|
40
|
+
export class VoiceEmotionClassifierError extends Error {
|
|
41
|
+
constructor(message: string) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.name = "VoiceEmotionClassifierError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Continuous V-A-D output. All three are in [0, 1]. */
|
|
48
|
+
export interface VoiceEmotionVad {
|
|
49
|
+
valence: number;
|
|
50
|
+
arousal: number;
|
|
51
|
+
dominance: number;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** One classifier inference output. */
|
|
55
|
+
export interface VoiceEmotionClassifierOutput {
|
|
56
|
+
vad: VoiceEmotionVad;
|
|
57
|
+
/** Projected discrete label, or null when no projection is confident. */
|
|
58
|
+
emotion: ExpressiveEmotion | null;
|
|
59
|
+
/** Confidence in the projected discrete label, [0, 1]. */
|
|
60
|
+
confidence: number;
|
|
61
|
+
/** Per-class soft scores aligned with `EXPRESSIVE_EMOTION_TAGS`. */
|
|
62
|
+
scores: Record<ExpressiveEmotion, number>;
|
|
63
|
+
/** Model id used for this inference (for the attribution evidence row). */
|
|
64
|
+
modelId: VoiceEmotionModelId;
|
|
65
|
+
/** Inference wall-time in ms (CPU side; useful for the bench harness). */
|
|
66
|
+
latencyMs: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Clamp `value` into the unit interval. Non-finite inputs become 0 — the
|
|
71
|
+
* downstream attribution will see 0-confidence and reject the read.
|
|
72
|
+
*/
|
|
73
|
+
function clamp01(value: number): number {
|
|
74
|
+
if (!Number.isFinite(value)) return 0;
|
|
75
|
+
if (value < 0) return 0;
|
|
76
|
+
if (value > 1) return 1;
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Project a continuous V-A-D triple into the 7-class
|
|
82
|
+
* `ExpressiveEmotion` tag set. Returns soft scores per tag and the best
|
|
83
|
+
* discrete pick with a confidence score.
|
|
84
|
+
*
|
|
85
|
+
* The projection is Plutchik-aligned and deterministic. The thresholds
|
|
86
|
+
* are tuned against the MSP-Podcast V-A-D mean/std reported in the
|
|
87
|
+
* audeering model card and Wav2Small paper; small enough to be stable but
|
|
88
|
+
* wide enough to give every class some mass on conversational speech.
|
|
89
|
+
*
|
|
90
|
+
* Sign convention (audeering teacher, mirrored by Wav2Small):
|
|
91
|
+
* valence — high = positive affect (happy, calm), low = negative (sad, angry).
|
|
92
|
+
* arousal — high = energetic (excited, angry), low = subdued (calm, sad).
|
|
93
|
+
* dominance — high = assertive (angry), low = submissive (nervous, whisper).
|
|
94
|
+
*/
|
|
95
|
+
export function projectVadToExpressiveEmotion(vad: VoiceEmotionVad): {
|
|
96
|
+
emotion: ExpressiveEmotion | null;
|
|
97
|
+
confidence: number;
|
|
98
|
+
scores: Record<ExpressiveEmotion, number>;
|
|
99
|
+
} {
|
|
100
|
+
// Non-finite inputs cannot be reasoned about — abstain explicitly rather
|
|
101
|
+
// than coerce to a default corner. The classifier is the source of truth
|
|
102
|
+
// for V-A-D; a non-finite read means the upstream forward pass diverged
|
|
103
|
+
// and the downstream attribution should not pretend the read happened.
|
|
104
|
+
if (
|
|
105
|
+
!Number.isFinite(vad.valence) ||
|
|
106
|
+
!Number.isFinite(vad.arousal) ||
|
|
107
|
+
!Number.isFinite(vad.dominance)
|
|
108
|
+
) {
|
|
109
|
+
const emptyScores: Record<ExpressiveEmotion, number> = {
|
|
110
|
+
happy: 0,
|
|
111
|
+
sad: 0,
|
|
112
|
+
angry: 0,
|
|
113
|
+
nervous: 0,
|
|
114
|
+
calm: 0,
|
|
115
|
+
excited: 0,
|
|
116
|
+
whisper: 0,
|
|
117
|
+
};
|
|
118
|
+
return { emotion: null, confidence: 0, scores: emptyScores };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const v = clamp01(vad.valence);
|
|
122
|
+
const a = clamp01(vad.arousal);
|
|
123
|
+
const d = clamp01(vad.dominance);
|
|
124
|
+
|
|
125
|
+
// Center each axis at 0.5; magnitudes in [-0.5, 0.5].
|
|
126
|
+
const vC = v - 0.5;
|
|
127
|
+
const aC = a - 0.5;
|
|
128
|
+
const dC = d - 0.5;
|
|
129
|
+
|
|
130
|
+
const scores: Record<ExpressiveEmotion, number> = {
|
|
131
|
+
happy: 0,
|
|
132
|
+
sad: 0,
|
|
133
|
+
angry: 0,
|
|
134
|
+
nervous: 0,
|
|
135
|
+
calm: 0,
|
|
136
|
+
excited: 0,
|
|
137
|
+
whisper: 0,
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// Each class scores only from off-center signal — a fully-neutral
|
|
141
|
+
// (0.5, 0.5, 0.5) read produces all-zero scores and we abstain. Magnitudes
|
|
142
|
+
// are tuned so that a confident corner of V-A-D space lands ≥ 0.5
|
|
143
|
+
// (the bench gate threshold for "discrete label confident enough to
|
|
144
|
+
// surface").
|
|
145
|
+
// happy — high V, mid-high A, low |D| spread.
|
|
146
|
+
scores.happy = clamp01(vC * 1.4 + Math.max(0, aC) * 0.6 - Math.abs(dC) * 0.4);
|
|
147
|
+
// excited — high V, very high A.
|
|
148
|
+
scores.excited = clamp01(vC * 0.9 + aC * 1.6);
|
|
149
|
+
// calm — high V, low A.
|
|
150
|
+
scores.calm = clamp01(Math.max(0, vC) * 1.4 - aC * 1.2 - Math.abs(dC) * 0.3);
|
|
151
|
+
// sad — low V, low A, low D.
|
|
152
|
+
scores.sad = clamp01(-vC * 1.4 - aC * 0.8 - dC * 0.4);
|
|
153
|
+
// angry — low V, high A, high D.
|
|
154
|
+
scores.angry = clamp01(-vC * 1.1 + aC * 1.2 + dC * 1.0);
|
|
155
|
+
// nervous — low-mid V, mid-high A, low D.
|
|
156
|
+
scores.nervous = clamp01(-vC * 0.7 + aC * 0.9 - dC * 1.2);
|
|
157
|
+
// whisper — very low A and very low D (both at the floor). Valence-agnostic
|
|
158
|
+
// (we have no energy axis here). The double-negative gating means a low
|
|
159
|
+
// arousal alone does NOT trigger whisper — only the very low-A + low-D
|
|
160
|
+
// corner does.
|
|
161
|
+
scores.whisper = clamp01(-aC * 1.4 - dC * 1.4);
|
|
162
|
+
|
|
163
|
+
let best: ExpressiveEmotion | null = null;
|
|
164
|
+
let bestScore = 0;
|
|
165
|
+
for (const tag of EXPRESSIVE_EMOTION_TAGS) {
|
|
166
|
+
if (scores[tag] > bestScore) {
|
|
167
|
+
bestScore = scores[tag];
|
|
168
|
+
best = tag;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Require a minimum mass before we attribute a discrete label.
|
|
172
|
+
if (bestScore < 0.35) {
|
|
173
|
+
return { emotion: null, confidence: bestScore, scores };
|
|
174
|
+
}
|
|
175
|
+
return { emotion: best, confidence: bestScore, scores };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Stable model-head identifier — declares whether the model emits
|
|
180
|
+
* V-A-D triples or 7-class logits. `vad` = continuous [valence, arousal,
|
|
181
|
+
* dominance]; `cls7` = 7-class logits in `EXPRESSIVE_EMOTION_TAGS` order.
|
|
182
|
+
*/
|
|
183
|
+
export type VoiceEmotionHead = "vad" | "cls7";
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Convert the 7-class logits from the `cls7` head into a structured
|
|
187
|
+
* emotion read. Applies a numerically-stable softmax (max-subtraction)
|
|
188
|
+
* over `EXPRESSIVE_EMOTION_TAGS` and selects the argmax.
|
|
189
|
+
*
|
|
190
|
+
* Confidence is the softmax probability of the picked class (in [0, 1]),
|
|
191
|
+
* which gives downstream consumers a calibrated mass to compare against
|
|
192
|
+
* the V-A-D-projection path's 0.35 abstain floor.
|
|
193
|
+
*
|
|
194
|
+
* The `vad` field is synthesised at the neutral midpoint (0.5, 0.5, 0.5).
|
|
195
|
+
* The cls7 head is the ground truth for the picked emotion — the V-A-D
|
|
196
|
+
* triple is left at neutral because we no longer regress to a V-A-D
|
|
197
|
+
* target. Consumers that need real V-A-D must use a `head=vad` model.
|
|
198
|
+
*/
|
|
199
|
+
export function interpretCls7Output(
|
|
200
|
+
logits: Float32Array,
|
|
201
|
+
modelId: VoiceEmotionModelId,
|
|
202
|
+
latencyMs: number,
|
|
203
|
+
): VoiceEmotionClassifierOutput {
|
|
204
|
+
const n = EXPRESSIVE_EMOTION_TAGS.length;
|
|
205
|
+
if (logits.length !== n) {
|
|
206
|
+
throw new VoiceEmotionClassifierError(
|
|
207
|
+
`[voice-emotion] interpretCls7Output: expected ${n} logits, got ${logits.length}`,
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
let maxLogit = Number.NEGATIVE_INFINITY;
|
|
211
|
+
for (let i = 0; i < n; i++) {
|
|
212
|
+
const v = logits[i] ?? 0;
|
|
213
|
+
if (Number.isFinite(v) && v > maxLogit) maxLogit = v;
|
|
214
|
+
}
|
|
215
|
+
if (!Number.isFinite(maxLogit)) {
|
|
216
|
+
// All-NaN/Inf logits — abstain rather than coerce.
|
|
217
|
+
const emptyScores = makeEmptyScoresRecord();
|
|
218
|
+
return {
|
|
219
|
+
vad: { valence: 0.5, arousal: 0.5, dominance: 0.5 },
|
|
220
|
+
emotion: null,
|
|
221
|
+
confidence: 0,
|
|
222
|
+
scores: emptyScores,
|
|
223
|
+
modelId,
|
|
224
|
+
latencyMs,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
const exps = new Float32Array(n);
|
|
228
|
+
let sum = 0;
|
|
229
|
+
for (let i = 0; i < n; i++) {
|
|
230
|
+
const v = logits[i] ?? 0;
|
|
231
|
+
const e = Math.exp((Number.isFinite(v) ? v : maxLogit) - maxLogit);
|
|
232
|
+
exps[i] = e;
|
|
233
|
+
sum += e;
|
|
234
|
+
}
|
|
235
|
+
const denom = sum > 0 ? sum : 1;
|
|
236
|
+
let bestIdx = 0;
|
|
237
|
+
let bestProb = 0;
|
|
238
|
+
const scores = makeEmptyScoresRecord();
|
|
239
|
+
for (let i = 0; i < n; i++) {
|
|
240
|
+
const tag = EXPRESSIVE_EMOTION_TAGS[i];
|
|
241
|
+
if (!tag) continue;
|
|
242
|
+
const p = (exps[i] ?? 0) / denom;
|
|
243
|
+
scores[tag] = p;
|
|
244
|
+
if (p > bestProb) {
|
|
245
|
+
bestProb = p;
|
|
246
|
+
bestIdx = i;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const emotionTag = EXPRESSIVE_EMOTION_TAGS[bestIdx];
|
|
250
|
+
return {
|
|
251
|
+
// The cls7 head doesn't regress V-A-D — surface the neutral
|
|
252
|
+
// midpoint so callers can still destructure but know not to trust
|
|
253
|
+
// these floats as anything other than "head was cls7".
|
|
254
|
+
vad: { valence: 0.5, arousal: 0.5, dominance: 0.5 },
|
|
255
|
+
emotion: emotionTag ?? null,
|
|
256
|
+
confidence: bestProb,
|
|
257
|
+
scores,
|
|
258
|
+
modelId,
|
|
259
|
+
latencyMs,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function makeEmptyScoresRecord(): Record<ExpressiveEmotion, number> {
|
|
264
|
+
return {
|
|
265
|
+
happy: 0,
|
|
266
|
+
sad: 0,
|
|
267
|
+
angry: 0,
|
|
268
|
+
nervous: 0,
|
|
269
|
+
calm: 0,
|
|
270
|
+
excited: 0,
|
|
271
|
+
whisper: 0,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary format for `cache/voice-preset-*.bin`.
|
|
3
|
+
*
|
|
4
|
+
* Two versions are supported:
|
|
5
|
+
*
|
|
6
|
+
* v1 (`magic='ELZ1', version=1`) — legacy two-section layout used by the
|
|
7
|
+
* initial Kokoro-style placeholder. Carries a Float32 speaker embedding +
|
|
8
|
+
* a phrase-cache seed list. Still read for back-compat (older bundles only
|
|
9
|
+
* contain v1).
|
|
10
|
+
*
|
|
11
|
+
* v2 (`magic='ELZ1', version=2`) — superset adopted for the OmniVoice
|
|
12
|
+
* freeze. Adds three OmniVoice-specific sections that the v1 layout had
|
|
13
|
+
* no room for: pre-encoded `ref_audio_tokens` (int32, shape
|
|
14
|
+
* `[K, ref_T]`), a UTF-8 `ref_text` transcript of the reference clip, and
|
|
15
|
+
* a closed-vocabulary `instruct` string (the resolved VoiceDesign
|
|
16
|
+
* attributes). v2 readers handle v1 files transparently (the new sections
|
|
17
|
+
* default to empty). A v1 reader applied to a v2 file fails fast on
|
|
18
|
+
* `truncated-header` because the v2 header is larger.
|
|
19
|
+
*
|
|
20
|
+
* Layout (little-endian throughout):
|
|
21
|
+
*
|
|
22
|
+
* v1 header (24 bytes):
|
|
23
|
+
* +0 4 bytes magic 'ELZ1' (0x315A4C45)
|
|
24
|
+
* +4 4 bytes format version (uint32) — 1
|
|
25
|
+
* +8 4 bytes speaker embedding offset (uint32)
|
|
26
|
+
* +12 4 bytes speaker embedding byte length (uint32)
|
|
27
|
+
* +16 4 bytes phrase cache seed offset (uint32)
|
|
28
|
+
* +20 4 bytes phrase cache seed byte length (uint32)
|
|
29
|
+
*
|
|
30
|
+
* v2 header (64 bytes — additive, all section descriptors are
|
|
31
|
+
* `(offset:uint32, length:uint32)` pairs):
|
|
32
|
+
* +0 4 bytes magic 'ELZ1' (0x315A4C45)
|
|
33
|
+
* +4 4 bytes format version (uint32) — 2
|
|
34
|
+
* +8 4 bytes speaker embedding offset
|
|
35
|
+
* +12 4 bytes speaker embedding byte length
|
|
36
|
+
* +16 4 bytes phrase cache seed offset
|
|
37
|
+
* +20 4 bytes phrase cache seed byte length
|
|
38
|
+
* +24 4 bytes ref_audio_tokens offset
|
|
39
|
+
* +28 4 bytes ref_audio_tokens byte length
|
|
40
|
+
* +32 4 bytes ref_text offset
|
|
41
|
+
* +36 4 bytes ref_text byte length
|
|
42
|
+
* +40 4 bytes instruct offset
|
|
43
|
+
* +44 4 bytes instruct byte length
|
|
44
|
+
* +48 4 bytes metadata offset
|
|
45
|
+
* +52 4 bytes metadata byte length
|
|
46
|
+
* +56 4 bytes reserved (must be 0)
|
|
47
|
+
* +60 4 bytes reserved (must be 0)
|
|
48
|
+
*
|
|
49
|
+
* `ref_audio_tokens` payload (v2):
|
|
50
|
+
* +0 4 bytes K — codebook count (uint32, OmniVoice = 8)
|
|
51
|
+
* +4 4 bytes ref_T — frames per codebook (uint32)
|
|
52
|
+
* +8 ... int32 LE codebook samples, row-major shape `[K, ref_T]`
|
|
53
|
+
*
|
|
54
|
+
* `ref_text` payload (v2): raw UTF-8 bytes (no NUL terminator).
|
|
55
|
+
* `instruct` payload (v2): raw UTF-8 bytes (closed VoiceDesign vocabulary).
|
|
56
|
+
* `metadata` payload (v2): raw UTF-8 JSON bytes (codec sha256, corpus
|
|
57
|
+
* hash, etc.); the runtime never relies on
|
|
58
|
+
* metadata for correctness.
|
|
59
|
+
*
|
|
60
|
+
* Phrase cache seed payload (v1 + v2, identical):
|
|
61
|
+
* uint32 LE N (phrase count)
|
|
62
|
+
* for each phrase:
|
|
63
|
+
* uint16 LE text_byte_len
|
|
64
|
+
* uint8[] canonicalized text (UTF-8)
|
|
65
|
+
* uint32 LE sample_rate
|
|
66
|
+
* uint32 LE pcm_byte_len
|
|
67
|
+
* uint8[] PCM (Float32 LE samples)
|
|
68
|
+
*
|
|
69
|
+
* Per-section invariants:
|
|
70
|
+
* - Section bounds may not overlap the header.
|
|
71
|
+
* - Section bounds must fit within the file length.
|
|
72
|
+
* - A `length=0` section is allowed (means "absent"); the corresponding
|
|
73
|
+
* output field is an empty `Float32Array` / `Int32Array` / empty string.
|
|
74
|
+
* - `embedding.length % 4 == 0` (Float32).
|
|
75
|
+
* - `ref_audio_tokens.length` ≥ 8 (the two header words K, ref_T) and the
|
|
76
|
+
* payload is `8 + K*ref_T*4` bytes.
|
|
77
|
+
*/
|
|
78
|
+
export declare const VOICE_PRESET_MAGIC = 828001349;
|
|
79
|
+
/** Header byte counts. */
|
|
80
|
+
export declare const VOICE_PRESET_HEADER_BYTES_V1 = 24;
|
|
81
|
+
export declare const VOICE_PRESET_HEADER_BYTES_V2 = 64;
|
|
82
|
+
/** Supported format versions. v2 is the canonical write path. */
|
|
83
|
+
export declare const VOICE_PRESET_VERSION_V1 = 1;
|
|
84
|
+
export declare const VOICE_PRESET_VERSION_V2 = 2;
|
|
85
|
+
export declare const VOICE_PRESET_VERSION_CURRENT = 2;
|
|
86
|
+
export interface VoicePresetSeedPhrase {
|
|
87
|
+
/** Canonicalized text (lowercase, single-spaced, trimmed). */
|
|
88
|
+
text: string;
|
|
89
|
+
sampleRate: number;
|
|
90
|
+
pcm: Float32Array;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* OmniVoice reference-audio-tokens payload. `K` is the codebook count (=8 for
|
|
94
|
+
* OmniVoice / HiggsAudioV2) and `refT` is the number of frames per codebook.
|
|
95
|
+
* `tokens` is row-major: codebook `k`, frame `t` is at `tokens[k*refT + t]`.
|
|
96
|
+
* An empty payload (refT=0, K=0, tokens length 0) is valid and means "no
|
|
97
|
+
* reference audio bound to this preset" (instruct-only voice).
|
|
98
|
+
*/
|
|
99
|
+
export interface RefAudioTokens {
|
|
100
|
+
K: number;
|
|
101
|
+
refT: number;
|
|
102
|
+
tokens: Int32Array;
|
|
103
|
+
}
|
|
104
|
+
export interface VoicePresetFile {
|
|
105
|
+
version: number;
|
|
106
|
+
embedding: Float32Array;
|
|
107
|
+
phrases: ReadonlyArray<VoicePresetSeedPhrase>;
|
|
108
|
+
/** v2 only — empty for v1 files. */
|
|
109
|
+
refAudioTokens: RefAudioTokens;
|
|
110
|
+
/** v2 only — empty for v1 files. */
|
|
111
|
+
refText: string;
|
|
112
|
+
/** v2 only — empty for v1 files. */
|
|
113
|
+
instruct: string;
|
|
114
|
+
/** v2 only — parsed JSON object, empty `{}` for v1 files. */
|
|
115
|
+
metadata: Record<string, unknown>;
|
|
116
|
+
}
|
|
117
|
+
export declare class VoicePresetFormatError extends Error {
|
|
118
|
+
readonly code: "bad-magic" | "bad-version" | "truncated-header" | "truncated-section" | "bad-section-bounds" | "bad-phrase-record" | "bad-embedding-length" | "bad-ref-tokens" | "bad-metadata";
|
|
119
|
+
constructor(message: string, code: "bad-magic" | "bad-version" | "truncated-header" | "truncated-section" | "bad-section-bounds" | "bad-phrase-record" | "bad-embedding-length" | "bad-ref-tokens" | "bad-metadata");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parse a voice-preset binary blob. Throws `VoicePresetFormatError` on any
|
|
123
|
+
* malformed input — this is the single defensive boundary for the format.
|
|
124
|
+
* Supports both v1 and v2 files. For v1 files the v2-only fields are
|
|
125
|
+
* returned as their empty equivalents.
|
|
126
|
+
*/
|
|
127
|
+
export declare function readVoicePresetFile(bytes: Uint8Array): VoicePresetFile;
|
|
128
|
+
/**
|
|
129
|
+
* Serialize a voice preset to the v1 binary format. The output is a fresh
|
|
130
|
+
* `Uint8Array` ready to be written to disk.
|
|
131
|
+
*
|
|
132
|
+
* Use this only when the caller deliberately wants the legacy v1 shape (e.g.
|
|
133
|
+
* the existing Kokoro-style placeholder builder). New code should call
|
|
134
|
+
* `writeVoicePresetFileV2`.
|
|
135
|
+
*/
|
|
136
|
+
export declare function writeVoicePresetFile(file: {
|
|
137
|
+
embedding: Float32Array;
|
|
138
|
+
phrases: ReadonlyArray<VoicePresetSeedPhrase>;
|
|
139
|
+
}): Uint8Array;
|
|
140
|
+
/**
|
|
141
|
+
* Write a voice preset in the v2 (additive) layout. Used by the OmniVoice
|
|
142
|
+
* freeze pipeline (`freeze-voice.mjs`) and other producers that need to
|
|
143
|
+
* persist `refAudioTokens` / `refText` / `instruct` alongside the v1
|
|
144
|
+
* embedding + phrase-seed sections.
|
|
145
|
+
*
|
|
146
|
+
* Any field that the caller doesn't need to persist can be omitted (or
|
|
147
|
+
* passed empty). The on-disk section is then written as length=0 and is
|
|
148
|
+
* read back as the empty equivalent.
|
|
149
|
+
*/
|
|
150
|
+
export declare function writeVoicePresetFileV2(file: {
|
|
151
|
+
embedding?: Float32Array;
|
|
152
|
+
phrases?: ReadonlyArray<VoicePresetSeedPhrase>;
|
|
153
|
+
refAudioTokens?: RefAudioTokens;
|
|
154
|
+
refText?: string;
|
|
155
|
+
instruct?: string;
|
|
156
|
+
metadata?: Record<string, unknown>;
|
|
157
|
+
}): Uint8Array;
|
|
158
|
+
//# sourceMappingURL=voice-preset-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-preset-format.d.ts","sourceRoot":"","sources":["voice-preset-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AAEH,eAAO,MAAM,kBAAkB,YAAa,CAAC;AAE7C,0BAA0B;AAC1B,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,iEAAiE;AACjE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,4BAA4B,IAA0B,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACrC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,YAAY,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,oCAAoC;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAG/C,QAAQ,CAAC,IAAI,EACV,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,gBAAgB,GAChB,cAAc;gBAVjB,OAAO,EAAE,MAAM,EACN,IAAI,EACV,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,gBAAgB,GAChB,cAAc;CAKlB;AAyTD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAYtE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAC9C,GAAG,UAAU,CA4Cb;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC5C,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,OAAO,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GAAG,UAAU,CAuHb"}
|