@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.
Files changed (893) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/actions/generate-media.d.ts +59 -0
  4. package/dist/actions/generate-media.d.ts.map +1 -0
  5. package/dist/actions/identify-speaker.d.ts +23 -0
  6. package/dist/actions/identify-speaker.d.ts.map +1 -0
  7. package/dist/actions/transcription-control.d.ts +29 -0
  8. package/dist/actions/transcription-control.d.ts.map +1 -0
  9. package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
  10. package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
  11. package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
  12. package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
  13. package/dist/adapters/capacitor-llama/index.d.ts +18 -0
  14. package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
  15. package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
  16. package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
  17. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
  18. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
  19. package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
  20. package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
  21. package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
  22. package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
  23. package/dist/adapters/capacitor-llama/types.d.ts +338 -0
  24. package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
  25. package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
  26. package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
  27. package/dist/backends/apple-foundation.d.ts +56 -0
  28. package/dist/backends/apple-foundation.d.ts.map +1 -0
  29. package/dist/index.d.ts +8 -37
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +38979 -430
  32. package/dist/index.js.map +217 -0
  33. package/dist/local-inference-routes.d.ts +47 -0
  34. package/dist/local-inference-routes.d.ts.map +1 -0
  35. package/dist/provider.d.ts +21 -0
  36. package/dist/provider.d.ts.map +1 -0
  37. package/dist/routes/compat-helpers.d.ts +18 -0
  38. package/dist/routes/compat-helpers.d.ts.map +1 -0
  39. package/dist/routes/family-member-route.d.ts +62 -0
  40. package/dist/routes/family-member-route.d.ts.map +1 -0
  41. package/dist/routes/index.d.ts +20 -0
  42. package/dist/routes/index.d.ts.map +1 -0
  43. package/dist/routes/index.js +42040 -0
  44. package/dist/routes/index.js.map +236 -0
  45. package/dist/routes/live-diarization-route.d.ts +33 -0
  46. package/dist/routes/live-diarization-route.d.ts.map +1 -0
  47. package/dist/routes/local-inference-asr-route.d.ts +4 -0
  48. package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
  49. package/dist/routes/local-inference-asr-transcribe.d.ts +20 -0
  50. package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
  51. package/dist/routes/local-inference-compat-routes.d.ts +16 -0
  52. package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
  53. package/dist/routes/local-inference-tts-route.d.ts +7 -0
  54. package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/dist/routes/native-pcm-turn-route.d.ts +3 -0
  56. package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
  57. package/dist/routes/transcript-audio-store.d.ts +15 -0
  58. package/dist/routes/transcript-audio-store.d.ts.map +1 -0
  59. package/dist/routes/transcripts-routes.d.ts +44 -0
  60. package/dist/routes/transcripts-routes.d.ts.map +1 -0
  61. package/dist/routes/voice-first-run-routes.d.ts +62 -0
  62. package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
  63. package/dist/routes/voice-models-routes.d.ts +62 -0
  64. package/dist/routes/voice-models-routes.d.ts.map +1 -0
  65. package/dist/routes/voice-profile-plugin-routes.d.ts +19 -0
  66. package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  67. package/dist/routes/voice-profiles-management-routes.d.ts +52 -0
  68. package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
  69. package/dist/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/dist/runtime/embedding-manager-support.d.ts +77 -0
  72. package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
  73. package/dist/runtime/embedding-presets.d.ts +16 -0
  74. package/dist/runtime/embedding-presets.d.ts.map +1 -0
  75. package/dist/runtime/embedding-warmup-policy.d.ts +14 -0
  76. package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
  77. package/dist/runtime/ensure-local-inference-handler.d.ts +70 -0
  78. package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  79. package/dist/runtime/index.d.ts +15 -0
  80. package/dist/runtime/index.d.ts.map +1 -0
  81. package/dist/runtime/index.js +38768 -0
  82. package/dist/runtime/index.js.map +217 -0
  83. package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
  84. package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  85. package/dist/runtime/voice-entity-binding.d.ts +113 -0
  86. package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
  87. package/dist/services/active-model.d.ts +310 -0
  88. package/dist/services/active-model.d.ts.map +1 -0
  89. package/dist/services/asr-provenance.d.ts +5 -0
  90. package/dist/services/asr-provenance.d.ts.map +1 -0
  91. package/dist/services/assignments.d.ts +84 -0
  92. package/dist/services/assignments.d.ts.map +1 -0
  93. package/dist/services/backend-selector.d.ts +55 -0
  94. package/dist/services/backend-selector.d.ts.map +1 -0
  95. package/dist/services/backend.d.ts +440 -0
  96. package/dist/services/backend.d.ts.map +1 -0
  97. package/dist/services/bionic-host-loader.d.ts +67 -0
  98. package/dist/services/bionic-host-loader.d.ts.map +1 -0
  99. package/dist/services/bundled-models.d.ts +34 -0
  100. package/dist/services/bundled-models.d.ts.map +1 -0
  101. package/dist/services/cache-bridge.d.ts +206 -0
  102. package/dist/services/cache-bridge.d.ts.map +1 -0
  103. package/dist/services/catalog.d.ts +10 -0
  104. package/dist/services/catalog.d.ts.map +1 -0
  105. package/dist/services/checkpoint-client.d.ts +109 -0
  106. package/dist/services/checkpoint-client.d.ts.map +1 -0
  107. package/dist/services/checkpoint-manager.d.ts +217 -0
  108. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  109. package/dist/services/cloud-fallback.d.ts +102 -0
  110. package/dist/services/cloud-fallback.d.ts.map +1 -0
  111. package/dist/services/context-fit.d.ts +36 -0
  112. package/dist/services/context-fit.d.ts.map +1 -0
  113. package/dist/services/conversation-registry.d.ts +142 -0
  114. package/dist/services/conversation-registry.d.ts.map +1 -0
  115. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts +111 -0
  116. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  117. package/dist/services/device-bridge.d.ts +188 -0
  118. package/dist/services/device-bridge.d.ts.map +1 -0
  119. package/dist/services/device-resource-metrics.d.ts +149 -0
  120. package/dist/services/device-resource-metrics.d.ts.map +1 -0
  121. package/dist/services/device-tier.d.ts +133 -0
  122. package/dist/services/device-tier.d.ts.map +1 -0
  123. package/dist/services/downloader.d.ts +94 -0
  124. package/dist/services/downloader.d.ts.map +1 -0
  125. package/dist/services/engine.d.ts +579 -0
  126. package/dist/services/engine.d.ts.map +1 -0
  127. package/dist/services/ensure-local-artifacts.d.ts +82 -0
  128. package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
  129. package/dist/services/external-scanner.d.ts +17 -0
  130. package/dist/services/external-scanner.d.ts.map +1 -0
  131. package/dist/services/ffi-llm-mock.d.ts +90 -0
  132. package/dist/services/ffi-llm-mock.d.ts.map +1 -0
  133. package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
  134. package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
  135. package/dist/services/ffi-streaming-backend.d.ts +201 -0
  136. package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
  137. package/dist/services/ffi-streaming-runner.d.ts +146 -0
  138. package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
  139. package/dist/services/gpu-autotune.d.ts +150 -0
  140. package/dist/services/gpu-autotune.d.ts.map +1 -0
  141. package/dist/services/gpu-detect.d.ts +56 -0
  142. package/dist/services/gpu-detect.d.ts.map +1 -0
  143. package/dist/services/handler-registry.d.ts +72 -0
  144. package/dist/services/handler-registry.d.ts.map +1 -0
  145. package/dist/services/hardware.d.ts +63 -0
  146. package/dist/services/hardware.d.ts.map +1 -0
  147. package/dist/services/image-description-runtime.d.ts +14 -0
  148. package/dist/services/image-description-runtime.d.ts.map +1 -0
  149. package/dist/services/imagegen/aosp-unavailable.d.ts +134 -0
  150. package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  151. package/dist/services/imagegen/backend-selector.d.ts +118 -0
  152. package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
  153. package/dist/services/imagegen/coreml-unavailable.d.ts +105 -0
  154. package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  155. package/dist/services/imagegen/errors.d.ts +16 -0
  156. package/dist/services/imagegen/errors.d.ts.map +1 -0
  157. package/dist/services/imagegen/index.d.ts +58 -0
  158. package/dist/services/imagegen/index.d.ts.map +1 -0
  159. package/dist/services/imagegen/mflux.d.ts +74 -0
  160. package/dist/services/imagegen/mflux.d.ts.map +1 -0
  161. package/dist/services/imagegen/sd-cpp.d.ts +181 -0
  162. package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
  163. package/dist/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  164. package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  165. package/dist/services/imagegen/types.d.ts +181 -0
  166. package/dist/services/imagegen/types.d.ts.map +1 -0
  167. package/dist/services/index.d.ts +31 -0
  168. package/dist/services/index.d.ts.map +1 -0
  169. package/dist/services/index.js +39453 -0
  170. package/dist/services/index.js.map +227 -0
  171. package/dist/services/inference-capabilities.d.ts +132 -0
  172. package/dist/services/inference-capabilities.d.ts.map +1 -0
  173. package/dist/services/inference-telemetry.d.ts +59 -0
  174. package/dist/services/inference-telemetry.d.ts.map +1 -0
  175. package/dist/services/ios-llama-streaming.d.ts +119 -0
  176. package/dist/services/ios-llama-streaming.d.ts.map +1 -0
  177. package/dist/services/kv-spill.d.ts +189 -0
  178. package/dist/services/kv-spill.d.ts.map +1 -0
  179. package/dist/services/latency-trace.d.ts +346 -0
  180. package/dist/services/latency-trace.d.ts.map +1 -0
  181. package/dist/services/lib-target.d.ts +55 -0
  182. package/dist/services/lib-target.d.ts.map +1 -0
  183. package/dist/services/live-signals.d.ts +86 -0
  184. package/dist/services/live-signals.d.ts.map +1 -0
  185. package/dist/services/llama-server-metrics.d.ts +114 -0
  186. package/dist/services/llama-server-metrics.d.ts.map +1 -0
  187. package/dist/services/llm-streaming-binding.d.ts +96 -0
  188. package/dist/services/llm-streaming-binding.d.ts.map +1 -0
  189. package/dist/services/load-args.d.ts +82 -0
  190. package/dist/services/load-args.d.ts.map +1 -0
  191. package/dist/services/manifest/index.d.ts +4 -0
  192. package/dist/services/manifest/index.d.ts.map +1 -0
  193. package/dist/services/manifest/schema.d.ts +903 -0
  194. package/dist/services/manifest/schema.d.ts.map +1 -0
  195. package/dist/services/manifest/types.d.ts +32 -0
  196. package/dist/services/manifest/types.d.ts.map +1 -0
  197. package/dist/services/manifest/validator.d.ts +66 -0
  198. package/dist/services/manifest/validator.d.ts.map +1 -0
  199. package/dist/services/memory-arbiter.d.ts +348 -0
  200. package/dist/services/memory-arbiter.d.ts.map +1 -0
  201. package/dist/services/memory-benchmark.d.ts +76 -0
  202. package/dist/services/memory-benchmark.d.ts.map +1 -0
  203. package/dist/services/memory-monitor.d.ts +128 -0
  204. package/dist/services/memory-monitor.d.ts.map +1 -0
  205. package/dist/services/memory-pressure.d.ts +130 -0
  206. package/dist/services/memory-pressure.d.ts.map +1 -0
  207. package/dist/services/mtp-doctor.d.ts +13 -0
  208. package/dist/services/mtp-doctor.d.ts.map +1 -0
  209. package/dist/services/network-policy.d.ts +127 -0
  210. package/dist/services/network-policy.d.ts.map +1 -0
  211. package/dist/services/paths.d.ts +6 -0
  212. package/dist/services/paths.d.ts.map +1 -0
  213. package/dist/services/planner-skeleton.d.ts +124 -0
  214. package/dist/services/planner-skeleton.d.ts.map +1 -0
  215. package/dist/services/providers.d.ts +38 -0
  216. package/dist/services/providers.d.ts.map +1 -0
  217. package/dist/services/ram-budget.d.ts +110 -0
  218. package/dist/services/ram-budget.d.ts.map +1 -0
  219. package/dist/services/readiness.d.ts +9 -0
  220. package/dist/services/readiness.d.ts.map +1 -0
  221. package/dist/services/recommendation.d.ts +111 -0
  222. package/dist/services/recommendation.d.ts.map +1 -0
  223. package/dist/services/registry.d.ts +33 -0
  224. package/dist/services/registry.d.ts.map +1 -0
  225. package/dist/services/router-handler.d.ts +92 -0
  226. package/dist/services/router-handler.d.ts.map +1 -0
  227. package/dist/services/routing-policy.d.ts +92 -0
  228. package/dist/services/routing-policy.d.ts.map +1 -0
  229. package/dist/services/routing-preferences.d.ts +8 -0
  230. package/dist/services/routing-preferences.d.ts.map +1 -0
  231. package/dist/services/runtime-target.d.ts +98 -0
  232. package/dist/services/runtime-target.d.ts.map +1 -0
  233. package/dist/services/service.d.ts +128 -0
  234. package/dist/services/service.d.ts.map +1 -0
  235. package/dist/services/session-pool.d.ts +72 -0
  236. package/dist/services/session-pool.d.ts.map +1 -0
  237. package/dist/services/structured-output/deterministic-repair.d.ts +23 -0
  238. package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
  239. package/dist/services/structured-output/index.d.ts +2 -0
  240. package/dist/services/structured-output/index.d.ts.map +1 -0
  241. package/dist/services/structured-output.d.ts +311 -0
  242. package/dist/services/structured-output.d.ts.map +1 -0
  243. package/dist/services/system-memory.d.ts +33 -0
  244. package/dist/services/system-memory.d.ts.map +1 -0
  245. package/dist/services/types.d.ts +19 -0
  246. package/dist/services/types.d.ts.map +1 -0
  247. package/dist/services/verify-on-device.d.ts +34 -0
  248. package/dist/services/verify-on-device.d.ts.map +1 -0
  249. package/dist/services/verify.d.ts +8 -0
  250. package/dist/services/verify.d.ts.map +1 -0
  251. package/dist/services/vision/aosp-unavailable.d.ts +115 -0
  252. package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
  253. package/dist/services/vision/capacitor-llama.d.ts +99 -0
  254. package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
  255. package/dist/services/vision/cloud-fallback.d.ts +47 -0
  256. package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
  257. package/dist/services/vision/hash.d.ts +71 -0
  258. package/dist/services/vision/hash.d.ts.map +1 -0
  259. package/dist/services/vision/index.d.ts +95 -0
  260. package/dist/services/vision/index.d.ts.map +1 -0
  261. package/dist/services/vision/llama-server.d.ts +73 -0
  262. package/dist/services/vision/llama-server.d.ts.map +1 -0
  263. package/dist/services/vision/types.d.ts +162 -0
  264. package/dist/services/vision/types.d.ts.map +1 -0
  265. package/dist/services/vision/vast-fallback.d.ts +18 -0
  266. package/dist/services/vision/vast-fallback.d.ts.map +1 -0
  267. package/dist/services/vision-embedding-cache.d.ts +98 -0
  268. package/dist/services/vision-embedding-cache.d.ts.map +1 -0
  269. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
  270. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
  271. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
  272. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
  273. package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
  274. package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
  275. package/dist/services/voice/audio-frame-consumer.d.ts +294 -0
  276. package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
  277. package/dist/services/voice/barge-in.d.ts +112 -0
  278. package/dist/services/voice/barge-in.d.ts.map +1 -0
  279. package/dist/services/voice/cancellation-coordinator.d.ts +127 -0
  280. package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
  281. package/dist/services/voice/checkpoint-manager.d.ts +199 -0
  282. package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
  283. package/dist/services/voice/checkpoint-policy.d.ts +178 -0
  284. package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
  285. package/dist/services/voice/corpus-augment.d.ts +111 -0
  286. package/dist/services/voice/corpus-augment.d.ts.map +1 -0
  287. package/dist/services/voice/corpus-generator.d.ts +134 -0
  288. package/dist/services/voice/corpus-generator.d.ts.map +1 -0
  289. package/dist/services/voice/diarization-error-rate.d.ts +40 -0
  290. package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
  291. package/dist/services/voice/e2e-harness.d.ts +297 -0
  292. package/dist/services/voice/e2e-harness.d.ts.map +1 -0
  293. package/dist/services/voice/eager-context-builder.d.ts +170 -0
  294. package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
  295. package/dist/services/voice/echo-delay.d.ts +67 -0
  296. package/dist/services/voice/echo-delay.d.ts.map +1 -0
  297. package/dist/services/voice/echo-metrics.d.ts +7 -0
  298. package/dist/services/voice/echo-metrics.d.ts.map +1 -0
  299. package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
  300. package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
  301. package/dist/services/voice/eliza1-eot-scorer.d.ts +124 -0
  302. package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  303. package/dist/services/voice/embedding-server.d.ts +37 -0
  304. package/dist/services/voice/embedding-server.d.ts.map +1 -0
  305. package/dist/services/voice/embedding.d.ts +132 -0
  306. package/dist/services/voice/embedding.d.ts.map +1 -0
  307. package/dist/services/voice/emotion-attribution.d.ts +68 -0
  308. package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
  309. package/dist/services/voice/engine-bridge.d.ts +762 -0
  310. package/dist/services/voice/engine-bridge.d.ts.map +1 -0
  311. package/dist/services/voice/eot-classifier-ggml.d.ts +179 -0
  312. package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  313. package/dist/services/voice/eot-classifier.d.ts +211 -0
  314. package/dist/services/voice/eot-classifier.d.ts.map +1 -0
  315. package/dist/services/voice/errors.d.ts +20 -0
  316. package/dist/services/voice/errors.d.ts.map +1 -0
  317. package/dist/services/voice/expressive-tags.d.ts +158 -0
  318. package/dist/services/voice/expressive-tags.d.ts.map +1 -0
  319. package/dist/services/voice/ffi-bindings.d.ts +696 -0
  320. package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
  321. package/dist/services/voice/first-line-cache.d.ts +181 -0
  322. package/dist/services/voice/first-line-cache.d.ts.map +1 -0
  323. package/dist/services/voice/fused-eot-scorer.d.ts +51 -0
  324. package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
  325. package/dist/services/voice/index.d.ts +96 -0
  326. package/dist/services/voice/index.d.ts.map +1 -0
  327. package/dist/services/voice/kokoro/index.d.ts +24 -0
  328. package/dist/services/voice/kokoro/index.d.ts.map +1 -0
  329. package/dist/services/voice/kokoro/kokoro-backend.d.ts +87 -0
  330. package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  331. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  332. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  333. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  334. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  335. package/dist/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  336. package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  337. package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
  338. package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
  339. package/dist/services/voice/kokoro/phonemizer.d.ts +50 -0
  340. package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  341. package/dist/services/voice/kokoro/pick-runtime.d.ts +61 -0
  342. package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  343. package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
  344. package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  345. package/dist/services/voice/kokoro/types.d.ts +82 -0
  346. package/dist/services/voice/kokoro/types.d.ts.map +1 -0
  347. package/dist/services/voice/kokoro/voice-presets.d.ts +23 -0
  348. package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  349. package/dist/services/voice/kokoro/voices.d.ts +30 -0
  350. package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
  351. package/dist/services/voice/lifecycle.d.ts +135 -0
  352. package/dist/services/voice/lifecycle.d.ts.map +1 -0
  353. package/dist/services/voice/live-diarization-session.d.ts +196 -0
  354. package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
  355. package/dist/services/voice/metric-math.d.ts +10 -0
  356. package/dist/services/voice/metric-math.d.ts.map +1 -0
  357. package/dist/services/voice/mic-source.d.ts +136 -0
  358. package/dist/services/voice/mic-source.d.ts.map +1 -0
  359. package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
  360. package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
  361. package/dist/services/voice/optimistic-policy.d.ts +109 -0
  362. package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
  363. package/dist/services/voice/optimistic-rollback.d.ts +151 -0
  364. package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
  365. package/dist/services/voice/partial-stabilizer.d.ts +73 -0
  366. package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
  367. package/dist/services/voice/phoneme-tokenizer.d.ts +49 -0
  368. package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  369. package/dist/services/voice/phrase-cache.d.ts +76 -0
  370. package/dist/services/voice/phrase-cache.d.ts.map +1 -0
  371. package/dist/services/voice/phrase-chunker.d.ts +62 -0
  372. package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
  373. package/dist/services/voice/pipeline-impls.d.ts +151 -0
  374. package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
  375. package/dist/services/voice/pipeline.d.ts +216 -0
  376. package/dist/services/voice/pipeline.d.ts.map +1 -0
  377. package/dist/services/voice/prefill-client.d.ts +123 -0
  378. package/dist/services/voice/prefill-client.d.ts.map +1 -0
  379. package/dist/services/voice/prefix-preserving-queue.d.ts +113 -0
  380. package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  381. package/dist/services/voice/profile-store.d.ts +248 -0
  382. package/dist/services/voice/profile-store.d.ts.map +1 -0
  383. package/dist/services/voice/ring-buffer.d.ts +40 -0
  384. package/dist/services/voice/ring-buffer.d.ts.map +1 -0
  385. package/dist/services/voice/rollback-queue.d.ts +24 -0
  386. package/dist/services/voice/rollback-queue.d.ts.map +1 -0
  387. package/dist/services/voice/samantha-preset-placeholder.d.ts +67 -0
  388. package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  389. package/dist/services/voice/samantha-preset-regenerator.d.ts +87 -0
  390. package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  391. package/dist/services/voice/scheduler.d.ts +146 -0
  392. package/dist/services/voice/scheduler.d.ts.map +1 -0
  393. package/dist/services/voice/self-voice-imprint.d.ts +33 -0
  394. package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
  395. package/dist/services/voice/shared-resources.d.ts +204 -0
  396. package/dist/services/voice/shared-resources.d.ts.map +1 -0
  397. package/dist/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  398. package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  399. package/dist/services/voice/speaker/diarizer-fused.d.ts +59 -0
  400. package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  401. package/dist/services/voice/speaker/diarizer.d.ts +75 -0
  402. package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
  403. package/dist/services/voice/speaker/encoder-fused.d.ts +60 -0
  404. package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  405. package/dist/services/voice/speaker/encoder-ggml.d.ts +33 -0
  406. package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  407. package/dist/services/voice/speaker/encoder.d.ts +37 -0
  408. package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
  409. package/dist/services/voice/speaker-imprint.d.ts +83 -0
  410. package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
  411. package/dist/services/voice/speaker-preset-cache.d.ts +77 -0
  412. package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
  413. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
  414. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
  415. package/dist/services/voice/system-audio-sink.d.ts +73 -0
  416. package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
  417. package/dist/services/voice/transcriber.d.ts +244 -0
  418. package/dist/services/voice/transcriber.d.ts.map +1 -0
  419. package/dist/services/voice/transcript-knowledge.d.ts +37 -0
  420. package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
  421. package/dist/services/voice/transcript-service.d.ts +60 -0
  422. package/dist/services/voice/transcript-service.d.ts.map +1 -0
  423. package/dist/services/voice/transcript-store.d.ts +64 -0
  424. package/dist/services/voice/transcript-store.d.ts.map +1 -0
  425. package/dist/services/voice/turn-controller.d.ts +183 -0
  426. package/dist/services/voice/turn-controller.d.ts.map +1 -0
  427. package/dist/services/voice/types.d.ts +643 -0
  428. package/dist/services/voice/types.d.ts.map +1 -0
  429. package/dist/services/voice/vad.d.ts +283 -0
  430. package/dist/services/voice/vad.d.ts.map +1 -0
  431. package/dist/services/voice/voice-budget.d.ts +241 -0
  432. package/dist/services/voice/voice-budget.d.ts.map +1 -0
  433. package/dist/services/voice/voice-emotion-classifier.d.ts +95 -0
  434. package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  435. package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
  436. package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
  437. package/dist/services/voice/voice-preset-format.d.ts +158 -0
  438. package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
  439. package/dist/services/voice/voice-profile-artifact.d.ts +116 -0
  440. package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
  441. package/dist/services/voice/voice-profile-routes.d.ts +83 -0
  442. package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
  443. package/dist/services/voice/voice-scenario.d.ts +131 -0
  444. package/dist/services/voice/voice-scenario.d.ts.map +1 -0
  445. package/dist/services/voice/voice-state-machine.d.ts +364 -0
  446. package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
  447. package/dist/services/voice/voice-workbench-report.d.ts +117 -0
  448. package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
  449. package/dist/services/voice/wake-word-ggml.d.ts +100 -0
  450. package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
  451. package/dist/services/voice/wake-word.d.ts +255 -0
  452. package/dist/services/voice/wake-word.d.ts.map +1 -0
  453. package/dist/services/voice/wav-codec.d.ts +11 -0
  454. package/dist/services/voice/wav-codec.d.ts.map +1 -0
  455. package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
  456. package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
  457. package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
  458. package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
  459. package/dist/services/voice/workbench-logic-services.d.ts +36 -0
  460. package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
  461. package/dist/services/voice/workbench-real-services.d.ts +17 -0
  462. package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
  463. package/dist/services/voice/workbench-scenarios.d.ts +24 -0
  464. package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
  465. package/dist/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  466. package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  467. package/dist/services/voice-model-updater.d.ts +240 -0
  468. package/dist/services/voice-model-updater.d.ts.map +1 -0
  469. package/dist/services/voice-prewarm.d.ts +3 -0
  470. package/dist/services/voice-prewarm.d.ts.map +1 -0
  471. package/dist/voice-workbench.d.ts +18 -0
  472. package/dist/voice-workbench.d.ts.map +1 -0
  473. package/dist/voice-workbench.js +5259 -0
  474. package/dist/voice-workbench.js.map +34 -0
  475. package/package.json +101 -15
  476. package/registry-entry.json +137 -0
  477. package/src/actions/generate-media.ts +647 -0
  478. package/src/actions/identify-speaker.ts +171 -0
  479. package/src/actions/transcription-control.test.ts +100 -0
  480. package/src/actions/transcription-control.ts +127 -0
  481. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  482. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  483. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  484. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  485. package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -0
  486. package/src/adapters/capacitor-llama/environment.ts +71 -0
  487. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  488. package/src/adapters/capacitor-llama/index.ts +831 -0
  489. package/src/adapters/capacitor-llama/loader.ts +109 -0
  490. package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -0
  491. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  492. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  493. package/src/adapters/capacitor-llama/types.ts +374 -0
  494. package/src/adapters/capacitor-llama/voice-turn.ts +178 -0
  495. package/src/backends/apple-foundation.ts +127 -0
  496. package/src/index.ts +62 -0
  497. package/src/local-inference-routes.test.ts +390 -0
  498. package/src/local-inference-routes.ts +1625 -0
  499. package/src/provider.ts +1111 -0
  500. package/src/routes/compat-helpers.ts +275 -0
  501. package/src/routes/family-member-route.ts +353 -0
  502. package/src/routes/index.ts +61 -0
  503. package/src/routes/live-diarization-route.test.ts +347 -0
  504. package/src/routes/live-diarization-route.ts +198 -0
  505. package/src/routes/local-inference-asr-route.test.ts +246 -0
  506. package/src/routes/local-inference-asr-route.ts +166 -0
  507. package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
  508. package/src/routes/local-inference-asr-transcribe.ts +97 -0
  509. package/src/routes/local-inference-compat-routes.test.ts +485 -0
  510. package/src/routes/local-inference-compat-routes.ts +775 -0
  511. package/src/routes/local-inference-tts-route.test.ts +179 -0
  512. package/src/routes/local-inference-tts-route.ts +230 -0
  513. package/src/routes/native-pcm-turn-route.test.ts +136 -0
  514. package/src/routes/native-pcm-turn-route.ts +121 -0
  515. package/src/routes/transcript-audio-store.ts +27 -0
  516. package/src/routes/transcripts-routes.test.ts +195 -0
  517. package/src/routes/transcripts-routes.ts +191 -0
  518. package/src/routes/voice-first-run-routes.ts +524 -0
  519. package/src/routes/voice-models-routes.ts +554 -0
  520. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  521. package/src/routes/voice-profiles-management-routes.ts +476 -0
  522. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  523. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  524. package/src/runtime/bionic-wire-encoding.test.ts +147 -0
  525. package/src/runtime/capacitor-llama.d.ts +25 -0
  526. package/src/runtime/embedding-manager-support.ts +497 -0
  527. package/src/runtime/embedding-presets.ts +81 -0
  528. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  529. package/src/runtime/embedding-warmup-policy.ts +48 -0
  530. package/src/runtime/ensure-local-inference-handler.test.ts +726 -0
  531. package/src/runtime/ensure-local-inference-handler.ts +1640 -0
  532. package/src/runtime/index.ts +36 -0
  533. package/src/runtime/mobile-local-inference-gate.test.ts +152 -0
  534. package/src/runtime/mobile-local-inference-gate.ts +99 -0
  535. package/src/runtime/voice-entity-binding.transcript.test.ts +98 -0
  536. package/src/runtime/voice-entity-binding.ts +368 -0
  537. package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
  538. package/src/services/README.md +71 -0
  539. package/src/services/__tests__/backend-selector.precedence.test.ts +333 -0
  540. package/src/services/__tests__/backend-selector.test.ts +101 -0
  541. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  542. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  543. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  544. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  545. package/src/services/__tests__/runtime-target.test.ts +176 -0
  546. package/src/services/active-model-context-fit.test.ts +125 -0
  547. package/src/services/active-model-switch-rollback.test.ts +183 -0
  548. package/src/services/active-model.ts +1416 -0
  549. package/src/services/asr-provenance.ts +68 -0
  550. package/src/services/assignment-validation.test.ts +118 -0
  551. package/src/services/assignments.test.ts +106 -0
  552. package/src/services/assignments.ts +278 -0
  553. package/src/services/backend-selector.ts +95 -0
  554. package/src/services/backend.test.ts +84 -0
  555. package/src/services/backend.ts +791 -0
  556. package/src/services/bionic-host-loader.test.ts +226 -0
  557. package/src/services/bionic-host-loader.ts +252 -0
  558. package/src/services/bundled-models.ts +129 -0
  559. package/src/services/cache-bridge.test.ts +516 -0
  560. package/src/services/cache-bridge.ts +423 -0
  561. package/src/services/catalog.test.ts +259 -0
  562. package/src/services/catalog.ts +33 -0
  563. package/src/services/checkpoint-client.ts +258 -0
  564. package/src/services/checkpoint-manager.ts +474 -0
  565. package/src/services/cloud-fallback.ts +230 -0
  566. package/src/services/context-fit.test.ts +121 -0
  567. package/src/services/context-fit.ts +113 -0
  568. package/src/services/conversation-registry.test.ts +235 -0
  569. package/src/services/conversation-registry.ts +264 -0
  570. package/src/services/desktop-fused-ffi-backend-runtime.ts +431 -0
  571. package/src/services/device-bridge.ts +1237 -0
  572. package/src/services/device-resource-metrics.test.ts +98 -0
  573. package/src/services/device-resource-metrics.ts +346 -0
  574. package/src/services/device-tier.test.ts +458 -0
  575. package/src/services/device-tier.ts +502 -0
  576. package/src/services/downloader.test.ts +888 -0
  577. package/src/services/downloader.ts +1039 -0
  578. package/src/services/engine-direct-bundle.test.ts +90 -0
  579. package/src/services/engine-streaming.test.ts +80 -0
  580. package/src/services/engine.ts +2096 -0
  581. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  582. package/src/services/ensure-local-artifacts.test.ts +368 -0
  583. package/src/services/ensure-local-artifacts.ts +351 -0
  584. package/src/services/external-scanner.ts +312 -0
  585. package/src/services/ffi-llm-mock.ts +354 -0
  586. package/src/services/ffi-llm-streaming-abi.ts +445 -0
  587. package/src/services/ffi-streaming-backend.ts +418 -0
  588. package/src/services/ffi-streaming-runner.test.ts +220 -0
  589. package/src/services/ffi-streaming-runner.ts +407 -0
  590. package/src/services/ffi-unload-ordering.test.ts +166 -0
  591. package/src/services/fused-eliza1-no-regression.test.ts +144 -0
  592. package/src/services/gpu-autotune.ts +534 -0
  593. package/src/services/gpu-detect.ts +139 -0
  594. package/src/services/handler-registry.ts +240 -0
  595. package/src/services/hardware.test.ts +236 -0
  596. package/src/services/hardware.ts +438 -0
  597. package/src/services/image-description-runtime.test.ts +61 -0
  598. package/src/services/image-description-runtime.ts +118 -0
  599. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  600. package/src/services/imagegen/backend-selector.test.ts +190 -0
  601. package/src/services/imagegen/backend-selector.ts +277 -0
  602. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  603. package/src/services/imagegen/errors.ts +40 -0
  604. package/src/services/imagegen/index.ts +144 -0
  605. package/src/services/imagegen/mflux.ts +313 -0
  606. package/src/services/imagegen/sd-cpp.ts +715 -0
  607. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  608. package/src/services/imagegen/types.ts +193 -0
  609. package/src/services/index.ts +229 -0
  610. package/src/services/inference-capabilities.test.ts +75 -0
  611. package/src/services/inference-capabilities.ts +204 -0
  612. package/src/services/inference-telemetry.ts +143 -0
  613. package/src/services/ios-llama-streaming.ts +248 -0
  614. package/src/services/kv-spill.test.ts +222 -0
  615. package/src/services/kv-spill.ts +357 -0
  616. package/src/services/latency-trace.test.ts +266 -0
  617. package/src/services/latency-trace.ts +844 -0
  618. package/src/services/lib-target.test.ts +145 -0
  619. package/src/services/lib-target.ts +102 -0
  620. package/src/services/live-signals.test.ts +132 -0
  621. package/src/services/live-signals.ts +177 -0
  622. package/src/services/llama-server-metrics.test.ts +168 -0
  623. package/src/services/llama-server-metrics.ts +304 -0
  624. package/src/services/llm-streaming-binding.ts +136 -0
  625. package/src/services/load-args.ts +81 -0
  626. package/src/services/manifest/eliza-1.manifest.v1.json +790 -0
  627. package/src/services/manifest/index.ts +72 -0
  628. package/src/services/manifest/manifest.test.ts +791 -0
  629. package/src/services/manifest/schema.ts +761 -0
  630. package/src/services/manifest/types.ts +61 -0
  631. package/src/services/manifest/validator.ts +633 -0
  632. package/src/services/memory-arbiter.test.ts +558 -0
  633. package/src/services/memory-arbiter.ts +991 -0
  634. package/src/services/memory-benchmark.test.ts +91 -0
  635. package/src/services/memory-benchmark.ts +354 -0
  636. package/src/services/memory-monitor.test.ts +232 -0
  637. package/src/services/memory-monitor.ts +309 -0
  638. package/src/services/memory-pressure.ts +414 -0
  639. package/src/services/mtp-doctor.ts +86 -0
  640. package/src/services/network-policy.ts +346 -0
  641. package/src/services/paths.ts +25 -0
  642. package/src/services/planner-skeleton.ts +175 -0
  643. package/src/services/providers.ts +507 -0
  644. package/src/services/ram-budget-cache.test.ts +164 -0
  645. package/src/services/ram-budget.ts +309 -0
  646. package/src/services/readiness.test.ts +87 -0
  647. package/src/services/readiness.ts +238 -0
  648. package/src/services/recommendation.test.ts +216 -0
  649. package/src/services/recommendation.ts +671 -0
  650. package/src/services/registry.ts +157 -0
  651. package/src/services/required-kernels-gate.test.ts +64 -0
  652. package/src/services/router-handler.test.ts +45 -0
  653. package/src/services/router-handler.ts +426 -0
  654. package/src/services/routing-policy.test.ts +352 -0
  655. package/src/services/routing-policy.ts +367 -0
  656. package/src/services/routing-preferences.ts +17 -0
  657. package/src/services/runtime-target.ts +154 -0
  658. package/src/services/service.test.ts +223 -0
  659. package/src/services/service.ts +750 -0
  660. package/src/services/session-pool.ts +153 -0
  661. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  662. package/src/services/structured-output/deterministic-repair.ts +443 -0
  663. package/src/services/structured-output/index.ts +4 -0
  664. package/src/services/structured-output.test.ts +483 -0
  665. package/src/services/structured-output.ts +712 -0
  666. package/src/services/system-memory.test.ts +47 -0
  667. package/src/services/system-memory.ts +67 -0
  668. package/src/services/transcription-priority.test.ts +211 -0
  669. package/src/services/types.ts +59 -0
  670. package/src/services/verify-on-device.test.ts +87 -0
  671. package/src/services/verify-on-device.ts +127 -0
  672. package/src/services/verify.ts +13 -0
  673. package/src/services/vision/aosp-unavailable.ts +163 -0
  674. package/src/services/vision/capacitor-llama.ts +255 -0
  675. package/src/services/vision/cloud-fallback.test.ts +243 -0
  676. package/src/services/vision/cloud-fallback.ts +268 -0
  677. package/src/services/vision/fallback-chain.test.ts +86 -0
  678. package/src/services/vision/hash.ts +157 -0
  679. package/src/services/vision/index.ts +251 -0
  680. package/src/services/vision/llama-server.ts +177 -0
  681. package/src/services/vision/types.ts +163 -0
  682. package/src/services/vision/vast-fallback.ts +127 -0
  683. package/src/services/vision-embedding-cache.ts +189 -0
  684. package/src/services/voice/VOICE_WORKBENCH.md +133 -0
  685. package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
  686. package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
  687. package/src/services/voice/__test-helpers__/synthetic-speech.ts +194 -0
  688. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  689. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  690. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  691. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  692. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  693. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  694. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  695. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  696. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  697. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  698. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
  699. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  700. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  701. package/src/services/voice/acoustic-speaker-attribution.test.ts +165 -0
  702. package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
  703. package/src/services/voice/asr-timed.real.test.ts +139 -0
  704. package/src/services/voice/audio-frame-consumer.test.ts +669 -0
  705. package/src/services/voice/audio-frame-consumer.ts +651 -0
  706. package/src/services/voice/barge-in.test.ts +244 -0
  707. package/src/services/voice/barge-in.ts +335 -0
  708. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  709. package/src/services/voice/cancellation-coordinator.ts +269 -0
  710. package/src/services/voice/checkpoint-manager.ts +401 -0
  711. package/src/services/voice/checkpoint-policy.ts +336 -0
  712. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  713. package/src/services/voice/corpus-augment.test.ts +276 -0
  714. package/src/services/voice/corpus-augment.ts +451 -0
  715. package/src/services/voice/corpus-generator.test.ts +201 -0
  716. package/src/services/voice/corpus-generator.ts +413 -0
  717. package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
  718. package/src/services/voice/diarization-error-rate.test.ts +100 -0
  719. package/src/services/voice/diarization-error-rate.ts +249 -0
  720. package/src/services/voice/e2e-harness.der.test.ts +94 -0
  721. package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
  722. package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
  723. package/src/services/voice/e2e-harness.test.ts +182 -0
  724. package/src/services/voice/e2e-harness.ts +902 -0
  725. package/src/services/voice/eager-context-builder.ts +262 -0
  726. package/src/services/voice/echo-delay.test.ts +118 -0
  727. package/src/services/voice/echo-delay.ts +135 -0
  728. package/src/services/voice/echo-metrics.test.ts +17 -0
  729. package/src/services/voice/echo-metrics.ts +20 -0
  730. package/src/services/voice/echo-reference-buffer.test.ts +86 -0
  731. package/src/services/voice/echo-reference-buffer.ts +165 -0
  732. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  733. package/src/services/voice/embedding-server.ts +200 -0
  734. package/src/services/voice/embedding.test.ts +131 -0
  735. package/src/services/voice/embedding.ts +242 -0
  736. package/src/services/voice/emotion-attribution.test.ts +129 -0
  737. package/src/services/voice/emotion-attribution.ts +361 -0
  738. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  739. package/src/services/voice/engine-bridge-transcript-join.test.ts +278 -0
  740. package/src/services/voice/engine-bridge.test.ts +384 -0
  741. package/src/services/voice/engine-bridge.ts +2343 -0
  742. package/src/services/voice/eot-classifier-ggml.ts +569 -0
  743. package/src/services/voice/eot-classifier.test.ts +98 -0
  744. package/src/services/voice/eot-classifier.ts +422 -0
  745. package/src/services/voice/errors.ts +34 -0
  746. package/src/services/voice/expressive-tags.asr.test.ts +77 -0
  747. package/src/services/voice/expressive-tags.test.ts +102 -0
  748. package/src/services/voice/expressive-tags.ts +405 -0
  749. package/src/services/voice/ffi-bindings.test.ts +735 -0
  750. package/src/services/voice/ffi-bindings.ts +3387 -0
  751. package/src/services/voice/first-line-cache.ts +725 -0
  752. package/src/services/voice/fused-eot-scorer.ts +139 -0
  753. package/src/services/voice/index.ts +502 -0
  754. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +262 -0
  755. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +236 -0
  756. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  757. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  758. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  759. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  760. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  761. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +67 -0
  762. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  763. package/src/services/voice/kokoro/index.ts +79 -0
  764. package/src/services/voice/kokoro/kokoro-backend.ts +223 -0
  765. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  766. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  767. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  768. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  769. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  770. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  771. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  772. package/src/services/voice/kokoro/runtime-selection.ts +64 -0
  773. package/src/services/voice/kokoro/types.ts +95 -0
  774. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  775. package/src/services/voice/kokoro/voices.ts +64 -0
  776. package/src/services/voice/lifecycle.test.ts +315 -0
  777. package/src/services/voice/lifecycle.ts +301 -0
  778. package/src/services/voice/live-diarization-session.echo.test.ts +232 -0
  779. package/src/services/voice/live-diarization-session.ts +622 -0
  780. package/src/services/voice/metric-math.test.ts +61 -0
  781. package/src/services/voice/metric-math.ts +25 -0
  782. package/src/services/voice/mic-source.test.ts +210 -0
  783. package/src/services/voice/mic-source.ts +503 -0
  784. package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
  785. package/src/services/voice/nlms-echo-canceller.ts +317 -0
  786. package/src/services/voice/optimistic-policy.power-source.test.ts +36 -0
  787. package/src/services/voice/optimistic-policy.test.ts +101 -0
  788. package/src/services/voice/optimistic-policy.ts +192 -0
  789. package/src/services/voice/optimistic-rollback.ts +343 -0
  790. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  791. package/src/services/voice/partial-stabilizer.ts +140 -0
  792. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  793. package/src/services/voice/phrase-cache.test.ts +242 -0
  794. package/src/services/voice/phrase-cache.ts +186 -0
  795. package/src/services/voice/phrase-chunker.test.ts +239 -0
  796. package/src/services/voice/phrase-chunker.ts +281 -0
  797. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  798. package/src/services/voice/pipeline-impls.test.ts +292 -0
  799. package/src/services/voice/pipeline-impls.ts +315 -0
  800. package/src/services/voice/pipeline.ts +504 -0
  801. package/src/services/voice/prefill-client.ts +316 -0
  802. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  803. package/src/services/voice/profile-store.ts +887 -0
  804. package/src/services/voice/real-audio-decode.test.ts +148 -0
  805. package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
  806. package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
  807. package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
  808. package/src/services/voice/ring-buffer.test.ts +129 -0
  809. package/src/services/voice/ring-buffer.ts +123 -0
  810. package/src/services/voice/rollback-queue.ts +74 -0
  811. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  812. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  813. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  814. package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
  815. package/src/services/voice/scheduler.t2.test.ts +141 -0
  816. package/src/services/voice/scheduler.ts +927 -0
  817. package/src/services/voice/self-voice-imprint.test.ts +59 -0
  818. package/src/services/voice/self-voice-imprint.ts +102 -0
  819. package/src/services/voice/shared-resources.ts +343 -0
  820. package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
  821. package/src/services/voice/speaker/attribution-pipeline.ts +449 -0
  822. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  823. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  824. package/src/services/voice/speaker/diarizer.ts +218 -0
  825. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  826. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  827. package/src/services/voice/speaker/encoder-ggml.test.ts +59 -0
  828. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  829. package/src/services/voice/speaker/encoder.ts +105 -0
  830. package/src/services/voice/speaker-imprint.test.ts +185 -0
  831. package/src/services/voice/speaker-imprint.ts +312 -0
  832. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  833. package/src/services/voice/speaker-preset-cache.ts +195 -0
  834. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  835. package/src/services/voice/system-audio-sink.test.ts +29 -0
  836. package/src/services/voice/system-audio-sink.ts +366 -0
  837. package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
  838. package/src/services/voice/transcriber.test.ts +392 -0
  839. package/src/services/voice/transcriber.ts +704 -0
  840. package/src/services/voice/transcript-knowledge.test.ts +68 -0
  841. package/src/services/voice/transcript-knowledge.ts +75 -0
  842. package/src/services/voice/transcript-service.test.ts +195 -0
  843. package/src/services/voice/transcript-service.ts +205 -0
  844. package/src/services/voice/transcript-store.test.ts +189 -0
  845. package/src/services/voice/transcript-store.ts +164 -0
  846. package/src/services/voice/turn-controller.test.ts +575 -0
  847. package/src/services/voice/turn-controller.ts +596 -0
  848. package/src/services/voice/types.ts +699 -0
  849. package/src/services/voice/vad.test.ts +498 -0
  850. package/src/services/voice/vad.ts +832 -0
  851. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  852. package/src/services/voice/voice-budget.test.ts +415 -0
  853. package/src/services/voice/voice-budget.ts +635 -0
  854. package/src/services/voice/voice-duet.test.ts +375 -0
  855. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  856. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  857. package/src/services/voice/voice-hardening.fuzz.test.ts +116 -0
  858. package/src/services/voice/voice-preload-predictor.test.ts +130 -0
  859. package/src/services/voice/voice-preload-predictor.ts +113 -0
  860. package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
  861. package/src/services/voice/voice-preset-format.test.ts +75 -0
  862. package/src/services/voice/voice-preset-format.ts +713 -0
  863. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  864. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  865. package/src/services/voice/voice-profile-artifact.ts +518 -0
  866. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  867. package/src/services/voice/voice-profile-routes.ts +425 -0
  868. package/src/services/voice/voice-scenario.test.ts +159 -0
  869. package/src/services/voice/voice-scenario.ts +280 -0
  870. package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -0
  871. package/src/services/voice/voice-state-machine.ts +727 -0
  872. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  873. package/src/services/voice/voice-workbench-report.ts +367 -0
  874. package/src/services/voice/voice-workbench.test.ts +158 -0
  875. package/src/services/voice/voice.test.ts +1070 -0
  876. package/src/services/voice/wake-word-ggml.ts +319 -0
  877. package/src/services/voice/wake-word.test.ts +298 -0
  878. package/src/services/voice/wake-word.ts +554 -0
  879. package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
  880. package/src/services/voice/wav-codec.test.ts +32 -0
  881. package/src/services/voice/wav-codec.ts +101 -0
  882. package/src/services/voice/workbench-entrypoint.test.ts +55 -0
  883. package/src/services/voice/workbench-entrypoint.ts +88 -0
  884. package/src/services/voice/workbench-headless-runner.test.ts +162 -0
  885. package/src/services/voice/workbench-headless-runner.ts +396 -0
  886. package/src/services/voice/workbench-logic-services.test.ts +225 -0
  887. package/src/services/voice/workbench-logic-services.ts +184 -0
  888. package/src/services/voice/workbench-real-services.ts +629 -0
  889. package/src/services/voice/workbench-scenarios.ts +407 -0
  890. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  891. package/src/services/voice-model-updater.ts +724 -0
  892. package/src/services/voice-prewarm.ts +51 -0
  893. package/src/voice-workbench.ts +71 -0
