@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,153 @@
1
+ import type { Memory, UUID } from "@elizaos/core";
2
+ import type { Transcript } from "@elizaos/shared/transcripts";
3
+ import { describe, expect, it } from "vitest";
4
+ import {
5
+ TRANSCRIPTS_TABLE,
6
+ TranscriptStore,
7
+ type TranscriptStoreRuntime,
8
+ } from "./transcript-store";
9
+
10
+ function makeTranscript(over: Partial<Transcript> = {}): Transcript {
11
+ return {
12
+ id: "00000000-0000-0000-0000-000000000001",
13
+ title: "Standup",
14
+ createdAt: 1000,
15
+ durationMs: 2000,
16
+ audioUrl: "/api/media/x.wav",
17
+ source: "voice-session",
18
+ scope: "owner-private",
19
+ status: "ready",
20
+ speakerCount: 1,
21
+ segments: [
22
+ {
23
+ id: "s1",
24
+ speakerLabel: "Alice",
25
+ startMs: 0,
26
+ endMs: 2000,
27
+ text: "hello world",
28
+ words: [{ text: "hello", startMs: 0, endMs: 1000 }],
29
+ },
30
+ ],
31
+ ...over,
32
+ };
33
+ }
34
+
35
+ /** In-memory fake runtime backing the memory partition. */
36
+ function fakeRuntime(): TranscriptStoreRuntime & { rows: Map<string, Memory> } {
37
+ const rows = new Map<string, Memory>();
38
+ const tables = new Map<string, string>();
39
+ return {
40
+ rows,
41
+ agentId: "agent-1" as UUID,
42
+ async createMemory(memory, tableName) {
43
+ const id = memory.id as UUID;
44
+ rows.set(id, memory);
45
+ tables.set(id, tableName);
46
+ return id;
47
+ },
48
+ async getMemories({ tableName, roomId, orderDirection }) {
49
+ let out = [...rows.values()].filter(
50
+ (m) => tables.get(m.id as string) === tableName,
51
+ );
52
+ if (roomId) out = out.filter((m) => m.roomId === roomId);
53
+ out.sort((a, b) =>
54
+ orderDirection === "asc"
55
+ ? (a.createdAt ?? 0) - (b.createdAt ?? 0)
56
+ : (b.createdAt ?? 0) - (a.createdAt ?? 0),
57
+ );
58
+ return out;
59
+ },
60
+ async getMemoryById(id) {
61
+ return rows.get(id) ?? null;
62
+ },
63
+ async deleteMemory(id) {
64
+ rows.delete(id);
65
+ },
66
+ };
67
+ }
68
+
69
+ const ROOM = "11111111-1111-1111-1111-111111111111" as UUID;
70
+ const ENTITY = "22222222-2222-2222-2222-222222222222" as UUID;
71
+
72
+ describe("TranscriptStore", () => {
73
+ it("persists into the transcripts partition and round-trips the full record", async () => {
74
+ const rt = fakeRuntime();
75
+ const store = new TranscriptStore(rt);
76
+ const t = makeTranscript();
77
+ await store.create({ roomId: ROOM, entityId: ENTITY, transcript: t });
78
+
79
+ // Stored as one memory row with the full transcript in content.transcript.
80
+ const row = rt.rows.get(t.id) as Memory;
81
+ expect(row.roomId).toBe(ROOM);
82
+ expect(row.entityId).toBe(ENTITY);
83
+ expect(row.metadata?.type).toBe("custom");
84
+ expect(row.metadata?.source).toBe("transcript");
85
+ // The full record is stored as a JSON blob in content.transcript.
86
+ expect(typeof (row.content as { transcript: string }).transcript).toBe(
87
+ "string",
88
+ );
89
+ // A text preview body is present for generic memory consumers.
90
+ expect(row.content.text).toBe("hello world");
91
+
92
+ // store.get parses the blob back into the exact record.
93
+ const got = await store.get(t.id as UUID);
94
+ expect(got).toEqual(t);
95
+ });
96
+
97
+ it("lists newest-first summaries scoped to a room", async () => {
98
+ const rt = fakeRuntime();
99
+ const store = new TranscriptStore(rt);
100
+ await store.create({
101
+ roomId: ROOM,
102
+ entityId: ENTITY,
103
+ transcript: makeTranscript({
104
+ id: "00000000-0000-0000-0000-0000000000aa",
105
+ title: "Older",
106
+ createdAt: 1000,
107
+ }),
108
+ });
109
+ await store.create({
110
+ roomId: ROOM,
111
+ entityId: ENTITY,
112
+ transcript: makeTranscript({
113
+ id: "00000000-0000-0000-0000-0000000000bb",
114
+ title: "Newer",
115
+ createdAt: 2000,
116
+ }),
117
+ });
118
+ // A transcript in a different room must not appear.
119
+ await store.create({
120
+ roomId: "33333333-3333-3333-3333-333333333333" as UUID,
121
+ entityId: ENTITY,
122
+ transcript: makeTranscript({
123
+ id: "00000000-0000-0000-0000-0000000000cc",
124
+ title: "Other room",
125
+ createdAt: 3000,
126
+ }),
127
+ });
128
+
129
+ const list = await store.list(ROOM);
130
+ expect(list.map((s) => s.title)).toEqual(["Newer", "Older"]);
131
+ expect(list[0]).toMatchObject({
132
+ durationMs: 2000,
133
+ hasAudio: true,
134
+ status: "ready",
135
+ });
136
+ });
137
+
138
+ it("returns null for a missing id and deletes a record", async () => {
139
+ const rt = fakeRuntime();
140
+ const store = new TranscriptStore(rt);
141
+ expect(
142
+ await store.get("deadbeef-0000-0000-0000-000000000000" as UUID),
143
+ ).toBeNull();
144
+ const t = makeTranscript();
145
+ await store.create({ roomId: ROOM, entityId: ENTITY, transcript: t });
146
+ await store.delete(t.id as UUID);
147
+ expect(await store.get(t.id as UUID)).toBeNull();
148
+ });
149
+
150
+ it("exposes the partition name", () => {
151
+ expect(TRANSCRIPTS_TABLE).toBe("transcripts");
152
+ });
153
+ });
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Transcript store (#8789 transcripts) — persistence for the rich transcript
3
+ * record (audio URL + word-timed diarized segments).
4
+ *
5
+ * Reuses the runtime's proven `memories` partition mechanism (exactly how the
6
+ * documents store works) rather than a new table/migration: each transcript is
7
+ * one memory row in the `"transcripts"` partition, with the full {@link Transcript}
8
+ * in `content.transcript`. The player loads a whole record by id and the list
9
+ * reads recent rows — no querying INSIDE segments is needed, because search is
10
+ * served by the knowledge mirror (see `transcript-knowledge.ts`). A custom
11
+ * `metadata.type` keeps it clear of the document/fragment CHECK constraints.
12
+ */
13
+
14
+ import type { Memory, MemoryMetadata, UUID } from "@elizaos/core";
15
+ import type {
16
+ Transcript,
17
+ TranscriptSummary,
18
+ } from "@elizaos/shared/transcripts";
19
+ import {
20
+ summarizeTranscript,
21
+ transcriptPreview,
22
+ } from "@elizaos/shared/transcripts";
23
+
24
+ /** The `type` column partition transcripts live in (sibling to "messages"). */
25
+ export const TRANSCRIPTS_TABLE = "transcripts";
26
+ /** `metadata.type` marker — NOT "document"/"fragment", so no CHECK fires. */
27
+ export const TRANSCRIPT_METADATA_TYPE = "transcript";
28
+
29
+ /** The subset of `IAgentRuntime` the store needs (real runtime satisfies it). */
30
+ export interface TranscriptStoreRuntime {
31
+ agentId: UUID;
32
+ createMemory(
33
+ memory: Memory,
34
+ tableName: string,
35
+ unique?: boolean,
36
+ ): Promise<UUID>;
37
+ getMemories(params: {
38
+ tableName: string;
39
+ roomId?: UUID;
40
+ count?: number;
41
+ orderBy?: "createdAt";
42
+ orderDirection?: "asc" | "desc";
43
+ }): Promise<Memory[]>;
44
+ getMemoryById(id: UUID): Promise<Memory | null>;
45
+ deleteMemory(id: UUID): Promise<void>;
46
+ }
47
+
48
+ export interface CreateTranscriptInput {
49
+ roomId: UUID;
50
+ /** The owner/speaker entity the recording is attributed to. */
51
+ entityId: UUID;
52
+ /** The fully-built transcript record (audio + segments + words). */
53
+ transcript: Transcript;
54
+ }
55
+
56
+ /** Pull the stored {@link Transcript} back out of a memory row (parses the
57
+ * JSON blob; a corrupt/legacy row yields null and is skipped by the list). */
58
+ function rowToTranscript(row: Memory): Transcript | null {
59
+ const raw = (row.content as { transcript?: unknown }).transcript;
60
+ if (typeof raw !== "string") return null;
61
+ try {
62
+ const parsed: unknown = JSON.parse(raw);
63
+ return parsed && typeof parsed === "object" ? (parsed as Transcript) : null;
64
+ } catch {
65
+ return null;
66
+ }
67
+ }
68
+
69
+ /** CRUD for transcript records over the runtime memory partition. */
70
+ export class TranscriptStore {
71
+ constructor(private readonly runtime: TranscriptStoreRuntime) {}
72
+
73
+ /** Persist a transcript record; returns it unchanged. */
74
+ async create(input: CreateTranscriptInput): Promise<Transcript> {
75
+ const { roomId, entityId, transcript } = input;
76
+ const metadata: MemoryMetadata = {
77
+ type: "custom",
78
+ source: TRANSCRIPT_METADATA_TYPE,
79
+ timestamp: transcript.createdAt,
80
+ transcriptId: transcript.id,
81
+ durationMs: transcript.durationMs,
82
+ speakerCount: transcript.speakerCount,
83
+ status: transcript.status,
84
+ };
85
+ const memory: Memory = {
86
+ id: transcript.id as UUID,
87
+ entityId,
88
+ roomId,
89
+ agentId: this.runtime.agentId,
90
+ createdAt: transcript.createdAt,
91
+ content: {
92
+ // A text body so generic memory consumers see something useful.
93
+ text: transcriptPreview(transcript.segments),
94
+ // The full record is JSON-serialized into the content blob — Content's
95
+ // value type is strict JSON, so a typed interface isn't structurally
96
+ // assignable; `rowToTranscript` parses it back.
97
+ transcript: JSON.stringify(transcript),
98
+ },
99
+ metadata,
100
+ };
101
+ await this.runtime.createMemory(memory, TRANSCRIPTS_TABLE);
102
+ return transcript;
103
+ }
104
+
105
+ /** List recent transcripts (newest first) as compact summaries. */
106
+ async list(roomId?: UUID, limit = 100): Promise<TranscriptSummary[]> {
107
+ const rows = await this.runtime.getMemories({
108
+ tableName: TRANSCRIPTS_TABLE,
109
+ roomId,
110
+ count: limit,
111
+ orderBy: "createdAt",
112
+ orderDirection: "desc",
113
+ });
114
+ const summaries: TranscriptSummary[] = [];
115
+ for (const row of rows) {
116
+ const t = rowToTranscript(row);
117
+ if (t) summaries.push(summarizeTranscript(t));
118
+ }
119
+ return summaries;
120
+ }
121
+
122
+ /** Load one full transcript record by id. */
123
+ async get(id: UUID): Promise<Transcript | null> {
124
+ const row = await this.runtime.getMemoryById(id);
125
+ return row ? rowToTranscript(row) : null;
126
+ }
127
+
128
+ /** Delete a transcript record (the knowledge mirror is removed separately). */
129
+ async delete(id: UUID): Promise<void> {
130
+ await this.runtime.deleteMemory(id);
131
+ }
132
+ }
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Voice turn controller — the turn-taking layer above `VoiceScheduler`.
3
+ *
4
+ * Sits between W1's `VadEvent` stream + W2's `StreamingTranscriber` events
5
+ * and the generation path (the runtime message handler / the local engine's
6
+ * `generate`, which routes through `voiceStreamingArgs` → `VoiceScheduler` →
7
+ * phrase chunker → TTS). Implements the brief's items A4 / A5 / A6:
8
+ *
9
+ * - `speech-start` → fire `prewarm(roomId)` immediately (the
10
+ * response-handler stable prefix / MTP
11
+ * slot KV-prefill) — before STT finishes.
12
+ * - `speech-pause(ms > thr)` → kick a SPECULATIVE response off W2's
13
+ * current partial transcript. The generate
14
+ * call gets an `AbortSignal`; the in-flight
15
+ * generation is stashed.
16
+ * - `speech-active` / a new `speech-start` / VAD re-trigger
17
+ * → ABORT the speculative generation (the abort
18
+ * propagates into `dispatcher.generate`).
19
+ * - `speech-end` (no new speech)
20
+ * → finalize: flush the transcriber for the
21
+ * final transcript; if the speculative result
22
+ * is still valid against it, PROMOTE it; else
23
+ * discard and run the real turn on the
24
+ * finalized transcript.
25
+ *
26
+ * Barge-in: while the agent is speaking the controller flips
27
+ * `scheduler.bargeIn.setAgentSpeaking(true)` (and binds the VAD into the
28
+ * barge-in controller). A provisional `pause-tts` pauses TTS in the
29
+ * scheduler; a `blip` → `resume-tts`; ASR-confirmed words → `hard-stop` →
30
+ * the scheduler drains the ring buffer + flushes the chunker, and the
31
+ * controller aborts the in-flight turn (the same `AbortSignal` the engine
32
+ * threads into `dispatcher.generate`). The transcriber's `words` event is
33
+ * wired into `bargeIn.onWordsDetected({wordCount})` so a blip alone only
34
+ * pauses, but real recognized words hard-stop.
35
+ *
36
+ * No fallback sludge: `prewarm` failures surface via `onError`; a speculative
37
+ * abort is a real `AbortSignal.abort()`, never a swallowed flag.
38
+ */
39
+ import { type EotClassifier, type VoiceTurnSignal } from "./eot-classifier";
40
+ import type { VoiceScheduler } from "./scheduler";
41
+ import type { StreamingTranscriber, VadEventSource, VoiceInputSource, VoiceSegment, VoiceSpeaker, VoiceTurnMetadata } from "./types";
42
+ /** Outcome of one generation pass (speculative or final). */
43
+ export interface VoiceTurnOutcome {
44
+ /** The transcript the generation ran against (so the controller can
45
+ * decide whether a speculative result is still valid). */
46
+ transcript: string;
47
+ /** Voice attribution metadata for the transcript that produced this outcome. */
48
+ source?: VoiceInputSource;
49
+ speaker?: VoiceSpeaker;
50
+ segments?: VoiceSegment[];
51
+ turn?: VoiceTurnMetadata;
52
+ /** Final reply text the model produced (already streamed into TTS by the
53
+ * generate callee). May be empty for an IGNORE turn. */
54
+ replyText: string;
55
+ }
56
+ export interface VoiceGenerateRequest {
57
+ /** Best transcript available at the time the request is issued. */
58
+ transcript: string;
59
+ /** Optional source/speaker metadata for attribution-only storage. */
60
+ source?: VoiceInputSource;
61
+ speaker?: VoiceSpeaker;
62
+ segments?: VoiceSegment[];
63
+ turn?: VoiceTurnMetadata;
64
+ /** True for the finalized turn (post `speech-end` + `flush()`), false for
65
+ * a speculative pass off a partial. */
66
+ final: boolean;
67
+ /** Aborted when speech resumes (speculative) or on a hard-stop barge-in. */
68
+ signal: AbortSignal;
69
+ /**
70
+ * Semantic turn-taking signal available at request issue time. Response
71
+ * handlers can deterministically suppress/accept without waiting for another
72
+ * model token when this says the next speaker is not the agent.
73
+ */
74
+ turnSignal?: VoiceTurnSignal;
75
+ }
76
+ export interface VoiceTurnControllerDeps {
77
+ /** W1: the authoritative VAD event stream (a `VadDetector` is structurally one of these). */
78
+ vad: VadEventSource;
79
+ /** W2: the live streaming transcriber. The controller subscribes to its
80
+ * events and calls `flush()` on `speech-end`. */
81
+ transcriber: StreamingTranscriber;
82
+ /** W9: the voice scheduler — used for the barge-in controller + agent-speaking flag. */
83
+ scheduler: VoiceScheduler;
84
+ /**
85
+ * KV-prefill / response-handler-prefix prewarm. Called on `speech-start`.
86
+ * Fire-and-forget; a rejection is surfaced via `onError`, not swallowed.
87
+ * (In the engine this wraps `engine.prewarmConversation(roomId, ...)` /
88
+ * `runtime.prewarmResponseHandler(roomId)`.)
89
+ */
90
+ prewarm?: (roomId: string) => void | Promise<void>;
91
+ /** Optional cached first-audio filler played immediately on speech-start. */
92
+ playFirstAudioFiller?: () => string | null;
93
+ /**
94
+ * Semantic turn detector layered with VAD/STT. It runs continuously on
95
+ * partial transcripts so `speech-pause` can decide whether to speculate or
96
+ * wait for the user to continue.
97
+ */
98
+ turnDetector?: EotClassifier;
99
+ /**
100
+ * Run a generation pass. The callee builds the message, calls the runtime
101
+ * message handler / `useModel`, and streams `replyText` into TTS via the
102
+ * scheduler. Must honour `request.signal` (abort = stop the LLM/drafter at
103
+ * the next kernel boundary). Resolves with the produced reply + the
104
+ * transcript it ran against. Rejecting with the request's `AbortError` is
105
+ * fine — the controller treats that as "aborted".
106
+ */
107
+ generate: (request: VoiceGenerateRequest) => Promise<VoiceTurnOutcome>;
108
+ }
109
+ export interface VoiceTurnControllerConfig {
110
+ /** Conversation / room id passed to `prewarm` and (implicitly) `generate`. */
111
+ roomId: string;
112
+ /**
113
+ * Minimum `speech-pause` duration before a speculative response is kicked.
114
+ * Default 300 ms — long enough that mid-sentence breath pauses don't
115
+ * trigger one, short enough to win latency on a real end-of-utterance.
116
+ */
117
+ speculatePauseMs?: number;
118
+ }
119
+ export interface VoiceTurnControllerEvents {
120
+ /** A speculative generation was started off a partial transcript. */
121
+ onSpeculativeStart?(transcript: string): void;
122
+ /** The in-flight speculative generation was aborted (speech resumed). */
123
+ onSpeculativeAbort?(): void;
124
+ /** The speculative result was promoted as the turn's answer (it matched the final transcript). */
125
+ onSpeculativePromoted?(outcome: VoiceTurnOutcome): void;
126
+ /** A turn finished (promoted speculative OR a fresh final run). */
127
+ onTurnComplete?(outcome: VoiceTurnOutcome): void;
128
+ /** `prewarm` rejected, or a `generate` pass rejected with a non-abort error. */
129
+ onError?(error: Error): void;
130
+ /** A VAD pause/end was suppressed because semantic turn-taking says user continues. */
131
+ onTurnSuppressed?(transcript: string, signal: VoiceTurnSignal): void;
132
+ }
133
+ export declare class VoiceTurnController {
134
+ private readonly deps;
135
+ private readonly events;
136
+ private readonly roomId;
137
+ private readonly speculatePauseMs;
138
+ private readonly bargeIn;
139
+ private speculative;
140
+ /** A finalize() in progress (awaiting `transcriber.flush()` + generate). */
141
+ private finalizing;
142
+ private latestPartial;
143
+ private latestTurnSignal;
144
+ private turnSignalSequence;
145
+ private started;
146
+ private vadUnsub;
147
+ private transcriberUnsub;
148
+ private bargeSignalUnsub;
149
+ private activeFinalController;
150
+ /** True once `speech-end` ran and finalize is pending/done for this segment. */
151
+ private segmentEnded;
152
+ private latestUpdate;
153
+ constructor(deps: VoiceTurnControllerDeps, config: VoiceTurnControllerConfig, events?: VoiceTurnControllerEvents);
154
+ /** Subscribe to the VAD + transcriber streams and start turn-taking. Idempotent. */
155
+ start(): void;
156
+ /** Detach from the streams and abort any in-flight speculative generation. */
157
+ stop(): void;
158
+ private onVadEvent;
159
+ private onTranscriberEvent;
160
+ /**
161
+ * C2 — public idle prewarm entry point. Callers (e.g. the UI when a
162
+ * conversation opens) invoke this to materialize the KV cache for the
163
+ * response-handler stable prefix BEFORE the user starts speaking, so the
164
+ * first speech-start has nothing left to do. Fire-and-forget: the
165
+ * returned promise is `void` because we don't want callers blocking on
166
+ * prewarm; failures surface via `onError` exactly like the speech-start
167
+ * path. Idempotent — repeated calls just re-prewarm.
168
+ */
169
+ prewarmOnIdle(): void;
170
+ private firePrewarm;
171
+ private playFirstAudioFiller;
172
+ private maybeStartSpeculative;
173
+ private startSpeculativeAfterTurnSignal;
174
+ private startSpeculative;
175
+ private abortSpeculative;
176
+ private beginFinalize;
177
+ private finalize;
178
+ private runGenerate;
179
+ private queueTurnSignalRefresh;
180
+ private ensureTurnSignal;
181
+ private computeTurnSignal;
182
+ }
183
+ //# sourceMappingURL=turn-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-controller.d.ts","sourceRoot":"","sources":["turn-controller.ts"],"names":[],"mappings":"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"}