@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +82 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.d.ts +29 -0
- package/src/actions/transcription-control.d.ts.map +1 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1082 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +205 -0
- package/src/routes/local-inference-asr-route.ts +163 -0
- package/src/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/src/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +808 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/transcript-audio-store.d.ts +15 -0
- package/src/routes/transcript-audio-store.d.ts.map +1 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.d.ts +36 -0
- package/src/routes/transcripts-routes.d.ts.map +1 -0
- package/src/routes/transcripts-routes.test.ts +144 -0
- package/src/routes/transcripts-routes.ts +159 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +62 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1448 -0
- package/src/runtime/index.d.ts +15 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +33 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bionic-host-loader.d.ts +46 -0
- package/src/services/bionic-host-loader.d.ts.map +1 -0
- package/src/services/bionic-host-loader.test.ts +133 -0
- package/src/services/bionic-host-loader.ts +180 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +238 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +95 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +339 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +747 -0
- package/src/services/downloader.ts +925 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +540 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1909 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.d.ts +56 -0
- package/src/services/gpu-detect.d.ts.map +1 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +231 -0
- package/src/services/hardware.ts +410 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +29 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +211 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +689 -0
- package/src/services/manifest/schema.d.ts +713 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +653 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +567 -0
- package/src/services/memory-arbiter.d.ts +318 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +925 -0
- package/src/services/memory-monitor.d.ts +122 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +297 -0
- package/src/services/memory-pressure.d.ts +130 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +407 -0
- package/src/services/routing-policy.d.ts +69 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.test.ts +164 -0
- package/src/services/routing-policy.ts +297 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.d.ts +33 -0
- package/src/services/system-memory.d.ts.map +1 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/asr-timed.real.test.ts +141 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +131 -0
- package/src/services/voice/embedding.ts +243 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +759 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2302 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +674 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +728 -0
- package/src/services/voice/ffi-bindings.ts +3225 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.d.ts +37 -0
- package/src/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.d.ts +41 -0
- package/src/services/voice/transcript-service.d.ts.map +1 -0
- package/src/services/voice/transcript-service.test.ts +137 -0
- package/src/services/voice/transcript-service.ts +141 -0
- package/src/services/voice/transcript-store.d.ts +53 -0
- package/src/services/voice/transcript-store.d.ts.map +1 -0
- package/src/services/voice/transcript-store.test.ts +153 -0
- package/src/services/voice/transcript-store.ts +132 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +418 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete implementations of the `VoicePipeline` seams (`pipeline.ts`).
|
|
3
|
+
*
|
|
4
|
+
* `pipeline.ts` defines two interfaces — `DraftProposer`, `TargetVerifier`
|
|
5
|
+
* — plus the ASR contract (it consumes the live `StreamingTranscriber`
|
|
6
|
+
* from `voice/types.ts` directly) and an overlapped scheduler that drives
|
|
7
|
+
* the fused mic→speech graph from `packages/inference/AGENTS.md` §4. This
|
|
8
|
+
* module fills those interfaces against the live runtime:
|
|
9
|
+
*
|
|
10
|
+
* - `MissingAsrTranscriber` — a `StreamingTranscriber` that hard-fails
|
|
11
|
+
* when no ASR backend is available (AGENTS.md §3 — no silent cloud
|
|
12
|
+
* fallback). The bridge's `resolveTranscriber()` returns this instead
|
|
13
|
+
* of throwing eagerly so the failure surfaces at turn time.
|
|
14
|
+
* - `MtpDraftProposer` — proposes a small MTP draft window from the
|
|
15
|
+
* running in-process llama.cpp runtime; honours `cancel.cancelled`
|
|
16
|
+
* between kernel ticks.
|
|
17
|
+
* - `MtpTargetVerifier` — verifies against the text model's KV cache
|
|
18
|
+
* and consumes exact verifier accept/reject events when the runtime
|
|
19
|
+
* emits them.
|
|
20
|
+
*
|
|
21
|
+
* Hard-fail discipline (AGENTS.md §3 + §9): a missing fused ASR region in
|
|
22
|
+
* voice mode is a thrown `VoiceStartupError`, never a silent cloud
|
|
23
|
+
* fallback, never log-and-continue.
|
|
24
|
+
*
|
|
25
|
+
* Why a separate file from `pipeline.ts`: `pipeline.ts` stays
|
|
26
|
+
* dependency-light (it is the streaming contract, importable by text-only
|
|
27
|
+
* callers). The runtime wiring lives here so
|
|
28
|
+
* the contract module does not drag it in.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import type { GenerateArgs } from "../backend";
|
|
32
|
+
import { VoiceStartupError } from "./errors";
|
|
33
|
+
import {
|
|
34
|
+
type DraftProposer,
|
|
35
|
+
splitTranscriptToTokens,
|
|
36
|
+
type TargetVerifier,
|
|
37
|
+
} from "./pipeline";
|
|
38
|
+
import type {
|
|
39
|
+
PcmFrame,
|
|
40
|
+
StreamingTranscriber,
|
|
41
|
+
TextToken,
|
|
42
|
+
TranscriptUpdate,
|
|
43
|
+
VerifierStreamEvent,
|
|
44
|
+
} from "./types";
|
|
45
|
+
|
|
46
|
+
/* ------------------------------------------------------------------ */
|
|
47
|
+
/* ASR — missing-backend deferral */
|
|
48
|
+
/* ------------------------------------------------------------------ */
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A `StreamingTranscriber` that hard-fails: used when no ASR backend is
|
|
52
|
+
* available (no fused streaming decoder, no fused batch decoder, no
|
|
53
|
+
* bundled ASR region) but a voice turn was requested. AGENTS.md §3 —
|
|
54
|
+
* missing required voice backend in voice mode is a thrown
|
|
55
|
+
* `VoiceStartupError`, never a silent fallback. The bridge returns this
|
|
56
|
+
* from `resolveTranscriber()` so the failure surfaces when the pipeline
|
|
57
|
+
* actually feeds audio rather than at bridge construction.
|
|
58
|
+
*/
|
|
59
|
+
export class MissingAsrTranscriber implements StreamingTranscriber {
|
|
60
|
+
constructor(private readonly reason: string) {}
|
|
61
|
+
feed(_frame: PcmFrame): void {
|
|
62
|
+
throw new VoiceStartupError("missing-fused-build", this.reason);
|
|
63
|
+
}
|
|
64
|
+
async flush(): Promise<TranscriptUpdate> {
|
|
65
|
+
throw new VoiceStartupError("missing-fused-build", this.reason);
|
|
66
|
+
}
|
|
67
|
+
on(): () => void {
|
|
68
|
+
return () => {};
|
|
69
|
+
}
|
|
70
|
+
dispose(): void {}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* ------------------------------------------------------------------ */
|
|
74
|
+
/* MTP draft / verify */
|
|
75
|
+
/* ------------------------------------------------------------------ */
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Minimal surface of the running MTP text runtime the draft/verify
|
|
79
|
+
* adapters need. Kept structural so tests can pass a fake without
|
|
80
|
+
* standing up a real runtime.
|
|
81
|
+
*/
|
|
82
|
+
export interface MtpTextRunner {
|
|
83
|
+
/** True when MTP speculative decoding is enabled. */
|
|
84
|
+
hasDrafter(): boolean;
|
|
85
|
+
generateWithVerifierEvents(
|
|
86
|
+
args: GenerateArgs & {
|
|
87
|
+
onVerifierEvent: (event: VerifierStreamEvent) => void | Promise<void>;
|
|
88
|
+
},
|
|
89
|
+
): Promise<{ text: string }>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Adapt a local-inference backend onto `MtpTextRunner`. */
|
|
93
|
+
export function mtpTextRunner(runner: {
|
|
94
|
+
mtpEnabled(): boolean;
|
|
95
|
+
generateWithUsage(
|
|
96
|
+
args: GenerateArgs & {
|
|
97
|
+
onVerifierEvent: (event: VerifierStreamEvent) => void | Promise<void>;
|
|
98
|
+
},
|
|
99
|
+
): Promise<{ text: string }>;
|
|
100
|
+
}): MtpTextRunner {
|
|
101
|
+
return {
|
|
102
|
+
hasDrafter() {
|
|
103
|
+
return runner.mtpEnabled();
|
|
104
|
+
},
|
|
105
|
+
async generateWithVerifierEvents(args) {
|
|
106
|
+
const { text } = await runner.generateWithUsage(args);
|
|
107
|
+
return { text };
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Build the prompt string the drafter/verifier run against from the
|
|
114
|
+
* accepted prefix. The pipeline holds tokens, not a chat transcript; for
|
|
115
|
+
* the streaming verify loop we feed back the concatenated token text as a
|
|
116
|
+
* raw continuation prompt (`cache_prompt` on the server reuses the prefix
|
|
117
|
+
* KV between rounds so this is cheap to re-send).
|
|
118
|
+
*/
|
|
119
|
+
function prefixToPrompt(prefix: ReadonlyArray<TextToken>): string {
|
|
120
|
+
return prefix.map((t) => t.text).join("");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* `DraftProposer` over native MTP. The runtime draft window already bounds
|
|
125
|
+
* proposals; this adapter additionally
|
|
126
|
+
* clamps to the pipeline's `maxDraft` and stops early on
|
|
127
|
+
* `cancel.cancelled`. GPU dispatch is N=1 (the fork's voice profile
|
|
128
|
+
* disables command-buffer batching — ledger §2 "Keep voice dispatch
|
|
129
|
+
* unbatched") so a barge-in lands at the next kernel boundary.
|
|
130
|
+
*
|
|
131
|
+
* Until the fork exposes a "draft only, return the proposed tokens"
|
|
132
|
+
* endpoint, the proposer issues a short low-temperature completion
|
|
133
|
+
* (`maxTokens = maxDraft`) and treats the produced tokens as the draft
|
|
134
|
+
* window. The verifier then re-checks them against the target's KV — the
|
|
135
|
+
* standard speculative-decoding contract, just with the draft sourced
|
|
136
|
+
* from the same server.
|
|
137
|
+
*/
|
|
138
|
+
export class MtpDraftProposer implements DraftProposer {
|
|
139
|
+
private readonly runner: MtpTextRunner;
|
|
140
|
+
|
|
141
|
+
constructor(runner: MtpTextRunner) {
|
|
142
|
+
this.runner = runner;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async propose(args: {
|
|
146
|
+
prefix: ReadonlyArray<TextToken>;
|
|
147
|
+
maxDraft: number;
|
|
148
|
+
cancel: { cancelled: boolean };
|
|
149
|
+
}): Promise<TextToken[]> {
|
|
150
|
+
if (args.cancel.cancelled) return [];
|
|
151
|
+
if (!this.runner.hasDrafter()) {
|
|
152
|
+
// No drafter wired ⇒ no speculation this round. The verifier still
|
|
153
|
+
// produces one token per round (plain AR step), so generation
|
|
154
|
+
// continues; MTP being mandatory is enforced at model load time.
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
const accepted: TextToken[] = [];
|
|
158
|
+
let nextIndex =
|
|
159
|
+
args.prefix.length > 0
|
|
160
|
+
? args.prefix[args.prefix.length - 1].index + 1
|
|
161
|
+
: 0;
|
|
162
|
+
await this.runner.generateWithVerifierEvents({
|
|
163
|
+
prompt: prefixToPrompt(args.prefix),
|
|
164
|
+
maxTokens: Math.max(1, Math.floor(args.maxDraft)),
|
|
165
|
+
temperature: 0,
|
|
166
|
+
signal: cancelToSignal(args.cancel),
|
|
167
|
+
onVerifierEvent: (event) => {
|
|
168
|
+
if (event.kind !== "accept") return;
|
|
169
|
+
for (const tok of event.tokens) {
|
|
170
|
+
if (accepted.length >= args.maxDraft) break;
|
|
171
|
+
accepted.push({ index: nextIndex++, text: tok.text });
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
if (args.cancel.cancelled) return [];
|
|
176
|
+
return accepted.slice(0, Math.max(1, Math.floor(args.maxDraft)));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* `TargetVerifier` over the text model via MTP. Runs one
|
|
182
|
+
* autoregressive verify step against the runtime KV cache: it sends the
|
|
183
|
+
* accepted prefix and reads back the model's own continuation. The
|
|
184
|
+
* leading tokens that match the supplied `draft` are "accepted from
|
|
185
|
+
* draft"; the first mismatch is the correction; the model's `done` /
|
|
186
|
+
* stop is propagated.
|
|
187
|
+
*
|
|
188
|
+
* When the native fork emits exact verifier reject ranges, the
|
|
189
|
+
* `onVerifierEvent` callback already carries `kind: "reject"` events with
|
|
190
|
+
* the rejected token positions — this adapter records both and trusts the
|
|
191
|
+
* server's accept/reject split rather than re-deriving it.
|
|
192
|
+
*/
|
|
193
|
+
export class MtpTargetVerifier implements TargetVerifier {
|
|
194
|
+
private readonly runner: MtpTextRunner;
|
|
195
|
+
private readonly maxStep: number;
|
|
196
|
+
|
|
197
|
+
constructor(runner: MtpTextRunner, opts: { maxStep?: number } = {}) {
|
|
198
|
+
this.runner = runner;
|
|
199
|
+
this.maxStep = Math.max(1, Math.floor(opts.maxStep ?? 16));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async verify(args: {
|
|
203
|
+
prefix: ReadonlyArray<TextToken>;
|
|
204
|
+
draft: ReadonlyArray<TextToken>;
|
|
205
|
+
cancel: { cancelled: boolean };
|
|
206
|
+
}): Promise<{ accepted: TextToken[]; done: boolean }> {
|
|
207
|
+
if (args.cancel.cancelled) return { accepted: [], done: false };
|
|
208
|
+
// Step budget: enough to confirm the whole draft window plus one
|
|
209
|
+
// correction token (and a little headroom for the model's own bonus
|
|
210
|
+
// tokens past a fully-accepted draft).
|
|
211
|
+
const stepTokens = Math.min(
|
|
212
|
+
this.maxStep,
|
|
213
|
+
Math.max(1, args.draft.length + 1),
|
|
214
|
+
);
|
|
215
|
+
let nextIndex =
|
|
216
|
+
args.prefix.length > 0
|
|
217
|
+
? args.prefix[args.prefix.length - 1].index + 1
|
|
218
|
+
: 0;
|
|
219
|
+
const produced: TextToken[] = [];
|
|
220
|
+
let done = false;
|
|
221
|
+
const { text } = await this.runner.generateWithVerifierEvents({
|
|
222
|
+
prompt: prefixToPrompt(args.prefix),
|
|
223
|
+
maxTokens: stepTokens,
|
|
224
|
+
temperature: 0,
|
|
225
|
+
signal: cancelToSignal(args.cancel),
|
|
226
|
+
onVerifierEvent: (event) => {
|
|
227
|
+
if (event.kind === "accept") {
|
|
228
|
+
for (const tok of event.tokens) {
|
|
229
|
+
produced.push({ index: nextIndex++, text: tok.text });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// reject events: the server already retracted those positions
|
|
233
|
+
// from its own stream, so we just don't append them. Nothing else
|
|
234
|
+
// to do here — the chunker rollback is driven by the pipeline
|
|
235
|
+
// comparing `accepted` against `draft`.
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
if (args.cancel.cancelled) return { accepted: [], done: false };
|
|
239
|
+
if (produced.length === 0 && text.length > 0) {
|
|
240
|
+
// Non-streaming server (no per-delta events): fall back to splitting
|
|
241
|
+
// the returned text into tokens.
|
|
242
|
+
produced.push(...splitTranscriptToTokens(text, nextIndex));
|
|
243
|
+
}
|
|
244
|
+
// The model reached its natural stop when it produced fewer tokens
|
|
245
|
+
// than the step budget (it hit an EOS / stop sequence before the cap).
|
|
246
|
+
done = produced.length < stepTokens;
|
|
247
|
+
return { accepted: produced, done };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* ------------------------------------------------------------------ */
|
|
252
|
+
/* helpers */
|
|
253
|
+
/* ------------------------------------------------------------------ */
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Bridge a `{cancelled: boolean}` flag (the pipeline's cancellation
|
|
257
|
+
* primitive — checked between kernel ticks) onto an `AbortSignal` so the
|
|
258
|
+
* local generation aborts when a barge-in fires.
|
|
259
|
+
*
|
|
260
|
+
* L6 — event-driven cancellation. The cancel token may expose an
|
|
261
|
+
* `onCancel(listener)` hook (set by the scheduler / pipeline when it
|
|
262
|
+
* wires the token up); when present, we fire `controller.abort()`
|
|
263
|
+
* synchronously from that hook and skip polling entirely. When the
|
|
264
|
+
* token is the plain `{cancelled: boolean}` POJO with no hook, we fall
|
|
265
|
+
* back to a coarse poll so a barge-in still lands in bounded time —
|
|
266
|
+
* but the hook-driven path is what voice barge-ins use in production.
|
|
267
|
+
*/
|
|
268
|
+
export interface CancelTokenWithSignal {
|
|
269
|
+
cancelled: boolean;
|
|
270
|
+
/**
|
|
271
|
+
* Optional hook the token's owner fires synchronously when `cancelled`
|
|
272
|
+
* flips from false to true. The listener returns nothing; calling it
|
|
273
|
+
* after `cancelled` has already been set is a harmless no-op.
|
|
274
|
+
*/
|
|
275
|
+
onCancel?: (listener: () => void) => () => void;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function cancelToSignal(cancel: CancelTokenWithSignal): AbortSignal {
|
|
279
|
+
const controller = new AbortController();
|
|
280
|
+
if (cancel.cancelled) {
|
|
281
|
+
controller.abort();
|
|
282
|
+
return controller.signal;
|
|
283
|
+
}
|
|
284
|
+
if (typeof cancel.onCancel === "function") {
|
|
285
|
+
// Event-driven path — no polling. The owner fires the listener
|
|
286
|
+
// synchronously on barge-in; we abort the HTTP request at that
|
|
287
|
+
// instant. `once`: AbortController.abort() is idempotent but we
|
|
288
|
+
// still want to drop the listener to free the closure.
|
|
289
|
+
const unsubscribe = cancel.onCancel(() => {
|
|
290
|
+
controller.abort();
|
|
291
|
+
});
|
|
292
|
+
controller.signal.addEventListener("abort", () => unsubscribe(), {
|
|
293
|
+
once: true,
|
|
294
|
+
});
|
|
295
|
+
return controller.signal;
|
|
296
|
+
}
|
|
297
|
+
// Fallback: polling. Kept for tokens that don't expose the hook (e.g.
|
|
298
|
+
// tests that pass a plain `{cancelled}` POJO). The interval is short
|
|
299
|
+
// enough that an aborted-but-unhooked token still lands the abort
|
|
300
|
+
// before a typical kernel tick completes.
|
|
301
|
+
const timer = setInterval(() => {
|
|
302
|
+
if (cancel.cancelled) {
|
|
303
|
+
controller.abort();
|
|
304
|
+
clearInterval(timer);
|
|
305
|
+
}
|
|
306
|
+
}, 10);
|
|
307
|
+
// Don't keep the event loop alive purely for this poll.
|
|
308
|
+
if (typeof timer === "object" && timer && "unref" in timer) {
|
|
309
|
+
(timer as { unref(): void }).unref();
|
|
310
|
+
}
|
|
311
|
+
controller.signal.addEventListener("abort", () => clearInterval(timer), {
|
|
312
|
+
once: true,
|
|
313
|
+
});
|
|
314
|
+
return controller.signal;
|
|
315
|
+
}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipelined parallel-generation scheduler — the fused mic→speech graph
|
|
3
|
+
* from `packages/inference/AGENTS.md` §4:
|
|
4
|
+
*
|
|
5
|
+
* mic / file → ASR → text tokens
|
|
6
|
+
* ↓
|
|
7
|
+
* scheduler ──→ MTP drafter (proposes N tokens)
|
|
8
|
+
* ∥ (overlap, not sequential)
|
|
9
|
+
* target verifier (text model)
|
|
10
|
+
* ↓
|
|
11
|
+
* accepted tokens → phrase chunker
|
|
12
|
+
* ↓ ↘
|
|
13
|
+
* speaker preset (cached) rollback queue
|
|
14
|
+
* ↓ ↙
|
|
15
|
+
* OmniVoice TTS ←── on-reject: cancel chunk
|
|
16
|
+
* ↓
|
|
17
|
+
* PCM ring buffer → audio out
|
|
18
|
+
*
|
|
19
|
+
* The headline contract: **the moment ASR emits its last token, the
|
|
20
|
+
* MTP drafter starts drafting AND the target starts verifying — they
|
|
21
|
+
* overlap.** Drafter speculation N tokens ahead happens concurrently
|
|
22
|
+
* with the target verifying the previous window; accepted tokens are
|
|
23
|
+
* handed to the phrase chunker within the same scheduler tick.
|
|
24
|
+
*
|
|
25
|
+
* GPU command buffers stay N=1 (no command-buffer batching for voice)
|
|
26
|
+
* so a barge-in cancel lands at the next kernel boundary, not after a
|
|
27
|
+
* batch flush.
|
|
28
|
+
*
|
|
29
|
+
* Why this lives next to `VoiceScheduler` and not inside it: the
|
|
30
|
+
* scheduler owns the *audio* side (chunker → TTS → ring buffer →
|
|
31
|
+
* rollback → barge-in). This module owns the *text-generation* side
|
|
32
|
+
* (audio source → ASR → drafter∥verifier loop) and feeds accepted /
|
|
33
|
+
* rejected ranges into the scheduler. Keeping them separate keeps the
|
|
34
|
+
* scheduler usable from text-only callers (which reach the same nodes
|
|
35
|
+
* via the same scheduler — AGENTS.md §4) without an ASR/drafter
|
|
36
|
+
* dependency.
|
|
37
|
+
*/
|
|
38
|
+
import { PartialStabilizer } from "./partial-stabilizer";
|
|
39
|
+
import type { VoiceScheduler } from "./scheduler";
|
|
40
|
+
import type { StreamingTranscriber, TextToken, TranscriptionAudio, VerifierStreamEvent } from "./types";
|
|
41
|
+
/**
|
|
42
|
+
* Split a transcript string into contiguous text tokens. The fused ASR
|
|
43
|
+
* tokenizer is shared with the text backbone (AGENTS.md §1 — zero
|
|
44
|
+
* re-tokenization), so the pipeline only needs *contiguous* token
|
|
45
|
+
* indices, not the model's exact subword boundaries; whitespace-aware
|
|
46
|
+
* word chunking is the closest stable approximation when only surface
|
|
47
|
+
* text is available. Empty input yields no tokens.
|
|
48
|
+
*
|
|
49
|
+
* `tokenIds`, when supplied, are the text-model vocabulary ids the fused
|
|
50
|
+
* ASR decoder emitted for `transcript`. When the lengths line up they are
|
|
51
|
+
* attached as `TextToken.id` so a downstream in-process handoff can skip
|
|
52
|
+
* re-tokenization; otherwise (mismatch — the surface split disagrees with
|
|
53
|
+
* the decoder's subword boundaries) the ids are dropped and only the
|
|
54
|
+
* word-chunk approximation is returned.
|
|
55
|
+
*/
|
|
56
|
+
export declare function splitTranscriptToTokens(transcript: string, startIndex?: number, tokenIds?: ReadonlyArray<number>): TextToken[];
|
|
57
|
+
/**
|
|
58
|
+
* MTP drafter. `propose` returns up to `maxDraft` candidate
|
|
59
|
+
* continuation tokens given the accepted prefix. N=1 command buffers —
|
|
60
|
+
* the implementation MUST keep its GPU dispatch short enough to cancel
|
|
61
|
+
* at the next kernel boundary (no command-buffer batching for voice).
|
|
62
|
+
* Honours `cancel.cancelled` between kernel ticks.
|
|
63
|
+
*/
|
|
64
|
+
export interface DraftProposer {
|
|
65
|
+
propose(args: {
|
|
66
|
+
prefix: ReadonlyArray<TextToken>;
|
|
67
|
+
maxDraft: number;
|
|
68
|
+
cancel: {
|
|
69
|
+
cancelled: boolean;
|
|
70
|
+
};
|
|
71
|
+
}): Promise<TextToken[]>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Target verifier (the text model). Given the accepted prefix plus a
|
|
75
|
+
* draft window, returns which leading draft tokens are accepted and the
|
|
76
|
+
* one corrected token at the first divergence (if any). When the draft
|
|
77
|
+
* is empty, the verifier still produces one token (plain autoregressive
|
|
78
|
+
* step). Honours `cancel.cancelled` between kernel ticks.
|
|
79
|
+
*/
|
|
80
|
+
export interface TargetVerifier {
|
|
81
|
+
verify(args: {
|
|
82
|
+
prefix: ReadonlyArray<TextToken>;
|
|
83
|
+
draft: ReadonlyArray<TextToken>;
|
|
84
|
+
cancel: {
|
|
85
|
+
cancelled: boolean;
|
|
86
|
+
};
|
|
87
|
+
}): Promise<{
|
|
88
|
+
accepted: TextToken[];
|
|
89
|
+
/** Set when the verifier reached the natural end of generation. */
|
|
90
|
+
done: boolean;
|
|
91
|
+
}>;
|
|
92
|
+
}
|
|
93
|
+
export interface VoicePipelineDeps {
|
|
94
|
+
scheduler: VoiceScheduler;
|
|
95
|
+
/**
|
|
96
|
+
* The live frame-fed ASR adapter (`voice/transcriber.ts` — fused
|
|
97
|
+
* `eliza_inference_asr_stream_*`, the fused batch adapter, or
|
|
98
|
+
* `MissingAsrTranscriber` deferring a hard failure). The pipeline drives
|
|
99
|
+
* it as a batch: it feeds the whole (VAD-gated) utterance buffer as one
|
|
100
|
+
* frame, `flush()`es to finalize, then splits the final transcript into
|
|
101
|
+
* contiguous text tokens (`splitTranscriptToTokens`). One `StreamingTranscriber`
|
|
102
|
+
* contract — there is no separate batch ASR interface.
|
|
103
|
+
*/
|
|
104
|
+
transcriber: StreamingTranscriber;
|
|
105
|
+
drafter: DraftProposer;
|
|
106
|
+
verifier: TargetVerifier;
|
|
107
|
+
}
|
|
108
|
+
export interface VoicePipelineConfig {
|
|
109
|
+
/**
|
|
110
|
+
* Max tokens MTP drafts per round. Per-tier; small (≤8) so a
|
|
111
|
+
* rollback is cheap. The drafter and verifier overlap one round: while
|
|
112
|
+
* the verifier checks round k, the drafter speculates round k+1.
|
|
113
|
+
*/
|
|
114
|
+
maxDraftTokens: number;
|
|
115
|
+
/**
|
|
116
|
+
* Hard cap on generated tokens per turn (safety stop). The verifier's
|
|
117
|
+
* `done` flag is the normal stop; this bounds a runaway model.
|
|
118
|
+
*/
|
|
119
|
+
maxGeneratedTokens?: number;
|
|
120
|
+
/**
|
|
121
|
+
* A2 — when true, run streaming-ASR partials through a LocalAgreement-n
|
|
122
|
+
* stabilizer (`PartialStabilizer`) before splitting them into tokens
|
|
123
|
+
* and feeding the drafter. Off by default until the streaming-ASR
|
|
124
|
+
* fast path lands and validates the latency/quality trade. The
|
|
125
|
+
* `StreamingTranscriber.flush()`-driven batch path is unaffected (the
|
|
126
|
+
* stabilizer is a no-op on a single final partial).
|
|
127
|
+
*/
|
|
128
|
+
usePartialStabilizer?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* A2 — agreement count `n` for `PartialStabilizer` when enabled.
|
|
131
|
+
* Ignored when `usePartialStabilizer` is false. Default 2.
|
|
132
|
+
*/
|
|
133
|
+
partialStabilizerAgreementCount?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface VoicePipelineEvents {
|
|
136
|
+
/** Fired once, the instant ASR emits its final token (= drafter+verifier kick-off). */
|
|
137
|
+
onAsrComplete?(tokens: ReadonlyArray<TextToken>): void;
|
|
138
|
+
/**
|
|
139
|
+
* Fired exactly once per turn, right after the ASR phase finishes and
|
|
140
|
+
* before the first drafter/verifier round. ASR → text → TTS are
|
|
141
|
+
* sequential within a turn (AGENTS.md §4), so the idle ASR-model pages
|
|
142
|
+
* can be dropped now — wire this to `MmapRegionHandle.evictPages()`
|
|
143
|
+
* (`madvise(MADV_DONTNEED)` on POSIX) for the ASR region to claw back
|
|
144
|
+
* ~1 GB of peak RSS while TTS decodes. The pages page back in
|
|
145
|
+
* transparently on the next turn's `feed()`; a host that prefers to
|
|
146
|
+
* keep ASR resident simply doesn't supply this hook. May be async; the
|
|
147
|
+
* pipeline does not block on it (a slow trim must not delay first audio).
|
|
148
|
+
*/
|
|
149
|
+
onAsrPhaseComplete?(): void | Promise<void>;
|
|
150
|
+
/** Fired with each verifier accept/reject event before it hits the scheduler. */
|
|
151
|
+
onVerifierEvent?(event: VerifierStreamEvent): void;
|
|
152
|
+
/** Fired when the loop exits (verifier `done`, token cap, or barge-in cancel). */
|
|
153
|
+
onComplete?(reason: "done" | "token-cap" | "cancelled"): void;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* One pipeline per active voice turn. Construct, call `run(audio)`,
|
|
157
|
+
* await the returned promise (or call `cancel()` for barge-in). The
|
|
158
|
+
* scheduler's barge-in controller also cancels an in-flight run — wire
|
|
159
|
+
* `bridge.triggerBargeIn()` and this run's `cancel()` to the same VAD
|
|
160
|
+
* signal so both the audio side (ring buffer drain) and the text side
|
|
161
|
+
* (stop drafting/verifying) abort together.
|
|
162
|
+
*/
|
|
163
|
+
export declare class VoicePipeline {
|
|
164
|
+
private readonly scheduler;
|
|
165
|
+
private readonly transcriber;
|
|
166
|
+
private readonly drafter;
|
|
167
|
+
private readonly verifier;
|
|
168
|
+
private readonly maxDraftTokens;
|
|
169
|
+
private readonly maxGeneratedTokens;
|
|
170
|
+
private readonly events;
|
|
171
|
+
/**
|
|
172
|
+
* A2 — when `config.usePartialStabilizer === true`, this is the active
|
|
173
|
+
* `PartialStabilizer` instance. Streaming-ASR consumers feed partials
|
|
174
|
+
* through it; the batch path in `transcribeAll()` collapses on a single
|
|
175
|
+
* final partial so the stabilizer is a no-op there. Exposed via
|
|
176
|
+
* `getPartialStabilizer()` so the streaming-ASR adapter (separate agent)
|
|
177
|
+
* can plug straight in once it ships.
|
|
178
|
+
*/
|
|
179
|
+
private readonly partialStabilizer;
|
|
180
|
+
private active;
|
|
181
|
+
constructor(deps: VoicePipelineDeps, config: VoicePipelineConfig, events?: VoicePipelineEvents);
|
|
182
|
+
/** True while a turn is in flight. */
|
|
183
|
+
isRunning(): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* A2 — the active `PartialStabilizer` when the pipeline was built with
|
|
186
|
+
* `usePartialStabilizer: true`, otherwise null. The streaming-ASR
|
|
187
|
+
* adapter (separate agent) feeds partials into this instance and
|
|
188
|
+
* forwards the `stable` portion downstream. Returning null when the
|
|
189
|
+
* feature flag is off lets the adapter skip the work entirely.
|
|
190
|
+
*/
|
|
191
|
+
getPartialStabilizer(): PartialStabilizer | null;
|
|
192
|
+
/**
|
|
193
|
+
* Run one mic→speech turn. ASR streams first; the instant its last
|
|
194
|
+
* token lands, the drafter and verifier kick off concurrently and
|
|
195
|
+
* accepted tokens flow into the scheduler's chunker on the same tick.
|
|
196
|
+
* Resolves with the exit reason. Throws if a turn is already running.
|
|
197
|
+
*/
|
|
198
|
+
run(audio: TranscriptionAudio): Promise<"done" | "token-cap" | "cancelled">;
|
|
199
|
+
/**
|
|
200
|
+
* Barge-in: cancel the in-flight turn. Stops ASR, stops the
|
|
201
|
+
* drafter/verifier loop at the next kernel boundary, and triggers the
|
|
202
|
+
* scheduler's barge-in (ring buffer drain + chunker flush + in-flight
|
|
203
|
+
* TTS cancel). No-op when no turn is running.
|
|
204
|
+
*/
|
|
205
|
+
cancel(): void;
|
|
206
|
+
private execute;
|
|
207
|
+
/**
|
|
208
|
+
* Feed the whole utterance buffer to the live transcriber, finalize,
|
|
209
|
+
* and return the final transcript as contiguous text tokens. The
|
|
210
|
+
* transcriber is disposed afterwards (it is one per turn). A barge-in
|
|
211
|
+
* cancel checked before `flush()` short-circuits to an empty list.
|
|
212
|
+
*/
|
|
213
|
+
private transcribeAll;
|
|
214
|
+
private finish;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAGX,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,SAAI,EACd,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,SAAS,EAAE,CAoBb;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,IAAI,EAAE;QACb,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QACjC,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;KAC/B,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QACjC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;KAC/B,GAAG,OAAO,CAAC;QACX,QAAQ,EAAE,SAAS,EAAE,CAAC;QACtB,mEAAmE;QACnE,IAAI,EAAE,OAAO,CAAC;KACd,CAAC,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,cAAc,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IACnC,uFAAuF;IACvF,aAAa,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACvD;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,iFAAiF;IACjF,eAAe,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnD,kFAAkF;IAClF,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;CAC9D;AASD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,MAAM,CAA4B;gBAGzC,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,GAAE,mBAAwB;IA2BjC,sCAAsC;IACtC,SAAS,IAAI,OAAO;IAIpB;;;;;;OAMG;IACH,oBAAoB,IAAI,iBAAiB,GAAG,IAAI;IAIhD;;;;;OAKG;IACG,GAAG,CACR,KAAK,EAAE,kBAAkB,GACvB,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IAgB9C;;;;;OAKG;IACH,MAAM,IAAI,IAAI;YAKA,OAAO;IAwJrB;;;;;OAKG;YACW,aAAa;IAoB3B,OAAO,CAAC,MAAM;CAMd"}
|