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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/package.json +81 -15
  4. package/src/actions/generate-media.d.ts +59 -0
  5. package/src/actions/generate-media.d.ts.map +1 -0
  6. package/src/actions/generate-media.ts +647 -0
  7. package/src/actions/identify-speaker.d.ts +23 -0
  8. package/src/actions/identify-speaker.d.ts.map +1 -0
  9. package/src/actions/identify-speaker.ts +171 -0
  10. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  11. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  12. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  13. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  14. package/src/adapters/capacitor-llama/environment.ts +71 -0
  15. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  16. package/src/adapters/capacitor-llama/index.ts +807 -0
  17. package/src/adapters/capacitor-llama/loader.ts +109 -0
  18. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  19. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  20. package/src/adapters/capacitor-llama/types.ts +374 -0
  21. package/src/backends/apple-foundation.ts +127 -0
  22. package/src/index.d.ts +7 -0
  23. package/src/index.d.ts.map +1 -0
  24. package/src/index.ts +54 -0
  25. package/src/local-inference-routes.d.ts +38 -0
  26. package/src/local-inference-routes.d.ts.map +1 -0
  27. package/src/local-inference-routes.test.ts +344 -0
  28. package/src/local-inference-routes.ts +1543 -0
  29. package/src/provider.d.ts +21 -0
  30. package/src/provider.d.ts.map +1 -0
  31. package/src/provider.ts +1171 -0
  32. package/src/routes/compat-helpers.d.ts +18 -0
  33. package/src/routes/compat-helpers.d.ts.map +1 -0
  34. package/src/routes/compat-helpers.ts +274 -0
  35. package/src/routes/family-member-route.d.ts +62 -0
  36. package/src/routes/family-member-route.d.ts.map +1 -0
  37. package/src/routes/family-member-route.ts +353 -0
  38. package/src/routes/index.d.ts +19 -0
  39. package/src/routes/index.d.ts.map +1 -0
  40. package/src/routes/index.ts +60 -0
  41. package/src/routes/live-diarization-route.d.ts +26 -0
  42. package/src/routes/live-diarization-route.d.ts.map +1 -0
  43. package/src/routes/live-diarization-route.test.ts +213 -0
  44. package/src/routes/live-diarization-route.ts +122 -0
  45. package/src/routes/local-inference-asr-route.d.ts +4 -0
  46. package/src/routes/local-inference-asr-route.d.ts.map +1 -0
  47. package/src/routes/local-inference-asr-route.test.ts +190 -0
  48. package/src/routes/local-inference-asr-route.ts +213 -0
  49. package/src/routes/local-inference-compat-routes.d.ts +16 -0
  50. package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
  51. package/src/routes/local-inference-compat-routes.test.ts +423 -0
  52. package/src/routes/local-inference-compat-routes.ts +782 -0
  53. package/src/routes/local-inference-tts-route.d.ts +7 -0
  54. package/src/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/src/routes/local-inference-tts-route.test.ts +179 -0
  56. package/src/routes/local-inference-tts-route.ts +230 -0
  57. package/src/routes/voice-first-run-routes.d.ts +62 -0
  58. package/src/routes/voice-first-run-routes.d.ts.map +1 -0
  59. package/src/routes/voice-first-run-routes.ts +524 -0
  60. package/src/routes/voice-models-routes.d.ts +62 -0
  61. package/src/routes/voice-models-routes.d.ts.map +1 -0
  62. package/src/routes/voice-models-routes.ts +554 -0
  63. package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
  64. package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  65. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  66. package/src/routes/voice-profiles-management-routes.d.ts +52 -0
  67. package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
  68. package/src/routes/voice-profiles-management-routes.ts +476 -0
  69. package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  72. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  73. package/src/runtime/capacitor-llama.d.ts +25 -0
  74. package/src/runtime/embedding-manager-support.d.ts +77 -0
  75. package/src/runtime/embedding-manager-support.d.ts.map +1 -0
  76. package/src/runtime/embedding-manager-support.ts +497 -0
  77. package/src/runtime/embedding-presets.d.ts +16 -0
  78. package/src/runtime/embedding-presets.d.ts.map +1 -0
  79. package/src/runtime/embedding-presets.ts +81 -0
  80. package/src/runtime/embedding-warmup-policy.d.ts +14 -0
  81. package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
  82. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  83. package/src/runtime/embedding-warmup-policy.ts +48 -0
  84. package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
  85. package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  86. package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
  87. package/src/runtime/ensure-local-inference-handler.ts +1398 -0
  88. package/src/runtime/index.d.ts +14 -0
  89. package/src/runtime/index.d.ts.map +1 -0
  90. package/src/runtime/index.ts +27 -0
  91. package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
  92. package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  93. package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
  94. package/src/runtime/mobile-local-inference-gate.ts +44 -0
  95. package/src/runtime/voice-entity-binding.d.ts +103 -0
  96. package/src/runtime/voice-entity-binding.d.ts.map +1 -0
  97. package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
  98. package/src/runtime/voice-entity-binding.ts +328 -0
  99. package/src/services/README.md +71 -0
  100. package/src/services/__tests__/backend-selector.test.ts +101 -0
  101. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  102. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  103. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  104. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  105. package/src/services/__tests__/runtime-target.test.ts +176 -0
  106. package/src/services/active-model-switch-rollback.test.ts +183 -0
  107. package/src/services/active-model.d.ts +282 -0
  108. package/src/services/active-model.d.ts.map +1 -0
  109. package/src/services/active-model.ts +1213 -0
  110. package/src/services/asr/errors.d.ts +21 -0
  111. package/src/services/asr/errors.d.ts.map +1 -0
  112. package/src/services/asr/errors.ts +50 -0
  113. package/src/services/asr/hash.d.ts +28 -0
  114. package/src/services/asr/hash.d.ts.map +1 -0
  115. package/src/services/asr/hash.ts +49 -0
  116. package/src/services/asr/index.d.ts +76 -0
  117. package/src/services/asr/index.d.ts.map +1 -0
  118. package/src/services/asr/index.ts +178 -0
  119. package/src/services/asr/types.d.ts +91 -0
  120. package/src/services/asr/types.d.ts.map +1 -0
  121. package/src/services/asr/types.ts +95 -0
  122. package/src/services/assignments.d.ts +71 -0
  123. package/src/services/assignments.d.ts.map +1 -0
  124. package/src/services/assignments.test.ts +80 -0
  125. package/src/services/assignments.ts +230 -0
  126. package/src/services/backend-selector.ts +95 -0
  127. package/src/services/backend.d.ts +346 -0
  128. package/src/services/backend.d.ts.map +1 -0
  129. package/src/services/backend.ts +612 -0
  130. package/src/services/bundled-models.d.ts +34 -0
  131. package/src/services/bundled-models.d.ts.map +1 -0
  132. package/src/services/bundled-models.ts +129 -0
  133. package/src/services/cache-bridge.d.ts +206 -0
  134. package/src/services/cache-bridge.d.ts.map +1 -0
  135. package/src/services/cache-bridge.test.ts +516 -0
  136. package/src/services/cache-bridge.ts +423 -0
  137. package/src/services/catalog.d.ts +10 -0
  138. package/src/services/catalog.d.ts.map +1 -0
  139. package/src/services/catalog.test.ts +240 -0
  140. package/src/services/catalog.ts +27 -0
  141. package/src/services/checkpoint-client.d.ts +109 -0
  142. package/src/services/checkpoint-client.d.ts.map +1 -0
  143. package/src/services/checkpoint-client.ts +258 -0
  144. package/src/services/checkpoint-manager.ts +474 -0
  145. package/src/services/cloud-fallback.d.ts +102 -0
  146. package/src/services/cloud-fallback.d.ts.map +1 -0
  147. package/src/services/cloud-fallback.ts +230 -0
  148. package/src/services/conversation-registry.d.ts +142 -0
  149. package/src/services/conversation-registry.d.ts.map +1 -0
  150. package/src/services/conversation-registry.test.ts +235 -0
  151. package/src/services/conversation-registry.ts +264 -0
  152. package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
  153. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  154. package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
  155. package/src/services/device-bridge.d.ts +188 -0
  156. package/src/services/device-bridge.d.ts.map +1 -0
  157. package/src/services/device-bridge.ts +1237 -0
  158. package/src/services/device-resource-metrics.d.ts +149 -0
  159. package/src/services/device-resource-metrics.d.ts.map +1 -0
  160. package/src/services/device-resource-metrics.test.ts +98 -0
  161. package/src/services/device-resource-metrics.ts +346 -0
  162. package/src/services/device-tier.d.ts +115 -0
  163. package/src/services/device-tier.d.ts.map +1 -0
  164. package/src/services/device-tier.test.ts +371 -0
  165. package/src/services/device-tier.ts +410 -0
  166. package/src/services/downloader.d.ts +82 -0
  167. package/src/services/downloader.d.ts.map +1 -0
  168. package/src/services/downloader.test.ts +724 -0
  169. package/src/services/downloader.ts +899 -0
  170. package/src/services/engine-direct-bundle.test.ts +58 -0
  171. package/src/services/engine-streaming.test.ts +80 -0
  172. package/src/services/engine.d.ts +534 -0
  173. package/src/services/engine.d.ts.map +1 -0
  174. package/src/services/engine.ts +1891 -0
  175. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  176. package/src/services/ensure-local-artifacts.test.ts +368 -0
  177. package/src/services/ensure-local-artifacts.ts +351 -0
  178. package/src/services/external-scanner.d.ts +17 -0
  179. package/src/services/external-scanner.d.ts.map +1 -0
  180. package/src/services/external-scanner.ts +312 -0
  181. package/src/services/ffi-llm-mock.ts +354 -0
  182. package/src/services/ffi-llm-streaming-abi.ts +442 -0
  183. package/src/services/ffi-streaming-backend.d.ts +180 -0
  184. package/src/services/ffi-streaming-backend.d.ts.map +1 -0
  185. package/src/services/ffi-streaming-backend.ts +382 -0
  186. package/src/services/ffi-streaming-runner.d.ts +122 -0
  187. package/src/services/ffi-streaming-runner.d.ts.map +1 -0
  188. package/src/services/ffi-streaming-runner.test.ts +60 -0
  189. package/src/services/ffi-streaming-runner.ts +354 -0
  190. package/src/services/ffi-unload-ordering.test.ts +162 -0
  191. package/src/services/gpu-autotune.ts +534 -0
  192. package/src/services/gpu-detect.ts +139 -0
  193. package/src/services/handler-registry.d.ts +72 -0
  194. package/src/services/handler-registry.d.ts.map +1 -0
  195. package/src/services/handler-registry.ts +240 -0
  196. package/src/services/hardware.d.ts +63 -0
  197. package/src/services/hardware.d.ts.map +1 -0
  198. package/src/services/hardware.test.ts +183 -0
  199. package/src/services/hardware.ts +404 -0
  200. package/src/services/hf-search.d.ts +26 -0
  201. package/src/services/hf-search.d.ts.map +1 -0
  202. package/src/services/hf-search.test.ts +69 -0
  203. package/src/services/hf-search.ts +420 -0
  204. package/src/services/image-description-runtime.d.ts +14 -0
  205. package/src/services/image-description-runtime.d.ts.map +1 -0
  206. package/src/services/image-description-runtime.test.ts +61 -0
  207. package/src/services/image-description-runtime.ts +118 -0
  208. package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
  209. package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  210. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  211. package/src/services/imagegen/backend-selector.d.ts +118 -0
  212. package/src/services/imagegen/backend-selector.d.ts.map +1 -0
  213. package/src/services/imagegen/backend-selector.ts +281 -0
  214. package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
  215. package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  216. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  217. package/src/services/imagegen/errors.d.ts +16 -0
  218. package/src/services/imagegen/errors.d.ts.map +1 -0
  219. package/src/services/imagegen/errors.ts +40 -0
  220. package/src/services/imagegen/index.d.ts +58 -0
  221. package/src/services/imagegen/index.d.ts.map +1 -0
  222. package/src/services/imagegen/index.ts +144 -0
  223. package/src/services/imagegen/mflux.d.ts +74 -0
  224. package/src/services/imagegen/mflux.d.ts.map +1 -0
  225. package/src/services/imagegen/mflux.ts +313 -0
  226. package/src/services/imagegen/sd-cpp.d.ts +180 -0
  227. package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
  228. package/src/services/imagegen/sd-cpp.ts +718 -0
  229. package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  230. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  231. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  232. package/src/services/imagegen/types.d.ts +181 -0
  233. package/src/services/imagegen/types.d.ts.map +1 -0
  234. package/src/services/imagegen/types.ts +193 -0
  235. package/src/services/index.d.ts +30 -0
  236. package/src/services/index.d.ts.map +1 -0
  237. package/src/services/index.ts +225 -0
  238. package/src/services/inference-capabilities.d.ts +132 -0
  239. package/src/services/inference-capabilities.d.ts.map +1 -0
  240. package/src/services/inference-capabilities.test.ts +75 -0
  241. package/src/services/inference-capabilities.ts +204 -0
  242. package/src/services/inference-telemetry.d.ts +59 -0
  243. package/src/services/inference-telemetry.d.ts.map +1 -0
  244. package/src/services/inference-telemetry.ts +143 -0
  245. package/src/services/ios-llama-streaming.ts +248 -0
  246. package/src/services/kv-spill.d.ts +189 -0
  247. package/src/services/kv-spill.d.ts.map +1 -0
  248. package/src/services/kv-spill.test.ts +222 -0
  249. package/src/services/kv-spill.ts +356 -0
  250. package/src/services/latency-trace.d.ts +346 -0
  251. package/src/services/latency-trace.d.ts.map +1 -0
  252. package/src/services/latency-trace.test.ts +266 -0
  253. package/src/services/latency-trace.ts +844 -0
  254. package/src/services/llama-server-metrics.ts +304 -0
  255. package/src/services/llm-streaming-binding.d.ts +96 -0
  256. package/src/services/llm-streaming-binding.d.ts.map +1 -0
  257. package/src/services/llm-streaming-binding.ts +136 -0
  258. package/src/services/load-args.d.ts +82 -0
  259. package/src/services/load-args.d.ts.map +1 -0
  260. package/src/services/load-args.ts +81 -0
  261. package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
  262. package/src/services/manifest/index.d.ts +4 -0
  263. package/src/services/manifest/index.d.ts.map +1 -0
  264. package/src/services/manifest/index.ts +66 -0
  265. package/src/services/manifest/manifest.test.ts +693 -0
  266. package/src/services/manifest/schema.d.ts +715 -0
  267. package/src/services/manifest/schema.d.ts.map +1 -0
  268. package/src/services/manifest/schema.ts +655 -0
  269. package/src/services/manifest/types.d.ts +30 -0
  270. package/src/services/manifest/types.d.ts.map +1 -0
  271. package/src/services/manifest/types.ts +55 -0
  272. package/src/services/manifest/validator.d.ts +66 -0
  273. package/src/services/manifest/validator.d.ts.map +1 -0
  274. package/src/services/manifest/validator.ts +569 -0
  275. package/src/services/memory-arbiter.d.ts +343 -0
  276. package/src/services/memory-arbiter.d.ts.map +1 -0
  277. package/src/services/memory-arbiter.test.ts +419 -0
  278. package/src/services/memory-arbiter.ts +1000 -0
  279. package/src/services/memory-monitor.d.ts +119 -0
  280. package/src/services/memory-monitor.d.ts.map +1 -0
  281. package/src/services/memory-monitor.test.ts +208 -0
  282. package/src/services/memory-monitor.ts +296 -0
  283. package/src/services/memory-pressure.d.ts +127 -0
  284. package/src/services/memory-pressure.d.ts.map +1 -0
  285. package/src/services/memory-pressure.ts +413 -0
  286. package/src/services/mtp-doctor.d.ts +13 -0
  287. package/src/services/mtp-doctor.d.ts.map +1 -0
  288. package/src/services/mtp-doctor.ts +78 -0
  289. package/src/services/network-policy.d.ts +127 -0
  290. package/src/services/network-policy.d.ts.map +1 -0
  291. package/src/services/network-policy.ts +346 -0
  292. package/src/services/paths.d.ts +6 -0
  293. package/src/services/paths.d.ts.map +1 -0
  294. package/src/services/paths.ts +25 -0
  295. package/src/services/planner-skeleton.d.ts +124 -0
  296. package/src/services/planner-skeleton.d.ts.map +1 -0
  297. package/src/services/planner-skeleton.ts +175 -0
  298. package/src/services/providers.d.ts +38 -0
  299. package/src/services/providers.d.ts.map +1 -0
  300. package/src/services/providers.ts +507 -0
  301. package/src/services/ram-budget-cache.test.ts +163 -0
  302. package/src/services/ram-budget.d.ts +110 -0
  303. package/src/services/ram-budget.d.ts.map +1 -0
  304. package/src/services/ram-budget.ts +0 -0
  305. package/src/services/readiness.d.ts +9 -0
  306. package/src/services/readiness.d.ts.map +1 -0
  307. package/src/services/readiness.test.ts +87 -0
  308. package/src/services/readiness.ts +238 -0
  309. package/src/services/recommendation.d.ts +111 -0
  310. package/src/services/recommendation.d.ts.map +1 -0
  311. package/src/services/recommendation.ts +672 -0
  312. package/src/services/registry.d.ts +35 -0
  313. package/src/services/registry.d.ts.map +1 -0
  314. package/src/services/registry.ts +151 -0
  315. package/src/services/router-handler.d.ts +92 -0
  316. package/src/services/router-handler.d.ts.map +1 -0
  317. package/src/services/router-handler.test.ts +45 -0
  318. package/src/services/router-handler.ts +376 -0
  319. package/src/services/routing-policy.d.ts +55 -0
  320. package/src/services/routing-policy.d.ts.map +1 -0
  321. package/src/services/routing-policy.ts +228 -0
  322. package/src/services/routing-preferences.d.ts +8 -0
  323. package/src/services/routing-preferences.d.ts.map +1 -0
  324. package/src/services/routing-preferences.ts +15 -0
  325. package/src/services/runtime-target.d.ts +98 -0
  326. package/src/services/runtime-target.d.ts.map +1 -0
  327. package/src/services/runtime-target.ts +154 -0
  328. package/src/services/service.d.ts +128 -0
  329. package/src/services/service.d.ts.map +1 -0
  330. package/src/services/service.test.ts +223 -0
  331. package/src/services/service.ts +735 -0
  332. package/src/services/session-pool.d.ts +72 -0
  333. package/src/services/session-pool.d.ts.map +1 -0
  334. package/src/services/session-pool.ts +153 -0
  335. package/src/services/structured-output/deterministic-repair.d.ts +23 -0
  336. package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
  337. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  338. package/src/services/structured-output/deterministic-repair.ts +443 -0
  339. package/src/services/structured-output/index.ts +4 -0
  340. package/src/services/structured-output.d.ts +311 -0
  341. package/src/services/structured-output.d.ts.map +1 -0
  342. package/src/services/structured-output.test.ts +483 -0
  343. package/src/services/structured-output.ts +712 -0
  344. package/src/services/transcription-priority.test.ts +211 -0
  345. package/src/services/tts/errors.ts +46 -0
  346. package/src/services/tts/index.ts +214 -0
  347. package/src/services/tts/tts-audio-cache.ts +235 -0
  348. package/src/services/tts/types.ts +157 -0
  349. package/src/services/types.d.ts +19 -0
  350. package/src/services/types.d.ts.map +1 -0
  351. package/src/services/types.ts +55 -0
  352. package/src/services/verify-on-device.d.ts +34 -0
  353. package/src/services/verify-on-device.d.ts.map +1 -0
  354. package/src/services/verify-on-device.test.ts +87 -0
  355. package/src/services/verify-on-device.ts +127 -0
  356. package/src/services/verify.d.ts +8 -0
  357. package/src/services/verify.d.ts.map +1 -0
  358. package/src/services/verify.ts +13 -0
  359. package/src/services/vision/aosp-unavailable.d.ts +115 -0
  360. package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
  361. package/src/services/vision/aosp-unavailable.ts +163 -0
  362. package/src/services/vision/capacitor-llama.d.ts +99 -0
  363. package/src/services/vision/capacitor-llama.d.ts.map +1 -0
  364. package/src/services/vision/capacitor-llama.ts +255 -0
  365. package/src/services/vision/cloud-fallback.d.ts +47 -0
  366. package/src/services/vision/cloud-fallback.d.ts.map +1 -0
  367. package/src/services/vision/cloud-fallback.test.ts +243 -0
  368. package/src/services/vision/cloud-fallback.ts +268 -0
  369. package/src/services/vision/fallback-chain.test.ts +86 -0
  370. package/src/services/vision/hash.d.ts +71 -0
  371. package/src/services/vision/hash.d.ts.map +1 -0
  372. package/src/services/vision/hash.ts +157 -0
  373. package/src/services/vision/index.d.ts +95 -0
  374. package/src/services/vision/index.d.ts.map +1 -0
  375. package/src/services/vision/index.ts +251 -0
  376. package/src/services/vision/llama-server.d.ts +73 -0
  377. package/src/services/vision/llama-server.d.ts.map +1 -0
  378. package/src/services/vision/llama-server.ts +177 -0
  379. package/src/services/vision/types.d.ts +153 -0
  380. package/src/services/vision/types.d.ts.map +1 -0
  381. package/src/services/vision/types.ts +154 -0
  382. package/src/services/vision/vast-fallback.d.ts +18 -0
  383. package/src/services/vision/vast-fallback.d.ts.map +1 -0
  384. package/src/services/vision/vast-fallback.ts +127 -0
  385. package/src/services/vision-embedding-cache.d.ts +98 -0
  386. package/src/services/vision-embedding-cache.d.ts.map +1 -0
  387. package/src/services/vision-embedding-cache.ts +189 -0
  388. package/src/services/voice/VOICE_WORKBENCH.md +88 -0
  389. package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
  390. package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
  391. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  392. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  393. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  394. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  395. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  396. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  397. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  398. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  399. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  400. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  401. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
  402. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  403. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  404. package/src/services/voice/audio-frame-consumer.d.ts +212 -0
  405. package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
  406. package/src/services/voice/audio-frame-consumer.test.ts +343 -0
  407. package/src/services/voice/audio-frame-consumer.ts +491 -0
  408. package/src/services/voice/barge-in.d.ts +112 -0
  409. package/src/services/voice/barge-in.d.ts.map +1 -0
  410. package/src/services/voice/barge-in.test.ts +244 -0
  411. package/src/services/voice/barge-in.ts +336 -0
  412. package/src/services/voice/cancellation-coordinator.d.ts +127 -0
  413. package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
  414. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  415. package/src/services/voice/cancellation-coordinator.ts +269 -0
  416. package/src/services/voice/checkpoint-manager.d.ts +199 -0
  417. package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
  418. package/src/services/voice/checkpoint-manager.ts +401 -0
  419. package/src/services/voice/checkpoint-policy.ts +336 -0
  420. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  421. package/src/services/voice/e2e-harness.test.ts +182 -0
  422. package/src/services/voice/e2e-harness.ts +743 -0
  423. package/src/services/voice/eager-context-builder.d.ts +170 -0
  424. package/src/services/voice/eager-context-builder.d.ts.map +1 -0
  425. package/src/services/voice/eager-context-builder.ts +262 -0
  426. package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
  427. package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  428. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  429. package/src/services/voice/embedding-server.ts +200 -0
  430. package/src/services/voice/embedding.d.ts +133 -0
  431. package/src/services/voice/embedding.d.ts.map +1 -0
  432. package/src/services/voice/embedding.test.ts +148 -0
  433. package/src/services/voice/embedding.ts +244 -0
  434. package/src/services/voice/emotion-attribution.d.ts +68 -0
  435. package/src/services/voice/emotion-attribution.d.ts.map +1 -0
  436. package/src/services/voice/emotion-attribution.test.ts +129 -0
  437. package/src/services/voice/emotion-attribution.ts +361 -0
  438. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  439. package/src/services/voice/engine-bridge.d.ts +746 -0
  440. package/src/services/voice/engine-bridge.d.ts.map +1 -0
  441. package/src/services/voice/engine-bridge.test.ts +384 -0
  442. package/src/services/voice/engine-bridge.ts +2226 -0
  443. package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
  444. package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  445. package/src/services/voice/eot-classifier-ggml.ts +566 -0
  446. package/src/services/voice/eot-classifier.d.ts +214 -0
  447. package/src/services/voice/eot-classifier.d.ts.map +1 -0
  448. package/src/services/voice/eot-classifier.ts +533 -0
  449. package/src/services/voice/errors.d.ts +20 -0
  450. package/src/services/voice/errors.d.ts.map +1 -0
  451. package/src/services/voice/errors.ts +32 -0
  452. package/src/services/voice/expressive-tags.d.ts +158 -0
  453. package/src/services/voice/expressive-tags.d.ts.map +1 -0
  454. package/src/services/voice/expressive-tags.ts +405 -0
  455. package/src/services/voice/ffi-bindings.d.ts +636 -0
  456. package/src/services/voice/ffi-bindings.d.ts.map +1 -0
  457. package/src/services/voice/ffi-bindings.test.ts +671 -0
  458. package/src/services/voice/ffi-bindings.ts +3050 -0
  459. package/src/services/voice/first-line-cache.d.ts +181 -0
  460. package/src/services/voice/first-line-cache.d.ts.map +1 -0
  461. package/src/services/voice/first-line-cache.ts +725 -0
  462. package/src/services/voice/fused-eot-scorer.d.ts +51 -0
  463. package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
  464. package/src/services/voice/fused-eot-scorer.ts +135 -0
  465. package/src/services/voice/index.d.ts +91 -0
  466. package/src/services/voice/index.d.ts.map +1 -0
  467. package/src/services/voice/index.ts +481 -0
  468. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
  469. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
  470. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  471. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  472. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  473. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  474. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  475. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
  476. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  477. package/src/services/voice/kokoro/index.ts +79 -0
  478. package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
  479. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  480. package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
  481. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  482. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  483. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  484. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  485. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  486. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  487. package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  488. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  489. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  490. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  491. package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
  492. package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  493. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  494. package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
  495. package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  496. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  497. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  498. package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
  499. package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  500. package/src/services/voice/kokoro/runtime-selection.ts +237 -0
  501. package/src/services/voice/kokoro/types.d.ts +82 -0
  502. package/src/services/voice/kokoro/types.d.ts.map +1 -0
  503. package/src/services/voice/kokoro/types.ts +95 -0
  504. package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
  505. package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  506. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  507. package/src/services/voice/kokoro/voices.d.ts +30 -0
  508. package/src/services/voice/kokoro/voices.d.ts.map +1 -0
  509. package/src/services/voice/kokoro/voices.ts +64 -0
  510. package/src/services/voice/lifecycle.d.ts +135 -0
  511. package/src/services/voice/lifecycle.d.ts.map +1 -0
  512. package/src/services/voice/lifecycle.test.ts +315 -0
  513. package/src/services/voice/lifecycle.ts +301 -0
  514. package/src/services/voice/live-diarization-session.d.ts +96 -0
  515. package/src/services/voice/live-diarization-session.d.ts.map +1 -0
  516. package/src/services/voice/live-diarization-session.ts +289 -0
  517. package/src/services/voice/mic-source.d.ts +136 -0
  518. package/src/services/voice/mic-source.d.ts.map +1 -0
  519. package/src/services/voice/mic-source.test.ts +210 -0
  520. package/src/services/voice/mic-source.ts +503 -0
  521. package/src/services/voice/optimistic-policy.d.ts +109 -0
  522. package/src/services/voice/optimistic-policy.d.ts.map +1 -0
  523. package/src/services/voice/optimistic-policy.test.ts +101 -0
  524. package/src/services/voice/optimistic-policy.ts +192 -0
  525. package/src/services/voice/optimistic-rollback.ts +343 -0
  526. package/src/services/voice/partial-stabilizer.d.ts +73 -0
  527. package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
  528. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  529. package/src/services/voice/partial-stabilizer.ts +140 -0
  530. package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
  531. package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  532. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  533. package/src/services/voice/phrase-cache.d.ts +76 -0
  534. package/src/services/voice/phrase-cache.d.ts.map +1 -0
  535. package/src/services/voice/phrase-cache.test.ts +242 -0
  536. package/src/services/voice/phrase-cache.ts +186 -0
  537. package/src/services/voice/phrase-chunker.d.ts +62 -0
  538. package/src/services/voice/phrase-chunker.d.ts.map +1 -0
  539. package/src/services/voice/phrase-chunker.test.ts +239 -0
  540. package/src/services/voice/phrase-chunker.ts +281 -0
  541. package/src/services/voice/pipeline-impls.d.ts +151 -0
  542. package/src/services/voice/pipeline-impls.d.ts.map +1 -0
  543. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  544. package/src/services/voice/pipeline-impls.test.ts +292 -0
  545. package/src/services/voice/pipeline-impls.ts +315 -0
  546. package/src/services/voice/pipeline.d.ts +216 -0
  547. package/src/services/voice/pipeline.d.ts.map +1 -0
  548. package/src/services/voice/pipeline.ts +505 -0
  549. package/src/services/voice/prefill-client.d.ts +123 -0
  550. package/src/services/voice/prefill-client.d.ts.map +1 -0
  551. package/src/services/voice/prefill-client.ts +316 -0
  552. package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
  553. package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  554. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  555. package/src/services/voice/profile-store.d.ts +248 -0
  556. package/src/services/voice/profile-store.d.ts.map +1 -0
  557. package/src/services/voice/profile-store.ts +887 -0
  558. package/src/services/voice/ring-buffer.d.ts +40 -0
  559. package/src/services/voice/ring-buffer.d.ts.map +1 -0
  560. package/src/services/voice/ring-buffer.ts +105 -0
  561. package/src/services/voice/rollback-queue.d.ts +24 -0
  562. package/src/services/voice/rollback-queue.d.ts.map +1 -0
  563. package/src/services/voice/rollback-queue.ts +74 -0
  564. package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
  565. package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  566. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  567. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  568. package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
  569. package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  570. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  571. package/src/services/voice/scheduler.d.ts +146 -0
  572. package/src/services/voice/scheduler.d.ts.map +1 -0
  573. package/src/services/voice/scheduler.t2.test.ts +141 -0
  574. package/src/services/voice/scheduler.ts +927 -0
  575. package/src/services/voice/shared-resources.d.ts +190 -0
  576. package/src/services/voice/shared-resources.d.ts.map +1 -0
  577. package/src/services/voice/shared-resources.ts +320 -0
  578. package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  579. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  580. package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
  581. package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
  582. package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  583. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  584. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  585. package/src/services/voice/speaker/diarizer.d.ts +75 -0
  586. package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
  587. package/src/services/voice/speaker/diarizer.ts +218 -0
  588. package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
  589. package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  590. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  591. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  592. package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
  593. package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  594. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  595. package/src/services/voice/speaker/encoder.d.ts +37 -0
  596. package/src/services/voice/speaker/encoder.d.ts.map +1 -0
  597. package/src/services/voice/speaker/encoder.ts +105 -0
  598. package/src/services/voice/speaker-imprint.d.ts +83 -0
  599. package/src/services/voice/speaker-imprint.d.ts.map +1 -0
  600. package/src/services/voice/speaker-imprint.test.ts +185 -0
  601. package/src/services/voice/speaker-imprint.ts +312 -0
  602. package/src/services/voice/speaker-preset-cache.d.ts +77 -0
  603. package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
  604. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  605. package/src/services/voice/speaker-preset-cache.ts +195 -0
  606. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  607. package/src/services/voice/system-audio-sink.d.ts +73 -0
  608. package/src/services/voice/system-audio-sink.d.ts.map +1 -0
  609. package/src/services/voice/system-audio-sink.test.ts +29 -0
  610. package/src/services/voice/system-audio-sink.ts +366 -0
  611. package/src/services/voice/transcriber.d.ts +244 -0
  612. package/src/services/voice/transcriber.d.ts.map +1 -0
  613. package/src/services/voice/transcriber.test.ts +392 -0
  614. package/src/services/voice/transcriber.ts +704 -0
  615. package/src/services/voice/turn-controller.d.ts +183 -0
  616. package/src/services/voice/turn-controller.d.ts.map +1 -0
  617. package/src/services/voice/turn-controller.test.ts +575 -0
  618. package/src/services/voice/turn-controller.ts +596 -0
  619. package/src/services/voice/types.d.ts +643 -0
  620. package/src/services/voice/types.d.ts.map +1 -0
  621. package/src/services/voice/types.ts +699 -0
  622. package/src/services/voice/vad.d.ts +282 -0
  623. package/src/services/voice/vad.d.ts.map +1 -0
  624. package/src/services/voice/vad.test.ts +480 -0
  625. package/src/services/voice/vad.ts +827 -0
  626. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  627. package/src/services/voice/voice-budget.d.ts +241 -0
  628. package/src/services/voice/voice-budget.d.ts.map +1 -0
  629. package/src/services/voice/voice-budget.test.ts +420 -0
  630. package/src/services/voice/voice-budget.ts +656 -0
  631. package/src/services/voice/voice-duet.test.ts +375 -0
  632. package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
  633. package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  634. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  635. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  636. package/src/services/voice/voice-preset-format.d.ts +158 -0
  637. package/src/services/voice/voice-preset-format.d.ts.map +1 -0
  638. package/src/services/voice/voice-preset-format.ts +700 -0
  639. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  640. package/src/services/voice/voice-profile-artifact.d.ts +116 -0
  641. package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
  642. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  643. package/src/services/voice/voice-profile-artifact.ts +518 -0
  644. package/src/services/voice/voice-profile-routes.d.ts +83 -0
  645. package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
  646. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  647. package/src/services/voice/voice-profile-routes.ts +425 -0
  648. package/src/services/voice/voice-scenario.ts +154 -0
  649. package/src/services/voice/voice-settings.d.ts +82 -0
  650. package/src/services/voice/voice-settings.d.ts.map +1 -0
  651. package/src/services/voice/voice-settings.ts +172 -0
  652. package/src/services/voice/voice-state-machine.d.ts +364 -0
  653. package/src/services/voice/voice-state-machine.d.ts.map +1 -0
  654. package/src/services/voice/voice-state-machine.ts +727 -0
  655. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  656. package/src/services/voice/voice-workbench-report.ts +326 -0
  657. package/src/services/voice/voice-workbench.test.ts +158 -0
  658. package/src/services/voice/voice.test.ts +1070 -0
  659. package/src/services/voice/wake-word-ggml.d.ts +101 -0
  660. package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
  661. package/src/services/voice/wake-word-ggml.ts +320 -0
  662. package/src/services/voice/wake-word.d.ts +255 -0
  663. package/src/services/voice/wake-word.d.ts.map +1 -0
  664. package/src/services/voice/wake-word.test.ts +298 -0
  665. package/src/services/voice/wake-word.ts +554 -0
  666. package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  667. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  668. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  669. package/src/services/voice-model-updater.d.ts +240 -0
  670. package/src/services/voice-model-updater.d.ts.map +1 -0
  671. package/src/services/voice-model-updater.ts +724 -0
  672. package/src/services/voice-prewarm.d.ts +3 -0
  673. package/src/services/voice-prewarm.d.ts.map +1 -0
  674. package/src/services/voice-prewarm.ts +51 -0
  675. package/dist/index.d.ts +0 -37
  676. package/dist/index.js +0 -1098
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Local text-to-speech capability — public type surface.
3
+ *
4
+ * Mirrors the layout of `services/imagegen/types.ts` and `services/vision/types.ts`:
5
+ *
6
+ * - The **request/result** contract every TTS backend implements
7
+ * (`TtsRequest`, `TtsResult`). The synth target is bytes (PCM/WAV/MP3).
8
+ *
9
+ * - The **backend** interface (`TtsBackend`) that the WS1 `MemoryArbiter`
10
+ * registers as the `"speak"` capability handler. One backend per
11
+ * per-platform TTS runtime:
12
+ *
13
+ * - `omnivoice` — fused omnivoice.cpp llama-server (desktop + AOSP)
14
+ * and the FFI streaming path (mobile). Default for tiers 9b / 27b
15
+ * / 27b-256k and a co-default for 9b.
16
+ * - `kokoro` — Kokoro-82M ONNX/GGUF. Default for tiers 0_8b / 2b
17
+ * / 4b (the low-memory mobile floor). Co-default for 9b.
18
+ * - `edge-tts` — Microsoft Edge cloud TTS, wired by
19
+ * `@elizaos/plugin-edge-tts`. Fallback when both local backends
20
+ * are unavailable (no GPU, missing weights). Routed via priority
21
+ * order in the runtime model registry, NOT as a sub-backend of
22
+ * this capability — Edge TTS is a different `provider` from the
23
+ * runtime's perspective.
24
+ * - `fake` — deterministic in-process backend used by tests.
25
+ *
26
+ * Audio format contract:
27
+ * The arbiter's `speak` request returns Uint8Array. The bytes carry the
28
+ * audio container declared in `TtsResult.mime`:
29
+ * - `audio/wav` — PCM in a RIFF/WAVE container (OmniVoice path
30
+ * produces 24 kHz mono int16 by default).
31
+ * - `audio/mpeg` — MP3 (Edge TTS default).
32
+ * - `audio/pcm-f32` — bare 32-bit float PCM. Used internally between
33
+ * Kokoro's runtime and the streaming sink; the
34
+ * capability layer wraps it as WAV before
35
+ * returning to TEXT_TO_SPEECH callers.
36
+ *
37
+ * Cache namespace:
38
+ * `tts-audio`. Keyed on `sha256(provider || model || voice || text)`.
39
+ * The first-line cache (`services/voice/wrap-with-first-line-cache.ts`)
40
+ * uses its own keying space and lives at a different layer; the
41
+ * capability-level cache (when wired) sits between the arbiter and the
42
+ * backend so it works for both local backends without each having to
43
+ * re-implement it.
44
+ */
45
+
46
+ /** Audio container the backend returns. */
47
+ export type TtsMimeType =
48
+ | "audio/wav"
49
+ | "audio/mpeg"
50
+ | "audio/pcm-f32"
51
+ | "audio/opus";
52
+
53
+ /**
54
+ * Caller request to `synthesize`. `text` is mandatory; everything else is
55
+ * optional with backend-specific defaults.
56
+ *
57
+ * Knob semantics (consistent across backends):
58
+ * - `voice`: voice id. Kokoro uses ids like `"af_bella"`; OmniVoice uses
59
+ * a preset path / preset id from the speaker-preset store. Edge TTS
60
+ * uses Microsoft voice names (`"en-US-JennyNeural"`).
61
+ * - `speed`: speech rate. `1.0` is normal; `0.5` half; `2.0` double. The
62
+ * concrete backend maps this to its native knob (Edge TTS percentage
63
+ * string; Kokoro phoneme stretch; OmniVoice maskgit-step pacing).
64
+ * - `sampleRate`: target output sample rate when the container supports
65
+ * it. Backends MAY downsample / upsample to match; omitted = backend
66
+ * native (24 kHz for Kokoro and Edge TTS; 22.05 kHz for OmniVoice).
67
+ * - `signal`: abort hook. Backends honor this at chunk boundaries.
68
+ */
69
+ export interface TtsRequest {
70
+ text: string;
71
+ voice?: string;
72
+ speed?: number;
73
+ sampleRate?: number;
74
+ /** Hint to the backend that the caller wants streaming chunks. */
75
+ streaming?: boolean;
76
+ signal?: AbortSignal;
77
+ }
78
+
79
+ /**
80
+ * Backend response. `audio` is the raw bytes in the container declared by
81
+ * `mime`. `sampleRate` reports the *actual* sample rate the bytes carry
82
+ * (which may differ from the requested `sampleRate` if the backend chose
83
+ * its native rate).
84
+ */
85
+ export interface TtsResult {
86
+ audio: Uint8Array;
87
+ mime: TtsMimeType;
88
+ sampleRate: number;
89
+ metadata: {
90
+ /** The model id (catalog key) the run used (`"tts-omnivoice-base-Q8_0"`, `"tts-kokoro"`, etc.). */
91
+ model: string;
92
+ /** Resolved voice id (post-default-resolve). */
93
+ voice: string;
94
+ /** Echo of the text that was synthesized. */
95
+ text: string;
96
+ /** End-to-end wall-clock time inside the backend. */
97
+ inferenceTimeMs: number;
98
+ /** Whether the result came from the capability-level cache. */
99
+ cacheHit?: boolean;
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Per-load arguments for a TTS backend. The arbiter's `load(modelKey)`
105
+ * only carries an opaque key; the binding resolves it to real
106
+ * model+tokenizer+voice-preset paths through this struct, which
107
+ * `createTtsCapabilityRegistration` populates from the catalog +
108
+ * `ELIZA_1_GGUF_PLATFORM_PLAN.json`.
109
+ *
110
+ * The optional `voicePresetPath` exists because the runtime's default
111
+ * voice ships as a precomputed `cache/voice-preset-default.bin` (ELZ2
112
+ * v2). Backends that can use a frozen preset short-circuit the encoder
113
+ * pass; backends that can't ignore the hint.
114
+ */
115
+ export interface TtsLoadArgs {
116
+ /** Absolute path to the primary TTS weights (GGUF for OmniVoice, ONNX for Kokoro). */
117
+ modelPath: string;
118
+ /** Optional tokenizer path (OmniVoice ships a separate `omnivoice-tokenizer-*.gguf`). */
119
+ tokenizerPath?: string;
120
+ /** Optional voice-preset cache path (`cache/voice-preset-default.bin`). */
121
+ voicePresetPath?: string;
122
+ /** Optional voice pack directory (Kokoro `voices/af_bella.bin`, etc.). */
123
+ voicePackDir?: string;
124
+ /** Cancel a slow load (model file read + weight upload). */
125
+ signal?: AbortSignal;
126
+ }
127
+
128
+ /**
129
+ * The contract every TTS backend implements. The shape is intentionally
130
+ * narrow: the arbiter only ever calls `synthesize`. `dispose` is wrapped
131
+ * by the arbiter's `unload` so the backend can free GPU/VRAM and drop
132
+ * file descriptors / kill subprocesses on eviction.
133
+ */
134
+ export interface TtsBackend {
135
+ /** Stable identifier — matches the backend module name. */
136
+ readonly id: "omnivoice" | "kokoro" | "edge-tts" | "fake";
137
+ /**
138
+ * Best-effort capability check. Backends return `false` for requests
139
+ * whose `voice` / `sampleRate` aren't supported, so the arbiter can
140
+ * surface a clear error rather than synthesizing garbage. Default
141
+ * implementations accept anything reasonable; the gate matters for
142
+ * Kokoro (fixed voice pack list) and OmniVoice (cloned-voice presets
143
+ * tied to a specific bundle).
144
+ */
145
+ supports(request: TtsRequest): boolean;
146
+ synthesize(request: TtsRequest): Promise<TtsResult>;
147
+ /** Release the loaded weights / subprocess. Idempotent. */
148
+ dispose(): Promise<void>;
149
+ }
150
+
151
+ /**
152
+ * Capability handler loader. The arbiter calls it with a model key (e.g.
153
+ * `"tts-omnivoice-base-Q8_0"`); the implementation resolves to a real
154
+ * `TtsLoadArgs` from `ELIZA_1_GGUF_PLATFORM_PLAN.json` + the installed
155
+ * bundle and returns a live backend.
156
+ */
157
+ export type TtsBackendLoader = (modelKey: string) => Promise<TtsBackend>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Local inference type re-exports.
3
+ *
4
+ * The canonical definitions live in `@elizaos/shared/local-inference`.
5
+ * This shim preserves the historical import path
6
+ * `../services/local-inference/types` for server-side code.
7
+ */
8
+ export { type ActiveModelState, AGENT_MODEL_SLOTS, type AgentModelSlot, type CatalogModel, type CatalogQuantizationId, type CatalogQuantizationMatrix, type CatalogQuantizationVariant, type CpuFeatureProbe, type DownloadEvent, type DownloadJob, type DownloadState, type GpuProfile, type GpuProfileId, type HardwareFitLevel, type HardwareProbe, type InstalledModel, type KvCacheType, type LocalInferenceDownloadStatus, type LocalInferenceReadiness, type LocalInferenceSlotReadiness, type LocalRuntimeAcceleration, type LocalRuntimeBackend, type LocalRuntimeKernel, type LocalRuntimeOptimizations, type MobileHardwareProbe, type ModelAssignments, type ModelBucket, type ModelCategory, type ModelHubSnapshot, type OpenVinoDeviceKind, type OpenVinoHardwareProbe, TEXT_GENERATION_SLOTS, type TextGenerationSlot, type TokenizerFamily, } from "@elizaos/shared";
9
+ /** RAM requirements for a model bundle. */
10
+ export interface RamBudget {
11
+ /** Minimum RAM the bundle will boot under, in megabytes. */
12
+ minMb: number;
13
+ /** RAM the bundle expects for nominal workloads, in megabytes. */
14
+ recommendedMb: number;
15
+ /** Where the numbers came from. `manifest` only when both came from
16
+ * a validated `eliza-1.manifest.json` next to the installed bundle. */
17
+ source: "manifest" | "catalog";
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACpB,MAAM,iBAAiB,CAAC;AAEzB,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACzB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB;4EACwE;IACxE,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CAC/B"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Local inference type re-exports.
3
+ *
4
+ * The canonical definitions live in `@elizaos/shared/local-inference`.
5
+ * This shim preserves the historical import path
6
+ * `../services/local-inference/types` for server-side code.
7
+ */
8
+
9
+ export {
10
+ type ActiveModelState,
11
+ AGENT_MODEL_SLOTS,
12
+ type AgentModelSlot,
13
+ type CatalogModel,
14
+ type CatalogQuantizationId,
15
+ type CatalogQuantizationMatrix,
16
+ type CatalogQuantizationVariant,
17
+ type CpuFeatureProbe,
18
+ type DownloadEvent,
19
+ type DownloadJob,
20
+ type DownloadState,
21
+ type GpuProfile,
22
+ type GpuProfileId,
23
+ type HardwareFitLevel,
24
+ type HardwareProbe,
25
+ type InstalledModel,
26
+ type KvCacheType,
27
+ type LocalInferenceDownloadStatus,
28
+ type LocalInferenceReadiness,
29
+ type LocalInferenceSlotReadiness,
30
+ type LocalRuntimeAcceleration,
31
+ type LocalRuntimeBackend,
32
+ type LocalRuntimeKernel,
33
+ type LocalRuntimeOptimizations,
34
+ type MobileHardwareProbe,
35
+ type ModelAssignments,
36
+ type ModelBucket,
37
+ type ModelCategory,
38
+ type ModelHubSnapshot,
39
+ type OpenVinoDeviceKind,
40
+ type OpenVinoHardwareProbe,
41
+ TEXT_GENERATION_SLOTS,
42
+ type TextGenerationSlot,
43
+ type TokenizerFamily,
44
+ } from "@elizaos/shared";
45
+
46
+ /** RAM requirements for a model bundle. */
47
+ export interface RamBudget {
48
+ /** Minimum RAM the bundle will boot under, in megabytes. */
49
+ minMb: number;
50
+ /** RAM the bundle expects for nominal workloads, in megabytes. */
51
+ recommendedMb: number;
52
+ /** Where the numbers came from. `manifest` only when both came from
53
+ * a validated `eliza-1.manifest.json` next to the installed bundle. */
54
+ source: "manifest" | "catalog";
55
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Engine-backed `verifyOnDevice` hook for the Eliza-1 downloader
3
+ * (`packages/inference/AGENTS.md` §7): after a bundle is materialized and
4
+ * every file's sha256 checks out, run one cold smoke pass —
5
+ *
6
+ * load → 1-token text generation → (if the bundle ships voice assets)
7
+ * 1-phrase voice generation → barge-in cancel → unload
8
+ *
9
+ * — before the bundle is allowed to auto-fill an empty default slot. The
10
+ * downloader stays decoupled from the engine: it only knows the
11
+ * {@link VerifyBundleOnDevice} shape; this module is the concrete
12
+ * implementation the service layer injects.
13
+ *
14
+ * Failure semantics: any error throws. The downloader catches it and leaves
15
+ * `bundleVerifiedAt` unset, so an unverified bundle is registered but does
16
+ * not become the recommended default. There is no "verified anyway" path —
17
+ * voice is mandatory for Eliza-1 voice tiers (AGENTS.md §3), so a bundle
18
+ * whose fused voice ABI is not loadable on this device legitimately fails
19
+ * verify until the fused build is present.
20
+ */
21
+ import fs from "node:fs/promises";
22
+ import type { VerifyBundleOnDevice } from "./downloader";
23
+ import { localInferenceEngine } from "./engine";
24
+ import { parseManifestOrThrow } from "./manifest";
25
+ type VerifyEngine = Pick<typeof localInferenceEngine, "load" | "generate" | "ensureActiveBundleVoiceReady" | "startVoice" | "armVoice" | "synthesizeSpeech" | "triggerBargeIn" | "stopVoice" | "unload">;
26
+ interface VerifyBundleOnDeviceDeps {
27
+ readonly engine: VerifyEngine;
28
+ readonly readFile: typeof fs.readFile;
29
+ readonly parseManifest: typeof parseManifestOrThrow;
30
+ }
31
+ export declare function createVerifyBundleOnDevice(deps?: Partial<VerifyBundleOnDeviceDeps>): VerifyBundleOnDevice;
32
+ export declare const verifyBundleOnDevice: VerifyBundleOnDevice;
33
+ export {};
34
+ //# sourceMappingURL=verify-on-device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-on-device.d.ts","sourceRoot":"","sources":["verify-on-device.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,KAAK,YAAY,GAAG,IAAI,CACvB,OAAO,oBAAoB,EACzB,MAAM,GACN,UAAU,GACV,8BAA8B,GAC9B,YAAY,GACZ,UAAU,GACV,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,GACX,QAAQ,CACV,CAAC;AAEF,UAAU,wBAAwB;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,OAAO,oBAAoB,CAAC;CACpD;AAqDD,wBAAgB,0BAA0B,CACzC,IAAI,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC1C,oBAAoB,CAoBtB;AAED,eAAO,MAAM,oBAAoB,EAAE,oBACN,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { createVerifyBundleOnDevice } from "./verify-on-device";
3
+
4
+ const engineMock = {
5
+ load: vi.fn(async () => {}),
6
+ generate: vi.fn(async () => "ok"),
7
+ ensureActiveBundleVoiceReady: vi.fn(async () => ({})),
8
+ startVoice: vi.fn(() => {}),
9
+ armVoice: vi.fn(async () => {}),
10
+ synthesizeSpeech: vi.fn(async () => new Uint8Array([1, 2, 3, 4])),
11
+ triggerBargeIn: vi.fn(() => {}),
12
+ stopVoice: vi.fn(async () => {}),
13
+ unload: vi.fn(async () => {}),
14
+ };
15
+
16
+ const manifestState: { voiceFiles: number } = { voiceFiles: 0 };
17
+
18
+ function verifier() {
19
+ const deps = {
20
+ engine: engineMock,
21
+ readFile: vi.fn(async () => "{}"),
22
+ parseManifest: () => ({
23
+ files: {
24
+ voice: Array.from({ length: manifestState.voiceFiles }, (_, i) => ({
25
+ path: `tts/v${i}.gguf`,
26
+ sha256: "x",
27
+ })),
28
+ },
29
+ }),
30
+ } as unknown as Parameters<typeof createVerifyBundleOnDevice>[0];
31
+ return createVerifyBundleOnDevice(deps);
32
+ }
33
+
34
+ const ARGS = {
35
+ modelId: "eliza-1-0_8b",
36
+ bundleRoot: "/tmp/bundle",
37
+ manifestPath: "/tmp/bundle/eliza-1.manifest.json",
38
+ textGgufPath: "/tmp/bundle/text/eliza-1-0_8b.gguf",
39
+ };
40
+
41
+ afterEach(() => {
42
+ vi.clearAllMocks();
43
+ manifestState.voiceFiles = 0;
44
+ });
45
+
46
+ describe("verifyBundleOnDevice", () => {
47
+ it("loads, runs a 1-token text gen, and unloads for a text-only bundle", async () => {
48
+ manifestState.voiceFiles = 0;
49
+ await verifier()(ARGS);
50
+ expect(engineMock.load).toHaveBeenCalledWith(ARGS.textGgufPath, {
51
+ modelPath: ARGS.textGgufPath,
52
+ modelId: ARGS.modelId,
53
+ });
54
+ expect(engineMock.generate).toHaveBeenCalledWith(
55
+ expect.objectContaining({ maxTokens: 1 }),
56
+ );
57
+ expect(engineMock.ensureActiveBundleVoiceReady).not.toHaveBeenCalled();
58
+ expect(engineMock.startVoice).not.toHaveBeenCalled();
59
+ expect(engineMock.unload).toHaveBeenCalled();
60
+ });
61
+
62
+ it("also runs a 1-phrase voice gen + barge-in cancel when the bundle ships voice", async () => {
63
+ manifestState.voiceFiles = 1;
64
+ await verifier()(ARGS);
65
+ expect(engineMock.ensureActiveBundleVoiceReady).toHaveBeenCalled();
66
+ expect(engineMock.startVoice).not.toHaveBeenCalled();
67
+ expect(engineMock.armVoice).not.toHaveBeenCalled();
68
+ expect(engineMock.synthesizeSpeech).toHaveBeenCalled();
69
+ expect(engineMock.triggerBargeIn).toHaveBeenCalled();
70
+ expect(engineMock.stopVoice).toHaveBeenCalled();
71
+ expect(engineMock.unload).toHaveBeenCalled();
72
+ });
73
+
74
+ it("rethrows verify failures and still unloads", async () => {
75
+ manifestState.voiceFiles = 0;
76
+ engineMock.generate.mockRejectedValueOnce(new Error("kernel missing"));
77
+ await expect(verifier()(ARGS)).rejects.toThrow("kernel missing");
78
+ expect(engineMock.unload).toHaveBeenCalled();
79
+ });
80
+
81
+ it("fails verify when voice synthesis yields no PCM", async () => {
82
+ manifestState.voiceFiles = 1;
83
+ engineMock.synthesizeSpeech.mockResolvedValueOnce(new Uint8Array(0));
84
+ await expect(verifier()(ARGS)).rejects.toThrow(/no PCM bytes/);
85
+ expect(engineMock.stopVoice).toHaveBeenCalled();
86
+ });
87
+ });
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Engine-backed `verifyOnDevice` hook for the Eliza-1 downloader
3
+ * (`packages/inference/AGENTS.md` §7): after a bundle is materialized and
4
+ * every file's sha256 checks out, run one cold smoke pass —
5
+ *
6
+ * load → 1-token text generation → (if the bundle ships voice assets)
7
+ * 1-phrase voice generation → barge-in cancel → unload
8
+ *
9
+ * — before the bundle is allowed to auto-fill an empty default slot. The
10
+ * downloader stays decoupled from the engine: it only knows the
11
+ * {@link VerifyBundleOnDevice} shape; this module is the concrete
12
+ * implementation the service layer injects.
13
+ *
14
+ * Failure semantics: any error throws. The downloader catches it and leaves
15
+ * `bundleVerifiedAt` unset, so an unverified bundle is registered but does
16
+ * not become the recommended default. There is no "verified anyway" path —
17
+ * voice is mandatory for Eliza-1 voice tiers (AGENTS.md §3), so a bundle
18
+ * whose fused voice ABI is not loadable on this device legitimately fails
19
+ * verify until the fused build is present.
20
+ */
21
+
22
+ import fs from "node:fs/promises";
23
+ import type { VerifyBundleOnDevice } from "./downloader";
24
+ import { localInferenceEngine } from "./engine";
25
+ import { parseManifestOrThrow } from "./manifest";
26
+
27
+ /** A short, deterministic prompt — we only care that one token comes back. */
28
+ const VERIFY_PROMPT = "Reply with one word.";
29
+ /** A short phrase to drive a single TTS dispatch through the voice scheduler. */
30
+ const VERIFY_PHRASE = "Ready.";
31
+
32
+ type VerifyEngine = Pick<
33
+ typeof localInferenceEngine,
34
+ | "load"
35
+ | "generate"
36
+ | "ensureActiveBundleVoiceReady"
37
+ | "startVoice"
38
+ | "armVoice"
39
+ | "synthesizeSpeech"
40
+ | "triggerBargeIn"
41
+ | "stopVoice"
42
+ | "unload"
43
+ >;
44
+
45
+ interface VerifyBundleOnDeviceDeps {
46
+ readonly engine: VerifyEngine;
47
+ readonly readFile: typeof fs.readFile;
48
+ readonly parseManifest: typeof parseManifestOrThrow;
49
+ }
50
+
51
+ async function manifestDeclaresVoice(
52
+ manifestPath: string,
53
+ deps: Pick<VerifyBundleOnDeviceDeps, "readFile" | "parseManifest">,
54
+ ): Promise<boolean> {
55
+ const raw = await deps.readFile(manifestPath, "utf8");
56
+ const manifest = deps.parseManifest(JSON.parse(String(raw)));
57
+ // Voice tiers ship a TTS GGUF under `files.voice`; the ASR/VAD files are
58
+ // gated on top of that. If there is no voice file, this is a text-only
59
+ // bundle and the voice leg of the smoke is skipped.
60
+ return manifest.files.voice.length > 0;
61
+ }
62
+
63
+ async function verifyText(
64
+ engine: VerifyEngine,
65
+ modelId: string,
66
+ textGgufPath: string,
67
+ ): Promise<void> {
68
+ await engine.load(textGgufPath, { modelPath: textGgufPath, modelId });
69
+ const out = await engine.generate({
70
+ prompt: VERIFY_PROMPT,
71
+ maxTokens: 1,
72
+ temperature: 0,
73
+ });
74
+ if (typeof out !== "string") {
75
+ throw new Error(
76
+ `[verify-on-device] text generation returned ${typeof out}, expected string`,
77
+ );
78
+ }
79
+ }
80
+
81
+ async function verifyVoice(
82
+ engine: VerifyEngine,
83
+ _bundleRoot: string,
84
+ ): Promise<void> {
85
+ await engine.ensureActiveBundleVoiceReady();
86
+ try {
87
+ // One real synthesis through the voice bridge.
88
+ const pcm = await engine.synthesizeSpeech(VERIFY_PHRASE);
89
+ if (!(pcm instanceof Uint8Array) || pcm.byteLength === 0) {
90
+ throw new Error(
91
+ "[verify-on-device] voice synthesis produced no PCM bytes",
92
+ );
93
+ }
94
+ // Barge-in cancel must be accepted without throwing — exercises the
95
+ // hard-stop path the voice loop uses to abort speculative TTS.
96
+ engine.triggerBargeIn();
97
+ } finally {
98
+ await engine.stopVoice();
99
+ }
100
+ }
101
+
102
+ export function createVerifyBundleOnDevice(
103
+ deps: Partial<VerifyBundleOnDeviceDeps> = {},
104
+ ): VerifyBundleOnDevice {
105
+ const engine = deps.engine ?? localInferenceEngine;
106
+ const manifestDeps = {
107
+ readFile: deps.readFile ?? fs.readFile,
108
+ parseManifest: deps.parseManifest ?? parseManifestOrThrow,
109
+ };
110
+
111
+ return async ({ modelId, bundleRoot, manifestPath, textGgufPath }) => {
112
+ try {
113
+ await verifyText(engine, modelId, textGgufPath);
114
+ if (await manifestDeclaresVoice(manifestPath, manifestDeps)) {
115
+ await verifyVoice(engine, bundleRoot);
116
+ }
117
+ } finally {
118
+ // Always release the model the verify pass loaded — the bundle is not
119
+ // "active" yet, and the active-model coordinator owns load/unload from
120
+ // here on.
121
+ await engine.unload().catch(() => {});
122
+ }
123
+ };
124
+ }
125
+
126
+ export const verifyBundleOnDevice: VerifyBundleOnDevice =
127
+ createVerifyBundleOnDevice();
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Re-export of the shared model-file verification module. The canonical
3
+ * implementation lives in `@elizaos/shared/local-inference` because both
4
+ * the server (`@elizaos/app-core`) and the UI client (`@elizaos/ui`)
5
+ * compute the same SHA256 / GGUF-magic checks against on-disk models.
6
+ */
7
+ export { __registryPathForTests, hashFile, type VerifyResult, type VerifyState, verifyInstalledModel, } from "@elizaos/shared/local-inference/verify";
8
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACN,sBAAsB,EACtB,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,oBAAoB,GACpB,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Re-export of the shared model-file verification module. The canonical
3
+ * implementation lives in `@elizaos/shared/local-inference` because both
4
+ * the server (`@elizaos/app-core`) and the UI client (`@elizaos/ui`)
5
+ * compute the same SHA256 / GGUF-magic checks against on-disk models.
6
+ */
7
+ export {
8
+ __registryPathForTests,
9
+ hashFile,
10
+ type VerifyResult,
11
+ type VerifyState,
12
+ verifyInstalledModel,
13
+ } from "@elizaos/shared/local-inference/verify";
@@ -0,0 +1,115 @@
1
+ /**
2
+ * AOSP vision-describe backend contract (WS2).
3
+ *
4
+ * The bun:ffi llama.cpp binding in `@elizaos/plugin-aosp-local-inference`
5
+ * already exposes the embedding helpers (`llama_set_embeddings`,
6
+ * `llama_get_embeddings_seq`) and the model/context lifecycle. mtmd
7
+ * (multi-modal definition) is part of upstream llama.cpp from b8198+
8
+ * but the libeliza-llama-shim that the AOSP binding loads does NOT
9
+ * yet export the matching `eliza_llama_mtmd_*` symbols.
10
+ *
11
+ * This file is the JS contract for the FFI binding the AOSP plugin
12
+ * will add when the native side ships. It lives in
13
+ * `plugin-local-inference` (not in `plugin-aosp-local-inference`) so
14
+ * cross-plugin consumers can compile against the same interface
15
+ * regardless of platform. When the AOSP shim ships the native
16
+ * symbols, the implementation in `plugin-aosp-local-inference/src/
17
+ * aosp-llama-vision.ts` (to be added) will satisfy this contract.
18
+ *
19
+ * Required native symbols (libeliza-llama-shim):
20
+ *
21
+ * eliza_llama_mtmd_init_from_file(
22
+ * mmproj_path: const char *,
23
+ * out_handle: void **
24
+ * ) -> int32 // 0 = ok; non-zero = error code
25
+ *
26
+ * eliza_llama_mtmd_free(mtmd_handle: void *) -> void
27
+ *
28
+ * eliza_llama_mtmd_encode(
29
+ * mtmd_handle: void *,
30
+ * image_bytes: const uint8_t *,
31
+ * image_len: size_t,
32
+ * out_tokens_ptr: float **, // owned by mtmd; valid until next encode
33
+ * out_token_count: int32 *,
34
+ * out_hidden_size: int32 *
35
+ * ) -> int32
36
+ *
37
+ * eliza_llama_decode_with_mmproj(
38
+ * ctx: void *, // existing llama_context
39
+ * mtmd_tokens: const float *,
40
+ * mtmd_token_count: int32,
41
+ * mtmd_hidden_size: int32,
42
+ * prompt: const char *,
43
+ * prompt_len: size_t,
44
+ * max_tokens: int32,
45
+ * temperature: float,
46
+ * out_text_buf: char *, // caller-allocated
47
+ * out_text_buf_cap: size_t,
48
+ * out_text_written: size_t *
49
+ * ) -> int32
50
+ *
51
+ * Optional fast path: if the shim adds
52
+ *
53
+ * eliza_llama_mtmd_describe(
54
+ * model: void *, // existing llama_model
55
+ * ctx: void *, // existing llama_context
56
+ * mtmd_handle: void *,
57
+ * image_bytes: const uint8_t *,
58
+ * image_len: size_t,
59
+ * prompt: const char *,
60
+ * prompt_len: size_t,
61
+ * max_tokens: int32,
62
+ * temperature: float,
63
+ * out_buf: char *,
64
+ * out_buf_cap: size_t,
65
+ * out_written: size_t *
66
+ * ) -> int32
67
+ *
68
+ * that single-call wrapper is preferred — it lets the shim fuse the
69
+ * encode+decode steps internally and avoids the round-trip of token
70
+ * pointers across the FFI boundary (which bun:ffi handles, but at the
71
+ * cost of two extra pointer dereferences per frame).
72
+ *
73
+ * Until the native side exports those symbols, this module's `loadAospVisionBackend`
74
+ * throws a structured error that the arbiter / handler can surface as
75
+ * "vision not available on this platform". It does NOT register
76
+ * silently — silent unavailability would let the runtime fall back to
77
+ * the cloud path on a mobile device that explicitly disabled it.
78
+ */
79
+ import type { VisionDescribeBackend, VisionDescribeLoadArgs } from "./types";
80
+ /**
81
+ * The AOSP binding's mtmd surface, when present. The AOSP plugin
82
+ * registers an instance under the runtime service name
83
+ * `"aosp-llama-mtmd"` once the native shim exports the symbols above.
84
+ */
85
+ export interface AospLlamaMtmdBinding {
86
+ /** True when libeliza-llama-shim.so was loaded and exports the mtmd symbols. */
87
+ hasMtmd(): boolean;
88
+ /** Initialize an mtmd handle for the given mmproj path. */
89
+ initMtmd(args: {
90
+ mmprojPath: string;
91
+ }): Promise<AospMtmdHandle>;
92
+ }
93
+ export interface AospMtmdHandle {
94
+ /**
95
+ * Single-call describe — wraps mtmd_encode + decode_with_chunks. The
96
+ * AOSP shim's `eliza_llama_mtmd_describe` lands here. Backends that
97
+ * only have the split encode/decode symbols implement this on top
98
+ * of two FFI calls; backends with the fused symbol use one.
99
+ */
100
+ describe(args: {
101
+ imageBytes: Uint8Array;
102
+ prompt: string;
103
+ maxTokens?: number;
104
+ temperature?: number;
105
+ signal?: AbortSignal;
106
+ }): Promise<string>;
107
+ /** Free the mtmd handle (and any cached encode buffers). */
108
+ dispose(): Promise<void>;
109
+ }
110
+ export interface LoadAospVisionBackendOptions {
111
+ loadArgs: VisionDescribeLoadArgs;
112
+ mtmdBinding?: AospLlamaMtmdBinding;
113
+ }
114
+ export declare function loadAospVisionBackend(opts: LoadAospVisionBackendOptions): Promise<VisionDescribeBackend>;
115
+ //# sourceMappingURL=aosp-unavailable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aosp-unavailable.d.ts","sourceRoot":"","sources":["aosp-unavailable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC,gFAAgF;IAChF,OAAO,IAAI,OAAO,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,cAAc;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE;QACd,UAAU,EAAE,UAAU,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,WAAW,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,qBAAqB,CAAC,CA0ChC"}