@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.3
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 +157 -0
- package/dist/actions/generate-media.d.ts +59 -0
- package/dist/actions/generate-media.d.ts.map +1 -0
- package/dist/actions/identify-speaker.d.ts +23 -0
- package/dist/actions/identify-speaker.d.ts.map +1 -0
- package/dist/actions/transcription-control.d.ts +29 -0
- package/dist/actions/transcription-control.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
- package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
- package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/index.d.ts +18 -0
- package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
- package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
- package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
- package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
- package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/types.d.ts +338 -0
- package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
- package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
- package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
- package/dist/backends/apple-foundation.d.ts +56 -0
- package/dist/backends/apple-foundation.d.ts.map +1 -0
- package/dist/index.d.ts +8 -37
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38979 -430
- package/dist/index.js.map +217 -0
- package/dist/local-inference-routes.d.ts +47 -0
- package/dist/local-inference-routes.d.ts.map +1 -0
- package/dist/provider.d.ts +21 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/routes/compat-helpers.d.ts +18 -0
- package/dist/routes/compat-helpers.d.ts.map +1 -0
- package/dist/routes/family-member-route.d.ts +62 -0
- package/dist/routes/family-member-route.d.ts.map +1 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +42040 -0
- package/dist/routes/index.js.map +236 -0
- package/dist/routes/live-diarization-route.d.ts +33 -0
- package/dist/routes/live-diarization-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-route.d.ts +4 -0
- package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
- package/dist/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/dist/routes/local-inference-compat-routes.d.ts +16 -0
- package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/dist/routes/local-inference-tts-route.d.ts +7 -0
- package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
- package/dist/routes/native-pcm-turn-route.d.ts +3 -0
- package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
- package/dist/routes/transcript-audio-store.d.ts +15 -0
- package/dist/routes/transcript-audio-store.d.ts.map +1 -0
- package/dist/routes/transcripts-routes.d.ts +44 -0
- package/dist/routes/transcripts-routes.d.ts.map +1 -0
- package/dist/routes/voice-first-run-routes.d.ts +62 -0
- package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
- package/dist/routes/voice-models-routes.d.ts +62 -0
- package/dist/routes/voice-models-routes.d.ts.map +1 -0
- package/dist/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/dist/routes/voice-profiles-management-routes.d.ts +52 -0
- package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/dist/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/dist/runtime/embedding-manager-support.d.ts +77 -0
- package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
- package/dist/runtime/embedding-presets.d.ts +16 -0
- package/dist/runtime/embedding-presets.d.ts.map +1 -0
- package/dist/runtime/embedding-warmup-policy.d.ts +14 -0
- package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/dist/runtime/ensure-local-inference-handler.d.ts +70 -0
- package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +15 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +38768 -0
- package/dist/runtime/index.js.map +217 -0
- package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
- package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/dist/runtime/voice-entity-binding.d.ts +113 -0
- package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
- package/dist/services/active-model.d.ts +310 -0
- package/dist/services/active-model.d.ts.map +1 -0
- package/dist/services/asr-provenance.d.ts +5 -0
- package/dist/services/asr-provenance.d.ts.map +1 -0
- package/dist/services/assignments.d.ts +84 -0
- package/dist/services/assignments.d.ts.map +1 -0
- package/dist/services/backend-selector.d.ts +55 -0
- package/dist/services/backend-selector.d.ts.map +1 -0
- package/dist/services/backend.d.ts +440 -0
- package/dist/services/backend.d.ts.map +1 -0
- package/dist/services/bionic-host-loader.d.ts +67 -0
- package/dist/services/bionic-host-loader.d.ts.map +1 -0
- package/dist/services/bundled-models.d.ts +34 -0
- package/dist/services/bundled-models.d.ts.map +1 -0
- package/dist/services/cache-bridge.d.ts +206 -0
- package/dist/services/cache-bridge.d.ts.map +1 -0
- package/dist/services/catalog.d.ts +10 -0
- package/dist/services/catalog.d.ts.map +1 -0
- package/dist/services/checkpoint-client.d.ts +109 -0
- package/dist/services/checkpoint-client.d.ts.map +1 -0
- package/dist/services/checkpoint-manager.d.ts +217 -0
- package/dist/services/checkpoint-manager.d.ts.map +1 -0
- package/dist/services/cloud-fallback.d.ts +102 -0
- package/dist/services/cloud-fallback.d.ts.map +1 -0
- package/dist/services/context-fit.d.ts +36 -0
- package/dist/services/context-fit.d.ts.map +1 -0
- package/dist/services/conversation-registry.d.ts +142 -0
- package/dist/services/conversation-registry.d.ts.map +1 -0
- package/dist/services/desktop-fused-ffi-backend-runtime.d.ts +111 -0
- package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/dist/services/device-bridge.d.ts +188 -0
- package/dist/services/device-bridge.d.ts.map +1 -0
- package/dist/services/device-resource-metrics.d.ts +149 -0
- package/dist/services/device-resource-metrics.d.ts.map +1 -0
- package/dist/services/device-tier.d.ts +133 -0
- package/dist/services/device-tier.d.ts.map +1 -0
- package/dist/services/downloader.d.ts +94 -0
- package/dist/services/downloader.d.ts.map +1 -0
- package/dist/services/engine.d.ts +579 -0
- package/dist/services/engine.d.ts.map +1 -0
- package/dist/services/ensure-local-artifacts.d.ts +82 -0
- package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
- package/dist/services/external-scanner.d.ts +17 -0
- package/dist/services/external-scanner.d.ts.map +1 -0
- package/dist/services/ffi-llm-mock.d.ts +90 -0
- package/dist/services/ffi-llm-mock.d.ts.map +1 -0
- package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
- package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
- package/dist/services/ffi-streaming-backend.d.ts +201 -0
- package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
- package/dist/services/ffi-streaming-runner.d.ts +146 -0
- package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
- package/dist/services/gpu-autotune.d.ts +150 -0
- package/dist/services/gpu-autotune.d.ts.map +1 -0
- package/dist/services/gpu-detect.d.ts +56 -0
- package/dist/services/gpu-detect.d.ts.map +1 -0
- package/dist/services/handler-registry.d.ts +72 -0
- package/dist/services/handler-registry.d.ts.map +1 -0
- package/dist/services/hardware.d.ts +63 -0
- package/dist/services/hardware.d.ts.map +1 -0
- package/dist/services/image-description-runtime.d.ts +14 -0
- package/dist/services/image-description-runtime.d.ts.map +1 -0
- package/dist/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/backend-selector.d.ts +118 -0
- package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
- package/dist/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/errors.d.ts +16 -0
- package/dist/services/imagegen/errors.d.ts.map +1 -0
- package/dist/services/imagegen/index.d.ts +58 -0
- package/dist/services/imagegen/index.d.ts.map +1 -0
- package/dist/services/imagegen/mflux.d.ts +74 -0
- package/dist/services/imagegen/mflux.d.ts.map +1 -0
- package/dist/services/imagegen/sd-cpp.d.ts +181 -0
- package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/dist/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/dist/services/imagegen/types.d.ts +181 -0
- package/dist/services/imagegen/types.d.ts.map +1 -0
- package/dist/services/index.d.ts +31 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +39453 -0
- package/dist/services/index.js.map +227 -0
- package/dist/services/inference-capabilities.d.ts +132 -0
- package/dist/services/inference-capabilities.d.ts.map +1 -0
- package/dist/services/inference-telemetry.d.ts +59 -0
- package/dist/services/inference-telemetry.d.ts.map +1 -0
- package/dist/services/ios-llama-streaming.d.ts +119 -0
- package/dist/services/ios-llama-streaming.d.ts.map +1 -0
- package/dist/services/kv-spill.d.ts +189 -0
- package/dist/services/kv-spill.d.ts.map +1 -0
- package/dist/services/latency-trace.d.ts +346 -0
- package/dist/services/latency-trace.d.ts.map +1 -0
- package/dist/services/lib-target.d.ts +55 -0
- package/dist/services/lib-target.d.ts.map +1 -0
- package/dist/services/live-signals.d.ts +86 -0
- package/dist/services/live-signals.d.ts.map +1 -0
- package/dist/services/llama-server-metrics.d.ts +114 -0
- package/dist/services/llama-server-metrics.d.ts.map +1 -0
- package/dist/services/llm-streaming-binding.d.ts +96 -0
- package/dist/services/llm-streaming-binding.d.ts.map +1 -0
- package/dist/services/load-args.d.ts +82 -0
- package/dist/services/load-args.d.ts.map +1 -0
- package/dist/services/manifest/index.d.ts +4 -0
- package/dist/services/manifest/index.d.ts.map +1 -0
- package/dist/services/manifest/schema.d.ts +903 -0
- package/dist/services/manifest/schema.d.ts.map +1 -0
- package/dist/services/manifest/types.d.ts +32 -0
- package/dist/services/manifest/types.d.ts.map +1 -0
- package/dist/services/manifest/validator.d.ts +66 -0
- package/dist/services/manifest/validator.d.ts.map +1 -0
- package/dist/services/memory-arbiter.d.ts +348 -0
- package/dist/services/memory-arbiter.d.ts.map +1 -0
- package/dist/services/memory-benchmark.d.ts +76 -0
- package/dist/services/memory-benchmark.d.ts.map +1 -0
- package/dist/services/memory-monitor.d.ts +128 -0
- package/dist/services/memory-monitor.d.ts.map +1 -0
- package/dist/services/memory-pressure.d.ts +130 -0
- package/dist/services/memory-pressure.d.ts.map +1 -0
- package/dist/services/mtp-doctor.d.ts +13 -0
- package/dist/services/mtp-doctor.d.ts.map +1 -0
- package/dist/services/network-policy.d.ts +127 -0
- package/dist/services/network-policy.d.ts.map +1 -0
- package/dist/services/paths.d.ts +6 -0
- package/dist/services/paths.d.ts.map +1 -0
- package/dist/services/planner-skeleton.d.ts +124 -0
- package/dist/services/planner-skeleton.d.ts.map +1 -0
- package/dist/services/providers.d.ts +38 -0
- package/dist/services/providers.d.ts.map +1 -0
- package/dist/services/ram-budget.d.ts +110 -0
- package/dist/services/ram-budget.d.ts.map +1 -0
- package/dist/services/readiness.d.ts +9 -0
- package/dist/services/readiness.d.ts.map +1 -0
- package/dist/services/recommendation.d.ts +111 -0
- package/dist/services/recommendation.d.ts.map +1 -0
- package/dist/services/registry.d.ts +33 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/services/router-handler.d.ts +92 -0
- package/dist/services/router-handler.d.ts.map +1 -0
- package/dist/services/routing-policy.d.ts +92 -0
- package/dist/services/routing-policy.d.ts.map +1 -0
- package/dist/services/routing-preferences.d.ts +8 -0
- package/dist/services/routing-preferences.d.ts.map +1 -0
- package/dist/services/runtime-target.d.ts +98 -0
- package/dist/services/runtime-target.d.ts.map +1 -0
- package/dist/services/service.d.ts +128 -0
- package/dist/services/service.d.ts.map +1 -0
- package/dist/services/session-pool.d.ts +72 -0
- package/dist/services/session-pool.d.ts.map +1 -0
- package/dist/services/structured-output/deterministic-repair.d.ts +23 -0
- package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/dist/services/structured-output/index.d.ts +2 -0
- package/dist/services/structured-output/index.d.ts.map +1 -0
- package/dist/services/structured-output.d.ts +311 -0
- package/dist/services/structured-output.d.ts.map +1 -0
- package/dist/services/system-memory.d.ts +33 -0
- package/dist/services/system-memory.d.ts.map +1 -0
- package/dist/services/types.d.ts +19 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/verify-on-device.d.ts +34 -0
- package/dist/services/verify-on-device.d.ts.map +1 -0
- package/dist/services/verify.d.ts +8 -0
- package/dist/services/verify.d.ts.map +1 -0
- package/dist/services/vision/aosp-unavailable.d.ts +115 -0
- package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/dist/services/vision/capacitor-llama.d.ts +99 -0
- package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
- package/dist/services/vision/cloud-fallback.d.ts +47 -0
- package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
- package/dist/services/vision/hash.d.ts +71 -0
- package/dist/services/vision/hash.d.ts.map +1 -0
- package/dist/services/vision/index.d.ts +95 -0
- package/dist/services/vision/index.d.ts.map +1 -0
- package/dist/services/vision/llama-server.d.ts +73 -0
- package/dist/services/vision/llama-server.d.ts.map +1 -0
- package/dist/services/vision/types.d.ts +162 -0
- package/dist/services/vision/types.d.ts.map +1 -0
- package/dist/services/vision/vast-fallback.d.ts +18 -0
- package/dist/services/vision/vast-fallback.d.ts.map +1 -0
- package/dist/services/vision-embedding-cache.d.ts +98 -0
- package/dist/services/vision-embedding-cache.d.ts.map +1 -0
- package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
- package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
- package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
- package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
- package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
- package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
- package/dist/services/voice/audio-frame-consumer.d.ts +294 -0
- package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/dist/services/voice/barge-in.d.ts +112 -0
- package/dist/services/voice/barge-in.d.ts.map +1 -0
- package/dist/services/voice/cancellation-coordinator.d.ts +127 -0
- package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/dist/services/voice/checkpoint-manager.d.ts +199 -0
- package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/dist/services/voice/checkpoint-policy.d.ts +178 -0
- package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
- package/dist/services/voice/corpus-augment.d.ts +111 -0
- package/dist/services/voice/corpus-augment.d.ts.map +1 -0
- package/dist/services/voice/corpus-generator.d.ts +134 -0
- package/dist/services/voice/corpus-generator.d.ts.map +1 -0
- package/dist/services/voice/diarization-error-rate.d.ts +40 -0
- package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
- package/dist/services/voice/e2e-harness.d.ts +297 -0
- package/dist/services/voice/e2e-harness.d.ts.map +1 -0
- package/dist/services/voice/eager-context-builder.d.ts +170 -0
- package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
- package/dist/services/voice/echo-delay.d.ts +67 -0
- package/dist/services/voice/echo-delay.d.ts.map +1 -0
- package/dist/services/voice/echo-metrics.d.ts +7 -0
- package/dist/services/voice/echo-metrics.d.ts.map +1 -0
- package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
- package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
- package/dist/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/dist/services/voice/embedding-server.d.ts +37 -0
- package/dist/services/voice/embedding-server.d.ts.map +1 -0
- package/dist/services/voice/embedding.d.ts +132 -0
- package/dist/services/voice/embedding.d.ts.map +1 -0
- package/dist/services/voice/emotion-attribution.d.ts +68 -0
- package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
- package/dist/services/voice/engine-bridge.d.ts +762 -0
- package/dist/services/voice/engine-bridge.d.ts.map +1 -0
- package/dist/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/dist/services/voice/eot-classifier.d.ts +211 -0
- package/dist/services/voice/eot-classifier.d.ts.map +1 -0
- package/dist/services/voice/errors.d.ts +20 -0
- package/dist/services/voice/errors.d.ts.map +1 -0
- package/dist/services/voice/expressive-tags.d.ts +158 -0
- package/dist/services/voice/expressive-tags.d.ts.map +1 -0
- package/dist/services/voice/ffi-bindings.d.ts +696 -0
- package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
- package/dist/services/voice/first-line-cache.d.ts +181 -0
- package/dist/services/voice/first-line-cache.d.ts.map +1 -0
- package/dist/services/voice/fused-eot-scorer.d.ts +51 -0
- package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/dist/services/voice/index.d.ts +96 -0
- package/dist/services/voice/index.d.ts.map +1 -0
- package/dist/services/voice/kokoro/index.d.ts +24 -0
- package/dist/services/voice/kokoro/index.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-backend.d.ts +87 -0
- package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
- package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
- package/dist/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/dist/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
- package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/dist/services/voice/kokoro/types.d.ts +82 -0
- package/dist/services/voice/kokoro/types.d.ts.map +1 -0
- package/dist/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/dist/services/voice/kokoro/voices.d.ts +30 -0
- package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
- package/dist/services/voice/lifecycle.d.ts +135 -0
- package/dist/services/voice/lifecycle.d.ts.map +1 -0
- package/dist/services/voice/live-diarization-session.d.ts +196 -0
- package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
- package/dist/services/voice/metric-math.d.ts +10 -0
- package/dist/services/voice/metric-math.d.ts.map +1 -0
- package/dist/services/voice/mic-source.d.ts +136 -0
- package/dist/services/voice/mic-source.d.ts.map +1 -0
- package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
- package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
- package/dist/services/voice/optimistic-policy.d.ts +109 -0
- package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
- package/dist/services/voice/optimistic-rollback.d.ts +151 -0
- package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
- package/dist/services/voice/partial-stabilizer.d.ts +73 -0
- package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/dist/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/dist/services/voice/phrase-cache.d.ts +76 -0
- package/dist/services/voice/phrase-cache.d.ts.map +1 -0
- package/dist/services/voice/phrase-chunker.d.ts +62 -0
- package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
- package/dist/services/voice/pipeline-impls.d.ts +151 -0
- package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
- package/dist/services/voice/pipeline.d.ts +216 -0
- package/dist/services/voice/pipeline.d.ts.map +1 -0
- package/dist/services/voice/prefill-client.d.ts +123 -0
- package/dist/services/voice/prefill-client.d.ts.map +1 -0
- package/dist/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/dist/services/voice/profile-store.d.ts +248 -0
- package/dist/services/voice/profile-store.d.ts.map +1 -0
- package/dist/services/voice/ring-buffer.d.ts +40 -0
- package/dist/services/voice/ring-buffer.d.ts.map +1 -0
- package/dist/services/voice/rollback-queue.d.ts +24 -0
- package/dist/services/voice/rollback-queue.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/dist/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/dist/services/voice/scheduler.d.ts +146 -0
- package/dist/services/voice/scheduler.d.ts.map +1 -0
- package/dist/services/voice/self-voice-imprint.d.ts +33 -0
- package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
- package/dist/services/voice/shared-resources.d.ts +204 -0
- package/dist/services/voice/shared-resources.d.ts.map +1 -0
- package/dist/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/diarizer.d.ts +75 -0
- package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/dist/services/voice/speaker/encoder.d.ts +37 -0
- package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
- package/dist/services/voice/speaker-imprint.d.ts +83 -0
- package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
- package/dist/services/voice/speaker-preset-cache.d.ts +77 -0
- package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
- package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
- package/dist/services/voice/system-audio-sink.d.ts +73 -0
- package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
- package/dist/services/voice/transcriber.d.ts +244 -0
- package/dist/services/voice/transcriber.d.ts.map +1 -0
- package/dist/services/voice/transcript-knowledge.d.ts +37 -0
- package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/dist/services/voice/transcript-service.d.ts +60 -0
- package/dist/services/voice/transcript-service.d.ts.map +1 -0
- package/dist/services/voice/transcript-store.d.ts +64 -0
- package/dist/services/voice/transcript-store.d.ts.map +1 -0
- package/dist/services/voice/turn-controller.d.ts +183 -0
- package/dist/services/voice/turn-controller.d.ts.map +1 -0
- package/dist/services/voice/types.d.ts +643 -0
- package/dist/services/voice/types.d.ts.map +1 -0
- package/dist/services/voice/vad.d.ts +283 -0
- package/dist/services/voice/vad.d.ts.map +1 -0
- package/dist/services/voice/voice-budget.d.ts +241 -0
- package/dist/services/voice/voice-budget.d.ts.map +1 -0
- package/dist/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
- package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
- package/dist/services/voice/voice-preset-format.d.ts +158 -0
- package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
- package/dist/services/voice/voice-profile-artifact.d.ts +116 -0
- package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/dist/services/voice/voice-profile-routes.d.ts +83 -0
- package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/dist/services/voice/voice-scenario.d.ts +131 -0
- package/dist/services/voice/voice-scenario.d.ts.map +1 -0
- package/dist/services/voice/voice-state-machine.d.ts +364 -0
- package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
- package/dist/services/voice/voice-workbench-report.d.ts +117 -0
- package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
- package/dist/services/voice/wake-word-ggml.d.ts +100 -0
- package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/dist/services/voice/wake-word.d.ts +255 -0
- package/dist/services/voice/wake-word.d.ts.map +1 -0
- package/dist/services/voice/wav-codec.d.ts +11 -0
- package/dist/services/voice/wav-codec.d.ts.map +1 -0
- package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
- package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
- package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
- package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
- package/dist/services/voice/workbench-logic-services.d.ts +36 -0
- package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
- package/dist/services/voice/workbench-real-services.d.ts +17 -0
- package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
- package/dist/services/voice/workbench-scenarios.d.ts +24 -0
- package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
- package/dist/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/dist/services/voice-model-updater.d.ts +240 -0
- package/dist/services/voice-model-updater.d.ts.map +1 -0
- package/dist/services/voice-prewarm.d.ts +3 -0
- package/dist/services/voice-prewarm.d.ts.map +1 -0
- package/dist/voice-workbench.d.ts +18 -0
- package/dist/voice-workbench.d.ts.map +1 -0
- package/dist/voice-workbench.js +5259 -0
- package/dist/voice-workbench.js.map +34 -0
- package/package.json +101 -15
- package/registry-entry.json +137 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -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 +831 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -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/adapters/capacitor-llama/voice-turn.ts +178 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.test.ts +390 -0
- package/src/local-inference-routes.ts +1625 -0
- package/src/provider.ts +1111 -0
- package/src/routes/compat-helpers.ts +275 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.ts +61 -0
- package/src/routes/live-diarization-route.test.ts +347 -0
- package/src/routes/live-diarization-route.ts +198 -0
- package/src/routes/local-inference-asr-route.test.ts +246 -0
- package/src/routes/local-inference-asr-route.ts +166 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +775 -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/native-pcm-turn-route.test.ts +136 -0
- package/src/routes/native-pcm-turn-route.ts +121 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.test.ts +195 -0
- package/src/routes/transcripts-routes.ts +191 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -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/bionic-wire-encoding.test.ts +147 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.ts +81 -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.test.ts +726 -0
- package/src/runtime/ensure-local-inference-handler.ts +1640 -0
- package/src/runtime/index.ts +36 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +152 -0
- package/src/runtime/mobile-local-inference-gate.ts +99 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +98 -0
- package/src/runtime/voice-entity-binding.ts +368 -0
- package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.precedence.test.ts +333 -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-context-fit.test.ts +125 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.ts +1416 -0
- package/src/services/asr-provenance.ts +68 -0
- package/src/services/assignment-validation.test.ts +118 -0
- package/src/services/assignments.test.ts +106 -0
- package/src/services/assignments.ts +278 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.test.ts +84 -0
- package/src/services/backend.ts +791 -0
- package/src/services/bionic-host-loader.test.ts +226 -0
- package/src/services/bionic-host-loader.ts +252 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.test.ts +259 -0
- package/src/services/catalog.ts +33 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/context-fit.test.ts +121 -0
- package/src/services/context-fit.ts +113 -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.ts +431 -0
- package/src/services/device-bridge.ts +1237 -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.test.ts +458 -0
- package/src/services/device-tier.ts +502 -0
- package/src/services/downloader.test.ts +888 -0
- package/src/services/downloader.ts +1039 -0
- package/src/services/engine-direct-bundle.test.ts +90 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.ts +2096 -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.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +445 -0
- package/src/services/ffi-streaming-backend.ts +418 -0
- package/src/services/ffi-streaming-runner.test.ts +220 -0
- package/src/services/ffi-streaming-runner.ts +407 -0
- package/src/services/ffi-unload-ordering.test.ts +166 -0
- package/src/services/fused-eliza1-no-regression.test.ts +144 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.test.ts +236 -0
- package/src/services/hardware.ts +438 -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.ts +229 -0
- package/src/services/imagegen/backend-selector.test.ts +190 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.ts +715 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.ts +229 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +357 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/lib-target.test.ts +145 -0
- package/src/services/lib-target.ts +102 -0
- package/src/services/live-signals.test.ts +132 -0
- package/src/services/live-signals.ts +177 -0
- package/src/services/llama-server-metrics.test.ts +168 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +790 -0
- package/src/services/manifest/index.ts +72 -0
- package/src/services/manifest/manifest.test.ts +791 -0
- package/src/services/manifest/schema.ts +761 -0
- package/src/services/manifest/types.ts +61 -0
- package/src/services/manifest/validator.ts +633 -0
- package/src/services/memory-arbiter.test.ts +558 -0
- package/src/services/memory-arbiter.ts +991 -0
- package/src/services/memory-benchmark.test.ts +91 -0
- package/src/services/memory-benchmark.ts +354 -0
- package/src/services/memory-monitor.test.ts +232 -0
- package/src/services/memory-monitor.ts +309 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.ts +86 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +164 -0
- package/src/services/ram-budget.ts +309 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.test.ts +216 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.ts +157 -0
- package/src/services/required-kernels-gate.test.ts +64 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +426 -0
- package/src/services/routing-policy.test.ts +352 -0
- package/src/services/routing-policy.ts +367 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +750 -0
- package/src/services/session-pool.ts +153 -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.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.ts +59 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.ts +255 -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.ts +157 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.ts +163 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +133 -0
- package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +194 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/acoustic-speaker-attribution.test.ts +165 -0
- package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
- package/src/services/voice/asr-timed.real.test.ts +139 -0
- package/src/services/voice/audio-frame-consumer.test.ts +669 -0
- package/src/services/voice/audio-frame-consumer.ts +651 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +335 -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.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/corpus-augment.test.ts +276 -0
- package/src/services/voice/corpus-augment.ts +451 -0
- package/src/services/voice/corpus-generator.test.ts +201 -0
- package/src/services/voice/corpus-generator.ts +413 -0
- package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
- package/src/services/voice/diarization-error-rate.test.ts +100 -0
- package/src/services/voice/diarization-error-rate.ts +249 -0
- package/src/services/voice/e2e-harness.der.test.ts +94 -0
- package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
- package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +902 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/echo-delay.test.ts +118 -0
- package/src/services/voice/echo-delay.ts +135 -0
- package/src/services/voice/echo-metrics.test.ts +17 -0
- package/src/services/voice/echo-metrics.ts +20 -0
- package/src/services/voice/echo-reference-buffer.test.ts +86 -0
- package/src/services/voice/echo-reference-buffer.ts +165 -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.test.ts +131 -0
- package/src/services/voice/embedding.ts +242 -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-transcript-join.test.ts +278 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2343 -0
- package/src/services/voice/eot-classifier-ggml.ts +569 -0
- package/src/services/voice/eot-classifier.test.ts +98 -0
- package/src/services/voice/eot-classifier.ts +422 -0
- package/src/services/voice/errors.ts +34 -0
- package/src/services/voice/expressive-tags.asr.test.ts +77 -0
- package/src/services/voice/expressive-tags.test.ts +102 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.test.ts +735 -0
- package/src/services/voice/ffi-bindings.ts +3387 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.ts +139 -0
- package/src/services/voice/index.ts +502 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +262 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +236 -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 +67 -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.ts +223 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -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.ts +344 -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.ts +64 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.ts +64 -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.echo.test.ts +232 -0
- package/src/services/voice/live-diarization-session.ts +622 -0
- package/src/services/voice/metric-math.test.ts +61 -0
- package/src/services/voice/metric-math.ts +25 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
- package/src/services/voice/nlms-echo-canceller.ts +317 -0
- package/src/services/voice/optimistic-policy.power-source.test.ts +36 -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.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -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.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -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.ts +504 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
- package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
- package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.ts +74 -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.ts +393 -0
- package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/self-voice-imprint.test.ts +59 -0
- package/src/services/voice/self-voice-imprint.ts +102 -0
- package/src/services/voice/shared-resources.ts +343 -0
- package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +449 -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.ts +218 -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.test.ts +59 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.ts +105 -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.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.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.test.ts +195 -0
- package/src/services/voice/transcript-service.ts +205 -0
- package/src/services/voice/transcript-store.test.ts +189 -0
- package/src/services/voice/transcript-store.ts +164 -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.ts +699 -0
- package/src/services/voice/vad.test.ts +498 -0
- package/src/services/voice/vad.ts +832 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.test.ts +415 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-hardening.fuzz.test.ts +116 -0
- package/src/services/voice/voice-preload-predictor.test.ts +130 -0
- package/src/services/voice/voice-preload-predictor.ts +113 -0
- package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
- package/src/services/voice/voice-preset-format.test.ts +75 -0
- package/src/services/voice/voice-preset-format.ts +713 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -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.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.test.ts +159 -0
- package/src/services/voice/voice-scenario.ts +280 -0
- package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -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 +367 -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.ts +319 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
- package/src/services/voice/wav-codec.test.ts +32 -0
- package/src/services/voice/wav-codec.ts +101 -0
- package/src/services/voice/workbench-entrypoint.test.ts +55 -0
- package/src/services/voice/workbench-entrypoint.ts +88 -0
- package/src/services/voice/workbench-headless-runner.test.ts +162 -0
- package/src/services/voice/workbench-headless-runner.ts +396 -0
- package/src/services/voice/workbench-logic-services.test.ts +225 -0
- package/src/services/voice/workbench-logic-services.ts +184 -0
- package/src/services/voice/workbench-real-services.ts +629 -0
- package/src/services/voice/workbench-scenarios.ts +407 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/src/voice-workbench.ts +71 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// TypeScript types derived from the Zod schema in `./schema.ts`.
|
|
2
|
+
// Importing this module gives consumers a strongly-typed view of an Eliza-1
|
|
3
|
+
// manifest without depending on Zod at runtime — useful for catalog code,
|
|
4
|
+
// recommendation, and downloader interfaces that only read manifests.
|
|
5
|
+
|
|
6
|
+
import type { z } from "zod";
|
|
7
|
+
import type { CpuFeatureProbe } from "../types";
|
|
8
|
+
import type {
|
|
9
|
+
ELIZA_1_PROVENANCE_SLOTS,
|
|
10
|
+
ELIZA_1_RELEASE_CHANNELS,
|
|
11
|
+
ELIZA_1_RELEASE_STATES,
|
|
12
|
+
Eliza1BackendEnumSchema,
|
|
13
|
+
Eliza1EvalsSchema,
|
|
14
|
+
Eliza1FileEntrySchema,
|
|
15
|
+
Eliza1FilesSchema,
|
|
16
|
+
Eliza1KernelEnumSchema,
|
|
17
|
+
Eliza1KernelsSchema,
|
|
18
|
+
Eliza1LibFileEntrySchema,
|
|
19
|
+
Eliza1LineageSchema,
|
|
20
|
+
Eliza1ManifestSchema,
|
|
21
|
+
Eliza1ProvenanceSchema,
|
|
22
|
+
Eliza1RamBudgetSchema,
|
|
23
|
+
Eliza1TextRuntimeClassEnumSchema,
|
|
24
|
+
Eliza1TierEnumSchema,
|
|
25
|
+
Eliza1VerifiedBackendStatusSchema,
|
|
26
|
+
Eliza1VoiceSchema,
|
|
27
|
+
} from "./schema";
|
|
28
|
+
|
|
29
|
+
export type Eliza1Tier = z.infer<typeof Eliza1TierEnumSchema>;
|
|
30
|
+
export type Eliza1Kernel = z.infer<typeof Eliza1KernelEnumSchema>;
|
|
31
|
+
export type Eliza1Backend = z.infer<typeof Eliza1BackendEnumSchema>;
|
|
32
|
+
export type Eliza1TextRuntimeClass = z.infer<
|
|
33
|
+
typeof Eliza1TextRuntimeClassEnumSchema
|
|
34
|
+
>;
|
|
35
|
+
export type Eliza1FileEntry = z.infer<typeof Eliza1FileEntrySchema>;
|
|
36
|
+
export type Eliza1LibFileEntry = z.infer<typeof Eliza1LibFileEntrySchema>;
|
|
37
|
+
export type Eliza1Files = z.infer<typeof Eliza1FilesSchema>;
|
|
38
|
+
export type Eliza1Lineage = z.infer<typeof Eliza1LineageSchema>;
|
|
39
|
+
export type Eliza1Kernels = z.infer<typeof Eliza1KernelsSchema>;
|
|
40
|
+
export type Eliza1Evals = z.infer<typeof Eliza1EvalsSchema>;
|
|
41
|
+
export type Eliza1RamBudget = z.infer<typeof Eliza1RamBudgetSchema>;
|
|
42
|
+
export type Eliza1Voice = z.infer<typeof Eliza1VoiceSchema>;
|
|
43
|
+
export type Eliza1Provenance = z.infer<typeof Eliza1ProvenanceSchema>;
|
|
44
|
+
export type Eliza1ProvenanceSlot = (typeof ELIZA_1_PROVENANCE_SLOTS)[number];
|
|
45
|
+
export type Eliza1ReleaseState = (typeof ELIZA_1_RELEASE_STATES)[number];
|
|
46
|
+
export type Eliza1ReleaseChannel = (typeof ELIZA_1_RELEASE_CHANNELS)[number];
|
|
47
|
+
export type Eliza1VerifiedBackendStatus = z.infer<
|
|
48
|
+
typeof Eliza1VerifiedBackendStatusSchema
|
|
49
|
+
>;
|
|
50
|
+
export type Eliza1Manifest = z.infer<typeof Eliza1ManifestSchema>;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Capability snapshot of a target device — whatever the runtime detected
|
|
54
|
+
* (Metal on Mac, Vulkan on Linux/Android, CUDA on NVIDIA, CPU as floor).
|
|
55
|
+
* `canSetAsDefault()` checks the manifest's verifiedBackends against this.
|
|
56
|
+
*/
|
|
57
|
+
export interface Eliza1DeviceCaps {
|
|
58
|
+
availableBackends: ReadonlyArray<Eliza1Backend>;
|
|
59
|
+
ramMb: number;
|
|
60
|
+
cpuFeatures?: CpuFeatureProbe;
|
|
61
|
+
}
|
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
// Runtime validator and capability-check helpers for Eliza-1 manifests.
|
|
2
|
+
//
|
|
3
|
+
// Two layers of validation:
|
|
4
|
+
//
|
|
5
|
+
// 1. Schema validation (Zod) — shape + types + per-field invariants.
|
|
6
|
+
// 2. Contract validation (this file) — cross-field rules from
|
|
7
|
+
// packages/inference/AGENTS.md §3 + §6:
|
|
8
|
+
// - required-kernel set per tier is satisfied,
|
|
9
|
+
// - long-context bundles (ctx > 64k) require `turbo3_tcq`,
|
|
10
|
+
// - structural bundle invariants (voice-preset cache present, lineage
|
|
11
|
+
// ↔ files consistency, base-v1 provenance coverage),
|
|
12
|
+
// - and — for a *production* release only (`base-v1` / `finetuned-v2` /
|
|
13
|
+
// `final`, or any `defaultEligible: true` manifest) — every supported
|
|
14
|
+
// backend kernel-verified `pass` and every eval green. A
|
|
15
|
+
// candidate/staging release (`base-v1-candidate` / `local-standin` /
|
|
16
|
+
// `upload-candidate`) is publishable + installable on a device whose
|
|
17
|
+
// backend it verified, but is not held to the full bar; its
|
|
18
|
+
// `defaultEligible` must stay false.
|
|
19
|
+
//
|
|
20
|
+
// `defaultEligible: true` is the strongest claim a manifest can make. The
|
|
21
|
+
// validator REFUSES the combination of `defaultEligible: true` and any
|
|
22
|
+
// failing contract rule. This mirrors the publish-side gate in
|
|
23
|
+
// `packages/training/scripts/manifest/eliza1_manifest.py`.
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
collectQwenAsrProvenanceBlockers,
|
|
27
|
+
QWEN_PROVENANCE_RE,
|
|
28
|
+
} from "../asr-provenance";
|
|
29
|
+
import {
|
|
30
|
+
ELIZA_1_TOKENIZER_FAMILY,
|
|
31
|
+
ELIZA_1_TOKENIZER_VOCAB_SIZE,
|
|
32
|
+
Eliza1ManifestSchema,
|
|
33
|
+
EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD,
|
|
34
|
+
EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT,
|
|
35
|
+
EMOTION_CLASSIFIER_MELD_F1_THRESHOLD,
|
|
36
|
+
REQUIRED_KERNELS_BY_TIER,
|
|
37
|
+
SUPPORTED_BACKENDS_BY_TIER,
|
|
38
|
+
TURN_DETECTOR_F1_THRESHOLD,
|
|
39
|
+
TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT,
|
|
40
|
+
VOICE_PRESET_CACHE_PATH,
|
|
41
|
+
} from "./schema";
|
|
42
|
+
import type {
|
|
43
|
+
Eliza1Backend,
|
|
44
|
+
Eliza1DeviceCaps,
|
|
45
|
+
Eliza1Kernel,
|
|
46
|
+
Eliza1Manifest,
|
|
47
|
+
Eliza1Tier,
|
|
48
|
+
} from "./types";
|
|
49
|
+
|
|
50
|
+
export interface ValidationOk {
|
|
51
|
+
ok: true;
|
|
52
|
+
manifest: Eliza1Manifest;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ValidationErr {
|
|
56
|
+
ok: false;
|
|
57
|
+
errors: ReadonlyArray<string>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type ValidationResult = ValidationOk | ValidationErr;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Schema + contract validation. Returns a Result-shaped object so callers
|
|
64
|
+
* can inspect every error rather than catching the first thrown one.
|
|
65
|
+
*
|
|
66
|
+
* Throws nothing for invalid input — invalid manifests are reported via
|
|
67
|
+
* `{ ok: false, errors }`. Truly exceptional cases (non-object input)
|
|
68
|
+
* surface as Zod issues, not exceptions.
|
|
69
|
+
*/
|
|
70
|
+
export function validateManifest(input: unknown): ValidationResult {
|
|
71
|
+
const parsed = Eliza1ManifestSchema.safeParse(input);
|
|
72
|
+
if (!parsed.success) {
|
|
73
|
+
return {
|
|
74
|
+
ok: false,
|
|
75
|
+
errors: parsed.error.issues.map(
|
|
76
|
+
(i) => `${i.path.join(".") || "<root>"}: ${i.message}`,
|
|
77
|
+
),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const errors = collectContractErrors(parsed.data, {
|
|
82
|
+
allowVersionStaging: true,
|
|
83
|
+
});
|
|
84
|
+
if (errors.length > 0) {
|
|
85
|
+
return { ok: false, errors };
|
|
86
|
+
}
|
|
87
|
+
return { ok: true, manifest: parsed.data };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Throws on invalid input. Use this from boot paths where a structured
|
|
92
|
+
* error is already attached at the boundary. Internal use only — UI
|
|
93
|
+
* code should prefer `validateManifest`.
|
|
94
|
+
*/
|
|
95
|
+
export function parseManifestOrThrow(input: unknown): Eliza1Manifest {
|
|
96
|
+
const result = validateManifest(input);
|
|
97
|
+
if (result.ok === false) {
|
|
98
|
+
throw new Error(
|
|
99
|
+
`Invalid Eliza-1 manifest:\n - ${result.errors.join("\n - ")}`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
return result.manifest;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* `canSetAsDefault` is the recommendation-engine gate. A manifest that
|
|
107
|
+
* passes this is allowed to fill an empty default slot for the device:
|
|
108
|
+
*
|
|
109
|
+
* - the manifest is contract-valid (every required kernel declared, every
|
|
110
|
+
* required eval green for a strict release, lineage/files consistent),
|
|
111
|
+
* - the device RAM meets the manifest's `ramBudgetMb.min` floor,
|
|
112
|
+
* - the device exposes at least one backend the manifest verified `pass`
|
|
113
|
+
* on out of the tier's supported set.
|
|
114
|
+
*
|
|
115
|
+
* A `defaultEligible: true` manifest is the strict release: every supported
|
|
116
|
+
* backend kernel-verified `pass`, every required eval green. A
|
|
117
|
+
* `defaultEligible: false` manifest with an explicit candidate/staging
|
|
118
|
+
* `releaseState` (`base-v1-candidate`, `local-standin`, `upload-candidate`)
|
|
119
|
+
* is still permitted to fill an empty default slot **when this device can
|
|
120
|
+
* run it** — the recommender prefers a strict release over a candidate when
|
|
121
|
+
* both are installed (see `isStrictReleaseManifest`). Version-only staging
|
|
122
|
+
* stamps such as `1.0.0-weights-staged.2` are accepted by the install parser
|
|
123
|
+
* so QA bundles can be materialized, but they do not get this auto-default
|
|
124
|
+
* relaxation unless the manifest also carries an explicit staging
|
|
125
|
+
* `releaseState`.
|
|
126
|
+
*
|
|
127
|
+
* The device-caps check rejects "this device has Vulkan only but the
|
|
128
|
+
* manifest only verified Metal/CUDA" — a manifest may be contract-valid
|
|
129
|
+
* but not runnable on this device.
|
|
130
|
+
*/
|
|
131
|
+
export function canSetAsDefault(
|
|
132
|
+
manifest: Eliza1Manifest,
|
|
133
|
+
device: Eliza1DeviceCaps,
|
|
134
|
+
): boolean {
|
|
135
|
+
if (
|
|
136
|
+
collectContractErrors(manifest, { allowVersionStaging: false }).length > 0
|
|
137
|
+
) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
if (manifest.ramBudgetMb.min > device.ramMb) return false;
|
|
141
|
+
|
|
142
|
+
// The device must expose at least one backend that the manifest verified
|
|
143
|
+
// pass on. Pre-check against the tier's supported set so we don't accept
|
|
144
|
+
// a tier-server bundle on a Mac via the cpu fallback alone.
|
|
145
|
+
const supported = new Set<Eliza1Backend>(
|
|
146
|
+
SUPPORTED_BACKENDS_BY_TIER[manifest.tier],
|
|
147
|
+
);
|
|
148
|
+
const overlapping = device.availableBackends.filter(
|
|
149
|
+
(b) =>
|
|
150
|
+
supported.has(b) &&
|
|
151
|
+
manifest.kernels.verifiedBackends[b].status === "pass",
|
|
152
|
+
);
|
|
153
|
+
return overlapping.length > 0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Strict release identifier: a `defaultEligible: true` manifest. The
|
|
158
|
+
* recommender uses this to prefer a strict release over a candidate
|
|
159
|
+
* bundle when both are installed and contract-valid. Mirrors the
|
|
160
|
+
* publish-side `eliza1_gates.yaml` strict bar.
|
|
161
|
+
*/
|
|
162
|
+
export function isStrictReleaseManifest(manifest: Eliza1Manifest): boolean {
|
|
163
|
+
return manifest.defaultEligible === true;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
// Internal: contract rules from AGENTS.md §3 + §6
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
|
|
170
|
+
// Release states that make the full "production" claim: every supported
|
|
171
|
+
// backend kernel-verified `pass`, every eval green. `base-v1` / `finetuned-v2`
|
|
172
|
+
// / `final` are published releases; `defaultEligible: true` always implies it
|
|
173
|
+
// (it is the device auto-default). A manifest with no `provenance` block is
|
|
174
|
+
// treated as production too — that was the only behaviour before this guard,
|
|
175
|
+
// so back-compat holds. `base-v1-candidate` / `local-standin` /
|
|
176
|
+
// `upload-candidate` are publishable + installable on a device whose backend
|
|
177
|
+
// they *did* verify, but are not held to the full bar — their `defaultEligible`
|
|
178
|
+
// must stay false (the schema's `releaseChannel=base-v1 → defaultEligible:false`
|
|
179
|
+
// refinement already enforces that for the base-v1 channel; the validator now
|
|
180
|
+
// honours the release-state vocabulary instead of applying the auto-default
|
|
181
|
+
// bar to every manifest).
|
|
182
|
+
const STRICT_RELEASE_STATES: ReadonlySet<string> = new Set([
|
|
183
|
+
"base-v1",
|
|
184
|
+
"finetuned-v2",
|
|
185
|
+
"final",
|
|
186
|
+
]);
|
|
187
|
+
|
|
188
|
+
const VISION_TIERS: ReadonlySet<Eliza1Tier> = new Set([
|
|
189
|
+
"2b",
|
|
190
|
+
"4b",
|
|
191
|
+
"9b",
|
|
192
|
+
"27b",
|
|
193
|
+
"27b-256k",
|
|
194
|
+
]);
|
|
195
|
+
|
|
196
|
+
const MTP_TIERS: ReadonlySet<Eliza1Tier> = new Set([
|
|
197
|
+
"2b",
|
|
198
|
+
"4b",
|
|
199
|
+
"9b",
|
|
200
|
+
"27b",
|
|
201
|
+
"27b-256k",
|
|
202
|
+
]);
|
|
203
|
+
|
|
204
|
+
const MIN_TEXT_CONTEXT = 131072;
|
|
205
|
+
|
|
206
|
+
const STAGING_VERSION_TOKENS: ReadonlySet<string> = new Set([
|
|
207
|
+
"candidate",
|
|
208
|
+
"staged",
|
|
209
|
+
"dev",
|
|
210
|
+
"local",
|
|
211
|
+
]);
|
|
212
|
+
|
|
213
|
+
function isStagingManifestVersion(version: string): boolean {
|
|
214
|
+
const prerelease = version.match(
|
|
215
|
+
/^[0-9]+\.[0-9]+\.[0-9]+-([^+]+)(?:\+.*)?$/,
|
|
216
|
+
)?.[1];
|
|
217
|
+
if (!prerelease) return false;
|
|
218
|
+
return prerelease
|
|
219
|
+
.split(/[.-]/)
|
|
220
|
+
.some((token) => STAGING_VERSION_TOKENS.has(token.toLowerCase()));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function collectContractErrors(
|
|
224
|
+
m: Eliza1Manifest,
|
|
225
|
+
options: { allowVersionStaging?: boolean } = {},
|
|
226
|
+
): string[] {
|
|
227
|
+
const errors: string[] = [];
|
|
228
|
+
|
|
229
|
+
const releaseState = m.provenance?.releaseState;
|
|
230
|
+
const strictRelease =
|
|
231
|
+
m.defaultEligible === true ||
|
|
232
|
+
(releaseState === undefined &&
|
|
233
|
+
!(
|
|
234
|
+
options.allowVersionStaging === true &&
|
|
235
|
+
isStagingManifestVersion(m.version)
|
|
236
|
+
)) ||
|
|
237
|
+
(releaseState !== undefined && STRICT_RELEASE_STATES.has(releaseState));
|
|
238
|
+
|
|
239
|
+
// Gemma 4 cutover: a release-shaped (strict/defaultEligible) bundle must be
|
|
240
|
+
// the real Gemma-4 base, never the Qwen3.5 / local-standin placeholder the
|
|
241
|
+
// pre-cutover bundles shipped. Block a stand-in from defining the default.
|
|
242
|
+
if (strictRelease) {
|
|
243
|
+
const textBase = m.lineage.text.base;
|
|
244
|
+
if (
|
|
245
|
+
/^local-standin:/i.test(textBase) ||
|
|
246
|
+
QWEN_PROVENANCE_RE.test(textBase)
|
|
247
|
+
) {
|
|
248
|
+
errors.push(
|
|
249
|
+
`lineage.text.base: a strict/defaultEligible release must ship the real Gemma-4 base, not a stand-in (${textBase})`,
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
errors.push(...collectQwenAsrProvenanceBlockers(m));
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Tokenizer identity: when the bundle stamps the Gemma 4 tokenizer block
|
|
256
|
+
// (schemaVersion 2), it must be the shared Gemma 4 tokenizer.
|
|
257
|
+
if (m.tokenizer) {
|
|
258
|
+
if (m.tokenizer.family !== ELIZA_1_TOKENIZER_FAMILY) {
|
|
259
|
+
errors.push(
|
|
260
|
+
`tokenizer.family: expected ${ELIZA_1_TOKENIZER_FAMILY}, got ${m.tokenizer.family}`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
if (m.tokenizer.vocabSize !== ELIZA_1_TOKENIZER_VOCAB_SIZE) {
|
|
264
|
+
errors.push(
|
|
265
|
+
`tokenizer.vocabSize: expected ${ELIZA_1_TOKENIZER_VOCAB_SIZE}, got ${m.tokenizer.vocabSize}`,
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Required-kernel coverage.
|
|
271
|
+
const declaredRequired = new Set<Eliza1Kernel>(m.kernels.required);
|
|
272
|
+
const tierRequired = REQUIRED_KERNELS_BY_TIER[m.tier];
|
|
273
|
+
for (const k of tierRequired) {
|
|
274
|
+
if (!declaredRequired.has(k)) {
|
|
275
|
+
errors.push(
|
|
276
|
+
`kernels.required: missing required kernel for tier ${m.tier}: ${k}`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
for (const [i, entry] of m.files.text.entries()) {
|
|
282
|
+
if (typeof entry.ctx !== "number") {
|
|
283
|
+
errors.push(`files.text[${i}].ctx: required for text GGUFs`);
|
|
284
|
+
} else if (entry.ctx < MIN_TEXT_CONTEXT) {
|
|
285
|
+
errors.push(
|
|
286
|
+
`files.text[${i}].ctx: ${entry.ctx} is below the 128k text GGUF floor`,
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
if (/-(32k|64k)\.gguf$/i.test(entry.path)) {
|
|
290
|
+
errors.push(
|
|
291
|
+
`files.text[${i}].path: 32k/64k text GGUFs are below the Eliza-1 release floor`,
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Gemma 4 cutover (#9033): long-context KV is handled by Gemma's native
|
|
297
|
+
// windowed-SWA + shared-KV at stock q8_0, so the legacy turbo3_tcq trellis
|
|
298
|
+
// KV-cache kernel is no longer a required long-context kernel — it is an
|
|
299
|
+
// optional (head_dim=128) accelerator the Gemma stock-KV path doesn't use.
|
|
300
|
+
// Required kernels are governed by REQUIRED_KERNELS_BY_TIER (turboquant_q4
|
|
301
|
+
// weight-quant), checked above; nothing extra is gated on context length.
|
|
302
|
+
|
|
303
|
+
const visionEnabled = VISION_TIERS.has(m.tier);
|
|
304
|
+
if (visionEnabled) {
|
|
305
|
+
if (m.files.vision.length === 0) {
|
|
306
|
+
errors.push(`files.vision: required for vision-enabled tier ${m.tier}`);
|
|
307
|
+
}
|
|
308
|
+
} else if (m.files.vision.length > 0) {
|
|
309
|
+
errors.push(`files.vision: unsupported for non-vision tier ${m.tier}`);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const mtpEnabled = MTP_TIERS.has(m.tier);
|
|
313
|
+
if (mtpEnabled) {
|
|
314
|
+
// Gemma 4 MTP is separate-drafter: every MTP tier bundles a dedicated
|
|
315
|
+
// drafter GGUF at `mtp/drafter-<tier>.gguf` (loaded by llama.cpp as
|
|
316
|
+
// `-md mtp/drafter-<tier>.gguf --spec-type draft-mtp`). A strict release
|
|
317
|
+
// that omits the drafter is not release-shaped (AGENTS.md §1/§3 require
|
|
318
|
+
// MTP on every tier); a candidate/staging bundle may still be
|
|
319
|
+
// materialized without it. The legacy embedded-draft-head shape — no
|
|
320
|
+
// shipped Gemma tier uses it — is honored only when the manifest
|
|
321
|
+
// explicitly declares `mtp: "embedded-draft-head"`.
|
|
322
|
+
if (m.mtp === "embedded-draft-head") {
|
|
323
|
+
if (m.files.mtp.length > 0) {
|
|
324
|
+
errors.push(
|
|
325
|
+
`files.mtp: must be empty for embedded-draft-head MTP tier ${m.tier}`,
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
} else {
|
|
329
|
+
const expectedDrafterPath = `mtp/drafter-${m.tier}.gguf`;
|
|
330
|
+
if (m.files.mtp.length === 0) {
|
|
331
|
+
if (strictRelease) {
|
|
332
|
+
errors.push(
|
|
333
|
+
`files.mtp: MTP drafter not bundled — separate-drafter tier ${m.tier} must ship ${expectedDrafterPath}`,
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
} else {
|
|
337
|
+
for (const [i, entry] of m.files.mtp.entries()) {
|
|
338
|
+
if (entry.path !== expectedDrafterPath) {
|
|
339
|
+
errors.push(
|
|
340
|
+
`files.mtp[${i}].path: separate-drafter tier ${m.tier} must bundle the drafter at ${expectedDrafterPath}, got ${entry.path}`,
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (!m.evals.mtp) {
|
|
347
|
+
errors.push(`evals.mtp: required for MTP-enabled tier ${m.tier}`);
|
|
348
|
+
} else {
|
|
349
|
+
if (
|
|
350
|
+
m.evals.mtp.passed &&
|
|
351
|
+
(m.evals.mtp.acceptanceRate == null || m.evals.mtp.speedup == null)
|
|
352
|
+
) {
|
|
353
|
+
errors.push(
|
|
354
|
+
"evals.mtp.passed: cannot be true when acceptanceRate or speedup is null (needs-hardware bench)",
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
if (strictRelease && !m.evals.mtp.passed) {
|
|
358
|
+
errors.push("evals.mtp.passed: false");
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
} else if (m.files.mtp.length > 0) {
|
|
362
|
+
errors.push(`files.mtp: unsupported for non-MTP tier ${m.tier}`);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Backend kernel-verify coverage. A production release must verify every
|
|
366
|
+
// backend the tier supports; a candidate/staging bundle need only verify at
|
|
367
|
+
// least one supported backend (the device-side `canSetAsDefault` /
|
|
368
|
+
// installability check then matches the device's available backends against
|
|
369
|
+
// the verified-`pass` set, so a CUDA-only candidate installs on CUDA hosts
|
|
370
|
+
// and is rejected on a Mac whose Metal it never verified).
|
|
371
|
+
const supportedBackends = SUPPORTED_BACKENDS_BY_TIER[m.tier];
|
|
372
|
+
if (strictRelease) {
|
|
373
|
+
for (const b of supportedBackends) {
|
|
374
|
+
const status = m.kernels.verifiedBackends[b].status;
|
|
375
|
+
if (status !== "pass") {
|
|
376
|
+
errors.push(
|
|
377
|
+
`kernels.verifiedBackends.${b}: status is "${status}", expected "pass" for tier ${m.tier}`,
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
} else if (
|
|
382
|
+
!supportedBackends.some(
|
|
383
|
+
(b) => m.kernels.verifiedBackends[b].status === "pass",
|
|
384
|
+
)
|
|
385
|
+
) {
|
|
386
|
+
errors.push(
|
|
387
|
+
`kernels.verifiedBackends: a publishable bundle must report status="pass" on at least one supported backend for tier ${m.tier} (got [${supportedBackends
|
|
388
|
+
.map((b) => `${b}:${m.kernels.verifiedBackends[b].status}`)
|
|
389
|
+
.join(", ")}])`,
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// The precomputed default-voice speaker preset (`cache/voice-preset-default.bin`)
|
|
394
|
+
// is a mandatory bundle artifact — `EngineVoiceBridge.start()` hard-fails
|
|
395
|
+
// without it (AGENTS.md §4 / inference/AGENTS.md §2). It must be listed in
|
|
396
|
+
// `files.cache` so the downloader fetches it, and when the manifest declares
|
|
397
|
+
// a `voice` block its `cache.speakerPreset` must point at the same path.
|
|
398
|
+
if (!m.files.cache.some((f) => f.path === VOICE_PRESET_CACHE_PATH)) {
|
|
399
|
+
errors.push(`files.cache: missing required ${VOICE_PRESET_CACHE_PATH}`);
|
|
400
|
+
}
|
|
401
|
+
if (m.voice && m.voice.cache.speakerPreset !== VOICE_PRESET_CACHE_PATH) {
|
|
402
|
+
errors.push(
|
|
403
|
+
`voice.cache.speakerPreset: must be ${VOICE_PRESET_CACHE_PATH}, got ${m.voice.cache.speakerPreset}`,
|
|
404
|
+
);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Eval gates. Enforced as pass/fail only for a production release; a
|
|
408
|
+
// candidate/staging bundle still carries the eval blobs (Zod-shape-checked,
|
|
409
|
+
// measured-or-`not-run`) but a non-green eval does not block publish/install
|
|
410
|
+
// — only `defaultEligible` promotion (which requires `strictRelease`).
|
|
411
|
+
if (strictRelease) {
|
|
412
|
+
if (!m.evals.textEval.passed) errors.push("evals.textEval.passed: false");
|
|
413
|
+
if (!m.evals.voiceRtf.passed) errors.push("evals.voiceRtf.passed: false");
|
|
414
|
+
if (!m.evals.e2eLoopOk) errors.push("evals.e2eLoopOk: false");
|
|
415
|
+
if (!m.evals.thirtyTurnOk) errors.push("evals.thirtyTurnOk: false");
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Optional component slots must be internally consistent: a shipped
|
|
419
|
+
// component needs auditable lineage, and lineage may not point at a
|
|
420
|
+
// component absent from the bundle. Components that affect runtime quality
|
|
421
|
+
// also require their own publish gate to pass.
|
|
422
|
+
if (m.defaultEligible) {
|
|
423
|
+
if (m.files.asr.length === 0) {
|
|
424
|
+
errors.push(
|
|
425
|
+
"files.asr: required for defaultEligible local voice bundles",
|
|
426
|
+
);
|
|
427
|
+
}
|
|
428
|
+
if ((m.files.vad ?? []).length === 0) {
|
|
429
|
+
errors.push(
|
|
430
|
+
"files.vad: required for defaultEligible local voice bundles",
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
for (const slot of [
|
|
436
|
+
"asr",
|
|
437
|
+
"embedding",
|
|
438
|
+
"imagegen",
|
|
439
|
+
"vision",
|
|
440
|
+
"vad",
|
|
441
|
+
"wakeword",
|
|
442
|
+
"turn",
|
|
443
|
+
"emotion",
|
|
444
|
+
] as const) {
|
|
445
|
+
const files = m.files[slot] ?? [];
|
|
446
|
+
const lineage = m.lineage[slot];
|
|
447
|
+
if (files.length > 0 && !lineage) {
|
|
448
|
+
errors.push(`lineage.${slot}: required when files.${slot} is non-empty`);
|
|
449
|
+
}
|
|
450
|
+
if (lineage && files.length === 0) {
|
|
451
|
+
errors.push(`files.${slot}: required when lineage.${slot} is present`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// Gemma 4 separate-drafter MTP: the bundled drafter GGUF carries its own
|
|
455
|
+
// lineage, governed by the same files<->lineage consistency rule as every
|
|
456
|
+
// other component slot above. (Embedded-draft-head bundles ship no separate
|
|
457
|
+
// drafter, so both files.mtp and lineage.drafter are empty — also satisfied.)
|
|
458
|
+
if (m.files.mtp.length > 0 && !m.lineage.drafter) {
|
|
459
|
+
errors.push("lineage.drafter: required when files.mtp is non-empty");
|
|
460
|
+
}
|
|
461
|
+
if (m.lineage.drafter && m.files.mtp.length === 0) {
|
|
462
|
+
errors.push("files.mtp: required when lineage.drafter is present");
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (m.files.asr.length > 0) {
|
|
466
|
+
if (!m.evals.asrWer) {
|
|
467
|
+
errors.push("evals.asrWer: required when files.asr is non-empty");
|
|
468
|
+
} else if (strictRelease && !m.evals.asrWer.passed) {
|
|
469
|
+
errors.push("evals.asrWer.passed: false");
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
if ((m.files.embedding ?? []).length > 0) {
|
|
473
|
+
if (!m.evals.embedMteb) {
|
|
474
|
+
errors.push(
|
|
475
|
+
"evals.embedMteb: required when files.embedding is non-empty",
|
|
476
|
+
);
|
|
477
|
+
} else if (strictRelease && !m.evals.embedMteb.passed) {
|
|
478
|
+
errors.push("evals.embedMteb.passed: false");
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
if ((m.files.vad ?? []).length > 0) {
|
|
482
|
+
if (!m.evals.vadLatencyMs) {
|
|
483
|
+
errors.push("evals.vadLatencyMs: required when files.vad is non-empty");
|
|
484
|
+
} else if (strictRelease && !m.evals.vadLatencyMs.passed) {
|
|
485
|
+
errors.push("evals.vadLatencyMs.passed: false");
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
// Voice Wave 2 (2026-05-14): turn-detector eval gate. When the bundle
|
|
489
|
+
// ships `files.turn` (the LiveKit/Turnsense ONNX) the manifest MUST
|
|
490
|
+
// declare a `turnDetector` eval block; a strict release additionally
|
|
491
|
+
// requires `passed=true` AND the precomputed `passed` field to be
|
|
492
|
+
// internally consistent with the threshold constants.
|
|
493
|
+
if ((m.files.turn ?? []).length > 0) {
|
|
494
|
+
const td = m.evals.turnDetector;
|
|
495
|
+
if (!td) {
|
|
496
|
+
errors.push("evals.turnDetector: required when files.turn is non-empty");
|
|
497
|
+
} else {
|
|
498
|
+
const gateMet =
|
|
499
|
+
td.f1 >= TURN_DETECTOR_F1_THRESHOLD &&
|
|
500
|
+
td.meanLatencyMs <= TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT;
|
|
501
|
+
if (td.passed !== gateMet) {
|
|
502
|
+
errors.push(
|
|
503
|
+
`evals.turnDetector.passed: ${td.passed} disagrees with measured gate (f1=${td.f1} ≥ ${TURN_DETECTOR_F1_THRESHOLD} && meanLatencyMs=${td.meanLatencyMs} ≤ ${TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT} → ${gateMet})`,
|
|
504
|
+
);
|
|
505
|
+
}
|
|
506
|
+
if (strictRelease && !td.passed) {
|
|
507
|
+
errors.push("evals.turnDetector.passed: false");
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
const expressiveVoice =
|
|
512
|
+
m.voice?.capabilities.includes("emotion-tags") ||
|
|
513
|
+
m.voice?.capabilities.includes("singing");
|
|
514
|
+
if (expressiveVoice) {
|
|
515
|
+
if (!m.evals.expressive) {
|
|
516
|
+
errors.push(
|
|
517
|
+
"evals.expressive: required when voice capabilities include emotion-tags or singing",
|
|
518
|
+
);
|
|
519
|
+
} else if (strictRelease && !m.evals.expressive.passed) {
|
|
520
|
+
errors.push("evals.expressive.passed: false");
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Voice Wave 2 (2026-05-14): acoustic-emotion classifier eval gate. Same
|
|
525
|
+
// shape as `turnDetector`: a bundle that ships `files.emotion` MUST
|
|
526
|
+
// declare a precomputed `emotionClassifier` block; a strict release
|
|
527
|
+
// additionally requires `passed=true` and internal consistency with the
|
|
528
|
+
// threshold constants. The MELD bar is intentionally low (~0.35) per
|
|
529
|
+
// R3-emotion §6 — refusing to publish a real improvement is worse than
|
|
530
|
+
// admitting 7-class conversational SER is hard.
|
|
531
|
+
if ((m.files.emotion ?? []).length > 0) {
|
|
532
|
+
const ec = m.evals.emotionClassifier;
|
|
533
|
+
if (!ec) {
|
|
534
|
+
errors.push(
|
|
535
|
+
"evals.emotionClassifier: required when files.emotion is non-empty",
|
|
536
|
+
);
|
|
537
|
+
} else {
|
|
538
|
+
const gateMet =
|
|
539
|
+
ec.macroF1Meld >= EMOTION_CLASSIFIER_MELD_F1_THRESHOLD &&
|
|
540
|
+
ec.macroF1Iemocap >= EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD &&
|
|
541
|
+
ec.meanLatencyMs <= EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT;
|
|
542
|
+
if (ec.passed !== gateMet) {
|
|
543
|
+
errors.push(
|
|
544
|
+
`evals.emotionClassifier.passed: ${ec.passed} disagrees with measured gate (` +
|
|
545
|
+
`macroF1Meld=${ec.macroF1Meld} ≥ ${EMOTION_CLASSIFIER_MELD_F1_THRESHOLD} && ` +
|
|
546
|
+
`macroF1Iemocap=${ec.macroF1Iemocap} ≥ ${EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD} && ` +
|
|
547
|
+
`meanLatencyMs=${ec.meanLatencyMs} ≤ ${EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT} → ${gateMet})`,
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
if (strictRelease && !ec.passed) {
|
|
551
|
+
errors.push("evals.emotionClassifier.passed: false");
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// base-v1 provenance coverage. A `base-v1` manifest (the upstream base
|
|
557
|
+
// models, GGUF-converted + fully optimized, NOT fine-tuned) MUST record
|
|
558
|
+
// where every shipped component comes from — that is the whole point of
|
|
559
|
+
// the release state.
|
|
560
|
+
if (m.provenance) {
|
|
561
|
+
if (
|
|
562
|
+
m.provenance.releaseState === "base-v1" &&
|
|
563
|
+
m.provenance.finetuned !== false
|
|
564
|
+
) {
|
|
565
|
+
errors.push(
|
|
566
|
+
"provenance.finetuned: must be false for releaseState=base-v1",
|
|
567
|
+
);
|
|
568
|
+
}
|
|
569
|
+
if (m.provenance.releaseState === "base-v1") {
|
|
570
|
+
const requiredSlots: Array<keyof typeof m.provenance.sourceModels> = [
|
|
571
|
+
"text",
|
|
572
|
+
"voice",
|
|
573
|
+
];
|
|
574
|
+
for (const slot of ["asr", "vad", "embedding", "vision"] as const) {
|
|
575
|
+
if ((m.files[slot] ?? []).length > 0) requiredSlots.push(slot);
|
|
576
|
+
}
|
|
577
|
+
if (m.files.mtp.length > 0) {
|
|
578
|
+
requiredSlots.push("drafter");
|
|
579
|
+
}
|
|
580
|
+
if ((m.files.imagegen ?? []).length > 0) {
|
|
581
|
+
requiredSlots.push("imagegen");
|
|
582
|
+
}
|
|
583
|
+
for (const slot of requiredSlots) {
|
|
584
|
+
if (!m.provenance.sourceModels[slot]) {
|
|
585
|
+
errors.push(
|
|
586
|
+
`provenance.sourceModels.${slot}: required for releaseState=base-v1 (component is in files.${slot})`,
|
|
587
|
+
);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// Speculative-decode bench metadata is always optional. When present, it may
|
|
594
|
+
// record a not-run/failure state; only a passing claim must include measured
|
|
595
|
+
// acceptance/speedup values. The canonical key is `specDecode`; `eagle3` is
|
|
596
|
+
// the back-compat alias accepted for one release.
|
|
597
|
+
const specDecodeEval = m.evals.specDecode ?? m.evals.eagle3;
|
|
598
|
+
if (specDecodeEval) {
|
|
599
|
+
const specDecodePassed = specDecodeEval.passed ?? specDecodeEval.pass;
|
|
600
|
+
if (
|
|
601
|
+
specDecodePassed === true &&
|
|
602
|
+
(specDecodeEval.acceptanceRate == null || specDecodeEval.speedup == null)
|
|
603
|
+
) {
|
|
604
|
+
errors.push(
|
|
605
|
+
"evals.specDecode: passed=true requires measured acceptanceRate and speedup",
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// The strongest claim: defaultEligible. If anything above failed, this
|
|
611
|
+
// flag must be false. (Contract errors are already accumulated; we add
|
|
612
|
+
// an explicit message so callers can identify the violation cleanly.)
|
|
613
|
+
if (m.defaultEligible && errors.length > 0) {
|
|
614
|
+
errors.unshift(
|
|
615
|
+
"defaultEligible: true requires all required kernels, supported backends, and evals to pass",
|
|
616
|
+
);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
return errors;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Convenience: list missing required kernels for a tier without doing
|
|
624
|
+
* full validation. Used by the recommendation engine when surfacing
|
|
625
|
+
* "this bundle is broken" diagnostics.
|
|
626
|
+
*/
|
|
627
|
+
export function missingRequiredKernels(
|
|
628
|
+
tier: Eliza1Tier,
|
|
629
|
+
declaredRequired: ReadonlyArray<Eliza1Kernel>,
|
|
630
|
+
): ReadonlyArray<Eliza1Kernel> {
|
|
631
|
+
const declared = new Set(declaredRequired);
|
|
632
|
+
return REQUIRED_KERNELS_BY_TIER[tier].filter((k) => !declared.has(k));
|
|
633
|
+
}
|