@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,674 @@
1
+ /**
2
+ * Node/Bun FFI binding to `libelizainference.{dylib,so,dll}`.
3
+ *
4
+ * The fused omnivoice + llama.cpp build (see
5
+ * `packages/app-core/scripts/omnivoice-fuse/`) produces ONE shared
6
+ * library that exports both `llama_*` and `omnivoice_*` symbols plus
7
+ * the C ABI declared in `scripts/omnivoice-fuse/ffi.h`. This module is
8
+ * the JS-side proxy for that ABI — it loads the library, binds every
9
+ * `eliza_inference_*` symbol declared in `ffi.h`, and exposes a typed
10
+ * handle (`ElizaInferenceFfi`) the voice lifecycle calls into.
11
+ *
12
+ * Runtime: production runs under Bun (Electrobun shell, Capacitor
13
+ * bridge), so the loader uses `bun:ffi`. Tests that need to actually
14
+ * load a `.dylib` against a stub library spawn a `bun` subprocess —
15
+ * see `ffi-bindings.test.ts`. Calling this loader from a non-Bun
16
+ * runtime (e.g. plain Node) throws `VoiceLifecycleError({code:
17
+ * "missing-ffi"})` with a diagnostic explaining why.
18
+ *
19
+ * No defensive try/catch on the success path. Any dlopen failure,
20
+ * symbol-resolution failure, or ABI mismatch is a structured throw
21
+ * (AGENTS.md §3 + §9). The caller — `voice/lifecycle.ts` and
22
+ * `voice/engine-bridge.ts` — surfaces it as a `VoiceLifecycleError` to
23
+ * the UI.
24
+ */
25
+ /**
26
+ * ABI version the JS binding was authored against. Must match the value
27
+ * `eliza_inference_abi_version()` returns at runtime — a mismatch is a
28
+ * hard error (AGENTS.md §3, §9: no silent compatibility shims).
29
+ *
30
+ * Bump in lockstep with `ELIZA_INFERENCE_ABI_VERSION` in
31
+ * `scripts/omnivoice-fuse/ffi.h` whenever the C surface changes shape.
32
+ *
33
+ * v4: the FFI bridge resolves `speaker_preset_id` against the bundle's
34
+ * `cache/voice-preset-<id>.bin` (ELZ2 v2) and applies the
35
+ * `(instruct, ref_audio_tokens, ref_T, ref_text)` triple to
36
+ * `ov_tts_params` before calling `ov_synthesize`. Adds the
37
+ * `eliza_inference_encode_reference` entrypoint that the freeze CLI
38
+ * uses to pre-encode reference WAVs into the preset file. A v3 caller
39
+ * remains source-compatible: every v3 entry point keeps its v3 shape.
40
+ *
41
+ * v5: the FFI bridge gains the native openWakeWord surface
42
+ * (`eliza_inference_wakeword_supported/open/score/reset/close`). It
43
+ * replaces the previous `onnxruntime-node`-backed wake-word path —
44
+ * the JS binding routes wake-word detection exclusively through this
45
+ * ABI with no ONNX fallback (AGENTS.md §3, §8). v4 callers that
46
+ * never touched the wake-word entries are source-compatible.
47
+ *
48
+ * v6: the FFI bridge gains the native speaker-encoder + diarizer
49
+ * surfaces (`eliza_inference_speaker_supported/open/embed/free/close`
50
+ * and `eliza_inference_diariz_supported/open/segment/close`). These
51
+ * fuse the remaining standalone `libvoice_classifier` voice
52
+ * classifiers into the one `libelizainference` handle so the whole
53
+ * voice pipeline runs through a single native lib. v5 callers that
54
+ * never touched the speaker/diarizer entries are source-compatible.
55
+ *
56
+ * v9: the last text-adjacent modalities move onto the fused handle. Three
57
+ * additive surfaces + probes: text embeddings (`embed` / `embedSupported`),
58
+ * mmproj vision describe (`describeImage` / `visionSupported`), and the
59
+ * tokenizer (`tokenize` / `detokenize` / `tokenizeSupported`). With these,
60
+ * libllama is fully retired: text, embeddings, vision, and tokenization all
61
+ * run through the fused handle. A pre-v9 library lacks these symbols, so the
62
+ * probes report unsupported and the fused runtime refuses (there is no
63
+ * libllama fallback). v8 callers that never touched the new entries remain
64
+ * source-compatible (the new probes simply return false on a v8 lib).
65
+ *
66
+ * v10: Kokoro-82M TTS folded in-process. The fused handle gains
67
+ * `eliza_inference_kokoro_supported/load/synthesize/sample_rate` so the
68
+ * mobile Kokoro path synthesizes through the same dlopen()-ed
69
+ * libelizainference as OmniVoice instead of POSTing to the local-TCP
70
+ * `llama-server /v1/audio/speech` route (forbidden on iOS / Google Play).
71
+ * The four symbols are additive — a v9 library lacks them, so the
72
+ * `kokoroSupported()` probe reports false and the Kokoro FFI runtime
73
+ * refuses (no TCP fallback on mobile). A v9 library is still accepted at
74
+ * degraded capability: its voice/ASR/VAD/LLM/text surface is unchanged and
75
+ * Kokoro just probes unsupported on it.
76
+ */
77
+ export declare const ELIZA_INFERENCE_ABI_VERSION: 12;
78
+ /** One transcribed word with playback-synced timing (ms from utterance start). */
79
+ export interface AsrWordTiming {
80
+ text: string;
81
+ startMs: number;
82
+ endMs: number;
83
+ }
84
+ /**
85
+ * Recover per-word `{ text, startMs, endMs }` from a v12 timed-ASR result.
86
+ *
87
+ * The native `eliza_inference_asr_transcribe_timed` sizes the `startMs`/`endMs`
88
+ * arrays by splitting the transcript on ASCII whitespace — `std::isspace` in the
89
+ * C locale matches EXACTLY ` \t\n\v\f\r`. We must mirror that split byte-for-byte
90
+ * to recover the word strings: a broader Unicode `\s` split collapses NBSP /
91
+ * ideographic space (U+00A0, U+3000, …) that the native byte split keeps, which
92
+ * would make `tokens` shorter than `count` and silently zip each word's text
93
+ * against a DIFFERENT word's timing — a desync `validateAsrWordTimings` cannot
94
+ * see (it never compares text to count). `count` only falls below the true word
95
+ * count when the caller's `maxWords` cap is hit, in which case the trailing
96
+ * (untimed) words are dropped by `Math.min`.
97
+ */
98
+ export declare function recoverAsrWords(text: string, count: number, startMs: Int32Array, endMs: Int32Array): AsrWordTiming[];
99
+ /**
100
+ * Pooling strategies for `embed`. Mirror `enum llama_pooling_type` and the
101
+ * `ELIZA_POOLING_*` constants in `eliza-inference-ffi.h`.
102
+ */
103
+ export declare const ELIZA_POOLING_MEAN = 1;
104
+ export declare const ELIZA_POOLING_CLS = 2;
105
+ export declare const ELIZA_POOLING_LAST = 3;
106
+ /** Status codes mirrored from `ffi.h`. Negative = failure. */
107
+ export declare const ELIZA_OK = 0;
108
+ export declare const ELIZA_ERR_NOT_IMPLEMENTED = -1;
109
+ export declare const ELIZA_ERR_INVALID_ARG = -2;
110
+ export declare const ELIZA_ERR_BUNDLE_INVALID = -3;
111
+ export declare const ELIZA_ERR_FFI_FAULT = -4;
112
+ export declare const ELIZA_ERR_OOM = -5;
113
+ export declare const ELIZA_ERR_ABI_MISMATCH = -6;
114
+ export declare const ELIZA_ERR_CANCELLED = -7;
115
+ /**
116
+ * Region names the lifecycle hands to `mmap_acquire` / `mmap_evict`.
117
+ * Mirrors the set the C stub validates in `ffi-stub.c::valid_region`.
118
+ */
119
+ export type ElizaInferenceRegion = "tts" | "asr" | "text" | "mtp" | "vad" | "wakeword";
120
+ /**
121
+ * Opaque pointer to the C-side `EliInferenceContext`. Numeric on Bun
122
+ * (FFI returns the raw pointer as `bigint`); never inspected on the JS
123
+ * side beyond passing it back through the binding.
124
+ */
125
+ export type ElizaInferenceContextHandle = bigint;
126
+ /** Opaque pointer to a native Silero VAD session. */
127
+ export type NativeVadHandle = bigint;
128
+ /** Opaque pointer to a native openWakeWord session. */
129
+ export type NativeWakeWordHandle = bigint;
130
+ /** Opaque pointer to a native WeSpeaker speaker-encoder session. */
131
+ export type NativeSpeakerHandle = bigint;
132
+ /** Opaque pointer to a native pyannote diarizer session. */
133
+ export type NativeDiarizHandle = bigint;
134
+ /** Opaque pointer to a streaming-LLM session. */
135
+ export type LlmStreamHandle = bigint;
136
+ /**
137
+ * Per-session config handed to `llmStreamOpen`. Mirrors
138
+ * `eliza_llm_stream_config_t` in
139
+ * `native/llama.cpp/tools/omnivoice/include/eliza-inference-ffi.h` (ABI v8).
140
+ */
141
+ export interface LlmStreamConfig {
142
+ maxTokens: number;
143
+ temperature: number;
144
+ topP: number;
145
+ topK: number;
146
+ repeatPenalty: number;
147
+ /** Pinned slot id; -1 disables pinning. */
148
+ slotId: number;
149
+ /** Optional prompt cache key used to derive a slot when `slotId === -1`. */
150
+ promptCacheKey: string | null;
151
+ /** MTP drafter bounds; `0` for either disables speculative decoding. */
152
+ draftMin: number;
153
+ draftMax: number;
154
+ /** Absolute MTP drafter GGUF path; null disables drafter-backed MTP. */
155
+ draftModelPath: string | null;
156
+ /**
157
+ * GBNF grammar source. When set the native session installs a grammar
158
+ * sampler FIRST in the chain so every sampled token is constrained — this
159
+ * is how the structured-reply envelope is forced on the in-process FFI
160
+ * path. `null`/empty disables grammar constraint.
161
+ */
162
+ gbnfGrammar?: string | null;
163
+ /** Qwen3-style thinking-tag suppression passthrough (v1 no-op). */
164
+ disableThinking?: boolean;
165
+ /**
166
+ * Per-load GPU offload (ABI v8). Number of model layers to place on GPU.
167
+ * `undefined`/-1 selects the runtime default (all layers); 0 forces CPU.
168
+ * The model is loaded once per ctx, so the FIRST session's value wins.
169
+ */
170
+ gpuLayers?: number;
171
+ /**
172
+ * KV-cache K quant type name (ABI v8), e.g. "f16", "q8_0", "qjl1_256".
173
+ * `undefined`/null leaves the f16 default. Mapped to `ggml_type` by the
174
+ * fused lib's `eliza_llm_stream_config_t.cache_type_k`.
175
+ */
176
+ cacheTypeK?: string | null;
177
+ /** KV-cache V quant type name (ABI v8); see `cacheTypeK`. */
178
+ cacheTypeV?: string | null;
179
+ }
180
+ /**
181
+ * One step of streaming LLM output. `tokens` is the batch of accepted text
182
+ * model token ids the runtime committed this step (>= 1; > 1 only when the
183
+ * MTP drafter is active and the verifier accepted multiple drafts).
184
+ * `text` is the detokenized text for those tokens. `done` is `true` only
185
+ * on the final step (EOS reached). `drafterDrafted` and `drafterAccepted`
186
+ * are populated when the drafter is active.
187
+ */
188
+ export interface LlmStreamStep {
189
+ tokens: number[];
190
+ text: string;
191
+ done: boolean;
192
+ drafterDrafted: number;
193
+ drafterAccepted: number;
194
+ }
195
+ /**
196
+ * One streaming-TTS chunk delivered to the `onChunk` callback passed to
197
+ * `ttsSynthesizeStream`. `pcm` is a *view* over the library's buffer —
198
+ * valid only for the duration of the callback; copy it before
199
+ * returning. `isFinal` marks the zero-length tail chunk that closes the
200
+ * utterance. The callback returning `true` requests cancellation at the
201
+ * next kernel boundary.
202
+ */
203
+ export interface TtsStreamChunk {
204
+ pcm: Float32Array;
205
+ isFinal: boolean;
206
+ }
207
+ /**
208
+ * A native MTP speculative-step event from
209
+ * `eliza_inference_set_verifier_callback`. Token-index domain is the
210
+ * generated-output stream (token 0 = first generated token), matching
211
+ * `RejectedTokenRange`. `rejectedFrom`/`rejectedTo` are -1 when nothing
212
+ * was rejected this step.
213
+ */
214
+ export interface NativeVerifierEvent {
215
+ acceptedTokenIds: number[];
216
+ rejectedFrom: number;
217
+ rejectedTo: number;
218
+ correctedTokenIds: number[];
219
+ }
220
+ /**
221
+ * Typed handle returned by `loadElizaInferenceFfi`. Each method maps
222
+ * 1:1 to a symbol declared in `ffi.h`. Methods that allocate a context
223
+ * return the opaque pointer; methods that consume one take it as the
224
+ * first argument. Failures throw `VoiceLifecycleError` with the
225
+ * structured code derived from the C return value.
226
+ */
227
+ export interface ElizaInferenceFfi {
228
+ /** Library path the binding was loaded from (for diagnostics). */
229
+ readonly libraryPath: string;
230
+ /** ABI version reported by the loaded library. */
231
+ readonly libraryAbiVersion: string;
232
+ /** Create a fresh context anchored at `bundleDir`. */
233
+ create(bundleDir: string): ElizaInferenceContextHandle;
234
+ /** Destroy a previously-created context. Idempotent on already-freed handles. */
235
+ destroy(ctx: ElizaInferenceContextHandle): void;
236
+ /** Map / re-page weights for a region. */
237
+ mmapAcquire(ctx: ElizaInferenceContextHandle, region: ElizaInferenceRegion): void;
238
+ /**
239
+ * Release or evict a voice-only region after the lifecycle leaves
240
+ * voice-on. Implementations may madvise mapped pages or unload the
241
+ * ASR/TTS runtime state entirely; callers must treat the region as
242
+ * unavailable until the next `mmapAcquire`.
243
+ */
244
+ mmapEvict(ctx: ElizaInferenceContextHandle, region: ElizaInferenceRegion): void;
245
+ /**
246
+ * Synchronous TTS forward. Caller provides the output buffer; library
247
+ * fills up to its capacity and returns the number of samples written.
248
+ */
249
+ ttsSynthesize(args: {
250
+ ctx: ElizaInferenceContextHandle;
251
+ text: string;
252
+ speakerPresetId: string | null;
253
+ out: Float32Array;
254
+ }): number;
255
+ /**
256
+ * Synchronous ASR forward. Returns the decoded transcript as a UTF-8
257
+ * string (allocated by the JS side, sized to fit the library's max
258
+ * write).
259
+ */
260
+ asrTranscribe(args: {
261
+ ctx: ElizaInferenceContextHandle;
262
+ pcm: Float32Array;
263
+ sampleRateHz: number;
264
+ maxTextBytes?: number;
265
+ }): string;
266
+ /** True when this build can emit per-word ASR timestamps (v12+). v11 and
267
+ * older report false — callers fall back to the text-only `asrTranscribe`. */
268
+ timedAsrSupported(): boolean;
269
+ /** Transcribe like `asrTranscribe` AND return per-word `[startMs,endMs)`
270
+ * spans (duration-proportional, char-weighted, monotonic — the honest
271
+ * single-model signal; see the v12 ABI changelog). The word texts come from
272
+ * a whitespace split of the transcript, zipped with the native timing. */
273
+ asrTranscribeTimed(args: {
274
+ ctx: ElizaInferenceContextHandle;
275
+ pcm: Float32Array;
276
+ sampleRateHz: number;
277
+ maxTextBytes?: number;
278
+ maxWords?: number;
279
+ }): {
280
+ text: string;
281
+ words: AsrWordTiming[];
282
+ };
283
+ /**
284
+ * True when this build implements streaming TTS (false for the stub /
285
+ * a TTS-disabled build). Callers pick the streaming path vs the batch
286
+ * `ttsSynthesize` off this flag — no probe-and-catch.
287
+ */
288
+ ttsStreamSupported(): boolean;
289
+ /**
290
+ * Chunked synthesis. `onChunk` is invoked for each decoded PCM segment
291
+ * as it arrives, then once more with `isFinal: true` (zero-length
292
+ * tail). Returning `true` from `onChunk` requests cancellation; the
293
+ * call then resolves with `cancelled: true` after the final-chunk
294
+ * callback. Any negative library return is a thrown `VoiceLifecycleError`.
295
+ */
296
+ ttsSynthesizeStream(args: {
297
+ ctx: ElizaInferenceContextHandle;
298
+ text: string;
299
+ speakerPresetId: string | null;
300
+ onChunk: (chunk: TtsStreamChunk) => boolean | undefined;
301
+ }): {
302
+ cancelled: boolean;
303
+ };
304
+ /**
305
+ * Hard-cancel any in-flight TTS forward pass on `ctx` (started on
306
+ * another thread by `ttsSynthesize` / `ttsSynthesizeStream`). The
307
+ * in-flight call returns `ELIZA_ERR_CANCELLED` at the next kernel
308
+ * boundary. Cancelling nothing is not an error.
309
+ */
310
+ cancelTts(ctx: ElizaInferenceContextHandle): void;
311
+ /**
312
+ * Register (or, with `cb: null`, clear) the native MTP verifier
313
+ * callback. The runtime fires `cb` for every speculative accept/reject
314
+ * step from the in-process drafter↔target loop. The returned
315
+ * `JSCallbackHandle` MUST be kept alive for as long as the callback is
316
+ * registered and `.close()`d when it's cleared (or on dispose) — Bun's
317
+ * `JSCallback` is GC'd otherwise and the native side dereferences a
318
+ * dead pointer.
319
+ */
320
+ setVerifierCallback(ctx: ElizaInferenceContextHandle, cb: ((event: NativeVerifierEvent) => void) | null): {
321
+ close(): void;
322
+ };
323
+ /**
324
+ * True when this build exports the OmniVoice reference-encode symbols
325
+ * (`eliza_inference_encode_reference`). The freeze CLI uses this to
326
+ * pre-encode same reference audio into the persisted voice preset;
327
+ * the runtime synthesis path never calls it (it reads pre-encoded
328
+ * tokens from the preset file).
329
+ */
330
+ encodeReferenceSupported?(): boolean;
331
+ /**
332
+ * Run the encode-only half of the TTS pipeline (HuBERT semantic + RVQ
333
+ * codec) on a 24 kHz mono fp32 PCM buffer and return the resulting
334
+ * reference-audio-token tensor `[K=8, ref_T]` as `Int32Array`
335
+ * row-major (`tokens[k*ref_T + t]`). The library allocates and the
336
+ * binding takes care of freeing the native buffer via
337
+ * `eliza_inference_free_tokens` before this returns.
338
+ *
339
+ * The TTS region must have been acquired (`mmapAcquire("tts")`)
340
+ * before the call. `sampleRateHz` must be 24000; the entrypoint does
341
+ * NOT resample, by design — the freeze artifact must be deterministic.
342
+ */
343
+ encodeReference?(args: {
344
+ ctx: ElizaInferenceContextHandle;
345
+ pcm: Float32Array;
346
+ sampleRateHz: number;
347
+ }): {
348
+ K: number;
349
+ refT: number;
350
+ tokens: Int32Array;
351
+ };
352
+ /** True when this build exports and enables the native Silero VAD backend. */
353
+ vadSupported?(): boolean;
354
+ /** Open a native VAD session. The ABI-compatible sample rate is 16 kHz. */
355
+ vadOpen?(args: {
356
+ ctx: ElizaInferenceContextHandle;
357
+ sampleRateHz: number;
358
+ }): NativeVadHandle;
359
+ /** Process one 512-sample fp32 mono window and return P(speech). */
360
+ vadProcess?(args: {
361
+ vad: NativeVadHandle;
362
+ pcm: Float32Array;
363
+ }): number;
364
+ /** Clear native VAD recurrent state at utterance boundaries. */
365
+ vadReset?(vad: NativeVadHandle): void;
366
+ /** Close + free a native VAD session. Idempotent on already-closed handles. */
367
+ vadClose?(vad: NativeVadHandle): void;
368
+ /**
369
+ * True when this build exports and enables the native openWakeWord
370
+ * backend. The JS binding routes wake-word detection exclusively
371
+ * through this surface; when this returns false, the wake-word path
372
+ * throws a structured "runtime not ready" error — no ONNX fallback
373
+ * (AGENTS.md §3, §8).
374
+ */
375
+ wakewordSupported?(): boolean;
376
+ /**
377
+ * Open a native wake-word session. `sampleRateHz` must be 16000;
378
+ * `headName` selects the classifier head inside the bundle's combined
379
+ * wake-word GGUF (e.g. "hey-eliza").
380
+ */
381
+ wakewordOpen?(args: {
382
+ ctx: ElizaInferenceContextHandle;
383
+ sampleRateHz: number;
384
+ headName: string;
385
+ }): NativeWakeWordHandle;
386
+ /**
387
+ * Score one 1280-sample (80 ms @ 16 kHz) fp32 mono frame and return
388
+ * the latest P(wake) in [0, 1]. Early calls before enough context
389
+ * accumulates return 0.
390
+ */
391
+ wakewordScore?(args: {
392
+ wake: NativeWakeWordHandle;
393
+ pcm: Float32Array;
394
+ }): number;
395
+ /** Clear all streaming state (audio tail, mel ring, embedding ring). */
396
+ wakewordReset?(wake: NativeWakeWordHandle): void;
397
+ /** Close + free a native wake-word session. Idempotent on already-closed handles. */
398
+ wakewordClose?(wake: NativeWakeWordHandle): void;
399
+ /** True when this build exports and enables the native WeSpeaker encoder. */
400
+ speakerSupported?(): boolean;
401
+ /**
402
+ * Open a native speaker-encoder session. `ggufPath` may be null to
403
+ * resolve the bundle's `speaker/` dir, or an absolute path to a
404
+ * WeSpeaker GGUF.
405
+ */
406
+ speakerOpen?(args: {
407
+ ctx: ElizaInferenceContextHandle;
408
+ ggufPath: string | null;
409
+ }): NativeSpeakerHandle;
410
+ /**
411
+ * Embed `pcm` (16 kHz mono fp32) into a 256-d L2-normalized speaker
412
+ * embedding. Returns a freshly-allocated `Float32Array` of length 256.
413
+ */
414
+ speakerEmbed?(args: {
415
+ speaker: NativeSpeakerHandle;
416
+ pcm: Float32Array;
417
+ }): Float32Array;
418
+ /** Close + free a native speaker-encoder session. Idempotent on already-closed handles. */
419
+ speakerClose?(speaker: NativeSpeakerHandle): void;
420
+ /** True when this build exports and enables the native pyannote diarizer. */
421
+ diarizSupported?(): boolean;
422
+ /**
423
+ * Open a native diarizer session. `ggufPath` may be null to resolve the
424
+ * bundle's `diariz/` dir, or an absolute path to a pyannote GGUF.
425
+ */
426
+ diarizOpen?(args: {
427
+ ctx: ElizaInferenceContextHandle;
428
+ ggufPath: string | null;
429
+ }): NativeDiarizHandle;
430
+ /**
431
+ * Segment one 80000-sample (5 s @ 16 kHz) mono fp32 window into a
432
+ * per-frame powerset-label sequence. Returns the `Int8Array` of frame
433
+ * labels (293 for pyannote-segmentation-3.0), each in `[0, 7)`.
434
+ */
435
+ diarizSegment?(args: {
436
+ diariz: NativeDiarizHandle;
437
+ pcm: Float32Array;
438
+ }): Int8Array;
439
+ /** Close + free a native diarizer session. Idempotent on already-closed handles. */
440
+ diarizClose?(diariz: NativeDiarizHandle): void;
441
+ /**
442
+ * True when this build has a working streaming ASR decoder (false for
443
+ * the stub / an ASR-disabled build). Callers pick the fused streaming
444
+ * path vs the fused batch interim adapter off this flag — they do not
445
+ * have to open a session and catch `ELIZA_ERR_NOT_IMPLEMENTED`.
446
+ */
447
+ asrStreamSupported(): boolean;
448
+ /** Open a streaming ASR session. The handle is closed via `asrStreamClose`. */
449
+ asrStreamOpen(args: {
450
+ ctx: ElizaInferenceContextHandle;
451
+ sampleRateHz: number;
452
+ }): bigint;
453
+ /** Feed one PCM frame at the session's sample rate. */
454
+ asrStreamFeed(args: {
455
+ stream: bigint;
456
+ pcm: Float32Array;
457
+ }): void;
458
+ /** Read the current running partial transcript (and token ids when available). */
459
+ asrStreamPartial(args: {
460
+ stream: bigint;
461
+ maxTextBytes?: number;
462
+ maxTokens?: number;
463
+ }): {
464
+ partial: string;
465
+ tokens?: number[];
466
+ };
467
+ /** Force-finalize: drain buffered audio, run a final decode, return the final transcript. */
468
+ asrStreamFinish(args: {
469
+ stream: bigint;
470
+ maxTextBytes?: number;
471
+ maxTokens?: number;
472
+ }): {
473
+ partial: string;
474
+ tokens?: number[];
475
+ };
476
+ /** Close + free a streaming ASR session. Idempotent on already-closed handles. */
477
+ asrStreamClose(stream: bigint): void;
478
+ /**
479
+ * True when this build exports the streaming LLM symbols
480
+ * (`eliza_inference_llm_stream_*`). Transitional builds may load
481
+ * without them; the runner uses this to pick between the FFI streaming
482
+ * path.
483
+ */
484
+ llmStreamSupported?(): boolean;
485
+ /**
486
+ * True when this build wires same-file / separate-drafter MTP
487
+ * speculative decoding into the streaming-LLM text path (ABI v8). A v7
488
+ * library returns `false` here (the symbol is absent), so the fused TEXT
489
+ * path can refuse to route through it without a speculative-decode
490
+ * regression. Anti-regression guard — see ABI v8 changelog.
491
+ */
492
+ llmMtpSupported?(): boolean;
493
+ /**
494
+ * True when this build maps + applies KV-cache quant types in the
495
+ * streaming-LLM text path (ABI v8). A v7 library returns `false` (symbol
496
+ * absent); the fused TEXT path refuses it to avoid a silent fallback to
497
+ * f16 KV when a quantized cache was requested.
498
+ */
499
+ llmKvQuantSupported?(): boolean;
500
+ /**
501
+ * Open a streaming-LLM session against `ctx`. Failure throws
502
+ * `VoiceLifecycleError`. Close exactly once via `llmStreamClose`.
503
+ */
504
+ llmStreamOpen?(args: {
505
+ ctx: ElizaInferenceContextHandle;
506
+ config: LlmStreamConfig;
507
+ }): LlmStreamHandle;
508
+ /** Feed a batch of pre-tokenized prompt tokens before the first `next`. */
509
+ llmStreamPrefill?(args: {
510
+ stream: LlmStreamHandle;
511
+ tokens: Int32Array;
512
+ }): void;
513
+ /**
514
+ * Pull the next streaming step. Returns `null` when the runtime declined
515
+ * to emit tokens this call (rare — drafter rejected everything and the
516
+ * verifier had nothing to commit); poll again. `step.done === true` is
517
+ * the final step.
518
+ */
519
+ llmStreamNext?(args: {
520
+ stream: LlmStreamHandle;
521
+ maxTokensPerStep?: number;
522
+ maxTextBytes?: number;
523
+ }): LlmStreamStep;
524
+ /** Cancel in-flight generation; the next `_next` returns CANCELLED. */
525
+ llmStreamCancel?(stream: LlmStreamHandle): void;
526
+ /** Persist the session's slot KV state to disk. */
527
+ llmStreamSaveSlot?(args: {
528
+ stream: LlmStreamHandle;
529
+ filename: string;
530
+ }): void;
531
+ /** Restore a previously-saved slot KV file. Call before the first prefill/next. */
532
+ llmStreamRestoreSlot?(args: {
533
+ stream: LlmStreamHandle;
534
+ filename: string;
535
+ }): void;
536
+ /** Close + free a streaming-LLM session. Idempotent on already-closed handles. */
537
+ llmStreamClose?(stream: LlmStreamHandle): void;
538
+ /**
539
+ * True when this build wires the fused text-embedding path
540
+ * (`eliza_inference_embed`). A v8 library returns false (symbol absent),
541
+ * so the default TEXT_EMBEDDING handler keeps the node-llama-cpp /
542
+ * libllama path.
543
+ */
544
+ embedSupported?(): boolean;
545
+ /**
546
+ * Compute a pooled, L2-normalized sentence embedding for `text` over the
547
+ * bundle's text model. `pooling` selects the strategy (default MEAN — the
548
+ * gte-small convention). Returns a `Float32Array` of length `n_embd`.
549
+ */
550
+ embed?(args: {
551
+ ctx: ElizaInferenceContextHandle;
552
+ text: string;
553
+ pooling?: number;
554
+ }): Float32Array;
555
+ /**
556
+ * True when this build was compiled with vision (`-DELIZA_ENABLE_VISION`)
557
+ * and exports `eliza_inference_describe_image`. A v8 / vision-off library
558
+ * returns false, so the IMAGE_DESCRIPTION handler keeps the libllama mtmd
559
+ * path.
560
+ */
561
+ visionSupported?(): boolean;
562
+ /**
563
+ * Describe `imageBytes` (raw PNG/JPEG/WebP) through the text model's
564
+ * mmproj projector at `mmprojPath`. `prompt` defaults to a generic
565
+ * caption request. Returns the description text.
566
+ */
567
+ describeImage?(args: {
568
+ ctx: ElizaInferenceContextHandle;
569
+ imageBytes: Uint8Array;
570
+ mmprojPath: string;
571
+ prompt?: string;
572
+ maxTextBytes?: number;
573
+ }): string;
574
+ /**
575
+ * True when this build exposes the tokenizer over the loaded text vocab
576
+ * (`eliza_inference_tokenize`). A pre-v9 library returns false, so the
577
+ * desktop fused runtime refuses (libllama is retired — no tokenizer sidecar).
578
+ */
579
+ tokenizeSupported?(): boolean;
580
+ /**
581
+ * Tokenize `text` against the loaded text model's vocab. `addSpecial`
582
+ * (default true) adds BOS/EOS; `parseSpecial` (default false) renders
583
+ * special tokens from the input. Returns the token ids as an `Int32Array`.
584
+ */
585
+ tokenize?(args: {
586
+ ctx: ElizaInferenceContextHandle;
587
+ text: string;
588
+ addSpecial?: boolean;
589
+ parseSpecial?: boolean;
590
+ }): Int32Array;
591
+ /**
592
+ * Detokenize `tokens` back to text against the loaded text model's vocab.
593
+ * `removeSpecial` (default false) strips BOS/EOS; `unparseSpecial`
594
+ * (default false) renders special tokens.
595
+ */
596
+ detokenize?(args: {
597
+ ctx: ElizaInferenceContextHandle;
598
+ tokens: Int32Array;
599
+ removeSpecial?: boolean;
600
+ unparseSpecial?: boolean;
601
+ maxTextBytes?: number;
602
+ }): string;
603
+ /**
604
+ * True when this build wires the fused end-of-turn scorer
605
+ * (`eliza_inference_llm_eot_score`). A v10 library returns false (symbol
606
+ * absent), so the composite EOT classifier uses the heuristic-only signal.
607
+ */
608
+ eotSupported?(): boolean;
609
+ /**
610
+ * Single causal forward pass over `tokens` (a tokenized partial transcript)
611
+ * returning the next-token softmax probability of `targetTokenId` (the
612
+ * end-of-turn marker, e.g. `<|im_end|>`), plus the argmax next token and its
613
+ * probability. Runs on a dedicated scoring context over the loaded text
614
+ * model; KV is cleared per call so scores are independent.
615
+ */
616
+ eotScore?(args: {
617
+ ctx: ElizaInferenceContextHandle;
618
+ tokens: Int32Array;
619
+ targetTokenId: number;
620
+ }): {
621
+ targetProb: number;
622
+ topToken: number;
623
+ topProb: number;
624
+ };
625
+ /**
626
+ * True when this build linked Eliza-1's in-process Kokoro engine
627
+ * (`eliza_inference_kokoro_*`). A v9 library returns false (symbols
628
+ * absent), so the Kokoro FFI runtime refuses rather than falling back to
629
+ * the local-TCP `llama-server` route (forbidden on iOS / Google Play).
630
+ */
631
+ kokoroSupported?(): boolean;
632
+ /**
633
+ * Load the Kokoro GGUF at `ggufPath` and the voice preset `.bin` at
634
+ * `voiceBinPath` (raw fp32 ref_s, `styleDim` inner dim — 256 for v1.0)
635
+ * into `ctx`. Replaces any previously-loaded Kokoro model on the ctx.
636
+ * Throws `VoiceLifecycleError` on a negative return with the C diagnostic.
637
+ */
638
+ kokoroLoad?(args: {
639
+ ctx: ElizaInferenceContextHandle;
640
+ ggufPath: string;
641
+ voiceBinPath: string;
642
+ styleDim?: number;
643
+ }): void;
644
+ /**
645
+ * Synthesize `text` through the loaded Kokoro model+voice at the model's
646
+ * native rate (24 kHz for v1.0). `speed` scales predicted durations
647
+ * (default 1.0). Allocates an output buffer of `maxSamples` fp32 samples,
648
+ * reads back the count the library wrote, and returns that slice.
649
+ */
650
+ kokoroSynthesize?(args: {
651
+ ctx: ElizaInferenceContextHandle;
652
+ text: string;
653
+ speed?: number;
654
+ maxSamples: number;
655
+ }): Float32Array;
656
+ /** The loaded Kokoro model's audio sample rate (24000 for v1.0). */
657
+ kokoroSampleRate?(ctx: ElizaInferenceContextHandle): number;
658
+ /** Best-effort dispose for the binding itself (closes the dlopen handle). */
659
+ close(): void;
660
+ }
661
+ /**
662
+ * Load `libelizainference` at `dylibPath` and bind every symbol
663
+ * declared in `ffi.h`. The returned handle's methods delegate directly
664
+ * to the library; they throw `VoiceLifecycleError` on any negative
665
+ * return value or runtime fault.
666
+ *
667
+ * Throws synchronously (no Promise) when:
668
+ * - the JS runtime is not Bun (no FFI primitive available),
669
+ * - `dlopen` cannot find or open the library,
670
+ * - the library's reported ABI version does not match
671
+ * `ELIZA_INFERENCE_ABI_VERSION`.
672
+ */
673
+ export declare function loadElizaInferenceFfi(dylibPath: string): ElizaInferenceFfi;
674
+ //# sourceMappingURL=ffi-bindings.d.ts.map