@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.11-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/package.json +81 -15
  4. package/src/actions/generate-media.d.ts +59 -0
  5. package/src/actions/generate-media.d.ts.map +1 -0
  6. package/src/actions/generate-media.ts +647 -0
  7. package/src/actions/identify-speaker.d.ts +23 -0
  8. package/src/actions/identify-speaker.d.ts.map +1 -0
  9. package/src/actions/identify-speaker.ts +171 -0
  10. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  11. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  12. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  13. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  14. package/src/adapters/capacitor-llama/environment.ts +71 -0
  15. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  16. package/src/adapters/capacitor-llama/index.ts +807 -0
  17. package/src/adapters/capacitor-llama/loader.ts +109 -0
  18. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  19. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  20. package/src/adapters/capacitor-llama/types.ts +374 -0
  21. package/src/backends/apple-foundation.ts +127 -0
  22. package/src/index.d.ts +7 -0
  23. package/src/index.d.ts.map +1 -0
  24. package/src/index.ts +54 -0
  25. package/src/local-inference-routes.d.ts +38 -0
  26. package/src/local-inference-routes.d.ts.map +1 -0
  27. package/src/local-inference-routes.test.ts +344 -0
  28. package/src/local-inference-routes.ts +1543 -0
  29. package/src/provider.d.ts +21 -0
  30. package/src/provider.d.ts.map +1 -0
  31. package/src/provider.ts +1171 -0
  32. package/src/routes/compat-helpers.d.ts +18 -0
  33. package/src/routes/compat-helpers.d.ts.map +1 -0
  34. package/src/routes/compat-helpers.ts +274 -0
  35. package/src/routes/family-member-route.d.ts +62 -0
  36. package/src/routes/family-member-route.d.ts.map +1 -0
  37. package/src/routes/family-member-route.ts +353 -0
  38. package/src/routes/index.d.ts +19 -0
  39. package/src/routes/index.d.ts.map +1 -0
  40. package/src/routes/index.ts +60 -0
  41. package/src/routes/live-diarization-route.d.ts +26 -0
  42. package/src/routes/live-diarization-route.d.ts.map +1 -0
  43. package/src/routes/live-diarization-route.test.ts +213 -0
  44. package/src/routes/live-diarization-route.ts +122 -0
  45. package/src/routes/local-inference-asr-route.d.ts +4 -0
  46. package/src/routes/local-inference-asr-route.d.ts.map +1 -0
  47. package/src/routes/local-inference-asr-route.test.ts +190 -0
  48. package/src/routes/local-inference-asr-route.ts +213 -0
  49. package/src/routes/local-inference-compat-routes.d.ts +16 -0
  50. package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
  51. package/src/routes/local-inference-compat-routes.test.ts +423 -0
  52. package/src/routes/local-inference-compat-routes.ts +782 -0
  53. package/src/routes/local-inference-tts-route.d.ts +7 -0
  54. package/src/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/src/routes/local-inference-tts-route.test.ts +179 -0
  56. package/src/routes/local-inference-tts-route.ts +230 -0
  57. package/src/routes/voice-first-run-routes.d.ts +62 -0
  58. package/src/routes/voice-first-run-routes.d.ts.map +1 -0
  59. package/src/routes/voice-first-run-routes.ts +524 -0
  60. package/src/routes/voice-models-routes.d.ts +62 -0
  61. package/src/routes/voice-models-routes.d.ts.map +1 -0
  62. package/src/routes/voice-models-routes.ts +554 -0
  63. package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
  64. package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  65. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  66. package/src/routes/voice-profiles-management-routes.d.ts +52 -0
  67. package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
  68. package/src/routes/voice-profiles-management-routes.ts +476 -0
  69. package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  72. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  73. package/src/runtime/capacitor-llama.d.ts +25 -0
  74. package/src/runtime/embedding-manager-support.d.ts +77 -0
  75. package/src/runtime/embedding-manager-support.d.ts.map +1 -0
  76. package/src/runtime/embedding-manager-support.ts +497 -0
  77. package/src/runtime/embedding-presets.d.ts +16 -0
  78. package/src/runtime/embedding-presets.d.ts.map +1 -0
  79. package/src/runtime/embedding-presets.ts +81 -0
  80. package/src/runtime/embedding-warmup-policy.d.ts +14 -0
  81. package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
  82. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  83. package/src/runtime/embedding-warmup-policy.ts +48 -0
  84. package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
  85. package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  86. package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
  87. package/src/runtime/ensure-local-inference-handler.ts +1398 -0
  88. package/src/runtime/index.d.ts +14 -0
  89. package/src/runtime/index.d.ts.map +1 -0
  90. package/src/runtime/index.ts +27 -0
  91. package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
  92. package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  93. package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
  94. package/src/runtime/mobile-local-inference-gate.ts +44 -0
  95. package/src/runtime/voice-entity-binding.d.ts +103 -0
  96. package/src/runtime/voice-entity-binding.d.ts.map +1 -0
  97. package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
  98. package/src/runtime/voice-entity-binding.ts +328 -0
  99. package/src/services/README.md +71 -0
  100. package/src/services/__tests__/backend-selector.test.ts +101 -0
  101. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  102. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  103. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  104. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  105. package/src/services/__tests__/runtime-target.test.ts +176 -0
  106. package/src/services/active-model-switch-rollback.test.ts +183 -0
  107. package/src/services/active-model.d.ts +282 -0
  108. package/src/services/active-model.d.ts.map +1 -0
  109. package/src/services/active-model.ts +1213 -0
  110. package/src/services/asr/errors.d.ts +21 -0
  111. package/src/services/asr/errors.d.ts.map +1 -0
  112. package/src/services/asr/errors.ts +50 -0
  113. package/src/services/asr/hash.d.ts +28 -0
  114. package/src/services/asr/hash.d.ts.map +1 -0
  115. package/src/services/asr/hash.ts +49 -0
  116. package/src/services/asr/index.d.ts +76 -0
  117. package/src/services/asr/index.d.ts.map +1 -0
  118. package/src/services/asr/index.ts +178 -0
  119. package/src/services/asr/types.d.ts +91 -0
  120. package/src/services/asr/types.d.ts.map +1 -0
  121. package/src/services/asr/types.ts +95 -0
  122. package/src/services/assignments.d.ts +71 -0
  123. package/src/services/assignments.d.ts.map +1 -0
  124. package/src/services/assignments.test.ts +80 -0
  125. package/src/services/assignments.ts +230 -0
  126. package/src/services/backend-selector.ts +95 -0
  127. package/src/services/backend.d.ts +346 -0
  128. package/src/services/backend.d.ts.map +1 -0
  129. package/src/services/backend.ts +612 -0
  130. package/src/services/bundled-models.d.ts +34 -0
  131. package/src/services/bundled-models.d.ts.map +1 -0
  132. package/src/services/bundled-models.ts +129 -0
  133. package/src/services/cache-bridge.d.ts +206 -0
  134. package/src/services/cache-bridge.d.ts.map +1 -0
  135. package/src/services/cache-bridge.test.ts +516 -0
  136. package/src/services/cache-bridge.ts +423 -0
  137. package/src/services/catalog.d.ts +10 -0
  138. package/src/services/catalog.d.ts.map +1 -0
  139. package/src/services/catalog.test.ts +240 -0
  140. package/src/services/catalog.ts +27 -0
  141. package/src/services/checkpoint-client.d.ts +109 -0
  142. package/src/services/checkpoint-client.d.ts.map +1 -0
  143. package/src/services/checkpoint-client.ts +258 -0
  144. package/src/services/checkpoint-manager.ts +474 -0
  145. package/src/services/cloud-fallback.d.ts +102 -0
  146. package/src/services/cloud-fallback.d.ts.map +1 -0
  147. package/src/services/cloud-fallback.ts +230 -0
  148. package/src/services/conversation-registry.d.ts +142 -0
  149. package/src/services/conversation-registry.d.ts.map +1 -0
  150. package/src/services/conversation-registry.test.ts +235 -0
  151. package/src/services/conversation-registry.ts +264 -0
  152. package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
  153. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  154. package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
  155. package/src/services/device-bridge.d.ts +188 -0
  156. package/src/services/device-bridge.d.ts.map +1 -0
  157. package/src/services/device-bridge.ts +1237 -0
  158. package/src/services/device-resource-metrics.d.ts +149 -0
  159. package/src/services/device-resource-metrics.d.ts.map +1 -0
  160. package/src/services/device-resource-metrics.test.ts +98 -0
  161. package/src/services/device-resource-metrics.ts +346 -0
  162. package/src/services/device-tier.d.ts +115 -0
  163. package/src/services/device-tier.d.ts.map +1 -0
  164. package/src/services/device-tier.test.ts +371 -0
  165. package/src/services/device-tier.ts +410 -0
  166. package/src/services/downloader.d.ts +82 -0
  167. package/src/services/downloader.d.ts.map +1 -0
  168. package/src/services/downloader.test.ts +724 -0
  169. package/src/services/downloader.ts +899 -0
  170. package/src/services/engine-direct-bundle.test.ts +58 -0
  171. package/src/services/engine-streaming.test.ts +80 -0
  172. package/src/services/engine.d.ts +534 -0
  173. package/src/services/engine.d.ts.map +1 -0
  174. package/src/services/engine.ts +1891 -0
  175. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  176. package/src/services/ensure-local-artifacts.test.ts +368 -0
  177. package/src/services/ensure-local-artifacts.ts +351 -0
  178. package/src/services/external-scanner.d.ts +17 -0
  179. package/src/services/external-scanner.d.ts.map +1 -0
  180. package/src/services/external-scanner.ts +312 -0
  181. package/src/services/ffi-llm-mock.ts +354 -0
  182. package/src/services/ffi-llm-streaming-abi.ts +442 -0
  183. package/src/services/ffi-streaming-backend.d.ts +180 -0
  184. package/src/services/ffi-streaming-backend.d.ts.map +1 -0
  185. package/src/services/ffi-streaming-backend.ts +382 -0
  186. package/src/services/ffi-streaming-runner.d.ts +122 -0
  187. package/src/services/ffi-streaming-runner.d.ts.map +1 -0
  188. package/src/services/ffi-streaming-runner.test.ts +60 -0
  189. package/src/services/ffi-streaming-runner.ts +354 -0
  190. package/src/services/ffi-unload-ordering.test.ts +162 -0
  191. package/src/services/gpu-autotune.ts +534 -0
  192. package/src/services/gpu-detect.ts +139 -0
  193. package/src/services/handler-registry.d.ts +72 -0
  194. package/src/services/handler-registry.d.ts.map +1 -0
  195. package/src/services/handler-registry.ts +240 -0
  196. package/src/services/hardware.d.ts +63 -0
  197. package/src/services/hardware.d.ts.map +1 -0
  198. package/src/services/hardware.test.ts +183 -0
  199. package/src/services/hardware.ts +404 -0
  200. package/src/services/hf-search.d.ts +26 -0
  201. package/src/services/hf-search.d.ts.map +1 -0
  202. package/src/services/hf-search.test.ts +69 -0
  203. package/src/services/hf-search.ts +420 -0
  204. package/src/services/image-description-runtime.d.ts +14 -0
  205. package/src/services/image-description-runtime.d.ts.map +1 -0
  206. package/src/services/image-description-runtime.test.ts +61 -0
  207. package/src/services/image-description-runtime.ts +118 -0
  208. package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
  209. package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  210. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  211. package/src/services/imagegen/backend-selector.d.ts +118 -0
  212. package/src/services/imagegen/backend-selector.d.ts.map +1 -0
  213. package/src/services/imagegen/backend-selector.ts +281 -0
  214. package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
  215. package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  216. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  217. package/src/services/imagegen/errors.d.ts +16 -0
  218. package/src/services/imagegen/errors.d.ts.map +1 -0
  219. package/src/services/imagegen/errors.ts +40 -0
  220. package/src/services/imagegen/index.d.ts +58 -0
  221. package/src/services/imagegen/index.d.ts.map +1 -0
  222. package/src/services/imagegen/index.ts +144 -0
  223. package/src/services/imagegen/mflux.d.ts +74 -0
  224. package/src/services/imagegen/mflux.d.ts.map +1 -0
  225. package/src/services/imagegen/mflux.ts +313 -0
  226. package/src/services/imagegen/sd-cpp.d.ts +180 -0
  227. package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
  228. package/src/services/imagegen/sd-cpp.ts +718 -0
  229. package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  230. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  231. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  232. package/src/services/imagegen/types.d.ts +181 -0
  233. package/src/services/imagegen/types.d.ts.map +1 -0
  234. package/src/services/imagegen/types.ts +193 -0
  235. package/src/services/index.d.ts +30 -0
  236. package/src/services/index.d.ts.map +1 -0
  237. package/src/services/index.ts +225 -0
  238. package/src/services/inference-capabilities.d.ts +132 -0
  239. package/src/services/inference-capabilities.d.ts.map +1 -0
  240. package/src/services/inference-capabilities.test.ts +75 -0
  241. package/src/services/inference-capabilities.ts +204 -0
  242. package/src/services/inference-telemetry.d.ts +59 -0
  243. package/src/services/inference-telemetry.d.ts.map +1 -0
  244. package/src/services/inference-telemetry.ts +143 -0
  245. package/src/services/ios-llama-streaming.ts +248 -0
  246. package/src/services/kv-spill.d.ts +189 -0
  247. package/src/services/kv-spill.d.ts.map +1 -0
  248. package/src/services/kv-spill.test.ts +222 -0
  249. package/src/services/kv-spill.ts +356 -0
  250. package/src/services/latency-trace.d.ts +346 -0
  251. package/src/services/latency-trace.d.ts.map +1 -0
  252. package/src/services/latency-trace.test.ts +266 -0
  253. package/src/services/latency-trace.ts +844 -0
  254. package/src/services/llama-server-metrics.ts +304 -0
  255. package/src/services/llm-streaming-binding.d.ts +96 -0
  256. package/src/services/llm-streaming-binding.d.ts.map +1 -0
  257. package/src/services/llm-streaming-binding.ts +136 -0
  258. package/src/services/load-args.d.ts +82 -0
  259. package/src/services/load-args.d.ts.map +1 -0
  260. package/src/services/load-args.ts +81 -0
  261. package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
  262. package/src/services/manifest/index.d.ts +4 -0
  263. package/src/services/manifest/index.d.ts.map +1 -0
  264. package/src/services/manifest/index.ts +66 -0
  265. package/src/services/manifest/manifest.test.ts +693 -0
  266. package/src/services/manifest/schema.d.ts +715 -0
  267. package/src/services/manifest/schema.d.ts.map +1 -0
  268. package/src/services/manifest/schema.ts +655 -0
  269. package/src/services/manifest/types.d.ts +30 -0
  270. package/src/services/manifest/types.d.ts.map +1 -0
  271. package/src/services/manifest/types.ts +55 -0
  272. package/src/services/manifest/validator.d.ts +66 -0
  273. package/src/services/manifest/validator.d.ts.map +1 -0
  274. package/src/services/manifest/validator.ts +569 -0
  275. package/src/services/memory-arbiter.d.ts +343 -0
  276. package/src/services/memory-arbiter.d.ts.map +1 -0
  277. package/src/services/memory-arbiter.test.ts +419 -0
  278. package/src/services/memory-arbiter.ts +1000 -0
  279. package/src/services/memory-monitor.d.ts +119 -0
  280. package/src/services/memory-monitor.d.ts.map +1 -0
  281. package/src/services/memory-monitor.test.ts +208 -0
  282. package/src/services/memory-monitor.ts +296 -0
  283. package/src/services/memory-pressure.d.ts +127 -0
  284. package/src/services/memory-pressure.d.ts.map +1 -0
  285. package/src/services/memory-pressure.ts +413 -0
  286. package/src/services/mtp-doctor.d.ts +13 -0
  287. package/src/services/mtp-doctor.d.ts.map +1 -0
  288. package/src/services/mtp-doctor.ts +78 -0
  289. package/src/services/network-policy.d.ts +127 -0
  290. package/src/services/network-policy.d.ts.map +1 -0
  291. package/src/services/network-policy.ts +346 -0
  292. package/src/services/paths.d.ts +6 -0
  293. package/src/services/paths.d.ts.map +1 -0
  294. package/src/services/paths.ts +25 -0
  295. package/src/services/planner-skeleton.d.ts +124 -0
  296. package/src/services/planner-skeleton.d.ts.map +1 -0
  297. package/src/services/planner-skeleton.ts +175 -0
  298. package/src/services/providers.d.ts +38 -0
  299. package/src/services/providers.d.ts.map +1 -0
  300. package/src/services/providers.ts +507 -0
  301. package/src/services/ram-budget-cache.test.ts +163 -0
  302. package/src/services/ram-budget.d.ts +110 -0
  303. package/src/services/ram-budget.d.ts.map +1 -0
  304. package/src/services/ram-budget.ts +0 -0
  305. package/src/services/readiness.d.ts +9 -0
  306. package/src/services/readiness.d.ts.map +1 -0
  307. package/src/services/readiness.test.ts +87 -0
  308. package/src/services/readiness.ts +238 -0
  309. package/src/services/recommendation.d.ts +111 -0
  310. package/src/services/recommendation.d.ts.map +1 -0
  311. package/src/services/recommendation.ts +672 -0
  312. package/src/services/registry.d.ts +35 -0
  313. package/src/services/registry.d.ts.map +1 -0
  314. package/src/services/registry.ts +151 -0
  315. package/src/services/router-handler.d.ts +92 -0
  316. package/src/services/router-handler.d.ts.map +1 -0
  317. package/src/services/router-handler.test.ts +45 -0
  318. package/src/services/router-handler.ts +376 -0
  319. package/src/services/routing-policy.d.ts +55 -0
  320. package/src/services/routing-policy.d.ts.map +1 -0
  321. package/src/services/routing-policy.ts +228 -0
  322. package/src/services/routing-preferences.d.ts +8 -0
  323. package/src/services/routing-preferences.d.ts.map +1 -0
  324. package/src/services/routing-preferences.ts +15 -0
  325. package/src/services/runtime-target.d.ts +98 -0
  326. package/src/services/runtime-target.d.ts.map +1 -0
  327. package/src/services/runtime-target.ts +154 -0
  328. package/src/services/service.d.ts +128 -0
  329. package/src/services/service.d.ts.map +1 -0
  330. package/src/services/service.test.ts +223 -0
  331. package/src/services/service.ts +735 -0
  332. package/src/services/session-pool.d.ts +72 -0
  333. package/src/services/session-pool.d.ts.map +1 -0
  334. package/src/services/session-pool.ts +153 -0
  335. package/src/services/structured-output/deterministic-repair.d.ts +23 -0
  336. package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
  337. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  338. package/src/services/structured-output/deterministic-repair.ts +443 -0
  339. package/src/services/structured-output/index.ts +4 -0
  340. package/src/services/structured-output.d.ts +311 -0
  341. package/src/services/structured-output.d.ts.map +1 -0
  342. package/src/services/structured-output.test.ts +483 -0
  343. package/src/services/structured-output.ts +712 -0
  344. package/src/services/transcription-priority.test.ts +211 -0
  345. package/src/services/tts/errors.ts +46 -0
  346. package/src/services/tts/index.ts +214 -0
  347. package/src/services/tts/tts-audio-cache.ts +235 -0
  348. package/src/services/tts/types.ts +157 -0
  349. package/src/services/types.d.ts +19 -0
  350. package/src/services/types.d.ts.map +1 -0
  351. package/src/services/types.ts +55 -0
  352. package/src/services/verify-on-device.d.ts +34 -0
  353. package/src/services/verify-on-device.d.ts.map +1 -0
  354. package/src/services/verify-on-device.test.ts +87 -0
  355. package/src/services/verify-on-device.ts +127 -0
  356. package/src/services/verify.d.ts +8 -0
  357. package/src/services/verify.d.ts.map +1 -0
  358. package/src/services/verify.ts +13 -0
  359. package/src/services/vision/aosp-unavailable.d.ts +115 -0
  360. package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
  361. package/src/services/vision/aosp-unavailable.ts +163 -0
  362. package/src/services/vision/capacitor-llama.d.ts +99 -0
  363. package/src/services/vision/capacitor-llama.d.ts.map +1 -0
  364. package/src/services/vision/capacitor-llama.ts +255 -0
  365. package/src/services/vision/cloud-fallback.d.ts +47 -0
  366. package/src/services/vision/cloud-fallback.d.ts.map +1 -0
  367. package/src/services/vision/cloud-fallback.test.ts +243 -0
  368. package/src/services/vision/cloud-fallback.ts +268 -0
  369. package/src/services/vision/fallback-chain.test.ts +86 -0
  370. package/src/services/vision/hash.d.ts +71 -0
  371. package/src/services/vision/hash.d.ts.map +1 -0
  372. package/src/services/vision/hash.ts +157 -0
  373. package/src/services/vision/index.d.ts +95 -0
  374. package/src/services/vision/index.d.ts.map +1 -0
  375. package/src/services/vision/index.ts +251 -0
  376. package/src/services/vision/llama-server.d.ts +73 -0
  377. package/src/services/vision/llama-server.d.ts.map +1 -0
  378. package/src/services/vision/llama-server.ts +177 -0
  379. package/src/services/vision/types.d.ts +153 -0
  380. package/src/services/vision/types.d.ts.map +1 -0
  381. package/src/services/vision/types.ts +154 -0
  382. package/src/services/vision/vast-fallback.d.ts +18 -0
  383. package/src/services/vision/vast-fallback.d.ts.map +1 -0
  384. package/src/services/vision/vast-fallback.ts +127 -0
  385. package/src/services/vision-embedding-cache.d.ts +98 -0
  386. package/src/services/vision-embedding-cache.d.ts.map +1 -0
  387. package/src/services/vision-embedding-cache.ts +189 -0
  388. package/src/services/voice/VOICE_WORKBENCH.md +88 -0
  389. package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
  390. package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
  391. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  392. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  393. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  394. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  395. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  396. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  397. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  398. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  399. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  400. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  401. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
  402. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  403. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  404. package/src/services/voice/audio-frame-consumer.d.ts +212 -0
  405. package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
  406. package/src/services/voice/audio-frame-consumer.test.ts +343 -0
  407. package/src/services/voice/audio-frame-consumer.ts +491 -0
  408. package/src/services/voice/barge-in.d.ts +112 -0
  409. package/src/services/voice/barge-in.d.ts.map +1 -0
  410. package/src/services/voice/barge-in.test.ts +244 -0
  411. package/src/services/voice/barge-in.ts +336 -0
  412. package/src/services/voice/cancellation-coordinator.d.ts +127 -0
  413. package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
  414. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  415. package/src/services/voice/cancellation-coordinator.ts +269 -0
  416. package/src/services/voice/checkpoint-manager.d.ts +199 -0
  417. package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
  418. package/src/services/voice/checkpoint-manager.ts +401 -0
  419. package/src/services/voice/checkpoint-policy.ts +336 -0
  420. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  421. package/src/services/voice/e2e-harness.test.ts +182 -0
  422. package/src/services/voice/e2e-harness.ts +743 -0
  423. package/src/services/voice/eager-context-builder.d.ts +170 -0
  424. package/src/services/voice/eager-context-builder.d.ts.map +1 -0
  425. package/src/services/voice/eager-context-builder.ts +262 -0
  426. package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
  427. package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  428. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  429. package/src/services/voice/embedding-server.ts +200 -0
  430. package/src/services/voice/embedding.d.ts +133 -0
  431. package/src/services/voice/embedding.d.ts.map +1 -0
  432. package/src/services/voice/embedding.test.ts +148 -0
  433. package/src/services/voice/embedding.ts +244 -0
  434. package/src/services/voice/emotion-attribution.d.ts +68 -0
  435. package/src/services/voice/emotion-attribution.d.ts.map +1 -0
  436. package/src/services/voice/emotion-attribution.test.ts +129 -0
  437. package/src/services/voice/emotion-attribution.ts +361 -0
  438. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  439. package/src/services/voice/engine-bridge.d.ts +746 -0
  440. package/src/services/voice/engine-bridge.d.ts.map +1 -0
  441. package/src/services/voice/engine-bridge.test.ts +384 -0
  442. package/src/services/voice/engine-bridge.ts +2226 -0
  443. package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
  444. package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  445. package/src/services/voice/eot-classifier-ggml.ts +566 -0
  446. package/src/services/voice/eot-classifier.d.ts +214 -0
  447. package/src/services/voice/eot-classifier.d.ts.map +1 -0
  448. package/src/services/voice/eot-classifier.ts +533 -0
  449. package/src/services/voice/errors.d.ts +20 -0
  450. package/src/services/voice/errors.d.ts.map +1 -0
  451. package/src/services/voice/errors.ts +32 -0
  452. package/src/services/voice/expressive-tags.d.ts +158 -0
  453. package/src/services/voice/expressive-tags.d.ts.map +1 -0
  454. package/src/services/voice/expressive-tags.ts +405 -0
  455. package/src/services/voice/ffi-bindings.d.ts +636 -0
  456. package/src/services/voice/ffi-bindings.d.ts.map +1 -0
  457. package/src/services/voice/ffi-bindings.test.ts +671 -0
  458. package/src/services/voice/ffi-bindings.ts +3050 -0
  459. package/src/services/voice/first-line-cache.d.ts +181 -0
  460. package/src/services/voice/first-line-cache.d.ts.map +1 -0
  461. package/src/services/voice/first-line-cache.ts +725 -0
  462. package/src/services/voice/fused-eot-scorer.d.ts +51 -0
  463. package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
  464. package/src/services/voice/fused-eot-scorer.ts +135 -0
  465. package/src/services/voice/index.d.ts +91 -0
  466. package/src/services/voice/index.d.ts.map +1 -0
  467. package/src/services/voice/index.ts +481 -0
  468. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
  469. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
  470. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  471. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  472. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  473. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  474. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  475. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
  476. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  477. package/src/services/voice/kokoro/index.ts +79 -0
  478. package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
  479. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  480. package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
  481. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  482. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  483. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  484. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  485. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  486. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  487. package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  488. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  489. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  490. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  491. package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
  492. package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  493. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  494. package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
  495. package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  496. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  497. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  498. package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
  499. package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  500. package/src/services/voice/kokoro/runtime-selection.ts +237 -0
  501. package/src/services/voice/kokoro/types.d.ts +82 -0
  502. package/src/services/voice/kokoro/types.d.ts.map +1 -0
  503. package/src/services/voice/kokoro/types.ts +95 -0
  504. package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
  505. package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  506. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  507. package/src/services/voice/kokoro/voices.d.ts +30 -0
  508. package/src/services/voice/kokoro/voices.d.ts.map +1 -0
  509. package/src/services/voice/kokoro/voices.ts +64 -0
  510. package/src/services/voice/lifecycle.d.ts +135 -0
  511. package/src/services/voice/lifecycle.d.ts.map +1 -0
  512. package/src/services/voice/lifecycle.test.ts +315 -0
  513. package/src/services/voice/lifecycle.ts +301 -0
  514. package/src/services/voice/live-diarization-session.d.ts +96 -0
  515. package/src/services/voice/live-diarization-session.d.ts.map +1 -0
  516. package/src/services/voice/live-diarization-session.ts +289 -0
  517. package/src/services/voice/mic-source.d.ts +136 -0
  518. package/src/services/voice/mic-source.d.ts.map +1 -0
  519. package/src/services/voice/mic-source.test.ts +210 -0
  520. package/src/services/voice/mic-source.ts +503 -0
  521. package/src/services/voice/optimistic-policy.d.ts +109 -0
  522. package/src/services/voice/optimistic-policy.d.ts.map +1 -0
  523. package/src/services/voice/optimistic-policy.test.ts +101 -0
  524. package/src/services/voice/optimistic-policy.ts +192 -0
  525. package/src/services/voice/optimistic-rollback.ts +343 -0
  526. package/src/services/voice/partial-stabilizer.d.ts +73 -0
  527. package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
  528. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  529. package/src/services/voice/partial-stabilizer.ts +140 -0
  530. package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
  531. package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  532. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  533. package/src/services/voice/phrase-cache.d.ts +76 -0
  534. package/src/services/voice/phrase-cache.d.ts.map +1 -0
  535. package/src/services/voice/phrase-cache.test.ts +242 -0
  536. package/src/services/voice/phrase-cache.ts +186 -0
  537. package/src/services/voice/phrase-chunker.d.ts +62 -0
  538. package/src/services/voice/phrase-chunker.d.ts.map +1 -0
  539. package/src/services/voice/phrase-chunker.test.ts +239 -0
  540. package/src/services/voice/phrase-chunker.ts +281 -0
  541. package/src/services/voice/pipeline-impls.d.ts +151 -0
  542. package/src/services/voice/pipeline-impls.d.ts.map +1 -0
  543. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  544. package/src/services/voice/pipeline-impls.test.ts +292 -0
  545. package/src/services/voice/pipeline-impls.ts +315 -0
  546. package/src/services/voice/pipeline.d.ts +216 -0
  547. package/src/services/voice/pipeline.d.ts.map +1 -0
  548. package/src/services/voice/pipeline.ts +505 -0
  549. package/src/services/voice/prefill-client.d.ts +123 -0
  550. package/src/services/voice/prefill-client.d.ts.map +1 -0
  551. package/src/services/voice/prefill-client.ts +316 -0
  552. package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
  553. package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  554. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  555. package/src/services/voice/profile-store.d.ts +248 -0
  556. package/src/services/voice/profile-store.d.ts.map +1 -0
  557. package/src/services/voice/profile-store.ts +887 -0
  558. package/src/services/voice/ring-buffer.d.ts +40 -0
  559. package/src/services/voice/ring-buffer.d.ts.map +1 -0
  560. package/src/services/voice/ring-buffer.ts +105 -0
  561. package/src/services/voice/rollback-queue.d.ts +24 -0
  562. package/src/services/voice/rollback-queue.d.ts.map +1 -0
  563. package/src/services/voice/rollback-queue.ts +74 -0
  564. package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
  565. package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  566. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  567. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  568. package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
  569. package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  570. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  571. package/src/services/voice/scheduler.d.ts +146 -0
  572. package/src/services/voice/scheduler.d.ts.map +1 -0
  573. package/src/services/voice/scheduler.t2.test.ts +141 -0
  574. package/src/services/voice/scheduler.ts +927 -0
  575. package/src/services/voice/shared-resources.d.ts +190 -0
  576. package/src/services/voice/shared-resources.d.ts.map +1 -0
  577. package/src/services/voice/shared-resources.ts +320 -0
  578. package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  579. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  580. package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
  581. package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
  582. package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  583. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  584. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  585. package/src/services/voice/speaker/diarizer.d.ts +75 -0
  586. package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
  587. package/src/services/voice/speaker/diarizer.ts +218 -0
  588. package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
  589. package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  590. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  591. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  592. package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
  593. package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  594. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  595. package/src/services/voice/speaker/encoder.d.ts +37 -0
  596. package/src/services/voice/speaker/encoder.d.ts.map +1 -0
  597. package/src/services/voice/speaker/encoder.ts +105 -0
  598. package/src/services/voice/speaker-imprint.d.ts +83 -0
  599. package/src/services/voice/speaker-imprint.d.ts.map +1 -0
  600. package/src/services/voice/speaker-imprint.test.ts +185 -0
  601. package/src/services/voice/speaker-imprint.ts +312 -0
  602. package/src/services/voice/speaker-preset-cache.d.ts +77 -0
  603. package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
  604. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  605. package/src/services/voice/speaker-preset-cache.ts +195 -0
  606. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  607. package/src/services/voice/system-audio-sink.d.ts +73 -0
  608. package/src/services/voice/system-audio-sink.d.ts.map +1 -0
  609. package/src/services/voice/system-audio-sink.test.ts +29 -0
  610. package/src/services/voice/system-audio-sink.ts +366 -0
  611. package/src/services/voice/transcriber.d.ts +244 -0
  612. package/src/services/voice/transcriber.d.ts.map +1 -0
  613. package/src/services/voice/transcriber.test.ts +392 -0
  614. package/src/services/voice/transcriber.ts +704 -0
  615. package/src/services/voice/turn-controller.d.ts +183 -0
  616. package/src/services/voice/turn-controller.d.ts.map +1 -0
  617. package/src/services/voice/turn-controller.test.ts +575 -0
  618. package/src/services/voice/turn-controller.ts +596 -0
  619. package/src/services/voice/types.d.ts +643 -0
  620. package/src/services/voice/types.d.ts.map +1 -0
  621. package/src/services/voice/types.ts +699 -0
  622. package/src/services/voice/vad.d.ts +282 -0
  623. package/src/services/voice/vad.d.ts.map +1 -0
  624. package/src/services/voice/vad.test.ts +480 -0
  625. package/src/services/voice/vad.ts +827 -0
  626. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  627. package/src/services/voice/voice-budget.d.ts +241 -0
  628. package/src/services/voice/voice-budget.d.ts.map +1 -0
  629. package/src/services/voice/voice-budget.test.ts +420 -0
  630. package/src/services/voice/voice-budget.ts +656 -0
  631. package/src/services/voice/voice-duet.test.ts +375 -0
  632. package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
  633. package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  634. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  635. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  636. package/src/services/voice/voice-preset-format.d.ts +158 -0
  637. package/src/services/voice/voice-preset-format.d.ts.map +1 -0
  638. package/src/services/voice/voice-preset-format.ts +700 -0
  639. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  640. package/src/services/voice/voice-profile-artifact.d.ts +116 -0
  641. package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
  642. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  643. package/src/services/voice/voice-profile-artifact.ts +518 -0
  644. package/src/services/voice/voice-profile-routes.d.ts +83 -0
  645. package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
  646. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  647. package/src/services/voice/voice-profile-routes.ts +425 -0
  648. package/src/services/voice/voice-scenario.ts +154 -0
  649. package/src/services/voice/voice-settings.d.ts +82 -0
  650. package/src/services/voice/voice-settings.d.ts.map +1 -0
  651. package/src/services/voice/voice-settings.ts +172 -0
  652. package/src/services/voice/voice-state-machine.d.ts +364 -0
  653. package/src/services/voice/voice-state-machine.d.ts.map +1 -0
  654. package/src/services/voice/voice-state-machine.ts +727 -0
  655. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  656. package/src/services/voice/voice-workbench-report.ts +326 -0
  657. package/src/services/voice/voice-workbench.test.ts +158 -0
  658. package/src/services/voice/voice.test.ts +1070 -0
  659. package/src/services/voice/wake-word-ggml.d.ts +101 -0
  660. package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
  661. package/src/services/voice/wake-word-ggml.ts +320 -0
  662. package/src/services/voice/wake-word.d.ts +255 -0
  663. package/src/services/voice/wake-word.d.ts.map +1 -0
  664. package/src/services/voice/wake-word.test.ts +298 -0
  665. package/src/services/voice/wake-word.ts +554 -0
  666. package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  667. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  668. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  669. package/src/services/voice-model-updater.d.ts +240 -0
  670. package/src/services/voice-model-updater.d.ts.map +1 -0
  671. package/src/services/voice-model-updater.ts +724 -0
  672. package/src/services/voice-prewarm.d.ts +3 -0
  673. package/src/services/voice-prewarm.d.ts.map +1 -0
  674. package/src/services/voice-prewarm.ts +51 -0
  675. package/dist/index.d.ts +0 -37
  676. package/dist/index.js +0 -1098
