@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,33 @@
|
|
|
1
|
+
import { type SpeakerEncoder } from "./speaker/encoder";
|
|
2
|
+
export interface AgentSelfVoiceImprintOptions {
|
|
3
|
+
encoder: SpeakerEncoder;
|
|
4
|
+
/** Minimum 16 kHz samples before one self-voice embedding is encoded. */
|
|
5
|
+
minSamples?: number;
|
|
6
|
+
/** Maximum 16 kHz samples to encode for one centroid update. */
|
|
7
|
+
maxSamples?: number;
|
|
8
|
+
/** Number of recent agent-TTS embeddings retained in the centroid. */
|
|
9
|
+
maxEmbeddings?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Maintains a bounded centroid of the agent's own synthesized voice.
|
|
13
|
+
*
|
|
14
|
+
* The live mic path already gets WeSpeaker embeddings from attribution. This
|
|
15
|
+
* helper observes the PCM that the scheduler hands to audio output, embeds that
|
|
16
|
+
* actual TTS audio, and exposes cosine similarity against future mic turns.
|
|
17
|
+
*/
|
|
18
|
+
export declare class AgentSelfVoiceImprint {
|
|
19
|
+
private readonly encoder;
|
|
20
|
+
private readonly minSamples;
|
|
21
|
+
private readonly maxSamples;
|
|
22
|
+
private readonly maxEmbeddings;
|
|
23
|
+
private readonly pendingSegments;
|
|
24
|
+
private pendingSamples;
|
|
25
|
+
private readonly embeddings;
|
|
26
|
+
private centroid;
|
|
27
|
+
private queue;
|
|
28
|
+
constructor(options: AgentSelfVoiceImprintOptions);
|
|
29
|
+
observeAudio(pcm: Float32Array, sampleRate: number): Promise<void>;
|
|
30
|
+
similarity(embedding: Float32Array): Promise<number | null>;
|
|
31
|
+
private observeAudioLocked;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=self-voice-imprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-voice-imprint.d.ts","sourceRoot":"","sources":["../../../src/services/voice/self-voice-imprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQ3E,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,cAAc,CAAC;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD;;;;;;GAMG;AACH,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAoC;gBAErC,OAAO,EAAE,4BAA4B;IAOjD,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D,UAAU,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAOnD,kBAAkB;CA8BhC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-cut resource sharing between the text + voice surfaces of a
|
|
3
|
+
* single Eliza-1 bundle.
|
|
4
|
+
*
|
|
5
|
+
* Per `packages/inference/AGENTS.md` §4 ("shared KV cache scheduling,
|
|
6
|
+
* not shared KV memory" + "one process, one llama.cpp build, one GGML
|
|
7
|
+
* pin"), text and voice MUST share:
|
|
8
|
+
* - the tokenizer (Eliza-1/OmniVoice share a vocabulary in this lineage),
|
|
9
|
+
* - the mmap regions for weights (deduplicated by absolute path),
|
|
10
|
+
* - the kernel set (same shipped llama.cpp library after fusion),
|
|
11
|
+
* - the scheduler queue (one queue, prioritised),
|
|
12
|
+
* - the native MTP draft path (always wired for Eliza-1).
|
|
13
|
+
*
|
|
14
|
+
* What they do NOT share:
|
|
15
|
+
* - KV cache memory (different layer counts, different head configs,
|
|
16
|
+
* different quantizations — separate caches, shared scheduler).
|
|
17
|
+
*
|
|
18
|
+
* This module owns reference counts on each shared resource and is the
|
|
19
|
+
* single arbiter of when a voice-only region can be released. It does
|
|
20
|
+
* NOT do any I/O itself — the actual mmap, madvise, or full model-unload
|
|
21
|
+
* behavior lives behind the `MmapRegionHandle` interface so platform
|
|
22
|
+
* bindings can choose the right memory policy.
|
|
23
|
+
*/
|
|
24
|
+
/** Minimal structural logger — keeps this module free of upstream deps. */
|
|
25
|
+
interface Logger {
|
|
26
|
+
debug?(message: string): void;
|
|
27
|
+
warn?(message: string): void;
|
|
28
|
+
info?(message: string): void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The model roles that can be resident at once on the local-inference
|
|
32
|
+
* path. The `MemoryMonitor` evicts them in *ascending priority* under RAM
|
|
33
|
+
* pressure (lowest first): low-cost voice auxiliaries are cheapest to drop,
|
|
34
|
+
* the text target is the last thing to go. Voice TTS/ASR weights are evicted
|
|
35
|
+
* via `MmapRegionHandle.evictPages()`; the embedding model is unloaded by
|
|
36
|
+
* its owner.
|
|
37
|
+
*/
|
|
38
|
+
export type ResidentModelRole = "drafter" | "emotion" | "speaker-id" | "vision" | "embedding" | "vad" | "asr" | "tts" | "text-target";
|
|
39
|
+
/**
|
|
40
|
+
* Eviction priority by role — lower evicts first. Matches the brief's
|
|
41
|
+
* `emotion < speaker-id < vision/mmproj < embedding < vad < ASR <
|
|
42
|
+
* TTS < text-target`. The cold-3 set (`emotion`, `speaker-id`) is cheap to
|
|
43
|
+
* load on demand, so evicting them is the first reclamation step under
|
|
44
|
+
* sustained pressure. See `.swarm/research/R9-memory.md` §4.1.
|
|
45
|
+
*/
|
|
46
|
+
export declare const RESIDENT_ROLE_PRIORITY: Readonly<Record<ResidentModelRole, number>>;
|
|
47
|
+
/**
|
|
48
|
+
* An evictable resident model role. The registry walks these in ascending
|
|
49
|
+
* `evictionPriority` under memory pressure and calls `evict()` until enough
|
|
50
|
+
* RAM has been reclaimed. `evict()` MUST be idempotent (a no-op when already
|
|
51
|
+
* evicted) and the role MUST re-load lazily on next use — the monitor only
|
|
52
|
+
* frees memory, it never re-loads.
|
|
53
|
+
*/
|
|
54
|
+
export interface EvictableModelRole extends RefCountedResource {
|
|
55
|
+
readonly role: ResidentModelRole;
|
|
56
|
+
/** Lower evicts first. Defaults to `RESIDENT_ROLE_PRIORITY[role]`. */
|
|
57
|
+
readonly evictionPriority: number;
|
|
58
|
+
/** True while the underlying weights/pages are still resident. */
|
|
59
|
+
isResident(): boolean;
|
|
60
|
+
/** Drop the resident weights/pages. Idempotent; re-loads lazily on demand. */
|
|
61
|
+
evict(): Promise<void>;
|
|
62
|
+
/** Best-effort estimate of RAM (MB) reclaimed by `evict()`. 0 when unknown. */
|
|
63
|
+
estimatedResidentMb(): number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build an `EvictableModelRole` from a role + an `evict` callback. `release()`
|
|
67
|
+
* defaults to a no-op (the registry's refcount, not `release`, gates eviction
|
|
68
|
+
* for these); pass one if the role owns disposable state. `estimatedMb` lets
|
|
69
|
+
* the monitor know roughly how much it will reclaim — pass 0 when unknown.
|
|
70
|
+
*/
|
|
71
|
+
export declare function createEvictableModelRole(args: {
|
|
72
|
+
id?: string;
|
|
73
|
+
role: ResidentModelRole;
|
|
74
|
+
evictionPriority?: number;
|
|
75
|
+
estimatedMb?: number;
|
|
76
|
+
isResident: () => boolean;
|
|
77
|
+
evict: () => Promise<void>;
|
|
78
|
+
release?: () => Promise<void>;
|
|
79
|
+
}): EvictableModelRole;
|
|
80
|
+
/**
|
|
81
|
+
* Anything ref-counted by the registry implements this. The caller of
|
|
82
|
+
* `release()` MUST guarantee that no further reads happen on the
|
|
83
|
+
* underlying resource — for mmap regions that means no kernel call has
|
|
84
|
+
* a pointer into the freed range.
|
|
85
|
+
*/
|
|
86
|
+
export interface RefCountedResource {
|
|
87
|
+
readonly id: string;
|
|
88
|
+
/** Released for real when the last ref drops. Idempotent. */
|
|
89
|
+
release(): Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* mmap region handle. The fused omnivoice/llama.cpp build owns the real
|
|
93
|
+
* mmap call (it happens inside the FFI) — this interface is the JS-side
|
|
94
|
+
* proxy for it, so the lifecycle code can request page eviction without
|
|
95
|
+
* binding to a specific backend.
|
|
96
|
+
*/
|
|
97
|
+
export interface MmapRegionHandle extends RefCountedResource {
|
|
98
|
+
/** Absolute path of the file backing the mmap region. */
|
|
99
|
+
readonly path: string;
|
|
100
|
+
/** Byte size of the mapped region. */
|
|
101
|
+
readonly sizeBytes: number;
|
|
102
|
+
/**
|
|
103
|
+
* Release memory pressure for this region. Backends may implement this
|
|
104
|
+
* as a page hint or as a full voice-runtime unload. Common mappings:
|
|
105
|
+
* - POSIX (Linux/Android/macOS-bg): `madvise(addr, len, MADV_DONTNEED)`
|
|
106
|
+
* - macOS (foreground / iOS): `madvise(addr, len, MADV_FREE_REUSABLE)`
|
|
107
|
+
* - Windows: `VirtualUnlock` + `OfferVirtualMemory`
|
|
108
|
+
*
|
|
109
|
+
* The lifecycle test mocks this to assert the call happened.
|
|
110
|
+
*/
|
|
111
|
+
evictPages(): Promise<void>;
|
|
112
|
+
}
|
|
113
|
+
/** Minimal tokenizer surface text + voice both consume. */
|
|
114
|
+
export interface SharedTokenizer extends RefCountedResource {
|
|
115
|
+
readonly vocabSize: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Kernel set descriptor. The actual kernels are inside the fused
|
|
119
|
+
* llama.cpp build; this is the metadata the runtime reads at startup
|
|
120
|
+
* (AGENTS.md §3 #5: "the runtime MUST log the kernel set on startup").
|
|
121
|
+
*/
|
|
122
|
+
export interface KernelSet extends RefCountedResource {
|
|
123
|
+
readonly kernels: ReadonlyArray<string>;
|
|
124
|
+
}
|
|
125
|
+
/** Scheduler graph slot. One per active engine, refcounted by surface. */
|
|
126
|
+
export interface SchedulerSlot extends RefCountedResource {
|
|
127
|
+
/** Surface (text/voice) currently holding a ref. */
|
|
128
|
+
surfaces(): ReadonlyArray<"text" | "voice">;
|
|
129
|
+
}
|
|
130
|
+
/** Native MTP draft state is shared between text-only and voice modes. */
|
|
131
|
+
export interface MtpDraftHandle extends RefCountedResource {
|
|
132
|
+
readonly modelId: string;
|
|
133
|
+
}
|
|
134
|
+
export declare function createMtpDraftHandle(args: {
|
|
135
|
+
modelId: string;
|
|
136
|
+
}): MtpDraftHandle;
|
|
137
|
+
/**
|
|
138
|
+
* Owns the shared resources for one engine. Voice + text both `acquire`
|
|
139
|
+
* and `release` against the same registry; the registry only releases
|
|
140
|
+
* the underlying resource when refcount hits zero.
|
|
141
|
+
*
|
|
142
|
+
* Thread-safety: all methods run on the single Node event loop; no
|
|
143
|
+
* locks needed. Promises returned from `release()` MUST be awaited so
|
|
144
|
+
* the lifecycle state machine can observe completion.
|
|
145
|
+
*/
|
|
146
|
+
export declare class SharedResourceRegistry {
|
|
147
|
+
private readonly entries;
|
|
148
|
+
private readonly log?;
|
|
149
|
+
/**
|
|
150
|
+
* When a higher-level component (the `MemoryArbiter`) owns the eviction
|
|
151
|
+
* decision for this registry, it claims ownership here so the simpler
|
|
152
|
+
* `MemoryMonitor` poll defers instead of evicting in parallel — a single
|
|
153
|
+
* eviction decision point, no double-eviction on one pressure event
|
|
154
|
+
* (#8809 AC#2). Null = no external owner, the monitor evicts itself.
|
|
155
|
+
*/
|
|
156
|
+
private evictionOwner;
|
|
157
|
+
constructor(opts?: {
|
|
158
|
+
logger?: Logger;
|
|
159
|
+
});
|
|
160
|
+
/** Claim the single eviction-decision ownership for this registry. */
|
|
161
|
+
claimEvictionOwnership(owner: string): void;
|
|
162
|
+
/** Release ownership (only the current owner may release it). */
|
|
163
|
+
releaseEvictionOwnership(owner: string): void;
|
|
164
|
+
/** True when an external component owns the eviction decision. */
|
|
165
|
+
hasExternalEvictionOwner(): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Register a resource if absent, increment refcount otherwise. Returns
|
|
168
|
+
* the canonical instance — callers MUST use the returned value, not the
|
|
169
|
+
* one passed in, so a second registration with the same id resolves to
|
|
170
|
+
* the original (deduplication by id).
|
|
171
|
+
*/
|
|
172
|
+
acquire<T extends RefCountedResource>(resource: T): T;
|
|
173
|
+
/**
|
|
174
|
+
* Decrement refcount; release the resource when it hits zero. Throws
|
|
175
|
+
* on unknown id — silent no-ops would hide leaks.
|
|
176
|
+
*/
|
|
177
|
+
release(id: string): Promise<void>;
|
|
178
|
+
/** Diagnostic: current refcount, or 0 when not present. */
|
|
179
|
+
refCount(id: string): number;
|
|
180
|
+
/** Diagnostic: snapshot of currently-tracked resource ids. */
|
|
181
|
+
ids(): ReadonlyArray<string>;
|
|
182
|
+
/** Total tracked resources. */
|
|
183
|
+
size(): number;
|
|
184
|
+
/**
|
|
185
|
+
* Currently-resident evictable model roles, ascending by eviction
|
|
186
|
+
* priority (cheapest-to-evict first). Used by `MemoryMonitor` to walk
|
|
187
|
+
* roles under RAM pressure. Non-resident roles are filtered out — there's
|
|
188
|
+
* nothing to reclaim.
|
|
189
|
+
*/
|
|
190
|
+
evictableRoles(): ReadonlyArray<EvictableModelRole>;
|
|
191
|
+
/**
|
|
192
|
+
* Evict the lowest-priority resident role and return its `id`, or `null`
|
|
193
|
+
* when nothing is evictable. Observable: emits an `info` log line so the
|
|
194
|
+
* eviction is visible in the dev console. The role re-loads lazily on
|
|
195
|
+
* next use — this only frees memory.
|
|
196
|
+
*/
|
|
197
|
+
evictLowestPriorityRole(): Promise<{
|
|
198
|
+
id: string;
|
|
199
|
+
role: ResidentModelRole;
|
|
200
|
+
estimatedMb: number;
|
|
201
|
+
} | null>;
|
|
202
|
+
}
|
|
203
|
+
export {};
|
|
204
|
+
//# sourceMappingURL=shared-resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-resources.d.ts","sourceRoot":"","sources":["../../../src/services/voice/shared-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,2EAA2E;AAC3E,UAAU,MAAM;IACf,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAC1B,SAAS,GACT,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,KAAK,GACL,KAAK,GACL,KAAK,GACL,aAAa,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC5C,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAWjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC7D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,kEAAkE;IAClE,UAAU,IAAI,OAAO,CAAC;IACtB,8EAA8E;IAC9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,+EAA+E;IAC/E,mBAAmB,IAAI,MAAM,CAAC;CAC9B;AAeD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,iBAAiB,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,GAAG,kBAAkB,CAkBrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC3D,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,2DAA2D;AAC3D,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAU,SAAQ,kBAAkB;IACpD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,0EAA0E;AAC1E,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACxD,oDAAoD;IACpD,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;CAC5C;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,cAAc,CAQjB;AAOD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGpB;IACJ,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAS;IAC9B;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,CAAuB;gBAEhC,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAI1C,sEAAsE;IACtE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,iEAAiE;IACjE,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7C,kEAAkE;IAClE,wBAAwB,IAAI,OAAO;IAInC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,SAAS,kBAAkB,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAUrD;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,8DAA8D;IAC9D,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;IAI5B,+BAA+B;IAC/B,IAAI,IAAI,MAAM;IAId;;;;;OAKG;IACH,cAAc,IAAI,aAAa,CAAC,kBAAkB,CAAC;IAUnD;;;;;OAKG;IACG,uBAAuB,IAAI,OAAO,CAAC;QACxC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,iBAAiB,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CAUT"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speaker-ID + diarization attribution pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a `StreamingTranscriber` so the partial / final
|
|
5
|
+
* `TranscriptUpdate`s carry diarized `VoiceSegment[]` and a
|
|
6
|
+
* `primarySpeaker`. The attribution runs in parallel with ASR — the
|
|
7
|
+
* encoder fires the moment ≥ 1 s of audio is available, and the
|
|
8
|
+
* profile store's `beginMatch` starts at speech-start.
|
|
9
|
+
*
|
|
10
|
+
* This module owns *only* the attribution logic. It does NOT replace
|
|
11
|
+
* the transcriber; callers feed PCM through both the transcriber and
|
|
12
|
+
* the attributor in parallel, then attach the resolved metadata via
|
|
13
|
+
* `BaseStreamingTranscriber.setMetadataDefaults()` once it lands.
|
|
14
|
+
*
|
|
15
|
+
* Why a separate module: the existing `VoicePipeline` is large and
|
|
16
|
+
* already handles a lot. Putting attribution behind a small adapter
|
|
17
|
+
* lets the voice pipeline opt in without entangling the diarizer /
|
|
18
|
+
* encoder / profile-store dependencies into the streaming-ASR contract.
|
|
19
|
+
*/
|
|
20
|
+
import type { VoiceProfileObservation, VoiceProfileStore } from "../profile-store";
|
|
21
|
+
import type { VoiceInputSource, VoiceSegment, VoiceSpeaker, VoiceTurnMetadata } from "../types";
|
|
22
|
+
import type { Diarizer } from "./diarizer";
|
|
23
|
+
import type { SpeakerEncoder } from "./encoder";
|
|
24
|
+
export interface VoiceAttributionPipelineDeps {
|
|
25
|
+
encoder: SpeakerEncoder;
|
|
26
|
+
diarizer?: Diarizer;
|
|
27
|
+
profileStore: VoiceProfileStore;
|
|
28
|
+
}
|
|
29
|
+
export interface VoiceAttributionRequest {
|
|
30
|
+
turnId: string;
|
|
31
|
+
source?: VoiceInputSource;
|
|
32
|
+
/** Concatenated mono 16 kHz PCM for the entire turn. */
|
|
33
|
+
pcm: Float32Array;
|
|
34
|
+
startedAtMs?: number;
|
|
35
|
+
endedAtMs?: number;
|
|
36
|
+
/** When set, the attributor will only run if the abort signal isn't yet fired. */
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
}
|
|
39
|
+
export interface VoiceAttributionOutput {
|
|
40
|
+
turnId: string;
|
|
41
|
+
primarySpeaker?: VoiceSpeaker;
|
|
42
|
+
segments: VoiceSegment[];
|
|
43
|
+
turn: VoiceTurnMetadata;
|
|
44
|
+
observation: VoiceProfileObservation | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Run the diarizer + encoder + profile-store against a complete turn's
|
|
48
|
+
* audio. The caller is responsible for slicing the audio buffer (the
|
|
49
|
+
* pipeline's prefix queue already buffers the entire utterance for
|
|
50
|
+
* the streaming-ASR path).
|
|
51
|
+
*
|
|
52
|
+
* The high-level flow:
|
|
53
|
+
* 1. Diarizer runs on the full PCM, producing per-segment speaker
|
|
54
|
+
* tags (window-local ids).
|
|
55
|
+
* 2. We pick the longest local-speaker span and run the encoder on
|
|
56
|
+
* that span (≥ 1 s) to produce a 256-dim embedding.
|
|
57
|
+
* 3. The embedding is matched against the profile store. On hit,
|
|
58
|
+
* attribute the turn to the matched profile's entity. On miss,
|
|
59
|
+
* create a new cluster profile (no entity binding — that happens
|
|
60
|
+
* at the LifeOps layer based on utterance text).
|
|
61
|
+
* 4. Build `VoiceSegment[]` with the resolved speaker, plus a
|
|
62
|
+
* `VoiceTurnMetadata` for downstream consumers.
|
|
63
|
+
*/
|
|
64
|
+
export declare class VoiceAttributionPipeline {
|
|
65
|
+
private readonly deps;
|
|
66
|
+
constructor(deps: VoiceAttributionPipelineDeps);
|
|
67
|
+
attribute(req: VoiceAttributionRequest): Promise<VoiceAttributionOutput>;
|
|
68
|
+
private buildEmptyOutput;
|
|
69
|
+
private spliceSpans;
|
|
70
|
+
private spanMsTotal;
|
|
71
|
+
private localToVoiceSegments;
|
|
72
|
+
private localToUnknownSegments;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=attribution-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribution-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/attribution-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACX,uBAAuB,EACvB,iBAAiB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACX,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAuB,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,wDAAwD;IACxD,GAAG,EAAE,YAAY,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC5C;AAmED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,4BAA4B;IAEzD,SAAS,CACd,GAAG,EAAE,uBAAuB,GAC1B,OAAO,CAAC,sBAAsB,CAAC;IAsMlC,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,sBAAsB;CAc9B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pyannote-segmentation-3.0 diarizer — fused `libelizainference` binding
|
|
3
|
+
* (ABI v6).
|
|
4
|
+
*
|
|
5
|
+
* Drives the native pyannote diarizer through the single fused-FFI
|
|
6
|
+
* `libelizainference` handle (the merged llama.cpp fork — see
|
|
7
|
+
* `plugins/plugin-local-inference/native/CLAUDE.md` §1) via the
|
|
8
|
+
* `eliza_inference_diariz_*` ABI. This is the SOLE on-device diarizer runtime —
|
|
9
|
+
* the same `ffi`/`ctx` pair powers VAD / wake-word / speaker / TTS / ASR.
|
|
10
|
+
*
|
|
11
|
+
* The native call returns a per-frame powerset-label sequence (293 int8
|
|
12
|
+
* labels per 5 s window, each in `[0, 7)`). Agglomerative clustering and the
|
|
13
|
+
* frame→segment reduction stay JS-side: this class one-hots the labels and
|
|
14
|
+
* feeds them through the shared pure `classifyFramesToSegments` reducer.
|
|
15
|
+
*
|
|
16
|
+
* No silent fallback: when the fused build does not export the diarizer ABI
|
|
17
|
+
* (`eliza_inference_diariz_supported() == 0`) `load()` throws a structured
|
|
18
|
+
* `DiarizerUnavailableError` (AGENTS.md §3 — never fabricate a label
|
|
19
|
+
* sequence, no standalone-lib fallback).
|
|
20
|
+
*/
|
|
21
|
+
import type { ElizaInferenceContextHandle, ElizaInferenceFfi } from "../ffi-bindings";
|
|
22
|
+
import { type Diarizer, type DiarizerOutput, type PyannoteDiarizerModelId } from "./diarizer";
|
|
23
|
+
export interface FusedDiarizerOptions {
|
|
24
|
+
ffi: ElizaInferenceFfi;
|
|
25
|
+
ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
|
|
26
|
+
/**
|
|
27
|
+
* Optional explicit pyannote GGUF path. `null` lets the native runtime
|
|
28
|
+
* resolve the bundle's `diariz/` dir (the default).
|
|
29
|
+
*/
|
|
30
|
+
ggufPath?: string | null;
|
|
31
|
+
/** Stored model id (purely informational). */
|
|
32
|
+
modelId?: PyannoteDiarizerModelId;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Fused-`libelizainference` pyannote-3 diarizer. Owns one
|
|
36
|
+
* `eliza_inference_diariz_*` session; `diarizeWindow()` runs one forward pass
|
|
37
|
+
* over a ~5 s window and reduces the powerset labels into speaker segments.
|
|
38
|
+
*/
|
|
39
|
+
export declare class FusedDiarizer implements Diarizer {
|
|
40
|
+
private readonly ffi;
|
|
41
|
+
private readonly handle;
|
|
42
|
+
readonly sampleRate = 16000;
|
|
43
|
+
readonly modelId: PyannoteDiarizerModelId;
|
|
44
|
+
private disposed;
|
|
45
|
+
private constructor();
|
|
46
|
+
/**
|
|
47
|
+
* True only when the fused `libelizainference` build exports the diarizer
|
|
48
|
+
* ABI and advertises support at runtime.
|
|
49
|
+
*/
|
|
50
|
+
static isSupported(ffi: ElizaInferenceFfi | null | undefined): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Open a native diarizer session. Throws `DiarizerUnavailableError` when
|
|
53
|
+
* the runtime is not present.
|
|
54
|
+
*/
|
|
55
|
+
static load(opts: FusedDiarizerOptions): Promise<FusedDiarizer>;
|
|
56
|
+
diarizeWindow(pcm: Float32Array): Promise<DiarizerOutput>;
|
|
57
|
+
dispose(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=diarizer-fused.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diarizer-fused.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/diarizer-fused.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EACX,2BAA2B,EAC3B,iBAAiB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,KAAK,QAAQ,EACb,KAAK,cAAc,EAMnB,KAAK,uBAAuB,EAC5B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;IACvE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAM5C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,QAAQ,CAAC,UAAU,SAAwB;IAC3C,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAQP;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAKtE;;;OAGG;WACU,IAAI,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IA6B/D,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAsCzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pyannote-segmentation-3.0 shared types and pure segmentation logic.
|
|
3
|
+
*
|
|
4
|
+
* Diarization runs EXCLUSIVELY through the fused `libelizainference`
|
|
5
|
+
* `eliza_inference_diariz_*` ABI (`FusedDiarizer` in `diarizer-fused.ts`).
|
|
6
|
+
* The standalone `libvoice_classifier` binding has been removed — there is one
|
|
7
|
+
* on-device voice runtime.
|
|
8
|
+
*
|
|
9
|
+
* This file holds the shared types (`Diarizer`, `LocalSpeakerSegment`,
|
|
10
|
+
* `DiarizerOutput`), the model-id / window constants, the structured
|
|
11
|
+
* `DiarizerUnavailableError`, and the pure `classifyFramesToSegments` reducer
|
|
12
|
+
* the fused diarizer feeds its per-frame labels through.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PYANNOTE_SEGMENTATION_3_INT8_MODEL_ID: "pyannote-segmentation-3.0-int8";
|
|
15
|
+
export declare const PYANNOTE_SEGMENTATION_3_FP32_MODEL_ID: "pyannote-segmentation-3.0-fp32";
|
|
16
|
+
export type PyannoteDiarizerModelId = typeof PYANNOTE_SEGMENTATION_3_INT8_MODEL_ID | typeof PYANNOTE_SEGMENTATION_3_FP32_MODEL_ID;
|
|
17
|
+
/** pyannote 3.0 segmentation window length (seconds) — model-fixed. */
|
|
18
|
+
export declare const PYANNOTE_WINDOW_SECONDS = 5;
|
|
19
|
+
/** Required mono sample rate (matches upstream training config). */
|
|
20
|
+
export declare const PYANNOTE_SAMPLE_RATE = 16000;
|
|
21
|
+
/** Number of output frames per 5 s window (= 293 in the upstream export). */
|
|
22
|
+
export declare const PYANNOTE_FRAMES_PER_WINDOW = 293;
|
|
23
|
+
/** Per-frame stride in milliseconds (5_000ms / 293 frames ≈ 17.06 ms). */
|
|
24
|
+
export declare const PYANNOTE_FRAME_STRIDE_MS: number;
|
|
25
|
+
/** Output class count — 3 single + 3 overlap + 1 silence = 7. */
|
|
26
|
+
export declare const PYANNOTE_CLASS_COUNT = 7;
|
|
27
|
+
/**
|
|
28
|
+
* Powerset mapping of pyannote-3 segmentation classes. Each class is
|
|
29
|
+
* the set of local speaker indices active in that frame. Class 0 is the
|
|
30
|
+
* silence/no-speaker frame. This matches the upstream `Powerset` head
|
|
31
|
+
* with `max_speakers_per_chunk=3, max_speakers_per_frame=2`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const PYANNOTE_CLASS_TO_SPEAKERS: ReadonlyArray<ReadonlyArray<number>>;
|
|
34
|
+
/** Thrown when the diarizer cannot be constructed. */
|
|
35
|
+
export declare class DiarizerUnavailableError extends Error {
|
|
36
|
+
readonly code: "ort-missing" | "native-missing" | "library-missing" | "model-missing" | "model-unavailable" | "model-load-failed" | "model-shape-mismatch" | "forward-not-implemented" | "invalid-input";
|
|
37
|
+
constructor(code: DiarizerUnavailableError["code"], message: string);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One speaker-tagged span within a diarized window. `localSpeakerId` is
|
|
41
|
+
* **window-local** (0..2): the same physical speaker gets different
|
|
42
|
+
* local ids in different windows. The profile store re-clusters local
|
|
43
|
+
* ids into stable identities via the WeSpeaker embedding cosine.
|
|
44
|
+
*/
|
|
45
|
+
export interface LocalSpeakerSegment {
|
|
46
|
+
startMs: number;
|
|
47
|
+
endMs: number;
|
|
48
|
+
localSpeakerId: number;
|
|
49
|
+
/** Best class confidence over the span (max softmax). */
|
|
50
|
+
confidence: number;
|
|
51
|
+
/** True if the span contains any overlap-class frames. */
|
|
52
|
+
hasOverlap: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface DiarizerOutput {
|
|
55
|
+
segments: LocalSpeakerSegment[];
|
|
56
|
+
/** Number of distinct local speakers observed in the window. */
|
|
57
|
+
localSpeakerCount: number;
|
|
58
|
+
/** Total speech (any-speaker) duration in milliseconds. */
|
|
59
|
+
speechMs: number;
|
|
60
|
+
}
|
|
61
|
+
export interface Diarizer {
|
|
62
|
+
readonly modelId: PyannoteDiarizerModelId;
|
|
63
|
+
readonly sampleRate: number;
|
|
64
|
+
/** Process one ~5 s window of PCM. */
|
|
65
|
+
diarizeWindow(pcm: Float32Array): Promise<DiarizerOutput>;
|
|
66
|
+
dispose(): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Reduce a per-frame class probability tensor into one segment per
|
|
70
|
+
* (local speaker × contiguous frame run). Frames where the silence
|
|
71
|
+
* class wins are excluded; frames in overlap classes contribute to
|
|
72
|
+
* **all** speakers in that class.
|
|
73
|
+
*/
|
|
74
|
+
export declare function classifyFramesToSegments(classProbs: Float32Array, frames: number, classCount: number, startMs: number, frameStrideMs: number): DiarizerOutput;
|
|
75
|
+
//# sourceMappingURL=diarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diarizer.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/diarizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,qCAAqC,EACjD,gCAAyC,CAAC;AAC3C,eAAO,MAAM,qCAAqC,EACjD,gCAAyC,CAAC;AAC3C,MAAM,MAAM,uBAAuB,GAChC,OAAO,qCAAqC,GAC5C,OAAO,qCAAqC,CAAC;AAEhD,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,QAC0B,CAAC;AAChE,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAS1E,CAAC;AAEH,sDAAsD;AACtD,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EACV,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,mBAAmB,GACnB,sBAAsB,GACtB,yBAAyB,GACzB,eAAe,CAAC;gBACP,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKnE;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sCAAsC;IACtC,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAmBD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,YAAY,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACnB,cAAc,CAsFhB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speaker-embedding encoder — fused `libelizainference` binding (ABI v6).
|
|
3
|
+
*
|
|
4
|
+
* The strategic on-device voice engine is the single fused-FFI
|
|
5
|
+
* `libelizainference` library (the merged llama.cpp fork — see
|
|
6
|
+
* `plugins/plugin-local-inference/native/CLAUDE.md` §1). This class drives the
|
|
7
|
+
* WeSpeaker ResNet34-LM speaker encoder through that one native handle via the
|
|
8
|
+
* `eliza_inference_speaker_*` ABI. This is the SOLE on-device speaker-encoder
|
|
9
|
+
* runtime — the same `ffi`/`ctx` pair powers VAD / wake-word / TTS / ASR, so the
|
|
10
|
+
* whole voice pipeline runs through one library.
|
|
11
|
+
*
|
|
12
|
+
* Shape mirrors the legacy `encoder.ts::SpeakerEncoder` contract exactly:
|
|
13
|
+
* - 16 kHz mono fp32 PCM in,
|
|
14
|
+
* - one L2-normalized 256-d embedding out,
|
|
15
|
+
* - `encode(pcm)` / `dispose()`.
|
|
16
|
+
*
|
|
17
|
+
* No silent fallback: when the fused build does not export the speaker ABI
|
|
18
|
+
* (`eliza_inference_speaker_supported() == 0`) `load()` throws a structured
|
|
19
|
+
* `SpeakerEncoderGgmlUnavailableError` (AGENTS.md §3 — no synthetic
|
|
20
|
+
* embeddings, no standalone-lib fallback).
|
|
21
|
+
*/
|
|
22
|
+
import type { ElizaInferenceContextHandle, ElizaInferenceFfi } from "../ffi-bindings";
|
|
23
|
+
import type { SpeakerEncoder } from "./encoder";
|
|
24
|
+
export interface FusedSpeakerEncoderOptions {
|
|
25
|
+
ffi: ElizaInferenceFfi;
|
|
26
|
+
ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
|
|
27
|
+
/**
|
|
28
|
+
* Optional explicit WeSpeaker GGUF path. `null` lets the native runtime
|
|
29
|
+
* resolve the bundle's `speaker/` dir (the default).
|
|
30
|
+
*/
|
|
31
|
+
ggufPath?: string | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Fused-`libelizainference` WeSpeaker speaker encoder. Owns one
|
|
35
|
+
* `eliza_inference_speaker_*` session; `encode()` runs one forward pass over
|
|
36
|
+
* the supplied 16 kHz PCM and returns the normalized 256-d embedding. The
|
|
37
|
+
* native side owns the model graph; this class is a thin handle.
|
|
38
|
+
*/
|
|
39
|
+
export declare class FusedSpeakerEncoder implements SpeakerEncoder {
|
|
40
|
+
private readonly ffi;
|
|
41
|
+
private readonly handle;
|
|
42
|
+
readonly embeddingDim = 256;
|
|
43
|
+
readonly sampleRate = 16000;
|
|
44
|
+
readonly modelId: "wespeaker-resnet34-lm-int8";
|
|
45
|
+
private disposed;
|
|
46
|
+
private constructor();
|
|
47
|
+
/**
|
|
48
|
+
* True only when the fused `libelizainference` build exports the speaker
|
|
49
|
+
* ABI and advertises support at runtime.
|
|
50
|
+
*/
|
|
51
|
+
static isSupported(ffi: ElizaInferenceFfi | null | undefined): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Open a native speaker-encoder session. Throws
|
|
54
|
+
* `SpeakerEncoderGgmlUnavailableError` when the runtime is not present.
|
|
55
|
+
*/
|
|
56
|
+
static load(opts: FusedSpeakerEncoderOptions): Promise<FusedSpeakerEncoder>;
|
|
57
|
+
encode(pcm: Float32Array): Promise<Float32Array>;
|
|
58
|
+
dispose(): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=encoder-fused.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder-fused.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/encoder-fused.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACX,2BAA2B,EAC3B,iBAAiB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAShD,MAAM,WAAW,0BAA0B;IAC1C,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;IACvE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAOxD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPxB,QAAQ,CAAC,YAAY,OAA8B;IACnD,QAAQ,CAAC,UAAU,SAA4B;IAC/C,QAAQ,CAAC,OAAO,+BAAuC;IACvD,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAKP;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAKtE;;;OAGG;WACU,IAAI,CAChB,IAAI,EAAE,0BAA0B,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IAyBzB,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speaker-embedding encoder — shared constants, error class, and the
|
|
3
|
+
* embedding-distance helper.
|
|
4
|
+
*
|
|
5
|
+
* The speaker encoder runs EXCLUSIVELY through the fused `libelizainference`
|
|
6
|
+
* `eliza_inference_speaker_*` ABI (`FusedSpeakerEncoder` in `encoder-fused.ts`).
|
|
7
|
+
* The standalone `libvoice_classifier` binding that previously lived here has
|
|
8
|
+
* been removed — there is one on-device voice runtime.
|
|
9
|
+
*
|
|
10
|
+
* This module retains the pieces the fused path shares:
|
|
11
|
+
* - the canonical dims (`SPEAKER_GGML_*`), pinned at 256 to match the C-side
|
|
12
|
+
* `VOICE_SPEAKER_EMBEDDING_DIM` and the WeSpeaker ResNet34-LM head,
|
|
13
|
+
* - the structured `SpeakerEncoderGgmlUnavailableError` the fused encoder
|
|
14
|
+
* throws (no synthetic embedding fallback),
|
|
15
|
+
* - the pure `voiceSpeakerDistance` cosine-distance helper.
|
|
16
|
+
*/
|
|
17
|
+
/** Output embedding dim. Matches `VOICE_SPEAKER_EMBEDDING_DIM`. */
|
|
18
|
+
export declare const SPEAKER_GGML_EMBEDDING_DIM = 256;
|
|
19
|
+
/** Required input sample rate. */
|
|
20
|
+
export declare const SPEAKER_GGML_SAMPLE_RATE = 16000;
|
|
21
|
+
/** Minimum useful audio window (~1.0 s). */
|
|
22
|
+
export declare const SPEAKER_GGML_MIN_SAMPLES = 16000;
|
|
23
|
+
export declare class SpeakerEncoderGgmlUnavailableError extends Error {
|
|
24
|
+
readonly code: "native-missing" | "library-missing" | "model-missing" | "model-load-failed" | "model-shape-mismatch" | "forward-not-implemented" | "invalid-input";
|
|
25
|
+
constructor(code: SpeakerEncoderGgmlUnavailableError["code"], message: string);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Cosine distance between two 256-dim speaker embeddings. Defined as
|
|
29
|
+
* `1 - cos_similarity(a, b)`, range [0, 2]. Mirrors the C-side
|
|
30
|
+
* `voice_speaker_distance` helper exactly.
|
|
31
|
+
*/
|
|
32
|
+
export declare function voiceSpeakerDistance(a: Float32Array, b: Float32Array): number;
|
|
33
|
+
//# sourceMappingURL=encoder-ggml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder-ggml.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/encoder-ggml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,kCAAkC;AAClC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,qBAAa,kCAAmC,SAAQ,KAAK;IAC5D,QAAQ,CAAC,IAAI,EACV,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,sBAAsB,GACtB,yBAAyB,GACzB,eAAe,CAAC;gBAElB,IAAI,EAAE,kCAAkC,CAAC,MAAM,CAAC,EAChD,OAAO,EAAE,MAAM;CAMhB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CA4B7E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speaker-embedding encoder — shared contract, model-id constants, and the
|
|
3
|
+
* `averageEmbeddings` centroid helper.
|
|
4
|
+
*
|
|
5
|
+
* The speaker encoder runs EXCLUSIVELY through the fused `libelizainference`
|
|
6
|
+
* `eliza_inference_speaker_*` ABI (`FusedSpeakerEncoder` in `encoder-fused.ts`).
|
|
7
|
+
* The standalone `WespeakerEncoder` (`libvoice_classifier`) binding has been
|
|
8
|
+
* removed — there is one on-device voice runtime.
|
|
9
|
+
*
|
|
10
|
+
* This module retains the cross-cutting pieces every encoder caller shares:
|
|
11
|
+
* - the `SpeakerEncoder` interface the fused encoder implements,
|
|
12
|
+
* - the stored model-id strings (kept stable so existing voice profiles in
|
|
13
|
+
* the database stay valid),
|
|
14
|
+
* - the canonical dims (re-exported from `encoder-ggml`),
|
|
15
|
+
* - the `SpeakerEncoderUnavailableError` the enrollment routes raise,
|
|
16
|
+
* - the pure `averageEmbeddings` centroid helper.
|
|
17
|
+
*/
|
|
18
|
+
export declare const WESPEAKER_RESNET34_LM_INT8_MODEL_ID: "wespeaker-resnet34-lm-int8";
|
|
19
|
+
export declare const WESPEAKER_RESNET34_LM_FP32_MODEL_ID: "wespeaker-resnet34-lm-fp32";
|
|
20
|
+
export type WespeakerModelId = typeof WESPEAKER_RESNET34_LM_INT8_MODEL_ID | typeof WESPEAKER_RESNET34_LM_FP32_MODEL_ID;
|
|
21
|
+
export declare const WESPEAKER_EMBEDDING_DIM = 256;
|
|
22
|
+
export declare const WESPEAKER_SAMPLE_RATE = 16000;
|
|
23
|
+
export declare const WESPEAKER_MIN_SAMPLES = 16000;
|
|
24
|
+
export declare class SpeakerEncoderUnavailableError extends Error {
|
|
25
|
+
readonly code: "native-missing" | "library-missing" | "model-missing" | "model-load-failed" | "model-shape-mismatch" | "forward-not-implemented" | "invalid-input";
|
|
26
|
+
constructor(code: SpeakerEncoderUnavailableError["code"], message: string);
|
|
27
|
+
}
|
|
28
|
+
/** The minimal contract every speaker encoder honors. */
|
|
29
|
+
export interface SpeakerEncoder {
|
|
30
|
+
readonly embeddingDim: number;
|
|
31
|
+
readonly sampleRate: number;
|
|
32
|
+
readonly modelId?: string;
|
|
33
|
+
encode(pcm: Float32Array): Promise<Float32Array>;
|
|
34
|
+
dispose(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export declare function averageEmbeddings(embeddings: readonly Float32Array[]): Float32Array;
|
|
37
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../../src/services/voice/speaker/encoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAeH,eAAO,MAAM,mCAAmC,EAC/C,4BAAqC,CAAC;AACvC,eAAO,MAAM,mCAAmC,EAC/C,4BAAqC,CAAC;AACvC,MAAM,MAAM,gBAAgB,GACzB,OAAO,mCAAmC,GAC1C,OAAO,mCAAmC,CAAC;AAE9C,eAAO,MAAM,uBAAuB,MAA6B,CAAC;AAClE,eAAO,MAAM,qBAAqB,QAA2B,CAAC;AAC9D,eAAO,MAAM,qBAAqB,QAA2B,CAAC;AAM9D,qBAAa,8BAA+B,SAAQ,KAAK;IACxD,QAAQ,CAAC,IAAI,EACV,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,mBAAmB,GACnB,sBAAsB,GACtB,yBAAyB,GACzB,eAAe,CAAC;gBACP,IAAI,EAAE,8BAA8B,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKzE;AAMD,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAMD,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,SAAS,YAAY,EAAE,GACjC,YAAY,CAsBd"}
|