@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/package.json +82 -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/actions/transcription-control.d.ts +29 -0
  11. package/src/actions/transcription-control.d.ts.map +1 -0
  12. package/src/actions/transcription-control.test.ts +100 -0
  13. package/src/actions/transcription-control.ts +127 -0
  14. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  15. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  16. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  17. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  18. package/src/adapters/capacitor-llama/environment.ts +71 -0
  19. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  20. package/src/adapters/capacitor-llama/index.ts +807 -0
  21. package/src/adapters/capacitor-llama/loader.ts +109 -0
  22. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  23. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  24. package/src/adapters/capacitor-llama/types.ts +374 -0
  25. package/src/backends/apple-foundation.ts +127 -0
  26. package/src/index.d.ts +8 -0
  27. package/src/index.d.ts.map +1 -0
  28. package/src/index.ts +62 -0
  29. package/src/local-inference-routes.d.ts +38 -0
  30. package/src/local-inference-routes.d.ts.map +1 -0
  31. package/src/local-inference-routes.test.ts +344 -0
  32. package/src/local-inference-routes.ts +1543 -0
  33. package/src/provider.d.ts +21 -0
  34. package/src/provider.d.ts.map +1 -0
  35. package/src/provider.ts +1082 -0
  36. package/src/routes/compat-helpers.d.ts +18 -0
  37. package/src/routes/compat-helpers.d.ts.map +1 -0
  38. package/src/routes/compat-helpers.ts +274 -0
  39. package/src/routes/family-member-route.d.ts +62 -0
  40. package/src/routes/family-member-route.d.ts.map +1 -0
  41. package/src/routes/family-member-route.ts +353 -0
  42. package/src/routes/index.d.ts +19 -0
  43. package/src/routes/index.d.ts.map +1 -0
  44. package/src/routes/index.ts +60 -0
  45. package/src/routes/live-diarization-route.d.ts +26 -0
  46. package/src/routes/live-diarization-route.d.ts.map +1 -0
  47. package/src/routes/live-diarization-route.test.ts +213 -0
  48. package/src/routes/live-diarization-route.ts +122 -0
  49. package/src/routes/local-inference-asr-route.d.ts +4 -0
  50. package/src/routes/local-inference-asr-route.d.ts.map +1 -0
  51. package/src/routes/local-inference-asr-route.test.ts +205 -0
  52. package/src/routes/local-inference-asr-route.ts +163 -0
  53. package/src/routes/local-inference-asr-transcribe.d.ts +20 -0
  54. package/src/routes/local-inference-asr-transcribe.d.ts.map +1 -0
  55. package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
  56. package/src/routes/local-inference-asr-transcribe.ts +97 -0
  57. package/src/routes/local-inference-compat-routes.d.ts +16 -0
  58. package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
  59. package/src/routes/local-inference-compat-routes.test.ts +485 -0
  60. package/src/routes/local-inference-compat-routes.ts +808 -0
  61. package/src/routes/local-inference-tts-route.d.ts +7 -0
  62. package/src/routes/local-inference-tts-route.d.ts.map +1 -0
  63. package/src/routes/local-inference-tts-route.test.ts +179 -0
  64. package/src/routes/local-inference-tts-route.ts +230 -0
  65. package/src/routes/transcript-audio-store.d.ts +15 -0
  66. package/src/routes/transcript-audio-store.d.ts.map +1 -0
  67. package/src/routes/transcript-audio-store.ts +27 -0
  68. package/src/routes/transcripts-routes.d.ts +36 -0
  69. package/src/routes/transcripts-routes.d.ts.map +1 -0
  70. package/src/routes/transcripts-routes.test.ts +144 -0
  71. package/src/routes/transcripts-routes.ts +159 -0
  72. package/src/routes/voice-first-run-routes.d.ts +62 -0
  73. package/src/routes/voice-first-run-routes.d.ts.map +1 -0
  74. package/src/routes/voice-first-run-routes.ts +524 -0
  75. package/src/routes/voice-models-routes.d.ts +62 -0
  76. package/src/routes/voice-models-routes.d.ts.map +1 -0
  77. package/src/routes/voice-models-routes.ts +554 -0
  78. package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
  79. package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  80. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  81. package/src/routes/voice-profiles-management-routes.d.ts +52 -0
  82. package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
  83. package/src/routes/voice-profiles-management-routes.ts +476 -0
  84. package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
  85. package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  86. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  87. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  88. package/src/runtime/capacitor-llama.d.ts +25 -0
  89. package/src/runtime/embedding-manager-support.d.ts +77 -0
  90. package/src/runtime/embedding-manager-support.d.ts.map +1 -0
  91. package/src/runtime/embedding-manager-support.ts +497 -0
  92. package/src/runtime/embedding-presets.d.ts +16 -0
  93. package/src/runtime/embedding-presets.d.ts.map +1 -0
  94. package/src/runtime/embedding-presets.ts +81 -0
  95. package/src/runtime/embedding-warmup-policy.d.ts +14 -0
  96. package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
  97. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  98. package/src/runtime/embedding-warmup-policy.ts +48 -0
  99. package/src/runtime/ensure-local-inference-handler.d.ts +62 -0
  100. package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  101. package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
  102. package/src/runtime/ensure-local-inference-handler.ts +1448 -0
  103. package/src/runtime/index.d.ts +15 -0
  104. package/src/runtime/index.d.ts.map +1 -0
  105. package/src/runtime/index.ts +33 -0
  106. package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
  107. package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  108. package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
  109. package/src/runtime/mobile-local-inference-gate.ts +44 -0
  110. package/src/runtime/voice-entity-binding.d.ts +103 -0
  111. package/src/runtime/voice-entity-binding.d.ts.map +1 -0
  112. package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
  113. package/src/runtime/voice-entity-binding.ts +328 -0
  114. package/src/services/README.md +71 -0
  115. package/src/services/__tests__/backend-selector.test.ts +101 -0
  116. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  117. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  118. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  119. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  120. package/src/services/__tests__/runtime-target.test.ts +176 -0
  121. package/src/services/active-model-switch-rollback.test.ts +183 -0
  122. package/src/services/active-model.d.ts +282 -0
  123. package/src/services/active-model.d.ts.map +1 -0
  124. package/src/services/active-model.ts +1213 -0
  125. package/src/services/assignments.d.ts +71 -0
  126. package/src/services/assignments.d.ts.map +1 -0
  127. package/src/services/assignments.test.ts +80 -0
  128. package/src/services/assignments.ts +230 -0
  129. package/src/services/backend-selector.ts +95 -0
  130. package/src/services/backend.d.ts +346 -0
  131. package/src/services/backend.d.ts.map +1 -0
  132. package/src/services/backend.ts +612 -0
  133. package/src/services/bionic-host-loader.d.ts +46 -0
  134. package/src/services/bionic-host-loader.d.ts.map +1 -0
  135. package/src/services/bionic-host-loader.test.ts +133 -0
  136. package/src/services/bionic-host-loader.ts +180 -0
  137. package/src/services/bundled-models.d.ts +34 -0
  138. package/src/services/bundled-models.d.ts.map +1 -0
  139. package/src/services/bundled-models.ts +129 -0
  140. package/src/services/cache-bridge.d.ts +206 -0
  141. package/src/services/cache-bridge.d.ts.map +1 -0
  142. package/src/services/cache-bridge.test.ts +516 -0
  143. package/src/services/cache-bridge.ts +423 -0
  144. package/src/services/catalog.d.ts +10 -0
  145. package/src/services/catalog.d.ts.map +1 -0
  146. package/src/services/catalog.test.ts +238 -0
  147. package/src/services/catalog.ts +27 -0
  148. package/src/services/checkpoint-client.d.ts +109 -0
  149. package/src/services/checkpoint-client.d.ts.map +1 -0
  150. package/src/services/checkpoint-client.ts +258 -0
  151. package/src/services/checkpoint-manager.ts +474 -0
  152. package/src/services/cloud-fallback.d.ts +102 -0
  153. package/src/services/cloud-fallback.d.ts.map +1 -0
  154. package/src/services/cloud-fallback.ts +230 -0
  155. package/src/services/conversation-registry.d.ts +142 -0
  156. package/src/services/conversation-registry.d.ts.map +1 -0
  157. package/src/services/conversation-registry.test.ts +235 -0
  158. package/src/services/conversation-registry.ts +264 -0
  159. package/src/services/desktop-fused-ffi-backend-runtime.d.ts +95 -0
  160. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  161. package/src/services/desktop-fused-ffi-backend-runtime.ts +339 -0
  162. package/src/services/device-bridge.d.ts +188 -0
  163. package/src/services/device-bridge.d.ts.map +1 -0
  164. package/src/services/device-bridge.ts +1237 -0
  165. package/src/services/device-resource-metrics.d.ts +149 -0
  166. package/src/services/device-resource-metrics.d.ts.map +1 -0
  167. package/src/services/device-resource-metrics.test.ts +98 -0
  168. package/src/services/device-resource-metrics.ts +346 -0
  169. package/src/services/device-tier.d.ts +115 -0
  170. package/src/services/device-tier.d.ts.map +1 -0
  171. package/src/services/device-tier.test.ts +371 -0
  172. package/src/services/device-tier.ts +410 -0
  173. package/src/services/downloader.d.ts +82 -0
  174. package/src/services/downloader.d.ts.map +1 -0
  175. package/src/services/downloader.test.ts +747 -0
  176. package/src/services/downloader.ts +925 -0
  177. package/src/services/engine-direct-bundle.test.ts +58 -0
  178. package/src/services/engine-streaming.test.ts +80 -0
  179. package/src/services/engine.d.ts +540 -0
  180. package/src/services/engine.d.ts.map +1 -0
  181. package/src/services/engine.ts +1909 -0
  182. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  183. package/src/services/ensure-local-artifacts.test.ts +368 -0
  184. package/src/services/ensure-local-artifacts.ts +351 -0
  185. package/src/services/external-scanner.d.ts +17 -0
  186. package/src/services/external-scanner.d.ts.map +1 -0
  187. package/src/services/external-scanner.ts +312 -0
  188. package/src/services/ffi-llm-mock.ts +354 -0
  189. package/src/services/ffi-llm-streaming-abi.ts +442 -0
  190. package/src/services/ffi-streaming-backend.d.ts +180 -0
  191. package/src/services/ffi-streaming-backend.d.ts.map +1 -0
  192. package/src/services/ffi-streaming-backend.ts +382 -0
  193. package/src/services/ffi-streaming-runner.d.ts +122 -0
  194. package/src/services/ffi-streaming-runner.d.ts.map +1 -0
  195. package/src/services/ffi-streaming-runner.test.ts +60 -0
  196. package/src/services/ffi-streaming-runner.ts +354 -0
  197. package/src/services/ffi-unload-ordering.test.ts +162 -0
  198. package/src/services/gpu-autotune.ts +534 -0
  199. package/src/services/gpu-detect.d.ts +56 -0
  200. package/src/services/gpu-detect.d.ts.map +1 -0
  201. package/src/services/gpu-detect.ts +139 -0
  202. package/src/services/handler-registry.d.ts +72 -0
  203. package/src/services/handler-registry.d.ts.map +1 -0
  204. package/src/services/handler-registry.ts +240 -0
  205. package/src/services/hardware.d.ts +63 -0
  206. package/src/services/hardware.d.ts.map +1 -0
  207. package/src/services/hardware.test.ts +231 -0
  208. package/src/services/hardware.ts +410 -0
  209. package/src/services/hf-search.d.ts +26 -0
  210. package/src/services/hf-search.d.ts.map +1 -0
  211. package/src/services/hf-search.test.ts +69 -0
  212. package/src/services/hf-search.ts +420 -0
  213. package/src/services/image-description-runtime.d.ts +14 -0
  214. package/src/services/image-description-runtime.d.ts.map +1 -0
  215. package/src/services/image-description-runtime.test.ts +61 -0
  216. package/src/services/image-description-runtime.ts +118 -0
  217. package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
  218. package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  219. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  220. package/src/services/imagegen/backend-selector.d.ts +118 -0
  221. package/src/services/imagegen/backend-selector.d.ts.map +1 -0
  222. package/src/services/imagegen/backend-selector.ts +277 -0
  223. package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
  224. package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  225. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  226. package/src/services/imagegen/errors.d.ts +16 -0
  227. package/src/services/imagegen/errors.d.ts.map +1 -0
  228. package/src/services/imagegen/errors.ts +40 -0
  229. package/src/services/imagegen/index.d.ts +58 -0
  230. package/src/services/imagegen/index.d.ts.map +1 -0
  231. package/src/services/imagegen/index.ts +144 -0
  232. package/src/services/imagegen/mflux.d.ts +74 -0
  233. package/src/services/imagegen/mflux.d.ts.map +1 -0
  234. package/src/services/imagegen/mflux.ts +313 -0
  235. package/src/services/imagegen/sd-cpp.d.ts +180 -0
  236. package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
  237. package/src/services/imagegen/sd-cpp.ts +718 -0
  238. package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  239. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  240. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  241. package/src/services/imagegen/types.d.ts +181 -0
  242. package/src/services/imagegen/types.d.ts.map +1 -0
  243. package/src/services/imagegen/types.ts +193 -0
  244. package/src/services/index.d.ts +29 -0
  245. package/src/services/index.d.ts.map +1 -0
  246. package/src/services/index.ts +211 -0
  247. package/src/services/inference-capabilities.d.ts +132 -0
  248. package/src/services/inference-capabilities.d.ts.map +1 -0
  249. package/src/services/inference-capabilities.test.ts +75 -0
  250. package/src/services/inference-capabilities.ts +204 -0
  251. package/src/services/inference-telemetry.d.ts +59 -0
  252. package/src/services/inference-telemetry.d.ts.map +1 -0
  253. package/src/services/inference-telemetry.ts +143 -0
  254. package/src/services/ios-llama-streaming.ts +248 -0
  255. package/src/services/kv-spill.d.ts +189 -0
  256. package/src/services/kv-spill.d.ts.map +1 -0
  257. package/src/services/kv-spill.test.ts +222 -0
  258. package/src/services/kv-spill.ts +356 -0
  259. package/src/services/latency-trace.d.ts +346 -0
  260. package/src/services/latency-trace.d.ts.map +1 -0
  261. package/src/services/latency-trace.test.ts +266 -0
  262. package/src/services/latency-trace.ts +844 -0
  263. package/src/services/llama-server-metrics.ts +304 -0
  264. package/src/services/llm-streaming-binding.d.ts +96 -0
  265. package/src/services/llm-streaming-binding.d.ts.map +1 -0
  266. package/src/services/llm-streaming-binding.ts +136 -0
  267. package/src/services/load-args.d.ts +82 -0
  268. package/src/services/load-args.d.ts.map +1 -0
  269. package/src/services/load-args.ts +81 -0
  270. package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
  271. package/src/services/manifest/index.d.ts +4 -0
  272. package/src/services/manifest/index.d.ts.map +1 -0
  273. package/src/services/manifest/index.ts +66 -0
  274. package/src/services/manifest/manifest.test.ts +689 -0
  275. package/src/services/manifest/schema.d.ts +713 -0
  276. package/src/services/manifest/schema.d.ts.map +1 -0
  277. package/src/services/manifest/schema.ts +653 -0
  278. package/src/services/manifest/types.d.ts +30 -0
  279. package/src/services/manifest/types.d.ts.map +1 -0
  280. package/src/services/manifest/types.ts +55 -0
  281. package/src/services/manifest/validator.d.ts +66 -0
  282. package/src/services/manifest/validator.d.ts.map +1 -0
  283. package/src/services/manifest/validator.ts +567 -0
  284. package/src/services/memory-arbiter.d.ts +318 -0
  285. package/src/services/memory-arbiter.d.ts.map +1 -0
  286. package/src/services/memory-arbiter.test.ts +419 -0
  287. package/src/services/memory-arbiter.ts +925 -0
  288. package/src/services/memory-monitor.d.ts +122 -0
  289. package/src/services/memory-monitor.d.ts.map +1 -0
  290. package/src/services/memory-monitor.test.ts +208 -0
  291. package/src/services/memory-monitor.ts +297 -0
  292. package/src/services/memory-pressure.d.ts +130 -0
  293. package/src/services/memory-pressure.d.ts.map +1 -0
  294. package/src/services/memory-pressure.ts +414 -0
  295. package/src/services/mtp-doctor.d.ts +13 -0
  296. package/src/services/mtp-doctor.d.ts.map +1 -0
  297. package/src/services/mtp-doctor.ts +78 -0
  298. package/src/services/network-policy.d.ts +127 -0
  299. package/src/services/network-policy.d.ts.map +1 -0
  300. package/src/services/network-policy.ts +346 -0
  301. package/src/services/paths.d.ts +6 -0
  302. package/src/services/paths.d.ts.map +1 -0
  303. package/src/services/paths.ts +25 -0
  304. package/src/services/planner-skeleton.d.ts +124 -0
  305. package/src/services/planner-skeleton.d.ts.map +1 -0
  306. package/src/services/planner-skeleton.ts +175 -0
  307. package/src/services/providers.d.ts +38 -0
  308. package/src/services/providers.d.ts.map +1 -0
  309. package/src/services/providers.ts +507 -0
  310. package/src/services/ram-budget-cache.test.ts +163 -0
  311. package/src/services/ram-budget.d.ts +110 -0
  312. package/src/services/ram-budget.d.ts.map +1 -0
  313. package/src/services/ram-budget.ts +0 -0
  314. package/src/services/readiness.d.ts +9 -0
  315. package/src/services/readiness.d.ts.map +1 -0
  316. package/src/services/readiness.test.ts +87 -0
  317. package/src/services/readiness.ts +238 -0
  318. package/src/services/recommendation.d.ts +111 -0
  319. package/src/services/recommendation.d.ts.map +1 -0
  320. package/src/services/recommendation.ts +671 -0
  321. package/src/services/registry.d.ts +35 -0
  322. package/src/services/registry.d.ts.map +1 -0
  323. package/src/services/registry.ts +151 -0
  324. package/src/services/router-handler.d.ts +92 -0
  325. package/src/services/router-handler.d.ts.map +1 -0
  326. package/src/services/router-handler.test.ts +45 -0
  327. package/src/services/router-handler.ts +407 -0
  328. package/src/services/routing-policy.d.ts +69 -0
  329. package/src/services/routing-policy.d.ts.map +1 -0
  330. package/src/services/routing-policy.test.ts +164 -0
  331. package/src/services/routing-policy.ts +297 -0
  332. package/src/services/routing-preferences.d.ts +8 -0
  333. package/src/services/routing-preferences.d.ts.map +1 -0
  334. package/src/services/routing-preferences.ts +17 -0
  335. package/src/services/runtime-target.d.ts +98 -0
  336. package/src/services/runtime-target.d.ts.map +1 -0
  337. package/src/services/runtime-target.ts +154 -0
  338. package/src/services/service.d.ts +128 -0
  339. package/src/services/service.d.ts.map +1 -0
  340. package/src/services/service.test.ts +223 -0
  341. package/src/services/service.ts +735 -0
  342. package/src/services/session-pool.d.ts +72 -0
  343. package/src/services/session-pool.d.ts.map +1 -0
  344. package/src/services/session-pool.ts +153 -0
  345. package/src/services/structured-output/deterministic-repair.d.ts +23 -0
  346. package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
  347. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  348. package/src/services/structured-output/deterministic-repair.ts +443 -0
  349. package/src/services/structured-output/index.ts +4 -0
  350. package/src/services/structured-output.d.ts +311 -0
  351. package/src/services/structured-output.d.ts.map +1 -0
  352. package/src/services/structured-output.test.ts +483 -0
  353. package/src/services/structured-output.ts +712 -0
  354. package/src/services/system-memory.d.ts +33 -0
  355. package/src/services/system-memory.d.ts.map +1 -0
  356. package/src/services/system-memory.test.ts +47 -0
  357. package/src/services/system-memory.ts +67 -0
  358. package/src/services/transcription-priority.test.ts +211 -0
  359. package/src/services/types.d.ts +19 -0
  360. package/src/services/types.d.ts.map +1 -0
  361. package/src/services/types.ts +55 -0
  362. package/src/services/verify-on-device.d.ts +34 -0
  363. package/src/services/verify-on-device.d.ts.map +1 -0
  364. package/src/services/verify-on-device.test.ts +87 -0
  365. package/src/services/verify-on-device.ts +127 -0
  366. package/src/services/verify.d.ts +8 -0
  367. package/src/services/verify.d.ts.map +1 -0
  368. package/src/services/verify.ts +13 -0
  369. package/src/services/vision/aosp-unavailable.d.ts +115 -0
  370. package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
  371. package/src/services/vision/aosp-unavailable.ts +163 -0
  372. package/src/services/vision/capacitor-llama.d.ts +99 -0
  373. package/src/services/vision/capacitor-llama.d.ts.map +1 -0
  374. package/src/services/vision/capacitor-llama.ts +255 -0
  375. package/src/services/vision/cloud-fallback.d.ts +47 -0
  376. package/src/services/vision/cloud-fallback.d.ts.map +1 -0
  377. package/src/services/vision/cloud-fallback.test.ts +243 -0
  378. package/src/services/vision/cloud-fallback.ts +268 -0
  379. package/src/services/vision/fallback-chain.test.ts +86 -0
  380. package/src/services/vision/hash.d.ts +71 -0
  381. package/src/services/vision/hash.d.ts.map +1 -0
  382. package/src/services/vision/hash.ts +157 -0
  383. package/src/services/vision/index.d.ts +95 -0
  384. package/src/services/vision/index.d.ts.map +1 -0
  385. package/src/services/vision/index.ts +251 -0
  386. package/src/services/vision/llama-server.d.ts +73 -0
  387. package/src/services/vision/llama-server.d.ts.map +1 -0
  388. package/src/services/vision/llama-server.ts +177 -0
  389. package/src/services/vision/types.d.ts +153 -0
  390. package/src/services/vision/types.d.ts.map +1 -0
  391. package/src/services/vision/types.ts +154 -0
  392. package/src/services/vision/vast-fallback.d.ts +18 -0
  393. package/src/services/vision/vast-fallback.d.ts.map +1 -0
  394. package/src/services/vision/vast-fallback.ts +127 -0
  395. package/src/services/vision-embedding-cache.d.ts +98 -0
  396. package/src/services/vision-embedding-cache.d.ts.map +1 -0
  397. package/src/services/vision-embedding-cache.ts +189 -0
  398. package/src/services/voice/VOICE_WORKBENCH.md +88 -0
  399. package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
  400. package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
  401. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  402. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  403. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  404. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  405. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  406. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  407. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  408. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  409. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  410. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  411. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
  412. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  413. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  414. package/src/services/voice/asr-timed.real.test.ts +141 -0
  415. package/src/services/voice/audio-frame-consumer.d.ts +212 -0
  416. package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
  417. package/src/services/voice/audio-frame-consumer.test.ts +343 -0
  418. package/src/services/voice/audio-frame-consumer.ts +491 -0
  419. package/src/services/voice/barge-in.d.ts +112 -0
  420. package/src/services/voice/barge-in.d.ts.map +1 -0
  421. package/src/services/voice/barge-in.test.ts +244 -0
  422. package/src/services/voice/barge-in.ts +336 -0
  423. package/src/services/voice/cancellation-coordinator.d.ts +127 -0
  424. package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
  425. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  426. package/src/services/voice/cancellation-coordinator.ts +269 -0
  427. package/src/services/voice/checkpoint-manager.d.ts +199 -0
  428. package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
  429. package/src/services/voice/checkpoint-manager.ts +401 -0
  430. package/src/services/voice/checkpoint-policy.ts +336 -0
  431. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  432. package/src/services/voice/e2e-harness.test.ts +182 -0
  433. package/src/services/voice/e2e-harness.ts +743 -0
  434. package/src/services/voice/eager-context-builder.d.ts +170 -0
  435. package/src/services/voice/eager-context-builder.d.ts.map +1 -0
  436. package/src/services/voice/eager-context-builder.ts +262 -0
  437. package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
  438. package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  439. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  440. package/src/services/voice/embedding-server.ts +200 -0
  441. package/src/services/voice/embedding.d.ts +133 -0
  442. package/src/services/voice/embedding.d.ts.map +1 -0
  443. package/src/services/voice/embedding.test.ts +131 -0
  444. package/src/services/voice/embedding.ts +243 -0
  445. package/src/services/voice/emotion-attribution.d.ts +68 -0
  446. package/src/services/voice/emotion-attribution.d.ts.map +1 -0
  447. package/src/services/voice/emotion-attribution.test.ts +129 -0
  448. package/src/services/voice/emotion-attribution.ts +361 -0
  449. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  450. package/src/services/voice/engine-bridge.d.ts +759 -0
  451. package/src/services/voice/engine-bridge.d.ts.map +1 -0
  452. package/src/services/voice/engine-bridge.test.ts +384 -0
  453. package/src/services/voice/engine-bridge.ts +2302 -0
  454. package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
  455. package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  456. package/src/services/voice/eot-classifier-ggml.ts +566 -0
  457. package/src/services/voice/eot-classifier.d.ts +214 -0
  458. package/src/services/voice/eot-classifier.d.ts.map +1 -0
  459. package/src/services/voice/eot-classifier.ts +533 -0
  460. package/src/services/voice/errors.d.ts +20 -0
  461. package/src/services/voice/errors.d.ts.map +1 -0
  462. package/src/services/voice/errors.ts +32 -0
  463. package/src/services/voice/expressive-tags.d.ts +158 -0
  464. package/src/services/voice/expressive-tags.d.ts.map +1 -0
  465. package/src/services/voice/expressive-tags.ts +405 -0
  466. package/src/services/voice/ffi-bindings.d.ts +674 -0
  467. package/src/services/voice/ffi-bindings.d.ts.map +1 -0
  468. package/src/services/voice/ffi-bindings.test.ts +728 -0
  469. package/src/services/voice/ffi-bindings.ts +3225 -0
  470. package/src/services/voice/first-line-cache.d.ts +181 -0
  471. package/src/services/voice/first-line-cache.d.ts.map +1 -0
  472. package/src/services/voice/first-line-cache.ts +725 -0
  473. package/src/services/voice/fused-eot-scorer.d.ts +51 -0
  474. package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
  475. package/src/services/voice/fused-eot-scorer.ts +135 -0
  476. package/src/services/voice/index.d.ts +91 -0
  477. package/src/services/voice/index.d.ts.map +1 -0
  478. package/src/services/voice/index.ts +481 -0
  479. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
  480. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
  481. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  482. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  483. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  484. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  485. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  486. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
  487. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  488. package/src/services/voice/kokoro/index.ts +79 -0
  489. package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
  490. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  491. package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
  492. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  493. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  494. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  495. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  496. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  497. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  498. package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  499. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  500. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  501. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  502. package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
  503. package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  504. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  505. package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
  506. package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  507. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  508. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  509. package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
  510. package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  511. package/src/services/voice/kokoro/runtime-selection.ts +237 -0
  512. package/src/services/voice/kokoro/types.d.ts +82 -0
  513. package/src/services/voice/kokoro/types.d.ts.map +1 -0
  514. package/src/services/voice/kokoro/types.ts +95 -0
  515. package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
  516. package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  517. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  518. package/src/services/voice/kokoro/voices.d.ts +30 -0
  519. package/src/services/voice/kokoro/voices.d.ts.map +1 -0
  520. package/src/services/voice/kokoro/voices.ts +64 -0
  521. package/src/services/voice/lifecycle.d.ts +135 -0
  522. package/src/services/voice/lifecycle.d.ts.map +1 -0
  523. package/src/services/voice/lifecycle.test.ts +315 -0
  524. package/src/services/voice/lifecycle.ts +301 -0
  525. package/src/services/voice/live-diarization-session.d.ts +96 -0
  526. package/src/services/voice/live-diarization-session.d.ts.map +1 -0
  527. package/src/services/voice/live-diarization-session.ts +289 -0
  528. package/src/services/voice/mic-source.d.ts +136 -0
  529. package/src/services/voice/mic-source.d.ts.map +1 -0
  530. package/src/services/voice/mic-source.test.ts +210 -0
  531. package/src/services/voice/mic-source.ts +503 -0
  532. package/src/services/voice/optimistic-policy.d.ts +109 -0
  533. package/src/services/voice/optimistic-policy.d.ts.map +1 -0
  534. package/src/services/voice/optimistic-policy.test.ts +101 -0
  535. package/src/services/voice/optimistic-policy.ts +192 -0
  536. package/src/services/voice/optimistic-rollback.ts +343 -0
  537. package/src/services/voice/partial-stabilizer.d.ts +73 -0
  538. package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
  539. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  540. package/src/services/voice/partial-stabilizer.ts +140 -0
  541. package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
  542. package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  543. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  544. package/src/services/voice/phrase-cache.d.ts +76 -0
  545. package/src/services/voice/phrase-cache.d.ts.map +1 -0
  546. package/src/services/voice/phrase-cache.test.ts +242 -0
  547. package/src/services/voice/phrase-cache.ts +186 -0
  548. package/src/services/voice/phrase-chunker.d.ts +62 -0
  549. package/src/services/voice/phrase-chunker.d.ts.map +1 -0
  550. package/src/services/voice/phrase-chunker.test.ts +239 -0
  551. package/src/services/voice/phrase-chunker.ts +281 -0
  552. package/src/services/voice/pipeline-impls.d.ts +151 -0
  553. package/src/services/voice/pipeline-impls.d.ts.map +1 -0
  554. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  555. package/src/services/voice/pipeline-impls.test.ts +292 -0
  556. package/src/services/voice/pipeline-impls.ts +315 -0
  557. package/src/services/voice/pipeline.d.ts +216 -0
  558. package/src/services/voice/pipeline.d.ts.map +1 -0
  559. package/src/services/voice/pipeline.ts +505 -0
  560. package/src/services/voice/prefill-client.d.ts +123 -0
  561. package/src/services/voice/prefill-client.d.ts.map +1 -0
  562. package/src/services/voice/prefill-client.ts +316 -0
  563. package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
  564. package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  565. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  566. package/src/services/voice/profile-store.d.ts +248 -0
  567. package/src/services/voice/profile-store.d.ts.map +1 -0
  568. package/src/services/voice/profile-store.ts +887 -0
  569. package/src/services/voice/real-audio-decode.test.ts +148 -0
  570. package/src/services/voice/ring-buffer.d.ts +40 -0
  571. package/src/services/voice/ring-buffer.d.ts.map +1 -0
  572. package/src/services/voice/ring-buffer.test.ts +129 -0
  573. package/src/services/voice/ring-buffer.ts +123 -0
  574. package/src/services/voice/rollback-queue.d.ts +24 -0
  575. package/src/services/voice/rollback-queue.d.ts.map +1 -0
  576. package/src/services/voice/rollback-queue.ts +74 -0
  577. package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
  578. package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  579. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  580. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  581. package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
  582. package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  583. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  584. package/src/services/voice/scheduler.d.ts +146 -0
  585. package/src/services/voice/scheduler.d.ts.map +1 -0
  586. package/src/services/voice/scheduler.t2.test.ts +141 -0
  587. package/src/services/voice/scheduler.ts +927 -0
  588. package/src/services/voice/shared-resources.d.ts +190 -0
  589. package/src/services/voice/shared-resources.d.ts.map +1 -0
  590. package/src/services/voice/shared-resources.ts +320 -0
  591. package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  592. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  593. package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
  594. package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
  595. package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  596. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  597. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  598. package/src/services/voice/speaker/diarizer.d.ts +75 -0
  599. package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
  600. package/src/services/voice/speaker/diarizer.ts +218 -0
  601. package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
  602. package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  603. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  604. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  605. package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
  606. package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  607. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  608. package/src/services/voice/speaker/encoder.d.ts +37 -0
  609. package/src/services/voice/speaker/encoder.d.ts.map +1 -0
  610. package/src/services/voice/speaker/encoder.ts +105 -0
  611. package/src/services/voice/speaker-imprint.d.ts +83 -0
  612. package/src/services/voice/speaker-imprint.d.ts.map +1 -0
  613. package/src/services/voice/speaker-imprint.test.ts +185 -0
  614. package/src/services/voice/speaker-imprint.ts +312 -0
  615. package/src/services/voice/speaker-preset-cache.d.ts +77 -0
  616. package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
  617. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  618. package/src/services/voice/speaker-preset-cache.ts +195 -0
  619. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  620. package/src/services/voice/system-audio-sink.d.ts +73 -0
  621. package/src/services/voice/system-audio-sink.d.ts.map +1 -0
  622. package/src/services/voice/system-audio-sink.test.ts +29 -0
  623. package/src/services/voice/system-audio-sink.ts +366 -0
  624. package/src/services/voice/transcriber.d.ts +244 -0
  625. package/src/services/voice/transcriber.d.ts.map +1 -0
  626. package/src/services/voice/transcriber.test.ts +392 -0
  627. package/src/services/voice/transcriber.ts +704 -0
  628. package/src/services/voice/transcript-knowledge.d.ts +37 -0
  629. package/src/services/voice/transcript-knowledge.d.ts.map +1 -0
  630. package/src/services/voice/transcript-knowledge.test.ts +68 -0
  631. package/src/services/voice/transcript-knowledge.ts +75 -0
  632. package/src/services/voice/transcript-service.d.ts +41 -0
  633. package/src/services/voice/transcript-service.d.ts.map +1 -0
  634. package/src/services/voice/transcript-service.test.ts +137 -0
  635. package/src/services/voice/transcript-service.ts +141 -0
  636. package/src/services/voice/transcript-store.d.ts +53 -0
  637. package/src/services/voice/transcript-store.d.ts.map +1 -0
  638. package/src/services/voice/transcript-store.test.ts +153 -0
  639. package/src/services/voice/transcript-store.ts +132 -0
  640. package/src/services/voice/turn-controller.d.ts +183 -0
  641. package/src/services/voice/turn-controller.d.ts.map +1 -0
  642. package/src/services/voice/turn-controller.test.ts +575 -0
  643. package/src/services/voice/turn-controller.ts +596 -0
  644. package/src/services/voice/types.d.ts +643 -0
  645. package/src/services/voice/types.d.ts.map +1 -0
  646. package/src/services/voice/types.ts +699 -0
  647. package/src/services/voice/vad.d.ts +282 -0
  648. package/src/services/voice/vad.d.ts.map +1 -0
  649. package/src/services/voice/vad.test.ts +480 -0
  650. package/src/services/voice/vad.ts +827 -0
  651. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  652. package/src/services/voice/voice-budget.d.ts +241 -0
  653. package/src/services/voice/voice-budget.d.ts.map +1 -0
  654. package/src/services/voice/voice-budget.test.ts +418 -0
  655. package/src/services/voice/voice-budget.ts +635 -0
  656. package/src/services/voice/voice-duet.test.ts +375 -0
  657. package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
  658. package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  659. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  660. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  661. package/src/services/voice/voice-preset-format.d.ts +158 -0
  662. package/src/services/voice/voice-preset-format.d.ts.map +1 -0
  663. package/src/services/voice/voice-preset-format.ts +700 -0
  664. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  665. package/src/services/voice/voice-profile-artifact.d.ts +116 -0
  666. package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
  667. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  668. package/src/services/voice/voice-profile-artifact.ts +518 -0
  669. package/src/services/voice/voice-profile-routes.d.ts +83 -0
  670. package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
  671. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  672. package/src/services/voice/voice-profile-routes.ts +425 -0
  673. package/src/services/voice/voice-scenario.ts +154 -0
  674. package/src/services/voice/voice-settings.d.ts +82 -0
  675. package/src/services/voice/voice-settings.d.ts.map +1 -0
  676. package/src/services/voice/voice-settings.ts +172 -0
  677. package/src/services/voice/voice-state-machine.d.ts +364 -0
  678. package/src/services/voice/voice-state-machine.d.ts.map +1 -0
  679. package/src/services/voice/voice-state-machine.ts +727 -0
  680. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  681. package/src/services/voice/voice-workbench-report.ts +326 -0
  682. package/src/services/voice/voice-workbench.test.ts +158 -0
  683. package/src/services/voice/voice.test.ts +1070 -0
  684. package/src/services/voice/wake-word-ggml.d.ts +101 -0
  685. package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
  686. package/src/services/voice/wake-word-ggml.ts +320 -0
  687. package/src/services/voice/wake-word.d.ts +255 -0
  688. package/src/services/voice/wake-word.d.ts.map +1 -0
  689. package/src/services/voice/wake-word.test.ts +298 -0
  690. package/src/services/voice/wake-word.ts +554 -0
  691. package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  692. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  693. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  694. package/src/services/voice-model-updater.d.ts +240 -0
  695. package/src/services/voice-model-updater.d.ts.map +1 -0
  696. package/src/services/voice-model-updater.ts +724 -0
  697. package/src/services/voice-prewarm.d.ts +3 -0
  698. package/src/services/voice-prewarm.d.ts.map +1 -0
  699. package/src/services/voice-prewarm.ts +51 -0
  700. package/dist/index.d.ts +0 -37
  701. package/dist/index.js +0 -1098
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Wrap a TTS model handler (`ModelType.TEXT_TO_SPEECH`) with the
3
+ * `FirstLineCache` disk-tier.
4
+ *
5
+ * Behaviour on a wrapped handler call:
6
+ * 1. Snip the first sentence of the input text. Reject if > 10 words or
7
+ * no terminator found → defer to the inner handler unchanged.
8
+ * 2. Build the cache key from the snip + caller-supplied
9
+ * `(provider, voiceId, voiceRevision, codec, voiceSettingsFingerprint)`.
10
+ * 3. On hit: if the snip is the WHOLE input, return cached bytes. If the
11
+ * snip is only a prefix, return `cachedBytes ++ synthesize(remainder)`.
12
+ * The concat path is safe for the codecs we cache today (mp3, opus,
13
+ * ogg are self-framed; wav/pcm_f32 are not, and the wrapper falls
14
+ * through for those).
15
+ * 4. On miss: call the inner handler with the full input, return that.
16
+ * In the background, call the inner handler with JUST the snip to get
17
+ * a cleanly-framed cache entry (no mid-stream-byte alignment hazards).
18
+ *
19
+ * The wrapper is provider-agnostic — `WrapOptions.resolveContext` is the
20
+ * single seam where each TTS plugin teaches the cache its provider name +
21
+ * voice id + revision + voice-settings fingerprint.
22
+ */
23
+
24
+ import type { IAgentRuntime } from "@elizaos/core";
25
+ import { logger } from "@elizaos/core";
26
+ import {
27
+ FIRST_SENTENCE_SNIP_VERSION,
28
+ type FirstSentenceSnipResult,
29
+ firstSentenceSnip,
30
+ } from "@elizaos/shared";
31
+ import {
32
+ type FirstLineCache,
33
+ type FirstLineCacheEntry,
34
+ type FirstLineCacheKey,
35
+ getSharedFirstLineCache,
36
+ type PutInput,
37
+ } from "./first-line-cache";
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // Types
41
+ // ---------------------------------------------------------------------------
42
+
43
+ export type TtsBytes = Uint8Array | ArrayBuffer | Buffer;
44
+ export type TtsHandlerInput = string | { text: string; [k: string]: unknown };
45
+ export type TtsHandlerOutput = TtsBytes;
46
+ export type TtsHandler = (
47
+ runtime: IAgentRuntime,
48
+ input: TtsHandlerInput,
49
+ ) => Promise<TtsHandlerOutput>;
50
+
51
+ /** Caller-supplied context resolver — provider name + voice metadata. */
52
+ export interface TtsResolvedContext {
53
+ provider: string;
54
+ voiceId: string;
55
+ voiceRevision: string;
56
+ codec: FirstLineCacheKey["codec"];
57
+ contentType: string;
58
+ sampleRate: number;
59
+ voiceSettingsFingerprint: string;
60
+ /** Optional: if true, bypass the cache entirely on this call. */
61
+ bypass?: boolean;
62
+ }
63
+
64
+ export interface WrapOptions {
65
+ /** Inject for tests. */
66
+ cache?: FirstLineCache;
67
+ /**
68
+ * Resolve the per-call provider/voice context. Must be cheap (typically
69
+ * a settings read + a small sha256). Return `null` to bypass the cache.
70
+ */
71
+ resolveContext: (
72
+ runtime: IAgentRuntime,
73
+ input: TtsHandlerInput,
74
+ ) => Promise<TtsResolvedContext | null> | TtsResolvedContext | null;
75
+ /**
76
+ * Whether to attempt to concatenate cached bytes + remainder synthesis.
77
+ * Defaults to true for mp3/opus/ogg, false for wav/pcm_f32 (concat would
78
+ * corrupt the RIFF / raw stream).
79
+ */
80
+ concatRemainder?: boolean;
81
+ /** Optional pre-resolved fingerprint of voiceSettings; rarely needed. */
82
+ enableCachePopulation?: boolean;
83
+ }
84
+
85
+ // ---------------------------------------------------------------------------
86
+ // Helpers
87
+ // ---------------------------------------------------------------------------
88
+
89
+ function bytesToUint8Array(b: TtsHandlerOutput): Uint8Array {
90
+ if (b instanceof Uint8Array) return b;
91
+ if (b instanceof ArrayBuffer) return new Uint8Array(b);
92
+ // Buffer is a Uint8Array subclass so the first branch already covers it.
93
+ return new Uint8Array(b as ArrayBufferLike);
94
+ }
95
+
96
+ function extractText(input: TtsHandlerInput): string {
97
+ return typeof input === "string" ? input : input.text;
98
+ }
99
+
100
+ function withText(input: TtsHandlerInput, text: string): TtsHandlerInput {
101
+ if (typeof input === "string") return text;
102
+ return { ...input, text };
103
+ }
104
+
105
+ function concatU8(a: Uint8Array, b: Uint8Array): Uint8Array {
106
+ const out = new Uint8Array(a.length + b.length);
107
+ out.set(a, 0);
108
+ out.set(b, a.length);
109
+ return out;
110
+ }
111
+
112
+ const NEVER_CONCAT_CODECS: ReadonlySet<FirstLineCacheKey["codec"]> = new Set([
113
+ "wav",
114
+ "pcm_f32",
115
+ "flac",
116
+ ]);
117
+
118
+ function canConcat(codec: FirstLineCacheKey["codec"]): boolean {
119
+ return !NEVER_CONCAT_CODECS.has(codec);
120
+ }
121
+
122
+ // ---------------------------------------------------------------------------
123
+ // Wrapper
124
+ // ---------------------------------------------------------------------------
125
+
126
+ /**
127
+ * Wrap a TTS handler with first-sentence caching. Returns a new handler with
128
+ * the same signature.
129
+ *
130
+ * The wrapper is safe to apply at runtime registration time — if the cache
131
+ * is disabled (env / no sqlite), the wrapper short-circuits to the inner
132
+ * handler with zero overhead beyond a snip attempt.
133
+ */
134
+ export function wrapWithFirstLineCache(
135
+ inner: TtsHandler,
136
+ options: WrapOptions,
137
+ ): TtsHandler {
138
+ const cache = options.cache ?? getSharedFirstLineCache();
139
+
140
+ return async function cachedTtsHandler(
141
+ runtime: IAgentRuntime,
142
+ input: TtsHandlerInput,
143
+ ): Promise<TtsHandlerOutput> {
144
+ if (!cache.isEnabled) {
145
+ return inner(runtime, input);
146
+ }
147
+
148
+ const text = extractText(input);
149
+ if (!text) return inner(runtime, input);
150
+
151
+ const snip = firstSentenceSnip(text);
152
+ if (!snip) return inner(runtime, input);
153
+
154
+ const ctx = await options.resolveContext(runtime, input);
155
+ if (!ctx || ctx.bypass) return inner(runtime, input);
156
+ if (!ctx.voiceId || !ctx.voiceRevision) return inner(runtime, input);
157
+
158
+ const key: FirstLineCacheKey = {
159
+ algoVersion: FIRST_SENTENCE_SNIP_VERSION,
160
+ provider: ctx.provider,
161
+ voiceId: ctx.voiceId,
162
+ voiceRevision: ctx.voiceRevision,
163
+ sampleRate: ctx.sampleRate,
164
+ codec: ctx.codec,
165
+ voiceSettingsFingerprint: ctx.voiceSettingsFingerprint,
166
+ normalizedText: snip.normalized,
167
+ };
168
+
169
+ const hit = cache.get(key);
170
+ if (hit) {
171
+ return assembleFromHit({
172
+ hit,
173
+ snip,
174
+ originalText: text,
175
+ input,
176
+ inner,
177
+ runtime,
178
+ options,
179
+ codec: ctx.codec,
180
+ });
181
+ }
182
+
183
+ // MISS — synthesize fresh + populate the cache in background.
184
+ const fullBytes = await inner(runtime, input);
185
+ const _fullU8 = bytesToUint8Array(fullBytes);
186
+
187
+ if (options.enableCachePopulation !== false) {
188
+ schedulePopulate({
189
+ cache,
190
+ inner,
191
+ runtime,
192
+ input,
193
+ snip,
194
+ key,
195
+ ctx,
196
+ });
197
+ }
198
+
199
+ return fullBytes;
200
+ };
201
+ }
202
+
203
+ interface AssembleArgs {
204
+ hit: FirstLineCacheEntry;
205
+ snip: FirstSentenceSnipResult;
206
+ originalText: string;
207
+ input: TtsHandlerInput;
208
+ inner: TtsHandler;
209
+ runtime: IAgentRuntime;
210
+ options: WrapOptions;
211
+ codec: FirstLineCacheKey["codec"];
212
+ }
213
+
214
+ async function assembleFromHit(args: AssembleArgs): Promise<TtsHandlerOutput> {
215
+ const { hit, snip, originalText, input, inner, runtime, options, codec } =
216
+ args;
217
+ const remainder = originalText.slice(snip.endOffset).trimStart();
218
+ const concatEnabled = options.concatRemainder ?? canConcat(codec);
219
+
220
+ if (!remainder) return hit.bytes;
221
+ if (!concatEnabled) {
222
+ // Codec we can't safely concat (wav/pcm). Fall through to full synth.
223
+ return inner(runtime, input);
224
+ }
225
+ const remainderBytes = await inner(runtime, withText(input, remainder));
226
+ return concatU8(hit.bytes, bytesToUint8Array(remainderBytes));
227
+ }
228
+
229
+ interface PopulateArgs {
230
+ cache: FirstLineCache;
231
+ inner: TtsHandler;
232
+ runtime: IAgentRuntime;
233
+ input: TtsHandlerInput;
234
+ snip: FirstSentenceSnipResult;
235
+ key: FirstLineCacheKey;
236
+ ctx: TtsResolvedContext;
237
+ }
238
+
239
+ function schedulePopulate(args: PopulateArgs): void {
240
+ // Fire-and-forget. If the dedicated synthesis fails, we leave the cache
241
+ // empty and try again next call.
242
+ void (async () => {
243
+ try {
244
+ if (args.cache.has(args.key)) return;
245
+ const snipBytes = await args.inner(
246
+ args.runtime,
247
+ withText(args.input, args.snip.raw),
248
+ );
249
+ const u8 = bytesToUint8Array(snipBytes);
250
+ if (u8.length === 0) return;
251
+
252
+ const put: PutInput = {
253
+ ...args.key,
254
+ bytes: u8,
255
+ rawText: args.snip.raw,
256
+ contentType: args.ctx.contentType,
257
+ durationMs: 0,
258
+ wordCount: args.snip.wordCount,
259
+ };
260
+ args.cache.put(put);
261
+ } catch (err) {
262
+ logger.debug(
263
+ `[tts-cache] first-line populate failed for "${args.snip.normalized}": ${err instanceof Error ? err.message : String(err)}`,
264
+ );
265
+ }
266
+ })();
267
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Voice sub-model auto-updater (per R5-versioning §3).
3
+ *
4
+ * Watches for newer versions of the voice sub-models declared in
5
+ * `@elizaos/shared/local-inference/voice-models` (`VOICE_MODEL_VERSIONS`)
6
+ * and recommends downloads when the published-side history advertises a
7
+ * strictly newer semver, the publish gate set `netImprovement === true`,
8
+ * and the user has not pinned the installed model.
9
+ *
10
+ * Source cascade (first that responds wins):
11
+ *
12
+ * 1. **Eliza Cloud catalog** — `GET <cloudBaseUrl>/api/v1/voice-models/catalog`
13
+ * (signed Ed25519, current+next-key rotation). Preferred when the device
14
+ * is linked to Cloud.
15
+ * 2. **GitHub Releases of `elizaOS/eliza-1-voice-models`** — one release per
16
+ * `<voiceModelId>-v<version>` tag. Public, unauthenticated (60/h rate
17
+ * limit; cache aggressively).
18
+ * 3. **HuggingFace tree-listing** — `GET https://huggingface.co/api/models/<hfRepo>/tree/<revision>?recursive=true`.
19
+ * Final-truth probe; used when the catalog can't be reached.
20
+ *
21
+ * The local in-binary `VOICE_MODEL_VERSIONS` is always consulted alongside
22
+ * the remote sources so a build that ships a newer-than-remote version
23
+ * still wins the comparison (we never auto-downgrade).
24
+ *
25
+ * Cadence: 4 hours (`ELIZA_VOICE_UPDATE_INTERVAL_MS` overrides; defaults to
26
+ * 14_400_000 ms, mirroring `update-checker.ts`).
27
+ *
28
+ * Decision: see `shouldAutoUpdateVoiceModel`.
29
+ *
30
+ * Atomic swap: downloads write to `<staging>/<id>-<version>.part`, hash
31
+ * against the catalog sha256, then `fsp.rename` into the bundle voice dir.
32
+ * On verify failure the staging file is unlinked and the failure is
33
+ * surfaced; no automatic retry (avoid update loops on a flaky CDN).
34
+ *
35
+ * This module is platform-agnostic — it does NOT call the network-policy
36
+ * bridge directly; callers compose the policy decision before invoking
37
+ * `downloadVoiceModel`.
38
+ */
39
+ import { type Ed25519PublicKey, type NetworkPolicyDecision, type VoiceModelId, type VoiceModelVersion } from "@elizaos/shared";
40
+ /**
41
+ * One remote source consulted by the cascade. Tests inject custom shapes;
42
+ * production wires the three sources below.
43
+ */
44
+ export interface VoiceModelCatalogSource {
45
+ readonly id: "cloud" | "github" | "huggingface" | (string & {});
46
+ fetchAll(signal: AbortSignal): Promise<ReadonlyArray<VoiceModelVersion>>;
47
+ }
48
+ export interface VoiceModelPinPolicy {
49
+ /** Set of `VoiceModelId`s pinned to their currently-installed version. */
50
+ readonly pinned: ReadonlySet<VoiceModelId>;
51
+ }
52
+ export interface VoiceModelUpdateCheckResult {
53
+ readonly id: VoiceModelId;
54
+ readonly installedVersion: string | null;
55
+ readonly latestVersion: VoiceModelVersion | null;
56
+ readonly updateAvailable: boolean;
57
+ readonly pinned: boolean;
58
+ readonly reason: "up-to-date" | "pinned" | "not-installed" | "net-regression" | "bundle-incompatible" | "unpublished" | "update-available";
59
+ }
60
+ export interface VoiceModelUpdaterOptions {
61
+ /**
62
+ * Catalog sources in priority order. The first source that returns a
63
+ * non-empty list wins; sources that throw or return empty are skipped.
64
+ * Defaults to `[cloud(cloudBaseUrl), github(), huggingface()]`.
65
+ */
66
+ readonly sources?: ReadonlyArray<VoiceModelCatalogSource>;
67
+ /** Eliza Cloud root URL (e.g. `https://cloud.elizaos.ai`). */
68
+ readonly cloudBaseUrl?: string;
69
+ /** Ed25519 public keys accepted for the Cloud catalog. */
70
+ readonly publicKeys?: ReadonlyArray<Ed25519PublicKey>;
71
+ /** Optional logger for trace events. */
72
+ readonly logger?: {
73
+ info: (msg: string) => void;
74
+ warn: (msg: string) => void;
75
+ };
76
+ }
77
+ /**
78
+ * Decide whether a candidate version should auto-update over the installed
79
+ * one. Three required gates:
80
+ *
81
+ * 1. candidate version > installed version (semver compare > 0).
82
+ * 2. `candidate.evalDeltas.netImprovement === true`.
83
+ * 3. installed bundle.version ≥ `candidate.minBundleVersion` (caller passes
84
+ * `bundleVersion`; pass an empty string to skip the bundle gate, e.g.
85
+ * during pure UI listing).
86
+ *
87
+ * A pinned id always declines.
88
+ */
89
+ export declare function shouldAutoUpdateVoiceModel(args: {
90
+ installedVersion: string | null;
91
+ candidate: VoiceModelVersion;
92
+ bundleVersion: string;
93
+ pinned: boolean;
94
+ }): {
95
+ allow: boolean;
96
+ reason: VoiceModelUpdateCheckResult["reason"];
97
+ };
98
+ /**
99
+ * Walk the cascade in order, return the first source that yields a
100
+ * non-empty list. All sources are awaited with `signal` so the caller can
101
+ * cancel the whole check. Sources that throw are logged and skipped.
102
+ *
103
+ * Re-exported as `fetchVoiceModelCatalog` for tests; production callers go
104
+ * through `VoiceModelUpdater.check`.
105
+ */
106
+ export declare function fetchVoiceModelCatalog(sources: ReadonlyArray<VoiceModelCatalogSource>, signal: AbortSignal, logger?: VoiceModelUpdaterOptions["logger"]): Promise<{
107
+ source: string;
108
+ versions: ReadonlyArray<VoiceModelVersion>;
109
+ } | null>;
110
+ /**
111
+ * Cloud catalog source (R5 §3.1.1). Fetches the signed JSON manifest and
112
+ * verifies it before parsing. Strict — a body whose signature does not
113
+ * verify is treated as a fetch failure so the cascade moves on rather than
114
+ * silently accepting an unsigned response.
115
+ */
116
+ export declare function cloudCatalogSource(args: {
117
+ baseUrl: string;
118
+ publicKeys: ReadonlyArray<Ed25519PublicKey>;
119
+ authToken?: string;
120
+ timeoutMs?: number;
121
+ }): VoiceModelCatalogSource;
122
+ /**
123
+ * GitHub releases source (R5 §3.1.2). One release per `<id>-v<version>`
124
+ * tag in `elizaOS/eliza-1-voice-models`. Each release asset includes a
125
+ * `manifest.json` matching the `VoiceModelVersion` shape.
126
+ */
127
+ export declare function githubReleasesSource(args: {
128
+ owner?: string;
129
+ repo?: string;
130
+ timeoutMs?: number;
131
+ authToken?: string;
132
+ }): VoiceModelCatalogSource;
133
+ /**
134
+ * HuggingFace tree-listing source (R5 §3.1.3). Final-truth probe. Walks
135
+ * every model id in `VOICE_MODEL_VERSIONS` against its `hfRepo` + `main`
136
+ * revision and re-confirms file shas. This source is best-effort — when
137
+ * HF responds with the file list but no `lfs.sha256` field, the candidate
138
+ * is dropped (we never auto-update on a partially-trusted source).
139
+ */
140
+ export declare function huggingFaceSource(args?: {
141
+ timeoutMs?: number;
142
+ baseUrl?: string;
143
+ }): VoiceModelCatalogSource;
144
+ /** Compose a default cascade if the caller doesn't provide one. */
145
+ export declare function defaultVoiceModelSources(opts: VoiceModelUpdaterOptions): ReadonlyArray<VoiceModelCatalogSource>;
146
+ /**
147
+ * Merge the local in-binary `VOICE_MODEL_VERSIONS` with the remote
148
+ * catalog. Local entries that match `(id, version)` are replaced by the
149
+ * remote (remote is the source of truth for shas + sizes); local entries
150
+ * with no remote match are kept so a build can ship a strictly-newer
151
+ * voice model that hasn't been uploaded yet.
152
+ */
153
+ export declare function mergeCatalogs(local: ReadonlyArray<VoiceModelVersion>, remote: ReadonlyArray<VoiceModelVersion>): ReadonlyArray<VoiceModelVersion>;
154
+ /** Pick the highest-semver version per id from a merged catalog. */
155
+ export declare function latestPerId(versions: ReadonlyArray<VoiceModelVersion>): Map<VoiceModelId, VoiceModelVersion>;
156
+ /**
157
+ * Resolve the cadence in ms — env override > argument > default. Returns
158
+ * a strictly positive number. The interval governs background ticks; the
159
+ * UI "check now" button always bypasses.
160
+ */
161
+ export declare function resolveCheckIntervalMs(override?: number): number;
162
+ export interface VoiceModelDownloadInputs {
163
+ readonly version: VoiceModelVersion;
164
+ /** Bundle voice directory where the final file lives. */
165
+ readonly bundleVoiceDir: string;
166
+ /** Staging directory for `.part` files. */
167
+ readonly stagingDir: string;
168
+ /**
169
+ * Index into `version.ggufAssets` selecting the asset to fetch. The
170
+ * caller's quant-selection policy (R8) decides which.
171
+ */
172
+ readonly assetIndex: number;
173
+ /** Network policy decision attested by the caller. */
174
+ readonly networkPolicy: NetworkPolicyDecision;
175
+ /** AbortSignal — required so the cancel button stops downloads. */
176
+ readonly signal: AbortSignal;
177
+ /** HF resolve-URL builder; defaults to standard HF resolve path. */
178
+ readonly resolveUrl?: (repo: string, revision: string, file: string) => string;
179
+ }
180
+ export declare class VoiceModelDownloadError extends Error {
181
+ readonly code: string;
182
+ constructor(message: string, code: string);
183
+ }
184
+ /**
185
+ * Atomic-swap downloader for a single voice asset.
186
+ *
187
+ * Refuses to proceed when `networkPolicy.allow === false` so headless
188
+ * environments and pre-OWNER cellular skip cleanly. Streams to a
189
+ * `<id>-<version>.<filename>.part` file in the staging dir, hashes,
190
+ * verifies against the catalog sha256, then renames into the bundle voice
191
+ * dir using a `<id>-<version>.<filename>` final name so old + new
192
+ * versions coexist briefly during the swap (R5 §6.2).
193
+ */
194
+ export declare function downloadVoiceModel(args: VoiceModelDownloadInputs): Promise<{
195
+ finalPath: string;
196
+ sha256: string;
197
+ sizeBytes: number;
198
+ }>;
199
+ /**
200
+ * Computed status for one model id. Surfaced by `VoiceModelUpdater.check`
201
+ * and by the `/api/local-inference/voice-models/status` route.
202
+ */
203
+ export interface VoiceModelStatus {
204
+ readonly id: VoiceModelId;
205
+ readonly installedVersion: string | null;
206
+ readonly latestKnown: VoiceModelVersion | null;
207
+ readonly pinned: boolean;
208
+ readonly decision: ReturnType<typeof shouldAutoUpdateVoiceModel>;
209
+ }
210
+ export interface VoiceModelInstallState {
211
+ /** `VoiceModelId` → currently-installed semver (null = not installed). */
212
+ readonly installed: ReadonlyMap<VoiceModelId, string | null>;
213
+ /** Bundle version this device is currently running (e.g. manifest `version`). */
214
+ readonly bundleVersion: string;
215
+ }
216
+ export declare class VoiceModelUpdater {
217
+ readonly options: VoiceModelUpdaterOptions;
218
+ private lastCheckAt;
219
+ private lastResult;
220
+ private inFlight;
221
+ constructor(options?: VoiceModelUpdaterOptions);
222
+ /** Sources used by this updater (defaults composed from options). */
223
+ get sources(): ReadonlyArray<VoiceModelCatalogSource>;
224
+ /**
225
+ * Run a check against the cascade, merge with the local in-binary
226
+ * catalog, and return a per-id status.
227
+ *
228
+ * `force === false` (default) returns the cached result when the last
229
+ * check was within `resolveCheckIntervalMs()`. `force === true` always
230
+ * re-fetches.
231
+ */
232
+ check(install: VoiceModelInstallState, pinPolicy: VoiceModelPinPolicy, options?: {
233
+ force?: boolean;
234
+ signal?: AbortSignal;
235
+ }): Promise<ReadonlyArray<VoiceModelStatus>>;
236
+ private runCheck;
237
+ /** Pure helper for tests; returns the merged + per-id-latest map. */
238
+ static computeLatestPerId(remote: ReadonlyArray<VoiceModelVersion>): Map<VoiceModelId, VoiceModelVersion>;
239
+ }
240
+ //# sourceMappingURL=voice-model-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-model-updater.d.ts","sourceRoot":"","sources":["voice-model-updater.ts"],"names":[],"mappings":"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"}