@@ -0,0 +1,481 @@
1
+ export {
2
+ type AttributedTurn,
3
+ type AttributedTurnListener,
4
+ type AttributionPipelineLike,
5
+ AUDIO_FRAME_PIPELINE_SAMPLE_RATE,
6
+ AudioFrameConsumer,
7
+ type AudioFrameConsumerConfig,
8
+ type AudioFrameConsumerDeps,
9
+ AudioFrameDecodeError,
10
+ type AudioFrameEvent,
11
+ decodeAudioFramePcm,
12
+ type RuntimeEventSink,
13
+ type VadSegmenter,
14
+ } from "./audio-frame-consumer";
15
+ export {
16
+ BargeInController,
17
+ type BargeInControllerConfig,
18
+ type BargeInListener,
19
+ type CancelSignal,
20
+ } from "./barge-in";
21
+ export {
22
+ type CoordinatorRuntime,
23
+ VoiceCancellationCoordinator,
24
+ type VoiceCancellationCoordinatorOptions,
25
+ } from "./cancellation-coordinator";
26
+ export {
27
+ type CheckpointHandle,
28
+ CheckpointHandleInvalidError,
29
+ CheckpointManager,
30
+ type CheckpointManagerLike,
31
+ type CheckpointManagerOptions,
32
+ MockCheckpointManager,
33
+ type MockCheckpointSnapshot,
34
+ type MockSnapshotSource,
35
+ } from "./checkpoint-manager";
36
+ export {
37
+ type BuildDeterministicFn,
38
+ type BuildMessageDependentFn,
39
+ type ContextPartial,
40
+ EagerContextBuilder,
41
+ type EagerContextBuilderOptions,
42
+ type FullContext,
43
+ mergeContext,
44
+ } from "./eager-context-builder";
45
+ export type {
46
+ LlamaContextLike as Eliza1EotLlamaContext,
47
+ LlamaContextSequenceLike as Eliza1EotLlamaSequence,
48
+ LlamaModelLike as Eliza1EotLlamaModel,
49
+ } from "./eliza1-eot-scorer";
50
+ export {
51
+ Eliza1EotScorer,
52
+ formatEotPrompt as formatEliza1EotPrompt,
53
+ } from "./eliza1-eot-scorer";
54
+ export {
55
+ buildLocalEmbeddingRoute,
56
+ EMBEDDING_DIR_REL_PATH,
57
+ EMBEDDING_FULL_DIM,
58
+ EMBEDDING_MATRYOSHKA_DIMS,
59
+ isValidEmbeddingDim,
60
+ type LocalEmbeddingRoute,
61
+ type LocalEmbeddingSource,
62
+ POOLED_TEXT_EMBEDDING_TIERS,
63
+ resolveLocalEmbeddingSource,
64
+ truncateMatryoshka,
65
+ } from "./embedding";
66
+ export {
67
+ attributeVoiceEmotion,
68
+ type VoiceEmotionAsrFeatures,
69
+ type VoiceEmotionAttribution,
70
+ type VoiceEmotionAttributionInput,
71
+ type VoiceEmotionAttributionMethod,
72
+ type VoiceEmotionAudioFeatures,
73
+ type VoiceEmotionEvidence,
74
+ } from "./emotion-attribution";
75
+ export {
76
+ decodeMonoPcm16Wav,
77
+ defaultLifecycleLoaders,
78
+ EngineVoiceBridge,
79
+ type EngineVoiceBridgeOptions,
80
+ encodeMonoPcm16Wav,
81
+ FfiOmniVoiceBackend,
82
+ StubOmniVoiceBackend,
83
+ type VoiceTurnEvents,
84
+ } from "./engine-bridge";
85
+ export {
86
+ Eliza1EotClassifier,
87
+ type Eliza1EotScoreResult,
88
+ type Eliza1EotScorerOptions,
89
+ EOT_COMMIT_SILENCE_MS,
90
+ EOT_COMMIT_THRESHOLD,
91
+ EOT_HANGOVER_EXTENSION_MS,
92
+ EOT_MID_CLAUSE_THRESHOLD,
93
+ EOT_TENTATIVE_SILENCE_MS,
94
+ EOT_TENTATIVE_THRESHOLD,
95
+ type EotClassifier,
96
+ HeuristicEotClassifier,
97
+ LIVEKIT_TURN_DETECTOR_EN_REVISION,
98
+ LIVEKIT_TURN_DETECTOR_INTL_REVISION,
99
+ RemoteEotClassifier,
100
+ type RemoteEotClassifierOptions,
101
+ turnDetectorRevisionForTier,
102
+ turnSignalFromProbability,
103
+ type VoiceNextSpeaker,
104
+ type VoiceTurnSignal,
105
+ } from "./eot-classifier";
106
+ export {
107
+ applyQwenUserTemplate,
108
+ createBundledLiveKitGgmlTurnDetector,
109
+ DEFAULT_LIVEKIT_TURN_DETECTOR_GGML_DIR,
110
+ DEFAULT_LIVEKIT_TURN_DETECTOR_GGUF_EN,
111
+ DEFAULT_LIVEKIT_TURN_DETECTOR_GGUF_INTL,
112
+ EotGgmlUnavailableError,
113
+ LIVEKIT_IM_END_TOKEN,
114
+ LiveKitGgmlTurnDetector,
115
+ type LiveKitGgmlTurnDetectorOptions,
116
+ turnDetectorGgufForTier,
117
+ } from "./eot-classifier-ggml";
118
+ export { VoiceStartupError } from "./errors";
119
+ export * from "./ffi-bindings";
120
+ export {
121
+ _resetSharedFirstLineCacheForTesting,
122
+ _resetVoiceRevisionMemoForTesting,
123
+ computeLocalVoiceRevision,
124
+ FIRST_SENTENCE_MAX_WORDS,
125
+ FIRST_SENTENCE_SNIP_VERSION,
126
+ FirstLineCache,
127
+ type FirstLineCacheEntry,
128
+ type FirstLineCacheKey,
129
+ type FirstLineCacheOptions,
130
+ type FirstLineCacheStats,
131
+ type FirstSentenceSnipResult,
132
+ fingerprintVoiceSettings,
133
+ firstLineCacheBypassFromEnv,
134
+ firstSentenceSnip,
135
+ getSharedFirstLineCache,
136
+ hashCacheKey,
137
+ type PutInput,
138
+ wordCount,
139
+ } from "./first-line-cache";
140
+ export {
141
+ type ArmedResources,
142
+ type TextResources,
143
+ VoiceLifecycle,
144
+ VoiceLifecycleError,
145
+ type VoiceLifecycleEvents,
146
+ type VoiceLifecycleLoaders,
147
+ type VoiceLifecycleState,
148
+ } from "./lifecycle";
149
+ export {
150
+ DesktopMicSource,
151
+ type DesktopMicSourceOptions,
152
+ PushMicSource,
153
+ pipeMicToRingBuffer,
154
+ resolveDesktopRecorder,
155
+ } from "./mic-source";
156
+ export {
157
+ DEFAULT_OPTIMISTIC_EOT_THRESHOLD,
158
+ OptimisticGenerationPolicy,
159
+ type OptimisticPolicyOptions,
160
+ type PowerSourceState,
161
+ type ResolveOptimisticPolicyArgs,
162
+ resolveOptimisticPolicyEnabled,
163
+ resolvePowerSourceState,
164
+ } from "./optimistic-policy";
165
+ export {
166
+ createDefaultPhonemeTokenizer,
167
+ type Phoneme,
168
+ type PhonemeTokenizer,
169
+ RuleBasedEnglishPhonemeTokenizer,
170
+ } from "./phoneme-tokenizer";
171
+ export {
172
+ type CachedPhraseAudio,
173
+ canonicalizePhraseText,
174
+ DEFAULT_PHRASE_CACHE_SEED,
175
+ FIRST_AUDIO_FILLERS,
176
+ PhraseCache,
177
+ } from "./phrase-cache";
178
+ export { chunkTokens, PhraseChunker } from "./phrase-chunker";
179
+ export {
180
+ type DraftProposer,
181
+ splitTranscriptToTokens,
182
+ type TargetVerifier,
183
+ VoicePipeline,
184
+ type VoicePipelineConfig,
185
+ type VoicePipelineDeps,
186
+ type VoicePipelineEvents,
187
+ } from "./pipeline";
188
+ export {
189
+ MissingAsrTranscriber,
190
+ MtpDraftProposer,
191
+ MtpTargetVerifier,
192
+ type MtpTextRunner,
193
+ mtpTextRunner,
194
+ } from "./pipeline-impls";
195
+ export {
196
+ type PrefillOptimisticArgs,
197
+ type PrefillOptimisticOptions,
198
+ type PrefillOptimisticResult,
199
+ prefillOptimistic,
200
+ } from "./prefill-client";
201
+ export {
202
+ PrefixPreservingQueue,
203
+ type RollbackResult,
204
+ type TaggedAudioChunk,
205
+ } from "./prefix-preserving-queue";
206
+ export {
207
+ isOutlier,
208
+ VOICE_PROFILE_RECORD_SCHEMA_VERSION,
209
+ type VoiceImprintMatchHandle,
210
+ type VoiceProfileAudioRef,
211
+ type VoiceProfileConsentState,
212
+ type VoiceProfileObservation,
213
+ type VoiceProfileRecord,
214
+ VoiceProfileStore,
215
+ type VoiceProfileStoreOptions,
216
+ welfordUpdate,
217
+ welfordVariance,
218
+ } from "./profile-store";
219
+ export { InMemoryAudioSink, PcmRingBuffer } from "./ring-buffer";
220
+ export { type RollbackEvent, RollbackQueue } from "./rollback-queue";
221
+ export {
222
+ type SchedulerDeps,
223
+ type SchedulerEvents,
224
+ VoiceScheduler,
225
+ } from "./scheduler";
226
+ export {
227
+ createMtpDraftHandle,
228
+ type KernelSet,
229
+ type MmapRegionHandle,
230
+ type MtpDraftHandle,
231
+ type RefCountedResource,
232
+ type SchedulerSlot,
233
+ SharedResourceRegistry,
234
+ type SharedTokenizer,
235
+ } from "./shared-resources";
236
+ export {
237
+ type VoiceAttributionOutput,
238
+ VoiceAttributionPipeline,
239
+ type VoiceAttributionPipelineDeps,
240
+ type VoiceAttributionRequest,
241
+ } from "./speaker/attribution-pipeline";
242
+ export {
243
+ classifyFramesToSegments,
244
+ type Diarizer,
245
+ type DiarizerOutput,
246
+ DiarizerUnavailableError,
247
+ type LocalSpeakerSegment,
248
+ PYANNOTE_CLASS_COUNT,
249
+ PYANNOTE_CLASS_TO_SPEAKERS,
250
+ PYANNOTE_FRAME_STRIDE_MS,
251
+ PYANNOTE_FRAMES_PER_WINDOW,
252
+ PYANNOTE_SAMPLE_RATE,
253
+ PYANNOTE_SEGMENTATION_3_FP32_MODEL_ID,
254
+ PYANNOTE_SEGMENTATION_3_INT8_MODEL_ID,
255
+ PYANNOTE_WINDOW_SECONDS,
256
+ type PyannoteDiarizerModelId,
257
+ } from "./speaker/diarizer";
258
+ export {
259
+ FusedDiarizer,
260
+ type FusedDiarizerOptions,
261
+ } from "./speaker/diarizer-fused";
262
+ export {
263
+ averageEmbeddings,
264
+ type SpeakerEncoder,
265
+ SpeakerEncoderUnavailableError,
266
+ WESPEAKER_EMBEDDING_DIM,
267
+ WESPEAKER_MIN_SAMPLES,
268
+ WESPEAKER_RESNET34_LM_FP32_MODEL_ID,
269
+ WESPEAKER_RESNET34_LM_INT8_MODEL_ID,
270
+ WESPEAKER_SAMPLE_RATE,
271
+ type WespeakerModelId,
272
+ } from "./speaker/encoder";
273
+ export {
274
+ FusedSpeakerEncoder,
275
+ type FusedSpeakerEncoderOptions,
276
+ } from "./speaker/encoder-fused";
277
+ export {
278
+ SPEAKER_GGML_EMBEDDING_DIM,
279
+ SPEAKER_GGML_MIN_SAMPLES,
280
+ SPEAKER_GGML_SAMPLE_RATE,
281
+ SpeakerEncoderGgmlUnavailableError,
282
+ voiceSpeakerDistance,
283
+ } from "./speaker/encoder-ggml";
284
+ export {
285
+ type AttributedVoiceObservation,
286
+ attributeVoiceImprintObservations,
287
+ cosineSimilarity,
288
+ DEFAULT_VOICE_IMPRINT_MATCH_THRESHOLD,
289
+ matchVoiceImprint,
290
+ normalizeVoiceEmbedding,
291
+ type SpeakerAttributionResult,
292
+ updateVoiceImprintCentroid,
293
+ type VoiceImprintCentroidUpdate,
294
+ type VoiceImprintMatch,
295
+ type VoiceImprintObservationInput,
296
+ type VoiceImprintProfile,
297
+ voiceSpeakerFromImprintMatch,
298
+ } from "./speaker-imprint";
299
+ export {
300
+ DEFAULT_VOICE_ID,
301
+ DEFAULT_VOICE_PRESET_REL_PATH,
302
+ type LoadedPresetBundle,
303
+ type PresetBundlePaths,
304
+ SpeakerPresetCache,
305
+ type SpeakerPresetCacheOptions,
306
+ voicePresetPath,
307
+ } from "./speaker-preset-cache";
308
+ export {
309
+ SystemAudioSink,
310
+ type SystemAudioSinkOptions,
311
+ WavFileAudioSink,
312
+ type WavFileAudioSinkOptions,
313
+ } from "./system-audio-sink";
314
+ export {
315
+ ASR_SAMPLE_RATE,
316
+ AsrUnavailableError,
317
+ BaseStreamingTranscriber,
318
+ type CreateStreamingTranscriberOptions,
319
+ createStreamingTranscriber,
320
+ FfiBatchTranscriber,
321
+ type FfiBatchTranscriberOptions,
322
+ FfiStreamingTranscriber,
323
+ ffiSupportsStreamingAsr,
324
+ resampleLinear,
325
+ } from "./transcriber";
326
+ export {
327
+ type VoiceGenerateRequest,
328
+ VoiceTurnController,
329
+ type VoiceTurnControllerConfig,
330
+ type VoiceTurnControllerDeps,
331
+ type VoiceTurnControllerEvents,
332
+ type VoiceTurnOutcome,
333
+ } from "./turn-controller";
334
+ export * from "./types";
335
+ export {
336
+ createSileroVadDetector,
337
+ createVadDetector,
338
+ GgmlSileroVad,
339
+ NativeSileroVad,
340
+ type QwenToolkitVadAdapter,
341
+ type ResolvedVadProvider,
342
+ RmsEnergyGate,
343
+ type RmsEnergyGateConfig,
344
+ resolveSileroVadPath,
345
+ resolveVadProvider,
346
+ rms,
347
+ VadDetector,
348
+ type VadDetectorConfig,
349
+ type VadLike,
350
+ type VadProviderId,
351
+ type VadProviderPreference,
352
+ VadUnavailableError,
353
+ vadProviderOrder,
354
+ } from "./vad";
355
+ export {
356
+ type AllocationPriority,
357
+ assessVoiceBundleFits,
358
+ BudgetExhaustedError,
359
+ type BudgetReservation,
360
+ createVoiceBudget,
361
+ createVoiceBudgetForTest,
362
+ DEFAULT_VOICE_BUNDLE_RESERVE_MB,
363
+ pickVoiceTierSlot,
364
+ priorityClassForRole,
365
+ type ReservationSnapshot,
366
+ VOICE_ENSEMBLE_BUDGETS,
367
+ type VoiceBudget,
368
+ type VoiceBundleFitDecision,
369
+ type VoiceEnsembleBudget,
370
+ type VoiceTierSlot,
371
+ voiceEnsemblePeakMb,
372
+ voiceEnsembleSteadyStateMb,
373
+ } from "./voice-budget";
374
+ export {
375
+ readVoicePresetFile,
376
+ VOICE_PRESET_MAGIC,
377
+ type VoicePresetFile,
378
+ VoicePresetFormatError,
379
+ type VoicePresetSeedPhrase,
380
+ writeVoicePresetFile,
381
+ } from "./voice-preset-format";
382
+ export {
383
+ analyzeVoiceProfileWav,
384
+ canonicalVoiceProfileJson,
385
+ createVoiceProfileArtifact,
386
+ VOICE_PROFILE_ARTIFACT_SCHEMA_VERSION,
387
+ VOICE_PROFILE_FEATURE_EMBEDDING_MODEL,
388
+ type VoiceProfileArtifact,
389
+ type VoiceProfileArtifactSample,
390
+ type VoiceProfileArtifactStatus,
391
+ type VoiceProfileArtifactVerification,
392
+ type VoiceProfileAudioFeatures,
393
+ type VoiceProfileConsent,
394
+ type VoiceProfileReferenceMetadata,
395
+ type VoiceProfileSampleInput,
396
+ verifyVoiceProfileArtifact,
397
+ } from "./voice-profile-artifact";
398
+ export {
399
+ DEFAULT_VOICE_SETTINGS,
400
+ effectiveBackendMode,
401
+ qualityPresetQuantizationRanking,
402
+ resolveVoiceSettings,
403
+ type VoiceBackendMode,
404
+ type VoiceModelQualityPreset,
405
+ type VoiceSettings,
406
+ } from "./voice-settings";
407
+ export {
408
+ type DrafterAbortReason,
409
+ type DrafterHandle,
410
+ type StartDrafterFn,
411
+ type VoiceState,
412
+ type VoiceStateEvent,
413
+ VoiceStateMachine,
414
+ type VoiceStateMachineEvents,
415
+ type VoiceStateMachineOptions,
416
+ } from "./voice-state-machine";
417
+ export {
418
+ GgmlWakeWordModel,
419
+ isPlaceholderWakeWordHead,
420
+ loadBundledWakeWordModel,
421
+ OPENWAKEWORD_DEFAULT_HEAD,
422
+ OPENWAKEWORD_DIR_REL_PATH,
423
+ OPENWAKEWORD_GGUF_REL_PATH,
424
+ OPENWAKEWORD_PLACEHOLDER_HEADS,
425
+ OpenWakeWordDetector,
426
+ resolveWakeWordModel,
427
+ type WakeWordConfig,
428
+ type WakeWordModel,
429
+ type WakeWordModelPaths,
430
+ WakeWordUnavailableError,
431
+ } from "./wake-word";
432
+ export {
433
+ type TtsBytes,
434
+ type TtsHandler,
435
+ type TtsHandlerInput,
436
+ type TtsHandlerOutput,
437
+ type TtsResolvedContext,
438
+ type WrapOptions,
439
+ wrapWithFirstLineCache,
440
+ } from "./wrap-with-first-line-cache";
441
+
442
+ /**
443
+ * Voice on/off invariants (binding for every consumer of this module):
444
+ *
445
+ * 1. Voice is OFF by default — text + drafter only. Before
446
+ * `EngineVoiceBridge.start()` there are no voice resources in RAM.
447
+ * After `start()` but before `VoiceLifecycle.arm()`, only the tiny
448
+ * default speaker preset, phrase seed metadata, and scheduler
449
+ * scaffolding are live. TTS/ASR weight regions are NOT mapped or
450
+ * re-paged until `VoiceLifecycle.arm()` calls the fused ABI's
451
+ * `mmap_acquire`.
452
+ *
453
+ * 2. Shared resources between text and voice (one instance each per
454
+ * engine, refcounted by `SharedResourceRegistry`):
455
+ * - tokenizer (Eliza-1/OmniVoice share a vocabulary)
456
+ * - mmap regions for weights (deduplicated by absolute path)
457
+ * - the fused kernel set (TurboQuant/QJL/Polar live in the
458
+ * same shipped llama.cpp library after the fusion build)
459
+ * - the scheduler queue (one queue, prioritised across surfaces)
460
+ * - the MTP drafter (always wired — see AGENTS.md §3 #4)
461
+ *
462
+ * Text and voice keep SEPARATE KV caches (different layer counts,
463
+ * different head configs, different quantizations — AGENTS.md §4
464
+ * "shared KV cache scheduling, not shared KV memory").
465
+ *
466
+ * 3. `arm()` lazily loads TTS + ASR via mmap; `disarm()` issues a real
467
+ * page-eviction call (`madvise(MADV_DONTNEED)` on Linux/Android,
468
+ * `madvise(MADV_FREE_REUSABLE)` on Apple, `VirtualUnlock` +
469
+ * `OfferVirtualMemory` on Windows). The speaker preset and phrase
470
+ * cache stay in a small LRU after disarm — they're KB-scale.
471
+ *
472
+ * 4. Hardware-resource exhaustion (RAM pressure, OS page eviction
473
+ * refusal, mmap fail, kernel missing) MUST surface as a
474
+ * `VoiceLifecycleError` with a structured `code`. There is NO
475
+ * silent fallback to text-only and NO automatic downgrade to a
476
+ * smaller voice model — see AGENTS.md §3.
477
+ *
478
+ * 5. Illegal lifecycle transitions throw `VoiceLifecycleError` with
479
+ * code `"illegal-transition"`. The state is a discriminated
480
+ * union, never a string.
481
+ */
@@ -0,0 +1,151 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import type {
3
+ AudioSink,
4
+ Phrase,
5
+ SpeakerPreset,
6
+ TtsPcmChunk,
7
+ } from "../../types";
8
+ import { KokoroTtsBackend } from "../kokoro-backend";
9
+ import { KokoroMockRuntime } from "../kokoro-runtime";
10
+ import type { KokoroPhonemizer } from "../types";
11
+ import { KOKORO_DEFAULT_VOICE_ID } from "../voices";
12
+
13
+ function fixedPhonemizer(): KokoroPhonemizer {
14
+ return {
15
+ id: "fixed",
16
+ async phonemize() {
17
+ return { ids: Int32Array.from([1, 43, 60, 2]), phonemes: "ab" };
18
+ },
19
+ };
20
+ }
21
+
22
+ function makePreset(voiceId: string): SpeakerPreset {
23
+ return {
24
+ voiceId,
25
+ embedding: new Float32Array(8),
26
+ bytes: new Uint8Array(8),
27
+ };
28
+ }
29
+
30
+ function makePhrase(text: string): Phrase {
31
+ return {
32
+ id: 1,
33
+ text,
34
+ fromIndex: 0,
35
+ toIndex: text.length - 1,
36
+ terminator: "punctuation",
37
+ };
38
+ }
39
+
40
+ function makeBackend(opts?: { totalSamples?: number; chunkCount?: number }): {
41
+ backend: KokoroTtsBackend;
42
+ runtime: KokoroMockRuntime;
43
+ } {
44
+ const runtime = new KokoroMockRuntime({
45
+ sampleRate: 24000,
46
+ totalSamples: opts?.totalSamples ?? 9600, // 0.4s
47
+ chunkCount: opts?.chunkCount ?? 4,
48
+ });
49
+ const backend = new KokoroTtsBackend({
50
+ runtime,
51
+ layout: {
52
+ root: "/tmp/kokoro",
53
+ modelFile: "kokoro-82m-v1_0.gguf",
54
+ voicesDir: "/tmp/kokoro/voices",
55
+ sampleRate: 24000,
56
+ },
57
+ defaultVoiceId: KOKORO_DEFAULT_VOICE_ID,
58
+ phonemizer: fixedPhonemizer(),
59
+ streamingChunkSamples: 1200, // 50ms — re-chunks the mock output
60
+ });
61
+ return { backend, runtime };
62
+ }
63
+
64
+ describe("KokoroTtsBackend", () => {
65
+ it("streams PCM chunks and emits a zero-length final tail", async () => {
66
+ const { backend, runtime } = makeBackend({
67
+ totalSamples: 9600,
68
+ chunkCount: 4,
69
+ });
70
+ const chunks: TtsPcmChunk[] = [];
71
+ const result = await backend.synthesizeStream({
72
+ phrase: makePhrase("hello"),
73
+ preset: makePreset(KOKORO_DEFAULT_VOICE_ID),
74
+ cancelSignal: { cancelled: false },
75
+ onChunk: (c) => {
76
+ chunks.push({
77
+ pcm: new Float32Array(c.pcm),
78
+ sampleRate: c.sampleRate,
79
+ isFinal: c.isFinal,
80
+ });
81
+ return undefined;
82
+ },
83
+ });
84
+ expect(result.cancelled).toBe(false);
85
+ expect(runtime.calls).toBe(1);
86
+ expect(chunks.length).toBeGreaterThan(1);
87
+ const last = chunks[chunks.length - 1];
88
+ expect(last).toBeDefined();
89
+ expect(last?.isFinal).toBe(true);
90
+ expect(last?.pcm.length).toBe(0);
91
+ const bodyChunks = chunks.slice(0, -1);
92
+ expect(bodyChunks.every((c) => !c.isFinal)).toBe(true);
93
+ expect(bodyChunks.every((c) => c.sampleRate === 24000)).toBe(true);
94
+ // Re-chunking honoured: every body chunk respects the 1200-sample cap.
95
+ expect(bodyChunks.every((c) => c.pcm.length <= 1200)).toBe(true);
96
+ const totalBody = bodyChunks.reduce((n, c) => n + c.pcm.length, 0);
97
+ expect(totalBody).toBe(9600);
98
+ });
99
+
100
+ it("propagates cancelSignal at chunk boundaries", async () => {
101
+ const { backend } = makeBackend({ totalSamples: 24000, chunkCount: 8 });
102
+ const cancelSignal = { cancelled: false };
103
+ let received = 0;
104
+ const result = await backend.synthesizeStream({
105
+ phrase: makePhrase("a longer line"),
106
+ preset: makePreset(KOKORO_DEFAULT_VOICE_ID),
107
+ cancelSignal,
108
+ onChunk: (c) => {
109
+ if (!c.isFinal) {
110
+ received++;
111
+ if (received === 2) cancelSignal.cancelled = true;
112
+ }
113
+ return undefined;
114
+ },
115
+ });
116
+ expect(result.cancelled).toBe(true);
117
+ // Final tail is always emitted, even on cancel.
118
+ // received counts body chunks only; the runtime stops once cancelled.
119
+ expect(received).toBeLessThanOrEqual(3);
120
+ });
121
+
122
+ it("synthesize() concatenates streamed chunks into one AudioChunk", async () => {
123
+ const { backend } = makeBackend({ totalSamples: 9600, chunkCount: 4 });
124
+ const chunk = await backend.synthesize({
125
+ phrase: makePhrase("hi"),
126
+ preset: makePreset(KOKORO_DEFAULT_VOICE_ID),
127
+ cancelSignal: { cancelled: false },
128
+ });
129
+ expect(chunk.sampleRate).toBe(24000);
130
+ expect(chunk.pcm.length).toBe(9600);
131
+ expect(chunk.phraseId).toBe(1);
132
+ });
133
+
134
+ it("falls back to the default voice when preset.voiceId is unknown", async () => {
135
+ const { backend } = makeBackend();
136
+ const chunk = await backend.synthesize({
137
+ phrase: makePhrase("hi"),
138
+ preset: makePreset("does_not_exist"),
139
+ cancelSignal: { cancelled: false },
140
+ });
141
+ expect(chunk.pcm.length).toBeGreaterThan(0);
142
+ });
143
+
144
+ it("supportsStreamingTts() returns true (satisfies the streaming seam)", () => {
145
+ const { backend } = makeBackend();
146
+ expect(backend.supportsStreamingTts()).toBe(true);
147
+ });
148
+ });
149
+
150
+ // Local declaration so the test file does not import the audio sink (unused).
151
+ void (null as unknown as AudioSink);