@@ -0,0 +1,199 @@
1
+ /**
2
+ * CheckpointManager — high-level slot-agnostic KV-cache checkpoint primitive
3
+ * used by the voice state machine (`voice-state-machine.ts`) to implement the
4
+ * optimistic-rollback path described in `docs/eliza-1-optimistic-rollback.md`.
5
+ *
6
+ * Why a manager on top of `CheckpointClient`?
7
+ *
8
+ * - `CheckpointClient` (in `checkpoint-client.ts`) is a thin REST
9
+ * adapter. It is keyed by `(slotId, filename)` because that is what the
10
+ * fork's `POST /slots/<id>/save?filename=<n>` REST API expects.
11
+ * - Callers (the voice state machine, voice-bench drivers) don't want to
12
+ * mint filenames, track active handles, or know about the upstream URL
13
+ * scheme. They want `save("pre-draft") → handle`, `restore(handle)`,
14
+ * `discard(handle)` and an in-memory mock for unit tests.
15
+ * - Backend reference shape is isolated here: the voice state machine keeps
16
+ * the same public interface (`saveCheckpoint`, `restoreCheckpoint`,
17
+ * `discardCheckpoint`) while this module owns how the REST backend stores
18
+ * and addresses the snapshot.
19
+ *
20
+ * The handle returned from `saveCheckpoint` carries enough information to
21
+ * `restore` and `discard` the same snapshot later even after the underlying
22
+ * URL scheme changes. The current backend reference points at
23
+ * `(slotId, filename)` and can evolve without changing callers.
24
+ *
25
+ * **MockCheckpointManager** stores a caller-supplied snapshot (token sequence
26
+ * + arbitrary metadata) in memory keyed by the handle. Tests use it to drive
27
+ * the voice state machine deterministically without spinning up a real
28
+ * checkpoint runtime.
29
+ */
30
+ import { type CheckpointFetch, type CheckpointHandle as RestCheckpointHandle } from "../checkpoint-client";
31
+ /**
32
+ * Opaque-to-callers handle returned by `saveCheckpoint`. The fields are
33
+ * exposed so tests can assert on them but callers should treat the handle
34
+ * as an opaque blob.
35
+ */
36
+ export interface CheckpointHandle {
37
+ /**
38
+ * Caller-supplied conversation/turn-scoped slot id. Maps onto the REST
39
+ * `slotId` today; on v1 it maps onto the upstream checkpoint-server's
40
+ * session id.
41
+ */
42
+ slotId: string;
43
+ /**
44
+ * Human-readable name passed to `saveCheckpoint`. Used as part of the
45
+ * REST filename today (`C1-<slotId>-<name>`).
46
+ */
47
+ name: string;
48
+ /**
49
+ * Monotonically increasing per-manager id. Lets tests assert that two
50
+ * checkpoints from the same `(slotId, name)` are distinct.
51
+ */
52
+ id: number;
53
+ /** ISO timestamp of the save call. */
54
+ createdAt: string;
55
+ /**
56
+ * Backend-specific reference. For the REST-backed manager this is the
57
+ * `CheckpointClient` handle (`{slotId: number, filename: string,
58
+ * createdAt: string}`). For the mock manager this is `null` (the mock
59
+ * is keyed by the handle's `id` field).
60
+ */
61
+ readonly backendRef: RestCheckpointHandle | null;
62
+ }
63
+ /**
64
+ * Common interface implemented by both `CheckpointManager` (REST-backed)
65
+ * and `MockCheckpointManager` (in-memory). The voice state machine accepts
66
+ * this interface so tests can substitute the mock.
67
+ */
68
+ export interface CheckpointManagerLike {
69
+ /**
70
+ * Snapshot the slot's KV state. Returns a handle the caller passes back
71
+ * to `restoreCheckpoint` / `discardCheckpoint`. Each call returns a new
72
+ * handle; identical `(slotId, name)` pairs do NOT alias.
73
+ */
74
+ saveCheckpoint(slotId: string, name: string): Promise<CheckpointHandle>;
75
+ /**
76
+ * Restore a previously-saved snapshot. After `restore`, the handle is
77
+ * still valid — the same checkpoint can be restored again (e.g. for two
78
+ * consecutive barge-ins against the same C1).
79
+ */
80
+ restoreCheckpoint(handle: CheckpointHandle): Promise<void>;
81
+ /**
82
+ * Free server-side storage for `handle`. After `discard`, the handle is
83
+ * invalid; subsequent restore/discard calls reject with
84
+ * `CheckpointHandleInvalidError`.
85
+ */
86
+ discardCheckpoint(handle: CheckpointHandle): Promise<void>;
87
+ }
88
+ /**
89
+ * Raised when a caller passes a handle that this manager did not create,
90
+ * or that has already been `discardCheckpoint`-ed. Distinct from REST
91
+ * errors (which surface as `CheckpointHttpError` from the client).
92
+ */
93
+ export declare class CheckpointHandleInvalidError extends Error {
94
+ constructor(message: string);
95
+ }
96
+ export interface CheckpointManagerOptions {
97
+ /**
98
+ * Base URL of the checkpoint runtime. Same shape as
99
+ * `CheckpointClient` — `http://host:port`.
100
+ */
101
+ baseUrl: string;
102
+ /**
103
+ * Slot-id-string → numeric slot-id mapping. The REST layer takes a
104
+ * non-negative integer; voice callers prefer string ids that travel
105
+ * with the conversation/turn id. Defaults to a hash of the string.
106
+ */
107
+ resolveSlotId?: (slotIdString: string) => number;
108
+ /** Optional custom fetch (mostly for unit-testing the REST surface). */
109
+ fetchImpl?: CheckpointFetch;
110
+ /**
111
+ * Default per-request timeout (ms). Forwarded to `CheckpointClient`. The
112
+ * REST checkpoint REST surface is latency-critical on the restore path —
113
+ * keep this short.
114
+ */
115
+ requestTimeoutMs?: number;
116
+ /**
117
+ * Source of monotonically increasing ids. Injected for deterministic
118
+ * tests; defaults to a per-manager counter.
119
+ */
120
+ now?: () => Date;
121
+ }
122
+ /**
123
+ * REST-backed `CheckpointManager`. Wraps `CheckpointClient` and exposes
124
+ * the slot-agnostic save/restore/discard contract. The class is stateful
125
+ * only in so far as it tracks which handles are still live so a double-
126
+ * `discard` is detected; the actual snapshot lives in the runtime's
127
+ * `--slot-save-path` directory.
128
+ */
129
+ export declare class CheckpointManager implements CheckpointManagerLike {
130
+ private readonly client;
131
+ private readonly resolveSlotId;
132
+ private readonly now;
133
+ private nextId;
134
+ private readonly live;
135
+ constructor(opts: CheckpointManagerOptions);
136
+ saveCheckpoint(slotId: string, name: string): Promise<CheckpointHandle>;
137
+ restoreCheckpoint(handle: CheckpointHandle): Promise<void>;
138
+ discardCheckpoint(handle: CheckpointHandle): Promise<void>;
139
+ /**
140
+ * Probe the underlying runtime for checkpoint support. Forwarded
141
+ * from `CheckpointClient.probeSupported`. Callers gate the feature flag
142
+ * on this.
143
+ */
144
+ probeSupported(signal?: AbortSignal): Promise<boolean>;
145
+ private assertLive;
146
+ }
147
+ /**
148
+ * Caller-supplied snapshot the mock stores against a handle. The voice
149
+ * state machine tests use this to record the token sequence at the
150
+ * `speech-pause` instant and assert that a barge-in restores the same
151
+ * sequence.
152
+ */
153
+ export interface MockCheckpointSnapshot {
154
+ /** Token ids at the time of `saveCheckpoint`. */
155
+ tokens: readonly number[];
156
+ /** Free-form metadata (partial transcript, turn id, etc.). */
157
+ metadata?: Record<string, unknown>;
158
+ }
159
+ export type MockSnapshotSource = (slotId: string, name: string) => MockCheckpointSnapshot;
160
+ /**
161
+ * In-memory `CheckpointManager` for tests. Records every save / restore /
162
+ * discard call so tests can assert on them, and stores a snapshot of the
163
+ * token sequence keyed by handle.
164
+ */
165
+ export declare class MockCheckpointManager implements CheckpointManagerLike {
166
+ private readonly snapshotSource?;
167
+ private nextId;
168
+ private readonly snapshots;
169
+ /**
170
+ * Operations recorded in arrival order. Useful for assertions like
171
+ * "discard happened after restore".
172
+ */
173
+ readonly operations: Array<{
174
+ kind: "save";
175
+ slotId: string;
176
+ name: string;
177
+ handleId: number;
178
+ } | {
179
+ kind: "restore";
180
+ handleId: number;
181
+ } | {
182
+ kind: "discard";
183
+ handleId: number;
184
+ }>;
185
+ /**
186
+ * Token sequence the active "slot" most recently restored to. Lets
187
+ * tests assert that a restore actually replayed the saved tokens.
188
+ */
189
+ currentTokens: readonly number[];
190
+ constructor(snapshotSource?: MockSnapshotSource | undefined);
191
+ saveCheckpoint(slotId: string, name: string): Promise<CheckpointHandle>;
192
+ restoreCheckpoint(handle: CheckpointHandle): Promise<void>;
193
+ discardCheckpoint(handle: CheckpointHandle): Promise<void>;
194
+ /** Live handles count — for leak assertions. */
195
+ liveHandleCount(): number;
196
+ /** Look up the snapshot saved against `handle.id`. */
197
+ snapshotFor(handle: CheckpointHandle): MockCheckpointSnapshot | undefined;
198
+ }
199
+ //# sourceMappingURL=checkpoint-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.d.ts","sourceRoot":"","sources":["../../../src/services/voice/checkpoint-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Voice checkpoint policy — thin VAD-event → checkpoint-op translator that
3
+ * sits between the voice loop (turn-controller / pipeline / vad) and the
4
+ * `GatedCheckpointManager` (`../checkpoint-manager.ts`).
5
+ *
6
+ * Why a separate policy module?
7
+ *
8
+ * - The constraint envelope on this scaffold explicitly forbids editing
9
+ * `turn-controller.ts`, `pipeline.ts`, `pipeline-impls.ts`, `vad.ts`,
10
+ * `scheduler.ts`, `phrase-chunker.ts`, `barge-in.ts`, `transcriber.ts`,
11
+ * and anything under `voice/kokoro/` / `voice/streaming-asr/`. Those
12
+ * files are owned by other agents.
13
+ * - But the upstream merge for `--ctx-checkpoints` lands "any week now,"
14
+ * and the JS-side rollback policy is what the merge unlocks. So the
15
+ * policy lives here as a free-standing module that the turn controller
16
+ * can pick up in a follow-up PR by injecting it into its VAD handler
17
+ * and calling `onSpeechPause` / `onSpeechResume` / `onSpeechEndCommit`
18
+ * / `onHardStop` at the matching transitions.
19
+ * - The wiring required in `turn-controller.ts` is documented in the
20
+ * `WIRING-INSTRUCTIONS` comment at the bottom of this file and in
21
+ * `docs/eliza-1-ctx-checkpoints-integration.md`. We intentionally do
22
+ * NOT apply the wiring here — that is a follow-up PR scoped to the
23
+ * turn-controller owner.
24
+ *
25
+ * Policy summary (one C1 per turn, named `pre-speculative-T<turnId>`):
26
+ *
27
+ * - `onSpeechPause(turnId)` — VAD reports the user stopped speaking but
28
+ * hangover hasn't elapsed. Save C1 and let the caller kick the
29
+ * speculative drafter. If the save fails the policy logs and continues
30
+ * (callers MUST treat speculative work as best-effort).
31
+ *
32
+ * - `onSpeechResume(turnId)` — VAD fires `speech-active` within the
33
+ * rollback window. If we previously kicked a speculative draft (the
34
+ * caller flips `speculativeFired=true` to tell us), restore C1 so the
35
+ * KV state is rolled back to the pre-draft point. Otherwise no-op.
36
+ *
37
+ * - `onSpeechEndCommit(turnId)` — VAD's hangover elapsed; the pause was a
38
+ * real turn boundary. The speculative draft is promoted. Erase C1: we
39
+ * no longer need a rollback target for this turn.
40
+ *
41
+ * - `onHardStop(turnId)` — caller-initiated cancellation (e.g. user
42
+ * pressed mute, app backgrounded). If C1 exists, prefer restoring to
43
+ * it so the KV cache is in a known-clean state for the next turn; if
44
+ * C1 isn't around, fall back to `cancel` (the gated manager will
45
+ * either issue `DELETE /slots/<id>` or invoke the SSE-disconnect
46
+ * callback depending on the gate).
47
+ *
48
+ * All four hooks are idempotent and survive a missing C1 by no-op'ing.
49
+ * Errors from the underlying manager are caught and reported through the
50
+ * `events.onError` sink — the policy NEVER throws back into the voice
51
+ * loop, because a failing checkpoint endpoint must not be able to break
52
+ * audio.
53
+ *
54
+ * The policy holds no state of its own beyond the per-turn name; the
55
+ * `GatedCheckpointManager` owns the registry, the REST client, and the
56
+ * capability cache.
57
+ *
58
+ * --- WIRING-INSTRUCTIONS (turn-controller.ts) -----------------------------
59
+ *
60
+ * The turn-controller owner adds (after the upstream merge lands):
61
+ *
62
+ * 1. Construct a `GatedCheckpointManager` once at session start and
63
+ * pass it into a `CheckpointPolicy` instance (one per slot).
64
+ * 2. In the VAD `speech-pause` handler, immediately after the pause
65
+ * hangover timer is armed:
66
+ *
67
+ * await policy.onSpeechPause(this.turnId, this.slotId);
68
+ * // ...kick speculative drafter against the partial transcript
69
+ *
70
+ * 3. In the VAD `speech-active` handler (only when arriving within the
71
+ * rollback window — the controller already tracks this):
72
+ *
73
+ * await policy.onSpeechResume(this.turnId, this.slotId, {
74
+ * speculativeFired: this.speculativeFired,
75
+ * });
76
+ * // ...abort the speculative drafter
77
+ *
78
+ * 4. In the `speech-end` → SPEAKING transition (after the verifier
79
+ * promotes the draft):
80
+ *
81
+ * await policy.onSpeechEndCommit(this.turnId, this.slotId);
82
+ *
83
+ * 5. In the `dispose()` path and any other hard-stop site (mute, app
84
+ * background, error shutdown, barge-in mid-SPEAKING):
85
+ *
86
+ * await policy.onHardStop(this.turnId, this.slotId, () => {
87
+ * this.speculativeAbort?.abort(); // SSE-disconnect callback
88
+ * });
89
+ *
90
+ * 6. Feature flag: pass `useCtxCheckpoints` through to the
91
+ * `GatedCheckpointManager` constructor; when off the policy still
92
+ * runs but every call is a logged no-op.
93
+ *
94
+ * The turn-controller must NOT call `mgr.save/restore/erase/cancel`
95
+ * directly — those names are reserved for the policy so the gated/no-op
96
+ * branching stays in one place. The `policy.events.onError` sink lets the
97
+ * controller forward checkpoint failures into its existing voice-loop
98
+ * telemetry without coupling to the REST error type.
99
+ */
100
+ import type { CheckpointHandle, GatedCheckpointManager, SseDisconnectFn } from "../checkpoint-manager";
101
+ /**
102
+ * Errors are surfaced through this sink rather than rethrown. The voice
103
+ * loop wires it into its existing telemetry; tests assert on it directly.
104
+ */
105
+ export interface CheckpointPolicyEvents {
106
+ onError?(op: "save" | "restore" | "erase" | "cancel", error: unknown, turnId: string): void;
107
+ /**
108
+ * Called after a successful save so callers can record the handle in
109
+ * their per-turn state if they want to bypass the name-based lookup on
110
+ * the matching restore.
111
+ */
112
+ onSaved?(turnId: string, handle: CheckpointHandle): void;
113
+ /** Called after a successful restore. */
114
+ onRestored?(turnId: string, handle: CheckpointHandle): void;
115
+ /** Called when the policy decides to no-op (registry miss, gate off). */
116
+ onNoop?(op: "save" | "restore" | "erase" | "cancel", turnId: string, reason: "gate-off" | "registry-miss" | "no-speculative"): void;
117
+ }
118
+ export interface CheckpointPolicyOptions {
119
+ /** Gated manager. Owned by the caller; one per session. */
120
+ manager: GatedCheckpointManager;
121
+ /** Events sink (errors + observability). Optional. */
122
+ events?: CheckpointPolicyEvents;
123
+ }
124
+ /** Optional second arg to `onSpeechResume` so the policy knows whether
125
+ * a speculative draft actually fired. When `false`, the resume is a no-op
126
+ * (no draft means nothing to roll back).
127
+ */
128
+ export interface SpeechResumeContext {
129
+ speculativeFired: boolean;
130
+ }
131
+ /**
132
+ * Voice checkpoint policy. Stateless w.r.t. checkpoints (the manager owns
133
+ * the registry) — only holds the manager + event sink. One instance per
134
+ * voice session is enough; the `turnId` argument scopes each operation.
135
+ */
136
+ export declare class CheckpointPolicy {
137
+ private readonly manager;
138
+ private readonly events;
139
+ constructor(opts: CheckpointPolicyOptions);
140
+ /**
141
+ * VAD `speech-pause`. Save C1. Caller kicks the speculative drafter on
142
+ * its own — the policy doesn't care; it just guarantees the rollback
143
+ * target exists.
144
+ */
145
+ onSpeechPause(turnId: string, slotId: number): Promise<void>;
146
+ /**
147
+ * VAD `speech-active` within the rollback window. Restore C1 ONLY if
148
+ * the caller actually kicked a speculative draft — otherwise the KV
149
+ * state hasn't been mutated and we'd be doing a needless REST round
150
+ * trip.
151
+ */
152
+ onSpeechResume(turnId: string, slotId: number, ctx: SpeechResumeContext): Promise<void>;
153
+ /**
154
+ * VAD's hangover elapsed → real turn boundary. Speculative draft is
155
+ * being promoted, so C1 is no longer needed. Erase frees the registry
156
+ * slot (the server-side LRU handles its own eviction independently).
157
+ */
158
+ onSpeechEndCommit(turnId: string, slotId: number): Promise<void>;
159
+ /**
160
+ * Hard-stop: caller-initiated cancellation. Prefer rolling back to C1
161
+ * (clean KV state for the next turn) when available, else cancel any
162
+ * in-flight decode on the slot. `sseDisconnect` is the existing voice-
163
+ * loop abort hook — required because the gated manager falls back to
164
+ * it when the REST endpoints aren't available.
165
+ */
166
+ onHardStop(turnId: string, slotId: number, sseDisconnect: SseDisconnectFn): Promise<void>;
167
+ }
168
+ /**
169
+ * Per-turn checkpoint name. Keeps the namespace stable so a hard-stop
170
+ * after a normal commit doesn't collide with the next turn's C1.
171
+ *
172
+ * The format is the only thing callers outside the policy ever see —
173
+ * `GatedCheckpointManager.getNamedHandle('pre-speculative-T123')` returns
174
+ * the same handle the policy used. Keep it stable; if the format changes
175
+ * in a later change, audit every consumer of `getNamedHandle`.
176
+ */
177
+ export declare function checkpointNameFor(turnId: string): string;
178
+ //# sourceMappingURL=checkpoint-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-policy.d.ts","sourceRoot":"","sources":["../../../src/services/voice/checkpoint-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AAGH,OAAO,KAAK,EACX,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,OAAO,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,EAC3C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACZ,IAAI,CAAC;IACR;;;;OAIG;IACH,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzD,yCAAyC;IACzC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5D,yEAAyE;IACzE,MAAM,CAAC,CACN,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,EAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,GACrD,IAAI,CAAC;CACR;AAED,MAAM,WAAW,uBAAuB;IACvC,2DAA2D;IAC3D,OAAO,EAAE,sBAAsB,CAAC;IAChC,sDAAsD;IACtD,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,gBAAgB,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,IAAI,EAAE,uBAAuB;IAKzC;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE;;;;;OAKG;IACG,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,IAAI,CAAC;IAqChB;;;;OAIG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtE;;;;;;OAMG;IACG,UAAU,CACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,eAAe,GAC5B,OAAO,CAAC,IAAI,CAAC;CAyChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOxD"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Voice Workbench corpus augmentation — acoustic degradation DSP (#8785).
3
+ *
4
+ * Real rooms are not clean. The corpus generator produces dry speech; this
5
+ * module degrades it the way a microphone actually hears it: additive room
6
+ * noise at a target SNR, reverberation (near vs far), far-field attenuation,
7
+ * a low-quality/telephone line, and competing background talkers. Every
8
+ * function is PURE and DETERMINISTIC (seeded PRNG, no `Math.random`, no I/O), so
9
+ * the same scenario + seed always yields byte-identical audio — a labeled,
10
+ * reproducible corpus the real ASR/diarization/EOT models can be benchmarked
11
+ * against, and the DSP itself is unit-testable in CI with no models.
12
+ *
13
+ * Layering: this module knows nothing about scenarios. It operates on mono
14
+ * `Float32Array` PCM at a given sample rate. `corpus-generator.ts` translates a
15
+ * scenario's declarative {@link AugmentationSpec} into these calls.
16
+ */
17
+ /** Root-mean-square amplitude over [start, end). */
18
+ export declare function measureRms(pcm: Float32Array, start?: number, end?: number): number;
19
+ /** Peak absolute amplitude over [start, end). */
20
+ export declare function measurePeak(pcm: Float32Array, start?: number, end?: number): number;
21
+ /** Linear amplitude ratio for a dB gain (+6 dB ≈ ×2, −6 dB ≈ ×0.5). */
22
+ export declare function dbToGain(db: number): number;
23
+ /** Estimated SNR (dB) of a signal region against a noise-only region. */
24
+ export declare function estimateSnrDb(signalRms: number, noiseRms: number): number;
25
+ export type NoiseKind = "white" | "pink" | "music";
26
+ /**
27
+ * Add background noise at a target SNR (dB) relative to the signal's voiced RMS.
28
+ * Lower `snrDb` = noisier. `pink` is a one-pole-filtered approximation of 1/f
29
+ * room rumble; `white` is flat; `music` is a seeded harmonic chord (a few
30
+ * detuned partials under a slow tremolo) — tonal and sustained, the kind of
31
+ * steady background that fools an energy-only VAD where flat hiss would not.
32
+ * The noise floor is added across the WHOLE stream (including silent gaps) so
33
+ * silence is no longer pristine — exactly the condition that makes a real
34
+ * VAD/EOT classifier work for its living.
35
+ */
36
+ export declare function addNoise(pcm: Float32Array, opts: {
37
+ snrDb: number;
38
+ kind?: NoiseKind;
39
+ seed?: number;
40
+ }): Float32Array;
41
+ /**
42
+ * Simulate a low-quality / telephone line: band-limit to ~300–3400 Hz then
43
+ * companded 8-bit quantization. Cheap mics and phone codecs strip the highs and
44
+ * add quantization grunge, which is the dominant real-world ASR stressor for
45
+ * "voices near and far" / low-quality input.
46
+ */
47
+ export declare function applyLowQualityLine(pcm: Float32Array, sampleRate: number): Float32Array;
48
+ /**
49
+ * Freeverb-style Schroeder reverb (4 parallel combs → 2 series allpasses),
50
+ * mixed with the dry signal. `room` (0..1) sets reflection density/decay;
51
+ * `wet` (0..1) the reflected level. Reverb spreads energy in time — speech
52
+ * keeps ringing after the talker stops — which is what makes a far/reverberant
53
+ * voice hard to endpoint and to diarize. The output is `dry.length + tail`
54
+ * samples so the decay is preserved (callers may keep or trim the tail).
55
+ */
56
+ export declare function applyReverb(pcm: Float32Array, sampleRate: number, opts?: {
57
+ room?: number;
58
+ wet?: number;
59
+ tailSec?: number;
60
+ }): Float32Array;
61
+ /** Multiply the whole stream by a dB gain (far-field attenuation = negative). */
62
+ export declare function applyGainDb(pcm: Float32Array, db: number): Float32Array;
63
+ /**
64
+ * Mix an overlay stream (a competing talker, babble, or the agent's own TTS for
65
+ * an echo test) into a base stream at a given level, starting at `offsetSamples`
66
+ * and optionally looping the overlay to cover the base. The base length is
67
+ * preserved. Returns a new array; neither input is mutated.
68
+ */
69
+ export declare function mixInto(base: Float32Array, overlay: Float32Array, opts?: {
70
+ gainDb?: number;
71
+ offsetSamples?: number;
72
+ loop?: boolean;
73
+ }): Float32Array;
74
+ /** Declarative degradation for one stream (the scenario's `environment`). */
75
+ export interface AugmentationSpec {
76
+ /** Additive room-noise SNR (dB) relative to voiced speech. Lower = noisier. */
77
+ noiseSnrDb?: number;
78
+ /** Noise character (default white). */
79
+ noiseKind?: NoiseKind;
80
+ /** Reverb room size 0..1 (near→far, small→large room). */
81
+ reverb?: number;
82
+ /** Reverb wet level 0..1 (defaults from `reverb` when omitted). */
83
+ reverbWet?: number;
84
+ /** Far-field attenuation in dB (how many dB QUIETER; positive number). */
85
+ farFieldDb?: number;
86
+ /** Band-limit + 8-bit companding (telephone / cheap-mic line). */
87
+ lowQuality?: boolean;
88
+ /** Competing background talkers, mixed this many dB BELOW the speech. */
89
+ backgroundTalkersDb?: number;
90
+ /** Deterministic seed for noise/babble. */
91
+ seed?: number;
92
+ }
93
+ /** True when the spec asks for any degradation at all. */
94
+ export declare function specIsClean(spec: AugmentationSpec | undefined): boolean;
95
+ export interface AugmentPcmOptions {
96
+ /**
97
+ * A babble source (a competing-talker stream) for `backgroundTalkersDb`.
98
+ * The generator supplies one synthesized from other voices; omitted = no
99
+ * background talkers even if the spec asks (the runner logs the gap).
100
+ */
101
+ babble?: Float32Array;
102
+ /** Trim reverb tail back to the input length (keeps corpus timing exact). */
103
+ trimReverbTail?: boolean;
104
+ }
105
+ /**
106
+ * Apply a full degradation chain to one stream, in acoustically sensible order:
107
+ * background talkers → reverb (room reflections) → far-field gain → low-quality
108
+ * line → additive noise floor. Pure; returns a new array.
109
+ */
110
+ export declare function augmentPcm(pcm: Float32Array, sampleRate: number, spec: AugmentationSpec, options?: AugmentPcmOptions): Float32Array;
111
+ //# sourceMappingURL=corpus-augment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus-augment.d.ts","sourceRoot":"","sources":["../../../src/services/voice/corpus-augment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuBH,oDAAoD;AACpD,wBAAgB,UAAU,CACzB,GAAG,EAAE,YAAY,EACjB,KAAK,SAAI,EACT,GAAG,SAAa,GACd,MAAM,CAOR;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAC1B,GAAG,EAAE,YAAY,EACjB,KAAK,SAAI,EACT,GAAG,SAAa,GACd,MAAM,CASR;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,YAAY,CAoDd;AAkFD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,GAChB,YAAY,CAKd;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAC1B,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D,YAAY,CA+Cd;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACtB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACpE,YAAY,CAad;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAChC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CASvE;AAED,MAAM,WAAW,iBAAiB;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,iBAAsB,GAC7B,YAAY,CA0Dd"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Voice Workbench corpus generator (#8785).
3
+ *
4
+ * Turns a declarative {@link VoiceScenario} into one labeled audio stream + a
5
+ * ground-truth JSON the headless runner scores against. Two synthesis paths,
6
+ * one shape:
7
+ *
8
+ * - Synthetic (default, deterministic, NO native model): formant-resonator
9
+ * speech-like PCM (`__test-helpers__/synthetic-speech.ts`) the Silero VAD
10
+ * reads as speech. Reproducible in CI with no artifacts — it exercises the
11
+ * pipeline plumbing + the scorers/labels, not diarization/WER *accuracy*.
12
+ * - Real TTS (gated): an injected {@link CorpusTtsSynthesizer} (Kokoro /
13
+ * OmniVoice via the TTS route) produces natural speech. Real diarization
14
+ * DER and transcription WER benchmarking need this path.
15
+ *
16
+ * `generateVoiceCorpus` is pure (no I/O) so it is unit-testable without disk;
17
+ * `writeVoiceCorpus` / `readVoiceCorpus` handle the versioned on-disk corpus.
18
+ * A turn's labels (speaker, transcript, respond decision, entity) come straight
19
+ * from the scenario, so the ground truth is reproducible regardless of path.
20
+ */
21
+ import { type VoiceEnvironment, type VoiceScenario } from "./voice-scenario";
22
+ /** Per-turn ground-truth label with sample-accurate timing. */
23
+ export interface CorpusTurnLabel {
24
+ index: number;
25
+ /** Diarization ground-truth label (the participant who spoke). */
26
+ speaker: string;
27
+ /** Resolved elizaOS entity id for the speaker, when the scenario binds one. */
28
+ entityId?: string;
29
+ /** First sample of voiced speech in this turn (after any lead silence). */
30
+ speechStartSample: number;
31
+ /** Sample just past the voiced speech (before trailing pauses). */
32
+ speechEndSample: number;
33
+ /** First sample of this turn's whole segment in the stream. */
34
+ segmentStartSample: number;
35
+ /** Sample just past this turn's whole segment (incl. trailing pauses). */
36
+ segmentEndSample: number;
37
+ /** Reference transcript for WER scoring. */
38
+ referenceTranscript: string;
39
+ /** Ground truth: should the agent respond to this turn? */
40
+ expectRespond: boolean;
41
+ /** Ground truth: is this segment a real end-of-turn boundary? */
42
+ expectEndOfTurn?: boolean;
43
+ /** Expected inferred/recognized entity, when the scenario asserts one. */
44
+ expectedEntity?: string;
45
+ /** TTS voice id used for this turn (real-TTS path), when set. */
46
+ ttsVoiceId?: string;
47
+ /** True when this turn was formant-synthesized rather than real TTS. */
48
+ synthetic: boolean;
49
+ /** Acoustic degradation applied to this turn's audio (when any). */
50
+ environment?: VoiceEnvironment;
51
+ /** True when this "turn" is the agent's own TTS echoed back (not a user turn). */
52
+ isAgentEcho?: boolean;
53
+ /** Ground truth: the speaker is the device owner / primary enrolled voice. */
54
+ isOwner?: boolean;
55
+ /** The agent's spoken reply to this turn (drives the echo gate downstream). */
56
+ agentReplyText?: string;
57
+ }
58
+ /**
59
+ * On-disk corpus ground-truth schema version. Bump when the labeled-corpus
60
+ * shape changes incompatibly; `readVoiceCorpusGroundTruth` treats a corpus
61
+ * written by a different version as absent (→ `skipped`, never a stale `pass`).
62
+ */
63
+ export declare const CORPUS_SCHEMA_VERSION = 1;
64
+ export interface CorpusGroundTruth {
65
+ /** Labeled-corpus schema version (see {@link CORPUS_SCHEMA_VERSION}). */
66
+ schemaVersion: number;
67
+ scenarioId: string;
68
+ classes: VoiceScenario["classes"];
69
+ sampleRate: number;
70
+ totalSamples: number;
71
+ durationSec: number;
72
+ participants: Array<{
73
+ label: string;
74
+ entityId?: string;
75
+ isOwner?: boolean;
76
+ ttsVoiceId?: string;
77
+ }>;
78
+ agents?: string[];
79
+ /** Entity ids the agent answers without a wake word (owner + enrolled). */
80
+ knownSpeakerEntityIds?: string[];
81
+ turns: CorpusTurnLabel[];
82
+ /** True when EVERY turn was synthetic (no real TTS used anywhere). */
83
+ synthetic: boolean;
84
+ }
85
+ export interface GeneratedVoiceCorpus {
86
+ pcm: Float32Array;
87
+ sampleRate: number;
88
+ groundTruth: CorpusGroundTruth;
89
+ }
90
+ /**
91
+ * Real-TTS synthesizer. Gated: when omitted, the generator uses deterministic
92
+ * synthetic speech. An implementation wraps the TTS route / Kokoro engine and
93
+ * returns mono PCM at the requested sample rate.
94
+ */
95
+ export interface CorpusTtsSynthesizer {
96
+ synthesize(args: {
97
+ text: string;
98
+ voiceId?: string;
99
+ speakerLabel: string;
100
+ turnIndex: number;
101
+ isAgentEcho: boolean;
102
+ sampleRate: number;
103
+ }): Promise<Float32Array>;
104
+ }
105
+ export interface GenerateVoiceCorpusOptions {
106
+ sampleRate?: number;
107
+ /** Inject a real-TTS synthesizer to produce natural speech (else synthetic). */
108
+ synthesizer?: CorpusTtsSynthesizer;
109
+ /** Silence (s) spliced after a turn that declares no explicit pauses. */
110
+ interTurnSilenceSec?: number;
111
+ /** Synthetic-speech sizing: characters of text per second of audio. */
112
+ charsPerSecond?: number;
113
+ }
114
+ /**
115
+ * Generate one labeled audio stream for a scenario. Throws on an invalid
116
+ * scenario (fail loud — a malformed corpus must not silently produce garbage).
117
+ * A turn that carries only `audioRef` (no `text`) is not synthesizable here and
118
+ * is rejected; pre-rendered audio is supplied through the corpus on disk.
119
+ */
120
+ export declare function generateVoiceCorpus(scenario: VoiceScenario, options?: GenerateVoiceCorpusOptions): Promise<GeneratedVoiceCorpus>;
121
+ export interface VoiceCorpusPaths {
122
+ dir: string;
123
+ audioPath: string;
124
+ groundTruthPath: string;
125
+ }
126
+ /** Persist a generated corpus as `audio.wav` + `ground-truth.json` under `dir`. */
127
+ export declare function writeVoiceCorpus(corpus: GeneratedVoiceCorpus, dir: string): VoiceCorpusPaths;
128
+ /**
129
+ * Read a previously-written corpus's ground truth. Returns null when the corpus
130
+ * directory or its ground-truth file is absent (the honesty contract — the
131
+ * runner reports `skipped`, never `pass`, when corpus artifacts are missing).
132
+ */
133
+ export declare function readVoiceCorpusGroundTruth(dir: string): CorpusGroundTruth | null;
134
+ //# sourceMappingURL=corpus-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus-generator.d.ts","sourceRoot":"","sources":["../../../src/services/voice/corpus-generator.ts"],"names":[],"mappings":"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"}