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

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 (881) hide show
  1. package/README.md +84 -10
  2. package/dist/actions/generate-media.d.ts.map +1 -0
  3. package/dist/actions/identify-speaker.d.ts.map +1 -0
  4. package/dist/actions/transcription-control.d.ts.map +1 -0
  5. package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
  6. package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
  7. package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
  8. package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
  9. package/dist/adapters/capacitor-llama/index.d.ts +18 -0
  10. package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
  11. package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
  12. package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
  13. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
  14. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
  15. package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
  16. package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
  17. package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
  18. package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
  19. package/dist/adapters/capacitor-llama/types.d.ts +338 -0
  20. package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
  21. package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
  22. package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
  23. package/dist/backends/apple-foundation.d.ts +56 -0
  24. package/dist/backends/apple-foundation.d.ts.map +1 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +39647 -0
  27. package/dist/index.js.map +217 -0
  28. package/{src → dist}/local-inference-routes.d.ts +9 -0
  29. package/dist/local-inference-routes.d.ts.map +1 -0
  30. package/dist/provider.d.ts.map +1 -0
  31. package/{src → dist}/routes/compat-helpers.d.ts +1 -1
  32. package/dist/routes/compat-helpers.d.ts.map +1 -0
  33. package/dist/routes/family-member-route.d.ts.map +1 -0
  34. package/{src → dist}/routes/index.d.ts +1 -0
  35. package/dist/routes/index.d.ts.map +1 -0
  36. package/dist/routes/index.js +42040 -0
  37. package/dist/routes/index.js.map +236 -0
  38. package/{src → dist}/routes/live-diarization-route.d.ts +7 -0
  39. package/dist/routes/live-diarization-route.d.ts.map +1 -0
  40. package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
  41. package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
  42. package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
  43. package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
  44. package/dist/routes/native-pcm-turn-route.d.ts +3 -0
  45. package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
  46. package/dist/routes/transcript-audio-store.d.ts.map +1 -0
  47. package/{src → dist}/routes/transcripts-routes.d.ts +8 -0
  48. package/dist/routes/transcripts-routes.d.ts.map +1 -0
  49. package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
  50. package/dist/routes/voice-models-routes.d.ts.map +1 -0
  51. package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  52. package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
  53. package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  54. package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
  55. package/dist/runtime/embedding-presets.d.ts.map +1 -0
  56. package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
  57. package/{src → dist}/runtime/ensure-local-inference-handler.d.ts +8 -0
  58. package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  59. package/{src → dist}/runtime/index.d.ts +1 -1
  60. package/dist/runtime/index.d.ts.map +1 -0
  61. package/dist/runtime/index.js +38768 -0
  62. package/dist/runtime/index.js.map +217 -0
  63. package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
  64. package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  65. package/{src → dist}/runtime/voice-entity-binding.d.ts +10 -0
  66. package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
  67. package/{src → dist}/services/active-model.d.ts +28 -0
  68. package/dist/services/active-model.d.ts.map +1 -0
  69. package/dist/services/asr-provenance.d.ts +5 -0
  70. package/dist/services/asr-provenance.d.ts.map +1 -0
  71. package/{src → dist}/services/assignments.d.ts +16 -3
  72. package/dist/services/assignments.d.ts.map +1 -0
  73. package/dist/services/backend-selector.d.ts +55 -0
  74. package/dist/services/backend-selector.d.ts.map +1 -0
  75. package/{src → dist}/services/backend.d.ts +110 -16
  76. package/dist/services/backend.d.ts.map +1 -0
  77. package/{src → dist}/services/bionic-host-loader.d.ts +21 -0
  78. package/dist/services/bionic-host-loader.d.ts.map +1 -0
  79. package/dist/services/bundled-models.d.ts.map +1 -0
  80. package/dist/services/cache-bridge.d.ts.map +1 -0
  81. package/dist/services/catalog.d.ts +10 -0
  82. package/dist/services/catalog.d.ts.map +1 -0
  83. package/dist/services/checkpoint-client.d.ts.map +1 -0
  84. package/dist/services/checkpoint-manager.d.ts +217 -0
  85. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  86. package/dist/services/cloud-fallback.d.ts.map +1 -0
  87. package/dist/services/context-fit.d.ts +36 -0
  88. package/dist/services/context-fit.d.ts.map +1 -0
  89. package/dist/services/conversation-registry.d.ts.map +1 -0
  90. package/{src → dist}/services/desktop-fused-ffi-backend-runtime.d.ts +22 -6
  91. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  92. package/dist/services/device-bridge.d.ts.map +1 -0
  93. package/dist/services/device-resource-metrics.d.ts.map +1 -0
  94. package/{src → dist}/services/device-tier.d.ts +19 -1
  95. package/dist/services/device-tier.d.ts.map +1 -0
  96. package/{src → dist}/services/downloader.d.ts +16 -4
  97. package/dist/services/downloader.d.ts.map +1 -0
  98. package/{src → dist}/services/engine.d.ts +43 -4
  99. package/dist/services/engine.d.ts.map +1 -0
  100. package/dist/services/ensure-local-artifacts.d.ts +82 -0
  101. package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
  102. package/dist/services/external-scanner.d.ts.map +1 -0
  103. package/dist/services/ffi-llm-mock.d.ts +90 -0
  104. package/dist/services/ffi-llm-mock.d.ts.map +1 -0
  105. package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
  106. package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
  107. package/{src → dist}/services/ffi-streaming-backend.d.ts +28 -7
  108. package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
  109. package/{src → dist}/services/ffi-streaming-runner.d.ts +24 -0
  110. package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
  111. package/dist/services/gpu-autotune.d.ts +150 -0
  112. package/dist/services/gpu-autotune.d.ts.map +1 -0
  113. package/dist/services/gpu-detect.d.ts.map +1 -0
  114. package/dist/services/handler-registry.d.ts.map +1 -0
  115. package/dist/services/hardware.d.ts.map +1 -0
  116. package/dist/services/image-description-runtime.d.ts.map +1 -0
  117. package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  118. package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
  119. package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  120. package/dist/services/imagegen/errors.d.ts.map +1 -0
  121. package/dist/services/imagegen/index.d.ts.map +1 -0
  122. package/dist/services/imagegen/mflux.d.ts.map +1 -0
  123. package/{src → dist}/services/imagegen/sd-cpp.d.ts +1 -0
  124. package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
  125. package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  126. package/dist/services/imagegen/types.d.ts.map +1 -0
  127. package/{src → dist}/services/index.d.ts +3 -1
  128. package/dist/services/index.d.ts.map +1 -0
  129. package/dist/services/index.js +39453 -0
  130. package/dist/services/index.js.map +227 -0
  131. package/dist/services/inference-capabilities.d.ts.map +1 -0
  132. package/dist/services/inference-telemetry.d.ts.map +1 -0
  133. package/dist/services/ios-llama-streaming.d.ts +119 -0
  134. package/dist/services/ios-llama-streaming.d.ts.map +1 -0
  135. package/dist/services/kv-spill.d.ts.map +1 -0
  136. package/dist/services/latency-trace.d.ts.map +1 -0
  137. package/dist/services/lib-target.d.ts +55 -0
  138. package/dist/services/lib-target.d.ts.map +1 -0
  139. package/dist/services/live-signals.d.ts +86 -0
  140. package/dist/services/live-signals.d.ts.map +1 -0
  141. package/dist/services/llama-server-metrics.d.ts +114 -0
  142. package/dist/services/llama-server-metrics.d.ts.map +1 -0
  143. package/dist/services/llm-streaming-binding.d.ts.map +1 -0
  144. package/dist/services/load-args.d.ts.map +1 -0
  145. package/dist/services/manifest/index.d.ts +4 -0
  146. package/dist/services/manifest/index.d.ts.map +1 -0
  147. package/{src → dist}/services/manifest/schema.d.ts +196 -6
  148. package/dist/services/manifest/schema.d.ts.map +1 -0
  149. package/{src → dist}/services/manifest/types.d.ts +3 -1
  150. package/dist/services/manifest/types.d.ts.map +1 -0
  151. package/dist/services/manifest/validator.d.ts.map +1 -0
  152. package/{src → dist}/services/memory-arbiter.d.ts +33 -3
  153. package/dist/services/memory-arbiter.d.ts.map +1 -0
  154. package/dist/services/memory-benchmark.d.ts +76 -0
  155. package/dist/services/memory-benchmark.d.ts.map +1 -0
  156. package/{src → dist}/services/memory-monitor.d.ts +6 -0
  157. package/dist/services/memory-monitor.d.ts.map +1 -0
  158. package/dist/services/memory-pressure.d.ts.map +1 -0
  159. package/dist/services/mtp-doctor.d.ts.map +1 -0
  160. package/dist/services/network-policy.d.ts.map +1 -0
  161. package/dist/services/paths.d.ts.map +1 -0
  162. package/dist/services/planner-skeleton.d.ts.map +1 -0
  163. package/dist/services/providers.d.ts.map +1 -0
  164. package/dist/services/ram-budget.d.ts.map +1 -0
  165. package/dist/services/readiness.d.ts.map +1 -0
  166. package/dist/services/recommendation.d.ts.map +1 -0
  167. package/{src → dist}/services/registry.d.ts +11 -13
  168. package/dist/services/registry.d.ts.map +1 -0
  169. package/{src → dist}/services/router-handler.d.ts +2 -2
  170. package/dist/services/router-handler.d.ts.map +1 -0
  171. package/{src → dist}/services/routing-policy.d.ts +32 -9
  172. package/dist/services/routing-policy.d.ts.map +1 -0
  173. package/dist/services/routing-preferences.d.ts.map +1 -0
  174. package/dist/services/runtime-target.d.ts.map +1 -0
  175. package/{src → dist}/services/service.d.ts +1 -1
  176. package/dist/services/service.d.ts.map +1 -0
  177. package/dist/services/session-pool.d.ts.map +1 -0
  178. package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
  179. package/dist/services/structured-output/index.d.ts +2 -0
  180. package/dist/services/structured-output/index.d.ts.map +1 -0
  181. package/dist/services/structured-output.d.ts.map +1 -0
  182. package/dist/services/system-memory.d.ts.map +1 -0
  183. package/{src → dist}/services/types.d.ts +1 -1
  184. package/dist/services/types.d.ts.map +1 -0
  185. package/dist/services/verify-on-device.d.ts.map +1 -0
  186. package/dist/services/verify.d.ts.map +1 -0
  187. package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
  188. package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
  189. package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
  190. package/dist/services/vision/hash.d.ts.map +1 -0
  191. package/{src → dist}/services/vision/index.d.ts +1 -1
  192. package/dist/services/vision/index.d.ts.map +1 -0
  193. package/dist/services/vision/llama-server.d.ts.map +1 -0
  194. package/{src → dist}/services/vision/types.d.ts +13 -4
  195. package/dist/services/vision/types.d.ts.map +1 -0
  196. package/dist/services/vision/vast-fallback.d.ts.map +1 -0
  197. package/{src → dist}/services/vision-embedding-cache.d.ts +1 -1
  198. package/dist/services/vision-embedding-cache.d.ts.map +1 -0
  199. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
  200. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
  201. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
  202. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
  203. package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
  204. package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
  205. package/{src → dist}/services/voice/audio-frame-consumer.d.ts +82 -0
  206. package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
  207. package/dist/services/voice/barge-in.d.ts.map +1 -0
  208. package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
  209. package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
  210. package/dist/services/voice/checkpoint-policy.d.ts +178 -0
  211. package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
  212. package/dist/services/voice/corpus-augment.d.ts +111 -0
  213. package/dist/services/voice/corpus-augment.d.ts.map +1 -0
  214. package/dist/services/voice/corpus-generator.d.ts +134 -0
  215. package/dist/services/voice/corpus-generator.d.ts.map +1 -0
  216. package/dist/services/voice/diarization-error-rate.d.ts +40 -0
  217. package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
  218. package/dist/services/voice/e2e-harness.d.ts +297 -0
  219. package/dist/services/voice/e2e-harness.d.ts.map +1 -0
  220. package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
  221. package/dist/services/voice/echo-delay.d.ts +67 -0
  222. package/dist/services/voice/echo-delay.d.ts.map +1 -0
  223. package/dist/services/voice/echo-metrics.d.ts +7 -0
  224. package/dist/services/voice/echo-metrics.d.ts.map +1 -0
  225. package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
  226. package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
  227. package/{src → dist}/services/voice/eliza1-eot-scorer.d.ts +8 -8
  228. package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  229. package/dist/services/voice/embedding-server.d.ts +37 -0
  230. package/dist/services/voice/embedding-server.d.ts.map +1 -0
  231. package/{src → dist}/services/voice/embedding.d.ts +2 -3
  232. package/dist/services/voice/embedding.d.ts.map +1 -0
  233. package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
  234. package/{src → dist}/services/voice/engine-bridge.d.ts +8 -5
  235. package/dist/services/voice/engine-bridge.d.ts.map +1 -0
  236. package/{src → dist}/services/voice/eot-classifier-ggml.d.ts +22 -22
  237. package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  238. package/{src → dist}/services/voice/eot-classifier.d.ts +9 -12
  239. package/dist/services/voice/eot-classifier.d.ts.map +1 -0
  240. package/{src → dist}/services/voice/errors.d.ts +1 -1
  241. package/dist/services/voice/errors.d.ts.map +1 -0
  242. package/{src → dist}/services/voice/expressive-tags.d.ts +5 -5
  243. package/dist/services/voice/expressive-tags.d.ts.map +1 -0
  244. package/{src → dist}/services/voice/ffi-bindings.d.ts +26 -4
  245. package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
  246. package/dist/services/voice/first-line-cache.d.ts.map +1 -0
  247. package/{src → dist}/services/voice/fused-eot-scorer.d.ts +6 -6
  248. package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
  249. package/{src → dist}/services/voice/index.d.ts +8 -3
  250. package/dist/services/voice/index.d.ts.map +1 -0
  251. package/dist/services/voice/kokoro/index.d.ts +24 -0
  252. package/dist/services/voice/kokoro/index.d.ts.map +1 -0
  253. package/{src → dist}/services/voice/kokoro/kokoro-backend.d.ts +15 -0
  254. package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  255. package/{src → dist}/services/voice/kokoro/kokoro-engine-discovery.d.ts +1 -1
  256. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  257. package/{src → dist}/services/voice/kokoro/kokoro-ffi-runtime.d.ts +3 -3
  258. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  259. package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  260. package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
  261. package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
  262. package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  263. package/{src → dist}/services/voice/kokoro/pick-runtime.d.ts +1 -1
  264. package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  265. package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
  266. package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  267. package/dist/services/voice/kokoro/types.d.ts.map +1 -0
  268. package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  269. package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
  270. package/dist/services/voice/lifecycle.d.ts.map +1 -0
  271. package/dist/services/voice/live-diarization-session.d.ts +196 -0
  272. package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
  273. package/dist/services/voice/metric-math.d.ts +10 -0
  274. package/dist/services/voice/metric-math.d.ts.map +1 -0
  275. package/{src → dist}/services/voice/mic-source.d.ts +1 -1
  276. package/dist/services/voice/mic-source.d.ts.map +1 -0
  277. package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
  278. package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
  279. package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
  280. package/dist/services/voice/optimistic-rollback.d.ts +151 -0
  281. package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
  282. package/{src → dist}/services/voice/partial-stabilizer.d.ts +1 -1
  283. package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
  284. package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  285. package/dist/services/voice/phrase-cache.d.ts.map +1 -0
  286. package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
  287. package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
  288. package/dist/services/voice/pipeline.d.ts.map +1 -0
  289. package/dist/services/voice/prefill-client.d.ts.map +1 -0
  290. package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  291. package/dist/services/voice/profile-store.d.ts.map +1 -0
  292. package/dist/services/voice/ring-buffer.d.ts.map +1 -0
  293. package/dist/services/voice/rollback-queue.d.ts.map +1 -0
  294. package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  295. package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  296. package/dist/services/voice/scheduler.d.ts.map +1 -0
  297. package/dist/services/voice/self-voice-imprint.d.ts +33 -0
  298. package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
  299. package/{src → dist}/services/voice/shared-resources.d.ts +14 -0
  300. package/dist/services/voice/shared-resources.d.ts.map +1 -0
  301. package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  302. package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  303. package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
  304. package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  305. package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  306. package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
  307. package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
  308. package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
  309. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
  310. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
  311. package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
  312. package/{src → dist}/services/voice/transcriber.d.ts +4 -4
  313. package/dist/services/voice/transcriber.d.ts.map +1 -0
  314. package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
  315. package/{src → dist}/services/voice/transcript-service.d.ts +20 -1
  316. package/dist/services/voice/transcript-service.d.ts.map +1 -0
  317. package/{src → dist}/services/voice/transcript-store.d.ts +12 -1
  318. package/dist/services/voice/transcript-store.d.ts.map +1 -0
  319. package/dist/services/voice/turn-controller.d.ts.map +1 -0
  320. package/{src → dist}/services/voice/types.d.ts +6 -6
  321. package/dist/services/voice/types.d.ts.map +1 -0
  322. package/{src → dist}/services/voice/vad.d.ts +6 -5
  323. package/dist/services/voice/vad.d.ts.map +1 -0
  324. package/dist/services/voice/voice-budget.d.ts.map +1 -0
  325. package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  326. package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
  327. package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
  328. package/{src → dist}/services/voice/voice-preset-format.d.ts +2 -2
  329. package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
  330. package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
  331. package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
  332. package/dist/services/voice/voice-scenario.d.ts +131 -0
  333. package/dist/services/voice/voice-scenario.d.ts.map +1 -0
  334. package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
  335. package/dist/services/voice/voice-workbench-report.d.ts +117 -0
  336. package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
  337. package/{src → dist}/services/voice/wake-word-ggml.d.ts +8 -9
  338. package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
  339. package/dist/services/voice/wake-word.d.ts.map +1 -0
  340. package/dist/services/voice/wav-codec.d.ts +11 -0
  341. package/dist/services/voice/wav-codec.d.ts.map +1 -0
  342. package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
  343. package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
  344. package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
  345. package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
  346. package/dist/services/voice/workbench-logic-services.d.ts +36 -0
  347. package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
  348. package/dist/services/voice/workbench-real-services.d.ts +17 -0
  349. package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
  350. package/dist/services/voice/workbench-scenarios.d.ts +24 -0
  351. package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
  352. package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  353. package/dist/services/voice-model-updater.d.ts.map +1 -0
  354. package/dist/services/voice-prewarm.d.ts.map +1 -0
  355. package/dist/voice-workbench.d.ts +18 -0
  356. package/dist/voice-workbench.d.ts.map +1 -0
  357. package/dist/voice-workbench.js +5259 -0
  358. package/dist/voice-workbench.js.map +34 -0
  359. package/package.json +28 -9
  360. package/registry-entry.json +137 -0
  361. package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -0
  362. package/src/adapters/capacitor-llama/environment.ts +1 -1
  363. package/src/adapters/capacitor-llama/index.ts +28 -4
  364. package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -0
  365. package/src/adapters/capacitor-llama/text-streaming.ts +2 -2
  366. package/src/adapters/capacitor-llama/voice-turn.ts +178 -0
  367. package/src/backends/apple-foundation.ts +1 -1
  368. package/src/local-inference-routes.test.ts +57 -11
  369. package/src/local-inference-routes.ts +90 -8
  370. package/src/provider.ts +32 -3
  371. package/src/routes/compat-helpers.ts +2 -1
  372. package/src/routes/index.ts +1 -0
  373. package/src/routes/live-diarization-route.test.ts +134 -0
  374. package/src/routes/live-diarization-route.ts +79 -3
  375. package/src/routes/local-inference-asr-route.test.ts +43 -2
  376. package/src/routes/local-inference-asr-route.ts +7 -4
  377. package/src/routes/local-inference-asr-transcribe.test.ts +4 -4
  378. package/src/routes/local-inference-asr-transcribe.ts +1 -1
  379. package/src/routes/local-inference-compat-routes.test.ts +3 -3
  380. package/src/routes/local-inference-compat-routes.ts +23 -56
  381. package/src/routes/native-pcm-turn-route.test.ts +136 -0
  382. package/src/routes/native-pcm-turn-route.ts +121 -0
  383. package/src/routes/transcripts-routes.test.ts +51 -0
  384. package/src/routes/transcripts-routes.ts +35 -3
  385. package/src/runtime/bionic-wire-encoding.test.ts +147 -0
  386. package/src/runtime/ensure-local-inference-handler.test.ts +203 -5
  387. package/src/runtime/ensure-local-inference-handler.ts +203 -11
  388. package/src/runtime/index.ts +4 -1
  389. package/src/runtime/mobile-local-inference-gate.test.ts +85 -2
  390. package/src/runtime/mobile-local-inference-gate.ts +60 -5
  391. package/src/runtime/voice-entity-binding.transcript.test.ts +29 -0
  392. package/src/runtime/voice-entity-binding.ts +46 -6
  393. package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
  394. package/src/services/README.md +2 -2
  395. package/src/services/__tests__/backend-selector.precedence.test.ts +333 -0
  396. package/src/services/active-model-context-fit.test.ts +125 -0
  397. package/src/services/active-model.ts +211 -8
  398. package/src/services/asr-provenance.ts +68 -0
  399. package/src/services/assignment-validation.test.ts +118 -0
  400. package/src/services/assignments.test.ts +26 -0
  401. package/src/services/assignments.ts +52 -4
  402. package/src/services/backend.test.ts +84 -0
  403. package/src/services/backend.ts +198 -19
  404. package/src/services/bionic-host-loader.test.ts +94 -1
  405. package/src/services/bionic-host-loader.ts +72 -0
  406. package/src/services/cache-bridge.test.ts +7 -7
  407. package/src/services/catalog.test.ts +32 -11
  408. package/src/services/catalog.ts +6 -0
  409. package/src/services/cloud-fallback.ts +1 -1
  410. package/src/services/context-fit.test.ts +121 -0
  411. package/src/services/context-fit.ts +113 -0
  412. package/src/services/desktop-fused-ffi-backend-runtime.ts +99 -7
  413. package/src/services/device-tier.test.ts +89 -2
  414. package/src/services/device-tier.ts +103 -11
  415. package/src/services/downloader.test.ts +199 -58
  416. package/src/services/downloader.ts +141 -27
  417. package/src/services/engine-direct-bundle.test.ts +38 -6
  418. package/src/services/engine.ts +291 -104
  419. package/src/services/ensure-local-artifacts.ts +1 -1
  420. package/src/services/ffi-llm-streaming-abi.ts +6 -3
  421. package/src/services/ffi-streaming-backend.ts +44 -8
  422. package/src/services/ffi-streaming-runner.test.ts +163 -3
  423. package/src/services/ffi-streaming-runner.ts +54 -1
  424. package/src/services/ffi-unload-ordering.test.ts +5 -1
  425. package/src/services/fused-eliza1-no-regression.test.ts +144 -0
  426. package/src/services/hardware.test.ts +7 -2
  427. package/src/services/hardware.ts +28 -0
  428. package/src/services/imagegen/backend-selector.test.ts +190 -0
  429. package/src/services/imagegen/sd-cpp.ts +6 -9
  430. package/src/services/index.ts +18 -0
  431. package/src/services/ios-llama-streaming.ts +1 -1
  432. package/src/services/kv-spill.ts +6 -5
  433. package/src/services/lib-target.test.ts +145 -0
  434. package/src/services/lib-target.ts +102 -0
  435. package/src/services/live-signals.test.ts +132 -0
  436. package/src/services/live-signals.ts +177 -0
  437. package/src/services/llama-server-metrics.test.ts +168 -0
  438. package/src/services/manifest/eliza-1.manifest.v1.json +84 -2
  439. package/src/services/manifest/index.ts +6 -0
  440. package/src/services/manifest/manifest.test.ts +156 -54
  441. package/src/services/manifest/schema.ts +160 -52
  442. package/src/services/manifest/types.ts +6 -0
  443. package/src/services/manifest/validator.ts +91 -25
  444. package/src/services/memory-arbiter.test.ts +139 -0
  445. package/src/services/memory-arbiter.ts +81 -15
  446. package/src/services/memory-benchmark.test.ts +91 -0
  447. package/src/services/memory-benchmark.ts +354 -0
  448. package/src/services/memory-monitor.test.ts +24 -0
  449. package/src/services/memory-monitor.ts +12 -0
  450. package/src/services/mtp-doctor.ts +10 -2
  451. package/src/services/network-policy.ts +5 -5
  452. package/src/services/ram-budget-cache.test.ts +2 -1
  453. package/src/services/ram-budget.ts +0 -0
  454. package/src/services/recommendation.test.ts +216 -0
  455. package/src/services/registry.ts +25 -19
  456. package/src/services/required-kernels-gate.test.ts +64 -0
  457. package/src/services/router-handler.ts +43 -24
  458. package/src/services/routing-policy.test.ts +211 -23
  459. package/src/services/routing-policy.ts +92 -22
  460. package/src/services/service.test.ts +3 -3
  461. package/src/services/service.ts +22 -7
  462. package/src/services/transcription-priority.test.ts +2 -2
  463. package/src/services/types.ts +4 -0
  464. package/src/services/verify-on-device.test.ts +2 -2
  465. package/src/services/vision/hash.ts +1 -1
  466. package/src/services/vision/index.ts +2 -2
  467. package/src/services/vision/llama-server.ts +1 -1
  468. package/src/services/vision/types.ts +13 -4
  469. package/src/services/vision-embedding-cache.ts +1 -1
  470. package/src/services/voice/VOICE_WORKBENCH.md +71 -26
  471. package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
  472. package/src/services/voice/__test-helpers__/synthetic-speech.ts +72 -2
  473. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +29 -29
  474. package/src/services/voice/__tests__/streaming-asr.test.ts +1 -1
  475. package/src/services/voice/acoustic-speaker-attribution.test.ts +165 -0
  476. package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
  477. package/src/services/voice/asr-timed.real.test.ts +6 -8
  478. package/src/services/voice/audio-frame-consumer.test.ts +327 -1
  479. package/src/services/voice/audio-frame-consumer.ts +165 -5
  480. package/src/services/voice/barge-in.ts +2 -3
  481. package/src/services/voice/corpus-augment.test.ts +276 -0
  482. package/src/services/voice/corpus-augment.ts +451 -0
  483. package/src/services/voice/corpus-generator.test.ts +201 -0
  484. package/src/services/voice/corpus-generator.ts +413 -0
  485. package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
  486. package/src/services/voice/diarization-error-rate.test.ts +100 -0
  487. package/src/services/voice/diarization-error-rate.ts +249 -0
  488. package/src/services/voice/e2e-harness.der.test.ts +94 -0
  489. package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
  490. package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
  491. package/src/services/voice/e2e-harness.test.ts +2 -2
  492. package/src/services/voice/e2e-harness.ts +175 -16
  493. package/src/services/voice/echo-delay.test.ts +118 -0
  494. package/src/services/voice/echo-delay.ts +135 -0
  495. package/src/services/voice/echo-metrics.test.ts +17 -0
  496. package/src/services/voice/echo-metrics.ts +20 -0
  497. package/src/services/voice/echo-reference-buffer.test.ts +86 -0
  498. package/src/services/voice/echo-reference-buffer.ts +165 -0
  499. package/src/services/voice/eliza1-eot-scorer.ts +22 -22
  500. package/src/services/voice/embedding.ts +2 -3
  501. package/src/services/voice/engine-bridge-transcript-join.test.ts +278 -0
  502. package/src/services/voice/engine-bridge.ts +151 -110
  503. package/src/services/voice/eot-classifier-ggml.ts +42 -39
  504. package/src/services/voice/eot-classifier.test.ts +98 -0
  505. package/src/services/voice/eot-classifier.ts +11 -122
  506. package/src/services/voice/errors.ts +2 -0
  507. package/src/services/voice/expressive-tags.asr.test.ts +77 -0
  508. package/src/services/voice/expressive-tags.test.ts +102 -0
  509. package/src/services/voice/expressive-tags.ts +8 -8
  510. package/src/services/voice/ffi-bindings.test.ts +10 -3
  511. package/src/services/voice/ffi-bindings.ts +177 -15
  512. package/src/services/voice/fused-eot-scorer.ts +17 -13
  513. package/src/services/voice/index.ts +33 -12
  514. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +112 -1
  515. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +88 -3
  516. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +37 -201
  517. package/src/services/voice/kokoro/kokoro-backend.ts +16 -0
  518. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +1 -1
  519. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +3 -3
  520. package/src/services/voice/kokoro/pick-runtime.ts +1 -1
  521. package/src/services/voice/kokoro/runtime-selection.ts +28 -201
  522. package/src/services/voice/live-diarization-session.echo.test.ts +232 -0
  523. package/src/services/voice/live-diarization-session.ts +335 -2
  524. package/src/services/voice/metric-math.test.ts +61 -0
  525. package/src/services/voice/metric-math.ts +25 -0
  526. package/src/services/voice/mic-source.ts +1 -1
  527. package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
  528. package/src/services/voice/nlms-echo-canceller.ts +317 -0
  529. package/src/services/voice/optimistic-policy.power-source.test.ts +36 -0
  530. package/src/services/voice/partial-stabilizer.ts +1 -1
  531. package/src/services/voice/pipeline.ts +3 -4
  532. package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
  533. package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
  534. package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
  535. package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
  536. package/src/services/voice/self-voice-imprint.test.ts +59 -0
  537. package/src/services/voice/self-voice-imprint.ts +102 -0
  538. package/src/services/voice/shared-resources.ts +23 -0
  539. package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
  540. package/src/services/voice/speaker/attribution-pipeline.ts +85 -22
  541. package/src/services/voice/speaker/encoder-ggml.test.ts +59 -0
  542. package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
  543. package/src/services/voice/transcriber.ts +4 -4
  544. package/src/services/voice/transcript-service.test.ts +58 -0
  545. package/src/services/voice/transcript-service.ts +64 -0
  546. package/src/services/voice/transcript-store.test.ts +36 -0
  547. package/src/services/voice/transcript-store.ts +32 -0
  548. package/src/services/voice/types.ts +7 -7
  549. package/src/services/voice/vad.test.ts +33 -15
  550. package/src/services/voice/vad.ts +25 -20
  551. package/src/services/voice/voice-budget.test.ts +0 -3
  552. package/src/services/voice/voice-budget.ts +6 -6
  553. package/src/services/voice/voice-duet.test.ts +1 -1
  554. package/src/services/voice/voice-hardening.fuzz.test.ts +116 -0
  555. package/src/services/voice/voice-preload-predictor.test.ts +130 -0
  556. package/src/services/voice/voice-preload-predictor.ts +113 -0
  557. package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
  558. package/src/services/voice/voice-preset-format.test.ts +75 -0
  559. package/src/services/voice/voice-preset-format.ts +17 -4
  560. package/src/services/voice/voice-scenario.test.ts +159 -0
  561. package/src/services/voice/voice-scenario.ts +133 -7
  562. package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -0
  563. package/src/services/voice/voice-workbench-report.ts +58 -17
  564. package/src/services/voice/wake-word-ggml.ts +12 -13
  565. package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
  566. package/src/services/voice/wav-codec.test.ts +32 -0
  567. package/src/services/voice/wav-codec.ts +101 -0
  568. package/src/services/voice/workbench-entrypoint.test.ts +55 -0
  569. package/src/services/voice/workbench-entrypoint.ts +88 -0
  570. package/src/services/voice/workbench-headless-runner.test.ts +162 -0
  571. package/src/services/voice/workbench-headless-runner.ts +396 -0
  572. package/src/services/voice/workbench-logic-services.test.ts +225 -0
  573. package/src/services/voice/workbench-logic-services.ts +184 -0
  574. package/src/services/voice/workbench-real-services.ts +629 -0
  575. package/src/services/voice/workbench-scenarios.ts +407 -0
  576. package/src/services/voice-prewarm.ts +1 -1
  577. package/src/voice-workbench.ts +71 -0
  578. package/src/actions/generate-media.d.ts.map +0 -1
  579. package/src/actions/identify-speaker.d.ts.map +0 -1
  580. package/src/actions/transcription-control.d.ts.map +0 -1
  581. package/src/index.d.ts.map +0 -1
  582. package/src/local-inference-routes.d.ts.map +0 -1
  583. package/src/provider.d.ts.map +0 -1
  584. package/src/routes/compat-helpers.d.ts.map +0 -1
  585. package/src/routes/family-member-route.d.ts.map +0 -1
  586. package/src/routes/index.d.ts.map +0 -1
  587. package/src/routes/live-diarization-route.d.ts.map +0 -1
  588. package/src/routes/local-inference-asr-route.d.ts.map +0 -1
  589. package/src/routes/local-inference-asr-transcribe.d.ts.map +0 -1
  590. package/src/routes/local-inference-compat-routes.d.ts.map +0 -1
  591. package/src/routes/local-inference-tts-route.d.ts.map +0 -1
  592. package/src/routes/transcript-audio-store.d.ts.map +0 -1
  593. package/src/routes/transcripts-routes.d.ts.map +0 -1
  594. package/src/routes/voice-first-run-routes.d.ts.map +0 -1
  595. package/src/routes/voice-models-routes.d.ts.map +0 -1
  596. package/src/routes/voice-profile-plugin-routes.d.ts.map +0 -1
  597. package/src/routes/voice-profiles-management-routes.d.ts.map +0 -1
  598. package/src/routes/voice-speaker-profile-routes.d.ts.map +0 -1
  599. package/src/runtime/embedding-manager-support.d.ts.map +0 -1
  600. package/src/runtime/embedding-presets.d.ts.map +0 -1
  601. package/src/runtime/embedding-warmup-policy.d.ts.map +0 -1
  602. package/src/runtime/ensure-local-inference-handler.d.ts.map +0 -1
  603. package/src/runtime/index.d.ts.map +0 -1
  604. package/src/runtime/mobile-local-inference-gate.d.ts +0 -31
  605. package/src/runtime/mobile-local-inference-gate.d.ts.map +0 -1
  606. package/src/runtime/voice-entity-binding.d.ts.map +0 -1
  607. package/src/services/active-model.d.ts.map +0 -1
  608. package/src/services/assignments.d.ts.map +0 -1
  609. package/src/services/backend.d.ts.map +0 -1
  610. package/src/services/bionic-host-loader.d.ts.map +0 -1
  611. package/src/services/bundled-models.d.ts.map +0 -1
  612. package/src/services/cache-bridge.d.ts.map +0 -1
  613. package/src/services/catalog.d.ts +0 -10
  614. package/src/services/catalog.d.ts.map +0 -1
  615. package/src/services/checkpoint-client.d.ts.map +0 -1
  616. package/src/services/cloud-fallback.d.ts.map +0 -1
  617. package/src/services/conversation-registry.d.ts.map +0 -1
  618. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +0 -1
  619. package/src/services/device-bridge.d.ts.map +0 -1
  620. package/src/services/device-resource-metrics.d.ts.map +0 -1
  621. package/src/services/device-tier.d.ts.map +0 -1
  622. package/src/services/downloader.d.ts.map +0 -1
  623. package/src/services/engine.d.ts.map +0 -1
  624. package/src/services/external-scanner.d.ts.map +0 -1
  625. package/src/services/ffi-streaming-backend.d.ts.map +0 -1
  626. package/src/services/ffi-streaming-runner.d.ts.map +0 -1
  627. package/src/services/gpu-detect.d.ts.map +0 -1
  628. package/src/services/handler-registry.d.ts.map +0 -1
  629. package/src/services/hardware.d.ts.map +0 -1
  630. package/src/services/hf-search.d.ts +0 -26
  631. package/src/services/hf-search.d.ts.map +0 -1
  632. package/src/services/hf-search.test.ts +0 -69
  633. package/src/services/hf-search.ts +0 -420
  634. package/src/services/image-description-runtime.d.ts.map +0 -1
  635. package/src/services/imagegen/aosp-unavailable.d.ts.map +0 -1
  636. package/src/services/imagegen/backend-selector.d.ts.map +0 -1
  637. package/src/services/imagegen/coreml-unavailable.d.ts.map +0 -1
  638. package/src/services/imagegen/errors.d.ts.map +0 -1
  639. package/src/services/imagegen/index.d.ts.map +0 -1
  640. package/src/services/imagegen/mflux.d.ts.map +0 -1
  641. package/src/services/imagegen/sd-cpp.d.ts.map +0 -1
  642. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +0 -1
  643. package/src/services/imagegen/types.d.ts.map +0 -1
  644. package/src/services/index.d.ts.map +0 -1
  645. package/src/services/inference-capabilities.d.ts.map +0 -1
  646. package/src/services/inference-telemetry.d.ts.map +0 -1
  647. package/src/services/kv-spill.d.ts.map +0 -1
  648. package/src/services/latency-trace.d.ts.map +0 -1
  649. package/src/services/llm-streaming-binding.d.ts.map +0 -1
  650. package/src/services/load-args.d.ts.map +0 -1
  651. package/src/services/manifest/index.d.ts +0 -4
  652. package/src/services/manifest/index.d.ts.map +0 -1
  653. package/src/services/manifest/schema.d.ts.map +0 -1
  654. package/src/services/manifest/types.d.ts.map +0 -1
  655. package/src/services/manifest/validator.d.ts.map +0 -1
  656. package/src/services/memory-arbiter.d.ts.map +0 -1
  657. package/src/services/memory-monitor.d.ts.map +0 -1
  658. package/src/services/memory-pressure.d.ts.map +0 -1
  659. package/src/services/mtp-doctor.d.ts.map +0 -1
  660. package/src/services/network-policy.d.ts.map +0 -1
  661. package/src/services/paths.d.ts.map +0 -1
  662. package/src/services/planner-skeleton.d.ts.map +0 -1
  663. package/src/services/providers.d.ts.map +0 -1
  664. package/src/services/ram-budget.d.ts.map +0 -1
  665. package/src/services/readiness.d.ts.map +0 -1
  666. package/src/services/recommendation.d.ts.map +0 -1
  667. package/src/services/registry.d.ts.map +0 -1
  668. package/src/services/router-handler.d.ts.map +0 -1
  669. package/src/services/routing-policy.d.ts.map +0 -1
  670. package/src/services/routing-preferences.d.ts.map +0 -1
  671. package/src/services/runtime-target.d.ts.map +0 -1
  672. package/src/services/service.d.ts.map +0 -1
  673. package/src/services/session-pool.d.ts.map +0 -1
  674. package/src/services/structured-output/deterministic-repair.d.ts.map +0 -1
  675. package/src/services/structured-output.d.ts.map +0 -1
  676. package/src/services/system-memory.d.ts.map +0 -1
  677. package/src/services/types.d.ts.map +0 -1
  678. package/src/services/verify-on-device.d.ts.map +0 -1
  679. package/src/services/verify.d.ts.map +0 -1
  680. package/src/services/vision/aosp-unavailable.d.ts.map +0 -1
  681. package/src/services/vision/capacitor-llama.d.ts.map +0 -1
  682. package/src/services/vision/cloud-fallback.d.ts.map +0 -1
  683. package/src/services/vision/hash.d.ts.map +0 -1
  684. package/src/services/vision/index.d.ts.map +0 -1
  685. package/src/services/vision/llama-server.d.ts.map +0 -1
  686. package/src/services/vision/types.d.ts.map +0 -1
  687. package/src/services/vision/vast-fallback.d.ts.map +0 -1
  688. package/src/services/vision-embedding-cache.d.ts.map +0 -1
  689. package/src/services/voice/audio-frame-consumer.d.ts.map +0 -1
  690. package/src/services/voice/barge-in.d.ts.map +0 -1
  691. package/src/services/voice/cancellation-coordinator.d.ts.map +0 -1
  692. package/src/services/voice/checkpoint-manager.d.ts.map +0 -1
  693. package/src/services/voice/eager-context-builder.d.ts.map +0 -1
  694. package/src/services/voice/eliza1-eot-scorer.d.ts.map +0 -1
  695. package/src/services/voice/embedding.d.ts.map +0 -1
  696. package/src/services/voice/emotion-attribution.d.ts.map +0 -1
  697. package/src/services/voice/engine-bridge.d.ts.map +0 -1
  698. package/src/services/voice/eot-classifier-ggml.d.ts.map +0 -1
  699. package/src/services/voice/eot-classifier.d.ts.map +0 -1
  700. package/src/services/voice/errors.d.ts.map +0 -1
  701. package/src/services/voice/expressive-tags.d.ts.map +0 -1
  702. package/src/services/voice/ffi-bindings.d.ts.map +0 -1
  703. package/src/services/voice/first-line-cache.d.ts.map +0 -1
  704. package/src/services/voice/fused-eot-scorer.d.ts.map +0 -1
  705. package/src/services/voice/index.d.ts.map +0 -1
  706. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +0 -1
  707. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +0 -1
  708. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +0 -1
  709. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +0 -1
  710. package/src/services/voice/kokoro/phonemizer.d.ts.map +0 -1
  711. package/src/services/voice/kokoro/pick-runtime.d.ts.map +0 -1
  712. package/src/services/voice/kokoro/runtime-selection.d.ts +0 -92
  713. package/src/services/voice/kokoro/runtime-selection.d.ts.map +0 -1
  714. package/src/services/voice/kokoro/types.d.ts.map +0 -1
  715. package/src/services/voice/kokoro/voice-presets.d.ts.map +0 -1
  716. package/src/services/voice/kokoro/voices.d.ts.map +0 -1
  717. package/src/services/voice/lifecycle.d.ts.map +0 -1
  718. package/src/services/voice/live-diarization-session.d.ts +0 -96
  719. package/src/services/voice/live-diarization-session.d.ts.map +0 -1
  720. package/src/services/voice/mic-source.d.ts.map +0 -1
  721. package/src/services/voice/optimistic-policy.d.ts.map +0 -1
  722. package/src/services/voice/partial-stabilizer.d.ts.map +0 -1
  723. package/src/services/voice/phoneme-tokenizer.d.ts.map +0 -1
  724. package/src/services/voice/phrase-cache.d.ts.map +0 -1
  725. package/src/services/voice/phrase-chunker.d.ts.map +0 -1
  726. package/src/services/voice/pipeline-impls.d.ts.map +0 -1
  727. package/src/services/voice/pipeline.d.ts.map +0 -1
  728. package/src/services/voice/prefill-client.d.ts.map +0 -1
  729. package/src/services/voice/prefix-preserving-queue.d.ts.map +0 -1
  730. package/src/services/voice/profile-store.d.ts.map +0 -1
  731. package/src/services/voice/ring-buffer.d.ts.map +0 -1
  732. package/src/services/voice/rollback-queue.d.ts.map +0 -1
  733. package/src/services/voice/samantha-preset-placeholder.d.ts.map +0 -1
  734. package/src/services/voice/samantha-preset-regenerator.d.ts.map +0 -1
  735. package/src/services/voice/scheduler.d.ts.map +0 -1
  736. package/src/services/voice/shared-resources.d.ts.map +0 -1
  737. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +0 -1
  738. package/src/services/voice/speaker/diarizer-fused.d.ts.map +0 -1
  739. package/src/services/voice/speaker/diarizer.d.ts.map +0 -1
  740. package/src/services/voice/speaker/encoder-fused.d.ts.map +0 -1
  741. package/src/services/voice/speaker/encoder-ggml.d.ts.map +0 -1
  742. package/src/services/voice/speaker/encoder.d.ts.map +0 -1
  743. package/src/services/voice/speaker-imprint.d.ts.map +0 -1
  744. package/src/services/voice/speaker-preset-cache.d.ts.map +0 -1
  745. package/src/services/voice/system-audio-sink.d.ts.map +0 -1
  746. package/src/services/voice/transcriber.d.ts.map +0 -1
  747. package/src/services/voice/transcript-knowledge.d.ts.map +0 -1
  748. package/src/services/voice/transcript-service.d.ts.map +0 -1
  749. package/src/services/voice/transcript-store.d.ts.map +0 -1
  750. package/src/services/voice/turn-controller.d.ts.map +0 -1
  751. package/src/services/voice/types.d.ts.map +0 -1
  752. package/src/services/voice/vad.d.ts.map +0 -1
  753. package/src/services/voice/voice-budget.d.ts.map +0 -1
  754. package/src/services/voice/voice-emotion-classifier.d.ts.map +0 -1
  755. package/src/services/voice/voice-preset-format.d.ts.map +0 -1
  756. package/src/services/voice/voice-profile-artifact.d.ts.map +0 -1
  757. package/src/services/voice/voice-profile-routes.d.ts.map +0 -1
  758. package/src/services/voice/voice-settings.d.ts +0 -82
  759. package/src/services/voice/voice-settings.d.ts.map +0 -1
  760. package/src/services/voice/voice-settings.ts +0 -172
  761. package/src/services/voice/voice-state-machine.d.ts.map +0 -1
  762. package/src/services/voice/wake-word-ggml.d.ts.map +0 -1
  763. package/src/services/voice/wake-word.d.ts.map +0 -1
  764. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +0 -1
  765. package/src/services/voice-model-updater.d.ts.map +0 -1
  766. package/src/services/voice-prewarm.d.ts.map +0 -1
  767. /package/{src → dist}/actions/generate-media.d.ts +0 -0
  768. /package/{src → dist}/actions/identify-speaker.d.ts +0 -0
  769. /package/{src → dist}/actions/transcription-control.d.ts +0 -0
  770. /package/{src → dist}/index.d.ts +0 -0
  771. /package/{src → dist}/provider.d.ts +0 -0
  772. /package/{src → dist}/routes/family-member-route.d.ts +0 -0
  773. /package/{src → dist}/routes/local-inference-asr-route.d.ts +0 -0
  774. /package/{src → dist}/routes/local-inference-asr-transcribe.d.ts +0 -0
  775. /package/{src → dist}/routes/local-inference-compat-routes.d.ts +0 -0
  776. /package/{src → dist}/routes/local-inference-tts-route.d.ts +0 -0
  777. /package/{src → dist}/routes/transcript-audio-store.d.ts +0 -0
  778. /package/{src → dist}/routes/voice-first-run-routes.d.ts +0 -0
  779. /package/{src → dist}/routes/voice-models-routes.d.ts +0 -0
  780. /package/{src → dist}/routes/voice-profile-plugin-routes.d.ts +0 -0
  781. /package/{src → dist}/routes/voice-profiles-management-routes.d.ts +0 -0
  782. /package/{src → dist}/routes/voice-speaker-profile-routes.d.ts +0 -0
  783. /package/{src → dist}/runtime/embedding-manager-support.d.ts +0 -0
  784. /package/{src → dist}/runtime/embedding-presets.d.ts +0 -0
  785. /package/{src → dist}/runtime/embedding-warmup-policy.d.ts +0 -0
  786. /package/{src → dist}/services/bundled-models.d.ts +0 -0
  787. /package/{src → dist}/services/cache-bridge.d.ts +0 -0
  788. /package/{src → dist}/services/checkpoint-client.d.ts +0 -0
  789. /package/{src → dist}/services/cloud-fallback.d.ts +0 -0
  790. /package/{src → dist}/services/conversation-registry.d.ts +0 -0
  791. /package/{src → dist}/services/device-bridge.d.ts +0 -0
  792. /package/{src → dist}/services/device-resource-metrics.d.ts +0 -0
  793. /package/{src → dist}/services/external-scanner.d.ts +0 -0
  794. /package/{src → dist}/services/gpu-detect.d.ts +0 -0
  795. /package/{src → dist}/services/handler-registry.d.ts +0 -0
  796. /package/{src → dist}/services/hardware.d.ts +0 -0
  797. /package/{src → dist}/services/image-description-runtime.d.ts +0 -0
  798. /package/{src → dist}/services/imagegen/aosp-unavailable.d.ts +0 -0
  799. /package/{src → dist}/services/imagegen/backend-selector.d.ts +0 -0
  800. /package/{src → dist}/services/imagegen/coreml-unavailable.d.ts +0 -0
  801. /package/{src → dist}/services/imagegen/errors.d.ts +0 -0
  802. /package/{src → dist}/services/imagegen/index.d.ts +0 -0
  803. /package/{src → dist}/services/imagegen/mflux.d.ts +0 -0
  804. /package/{src → dist}/services/imagegen/tensorrt-unavailable.d.ts +0 -0
  805. /package/{src → dist}/services/imagegen/types.d.ts +0 -0
  806. /package/{src → dist}/services/inference-capabilities.d.ts +0 -0
  807. /package/{src → dist}/services/inference-telemetry.d.ts +0 -0
  808. /package/{src → dist}/services/kv-spill.d.ts +0 -0
  809. /package/{src → dist}/services/latency-trace.d.ts +0 -0
  810. /package/{src → dist}/services/llm-streaming-binding.d.ts +0 -0
  811. /package/{src → dist}/services/load-args.d.ts +0 -0
  812. /package/{src → dist}/services/manifest/validator.d.ts +0 -0
  813. /package/{src → dist}/services/memory-pressure.d.ts +0 -0
  814. /package/{src → dist}/services/mtp-doctor.d.ts +0 -0
  815. /package/{src → dist}/services/network-policy.d.ts +0 -0
  816. /package/{src → dist}/services/paths.d.ts +0 -0
  817. /package/{src → dist}/services/planner-skeleton.d.ts +0 -0
  818. /package/{src → dist}/services/providers.d.ts +0 -0
  819. /package/{src → dist}/services/ram-budget.d.ts +0 -0
  820. /package/{src → dist}/services/readiness.d.ts +0 -0
  821. /package/{src → dist}/services/recommendation.d.ts +0 -0
  822. /package/{src → dist}/services/routing-preferences.d.ts +0 -0
  823. /package/{src → dist}/services/runtime-target.d.ts +0 -0
  824. /package/{src → dist}/services/session-pool.d.ts +0 -0
  825. /package/{src → dist}/services/structured-output/deterministic-repair.d.ts +0 -0
  826. /package/{src → dist}/services/structured-output.d.ts +0 -0
  827. /package/{src → dist}/services/system-memory.d.ts +0 -0
  828. /package/{src → dist}/services/verify-on-device.d.ts +0 -0
  829. /package/{src → dist}/services/verify.d.ts +0 -0
  830. /package/{src → dist}/services/vision/aosp-unavailable.d.ts +0 -0
  831. /package/{src → dist}/services/vision/capacitor-llama.d.ts +0 -0
  832. /package/{src → dist}/services/vision/cloud-fallback.d.ts +0 -0
  833. /package/{src → dist}/services/vision/hash.d.ts +0 -0
  834. /package/{src → dist}/services/vision/llama-server.d.ts +0 -0
  835. /package/{src → dist}/services/vision/vast-fallback.d.ts +0 -0
  836. /package/{src → dist}/services/voice/barge-in.d.ts +0 -0
  837. /package/{src → dist}/services/voice/cancellation-coordinator.d.ts +0 -0
  838. /package/{src → dist}/services/voice/checkpoint-manager.d.ts +0 -0
  839. /package/{src → dist}/services/voice/eager-context-builder.d.ts +0 -0
  840. /package/{src → dist}/services/voice/emotion-attribution.d.ts +0 -0
  841. /package/{src → dist}/services/voice/first-line-cache.d.ts +0 -0
  842. /package/{src → dist}/services/voice/kokoro/kokoro-runtime.d.ts +0 -0
  843. /package/{src → dist}/services/voice/kokoro/phonemizer.d.ts +0 -0
  844. /package/{src → dist}/services/voice/kokoro/types.d.ts +0 -0
  845. /package/{src → dist}/services/voice/kokoro/voice-presets.d.ts +0 -0
  846. /package/{src → dist}/services/voice/kokoro/voices.d.ts +0 -0
  847. /package/{src → dist}/services/voice/lifecycle.d.ts +0 -0
  848. /package/{src → dist}/services/voice/optimistic-policy.d.ts +0 -0
  849. /package/{src → dist}/services/voice/phoneme-tokenizer.d.ts +0 -0
  850. /package/{src → dist}/services/voice/phrase-cache.d.ts +0 -0
  851. /package/{src → dist}/services/voice/phrase-chunker.d.ts +0 -0
  852. /package/{src → dist}/services/voice/pipeline-impls.d.ts +0 -0
  853. /package/{src → dist}/services/voice/pipeline.d.ts +0 -0
  854. /package/{src → dist}/services/voice/prefill-client.d.ts +0 -0
  855. /package/{src → dist}/services/voice/prefix-preserving-queue.d.ts +0 -0
  856. /package/{src → dist}/services/voice/profile-store.d.ts +0 -0
  857. /package/{src → dist}/services/voice/ring-buffer.d.ts +0 -0
  858. /package/{src → dist}/services/voice/rollback-queue.d.ts +0 -0
  859. /package/{src → dist}/services/voice/samantha-preset-placeholder.d.ts +0 -0
  860. /package/{src → dist}/services/voice/samantha-preset-regenerator.d.ts +0 -0
  861. /package/{src → dist}/services/voice/scheduler.d.ts +0 -0
  862. /package/{src → dist}/services/voice/speaker/attribution-pipeline.d.ts +0 -0
  863. /package/{src → dist}/services/voice/speaker/diarizer-fused.d.ts +0 -0
  864. /package/{src → dist}/services/voice/speaker/diarizer.d.ts +0 -0
  865. /package/{src → dist}/services/voice/speaker/encoder-fused.d.ts +0 -0
  866. /package/{src → dist}/services/voice/speaker/encoder-ggml.d.ts +0 -0
  867. /package/{src → dist}/services/voice/speaker/encoder.d.ts +0 -0
  868. /package/{src → dist}/services/voice/speaker-imprint.d.ts +0 -0
  869. /package/{src → dist}/services/voice/speaker-preset-cache.d.ts +0 -0
  870. /package/{src → dist}/services/voice/system-audio-sink.d.ts +0 -0
  871. /package/{src → dist}/services/voice/transcript-knowledge.d.ts +0 -0
  872. /package/{src → dist}/services/voice/turn-controller.d.ts +0 -0
  873. /package/{src → dist}/services/voice/voice-budget.d.ts +0 -0
  874. /package/{src → dist}/services/voice/voice-emotion-classifier.d.ts +0 -0
  875. /package/{src → dist}/services/voice/voice-profile-artifact.d.ts +0 -0
  876. /package/{src → dist}/services/voice/voice-profile-routes.d.ts +0 -0
  877. /package/{src → dist}/services/voice/voice-state-machine.d.ts +0 -0
  878. /package/{src → dist}/services/voice/wake-word.d.ts +0 -0
  879. /package/{src → dist}/services/voice/wrap-with-first-line-cache.d.ts +0 -0
  880. /package/{src → dist}/services/voice-model-updater.d.ts +0 -0
  881. /package/{src → dist}/services/voice-prewarm.d.ts +0 -0
@@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest";
2
2
  import {
3
3
  buildHuggingFaceResolveUrl,
4
4
  DEFAULT_ELIGIBLE_MODEL_IDS,
5
+ ELIZA_1_HOSTED_MTP_TIER_IDS,
5
6
  ELIZA_1_MTP_TIER_IDS,
6
7
  ELIZA_1_TIER_IDS,
7
8
  FIRST_RUN_DEFAULT_MODEL_ID,
@@ -124,16 +125,30 @@ describe("local inference catalog", () => {
124
125
  expect(offenders).toEqual([]);
125
126
  });
126
127
 
127
- it("declares native MTP on every Eliza-1 tier", () => {
128
+ it("does not declare native MTP until Gemma drafter GGUFs are hosted", () => {
129
+ const hostedMtpTiers: ReadonlySet<string> = new Set(
130
+ ELIZA_1_HOSTED_MTP_TIER_IDS,
131
+ );
132
+ expect(ELIZA_1_MTP_TIER_IDS).toEqual(ELIZA_1_TIER_IDS);
133
+ expect(ELIZA_1_HOSTED_MTP_TIER_IDS).toEqual([]);
128
134
  for (const id of ELIZA_1_MTP_TIER_IDS) {
129
135
  const model = findCatalogModel(id);
130
- expect(model?.runtime?.mtp?.specType, `${id} mtp`).toBe("draft-mtp");
136
+ expect(model?.runtime?.mtp, `${id} mtp`).toBeUndefined();
131
137
  expect(model?.companionModelIds, `${id} companions`).toBeUndefined();
132
138
  }
139
+ for (const id of ELIZA_1_TIER_IDS.filter(
140
+ (tier) => !hostedMtpTiers.has(tier),
141
+ )) {
142
+ const model = findCatalogModel(id);
143
+ expect(model?.runtime?.mtp, `${id} mtp`).toBeUndefined();
144
+ }
133
145
  });
134
146
 
135
147
  it("declares the mandatory local runtime contract for every default tier", () => {
136
- const baseKernels = ["turbo3", "turbo4", "qjl_full", "polarquant"];
148
+ const baseKernels = ["turbo3", "turbo4"];
149
+ const hostedMtpTiers: ReadonlySet<string> = new Set(
150
+ ELIZA_1_HOSTED_MTP_TIER_IDS,
151
+ );
137
152
  for (const id of ELIZA_1_TIER_IDS) {
138
153
  const model = findCatalogModel(id);
139
154
  expect(model?.runtime?.preferredBackend, `${id} backend`).toBe(
@@ -145,8 +160,12 @@ describe("local inference catalog", () => {
145
160
  `${id} kernel ${kernel}`,
146
161
  ).toContain(kernel);
147
162
  }
148
- expect(model?.runtime?.mtp?.specType, `${id} mtp`).toBe("draft-mtp");
149
163
  expect(model?.companionModelIds, `${id} companions`).toBeUndefined();
164
+ if (hostedMtpTiers.has(id)) {
165
+ expect(model?.runtime?.mtp?.specType, `${id} mtp`).toBe("draft-mtp");
166
+ } else {
167
+ expect(model?.runtime?.mtp, `${id} mtp`).toBeUndefined();
168
+ }
150
169
  if ((model?.contextLength ?? 0) >= 65536) {
151
170
  expect(model?.runtime?.optimizations?.requiresKernel).toContain(
152
171
  "turbo3_tcq",
@@ -167,13 +186,15 @@ describe("local inference catalog", () => {
167
186
  for (const id of ELIZA_1_TIER_IDS) {
168
187
  const model = findCatalogModel(id);
169
188
  expect(model?.quantization?.defaultVariantId).toBe("q4_k_m");
170
- expect(model?.quantization?.variants.map((v) => v.id)).toEqual([
171
- "q3_k_m",
172
- "q4_k_m",
173
- "q5_k_m",
174
- "q6_k",
175
- "q8_0",
176
- ]);
189
+ const variantIds = model?.quantization?.variants.map((v) => v.id);
190
+ const expected = ["q3_k_m", "q4_0", "q4_k_m", "q5_k_m", "q6_k", "q8_0"];
191
+ if (id === "eliza-1-2b" || id === "eliza-1-4b") {
192
+ expected.push("wna8o8");
193
+ }
194
+ expect(variantIds).toEqual(expected);
195
+ expect(
196
+ model?.quantization?.variants.find((v) => v.id === "q4_0")?.status,
197
+ ).toBe("planned");
177
198
  }
178
199
 
179
200
  // Mobile-class tiers (2b/4b) ship Kokoro only — it is smaller +
@@ -12,6 +12,7 @@ export {
12
12
  buildHuggingFaceResolveUrlForPath,
13
13
  DEFAULT_ELIGIBLE_MODEL_IDS,
14
14
  ELIZA_1_HF_REPO,
15
+ ELIZA_1_HOSTED_MTP_TIER_IDS,
15
16
  ELIZA_1_MTP_TIER_IDS,
16
17
  ELIZA_1_PLACEHOLDER_IDS,
17
18
  ELIZA_1_RELEASE_TIER_IDS,
@@ -22,6 +23,11 @@ export {
22
23
  eliza1TierPublishStatus,
23
24
  FIRST_RUN_DEFAULT_MODEL_ID,
24
25
  findCatalogModel,
26
+ hasHuggingFaceToken,
25
27
  isDefaultEligibleId,
28
+ isHuggingFaceHost,
26
29
  MODEL_CATALOG,
30
+ resolveHfDownloadBase,
31
+ resolveHubAuthHeaders,
32
+ resolveHuggingFaceToken,
27
33
  } from "@elizaos/shared";
@@ -188,7 +188,7 @@ export function makeCloudFallbackHandler(
188
188
  ) => Promise<string> {
189
189
  const log = opts.log ?? (() => undefined);
190
190
  return async (runtime, params) => {
191
- const generateParams = params as unknown as GenerateTextParams;
191
+ const generateParams = params as GenerateTextParams;
192
192
  const local = await opts.localGenerate(runtime, generateParams);
193
193
  if (local.kind === "ok") {
194
194
  return local.text;
@@ -0,0 +1,121 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { computeRuntimeContextFit } from "./context-fit";
3
+
4
+ describe("computeRuntimeContextFit", () => {
5
+ it("shrinks context to the largest 4k window that fits the q8_0 KV budget", () => {
6
+ const fit = computeRuntimeContextFit({
7
+ params: "2B",
8
+ weightMb: 1434,
9
+ usableMb: 2560,
10
+ nativeContext: 131072,
11
+ });
12
+
13
+ expect(fit).not.toBeNull();
14
+ expect(fit?.contextDownscaled).toBe(true);
15
+ expect(fit?.contextSize).toBeGreaterThanOrEqual(8192);
16
+ expect(fit?.contextSize).toBeLessThan(131072);
17
+ expect(fit?.contextSize % 4096).toBe(0);
18
+ expect(fit?.kvBytesPerToken).toBeGreaterThan(0);
19
+ });
20
+
21
+ it("keeps the native context when the KV budget has headroom", () => {
22
+ const fit = computeRuntimeContextFit({
23
+ params: "9B",
24
+ weightMb: 5529,
25
+ usableMb: 23 * 1024,
26
+ nativeContext: 131072,
27
+ });
28
+
29
+ expect(fit?.contextSize).toBe(131072);
30
+ expect(fit?.contextDownscaled).toBe(false);
31
+ expect(fit?.maxFittingContext).toBeGreaterThanOrEqual(131072);
32
+ });
33
+
34
+ it("returns null when not even the minimum local context fits", () => {
35
+ const fit = computeRuntimeContextFit({
36
+ params: "2B",
37
+ weightMb: 2200,
38
+ usableMb: 2300,
39
+ nativeContext: 131072,
40
+ });
41
+
42
+ expect(fit).toBeNull();
43
+ });
44
+
45
+ it("defaults to q8_0 KV", () => {
46
+ const fit = computeRuntimeContextFit({
47
+ params: "9B",
48
+ weightMb: 5529,
49
+ usableMb: 64 * 1024,
50
+ nativeContext: 131072,
51
+ });
52
+ expect(fit?.kvQuant).toBe("q8_0");
53
+ });
54
+
55
+ it("upgrades to f16 KV when there's headroom and it's opted in (#8809 AC#4)", () => {
56
+ const fit = computeRuntimeContextFit({
57
+ params: "9B",
58
+ weightMb: 5529,
59
+ usableMb: 64 * 1024,
60
+ nativeContext: 131072,
61
+ preferAccurateKvWhenHeadroom: true,
62
+ });
63
+ expect(fit?.kvQuant).toBe("f16");
64
+ // f16 still affords the full native window on a roomy host.
65
+ expect(fit?.contextSize).toBe(131072);
66
+ expect(fit?.contextDownscaled).toBe(false);
67
+ });
68
+
69
+ it("never trades context for f16 KV precision (stays q8_0 when f16 would shrink the window)", () => {
70
+ // kvBudget here lets q8_0 reach the full native window but f16 (≈1.88×)
71
+ // would not — so the opt-in must keep q8_0 rather than downscale context.
72
+ const fit = computeRuntimeContextFit({
73
+ params: "9B",
74
+ weightMb: 5529,
75
+ usableMb: 8053,
76
+ nativeContext: 131072,
77
+ preferAccurateKvWhenHeadroom: true,
78
+ });
79
+ expect(fit?.contextSize).toBe(131072);
80
+ expect(fit?.kvQuant).toBe("q8_0");
81
+ });
82
+
83
+ it("scales the selected context with the device RAM class (4/8/16/24/128 GB) (#8809 AC#4)", () => {
84
+ // One representative tier across the five canonical device classes.
85
+ // `weightMb` is the resident weight; `usableMb` is the post-headroom
86
+ // budget the caller (active-model.ts) passes. The q8_0 KV rate comes from
87
+ // the tier params, so the selected window tracks free RAM.
88
+ const deviceClassesGb = [4, 8, 16, 24, 128];
89
+ const fits = deviceClassesGb.map((gb) =>
90
+ computeRuntimeContextFit({
91
+ params: "9B",
92
+ weightMb: 6500,
93
+ usableMb: gb * 1024,
94
+ nativeContext: 131072,
95
+ }),
96
+ );
97
+
98
+ // 4 GB can't hold the weights + a minimum KV window → no fit.
99
+ expect(fits[0]).toBeNull();
100
+
101
+ // Every class that fits gets a 4k-aligned window within [min, native].
102
+ for (const fit of fits.slice(1)) {
103
+ expect(fit).not.toBeNull();
104
+ expect((fit?.contextSize ?? 0) % 4096).toBe(0);
105
+ expect(fit?.contextSize).toBeGreaterThanOrEqual(8192);
106
+ expect(fit?.contextSize).toBeLessThanOrEqual(131072);
107
+ }
108
+
109
+ // Context never shrinks as RAM grows (headroom → larger KV window).
110
+ const sizes = fits.map((f) => f?.contextSize ?? 0);
111
+ for (let i = 1; i < sizes.length; i++) {
112
+ expect(sizes[i]).toBeGreaterThanOrEqual(sizes[i - 1]);
113
+ }
114
+
115
+ // Tight-but-fitting (8 GB) downscales below native; roomy (128 GB) hits it.
116
+ expect(fits[1]?.contextDownscaled).toBe(true);
117
+ expect(fits[1]?.contextSize).toBeLessThan(131072);
118
+ expect(fits.at(-1)?.contextSize).toBe(131072);
119
+ expect(fits.at(-1)?.contextDownscaled).toBe(false);
120
+ });
121
+ });
@@ -0,0 +1,113 @@
1
+ import { ELIZA_1_MIN_LOCAL_CONTEXT } from "@elizaos/shared/local-inference";
2
+ import { estimateQuantizedKvBytesPerToken } from "./kv-spill";
3
+
4
+ const BYTES_PER_MIB = 1024 * 1024;
5
+ const CONTEXT_STEP = 4096;
6
+ const DEFAULT_WORKING_SET_MB = 1024;
7
+
8
+ // q8_0 stores the KV cache at 34 bytes / 32 elements; f16 at 2 bytes / element.
9
+ // f16 KV therefore costs ~1.88× the q8_0 per-token rate the estimate is keyed to.
10
+ const F16_OVER_Q8_0_KV_RATIO = 2 / (34 / 32);
11
+
12
+ export interface RuntimeContextFitInput {
13
+ params: string;
14
+ weightMb: number;
15
+ usableMb: number;
16
+ nativeContext: number;
17
+ minContext?: number;
18
+ workingSetMb?: number;
19
+ contextStep?: number;
20
+ /**
21
+ * When the host has enough headroom to run the more accurate f16 KV cache at
22
+ * (at least) the same window q8_0 would give, prefer f16 instead of leaving
23
+ * precision on the table. Opt-in — q8_0 stays the default per the device-fit
24
+ * contract; this only ever *upgrades* precision and never trades away context
25
+ * (#8809 AC#4). See CONTEXT_SCALING.md §5.
26
+ */
27
+ preferAccurateKvWhenHeadroom?: boolean;
28
+ }
29
+
30
+ export interface RuntimeContextFit {
31
+ contextSize: number;
32
+ contextDownscaled: boolean;
33
+ maxFittingContext: number;
34
+ kvBytesPerToken: number;
35
+ workingSetMb: number;
36
+ /** The KV cache precision the chosen window was sized against. */
37
+ kvQuant: "q8_0" | "f16";
38
+ }
39
+
40
+ function roundDownToStep(value: number, step: number): number {
41
+ return Math.max(0, Math.floor(value / step) * step);
42
+ }
43
+
44
+ /**
45
+ * Choose the runtime context window that fits the current host budget.
46
+ *
47
+ * The admission gate still decides whether the model may load at all. This
48
+ * helper only sizes the q8_0 KV window for an admitted Eliza-1 tier so a tight
49
+ * host gets the largest safe window instead of blindly taking the catalog
50
+ * ceiling.
51
+ */
52
+ export function computeRuntimeContextFit(
53
+ input: RuntimeContextFitInput,
54
+ ): RuntimeContextFit | null {
55
+ const minContext = input.minContext ?? ELIZA_1_MIN_LOCAL_CONTEXT;
56
+ const step = input.contextStep ?? CONTEXT_STEP;
57
+ const workingSetMb = input.workingSetMb ?? DEFAULT_WORKING_SET_MB;
58
+ if (
59
+ !Number.isFinite(input.weightMb) ||
60
+ !Number.isFinite(input.usableMb) ||
61
+ !Number.isFinite(input.nativeContext) ||
62
+ input.weightMb <= 0 ||
63
+ input.usableMb <= 0 ||
64
+ input.nativeContext < minContext ||
65
+ step <= 0
66
+ ) {
67
+ return null;
68
+ }
69
+
70
+ const kvBytesPerToken = estimateQuantizedKvBytesPerToken(input.params);
71
+ if (!Number.isFinite(kvBytesPerToken) || kvBytesPerToken <= 0) return null;
72
+
73
+ const kvBudgetMb = input.usableMb - input.weightMb - workingSetMb;
74
+ if (kvBudgetMb <= 0) return null;
75
+ const kvBudgetBytes = kvBudgetMb * BYTES_PER_MIB;
76
+
77
+ const q8MaxFittingContext = roundDownToStep(
78
+ kvBudgetBytes / kvBytesPerToken,
79
+ step,
80
+ );
81
+ if (q8MaxFittingContext < minContext) return null;
82
+ const q8ContextSize = Math.min(input.nativeContext, q8MaxFittingContext);
83
+
84
+ // Default: q8_0 KV, sized to the host. Opt-in headroom upgrade: if f16 KV
85
+ // still affords at least the q8_0-selected window, use it — more precise, and
86
+ // never at the cost of context.
87
+ let kvQuant: "q8_0" | "f16" = "q8_0";
88
+ let kvBytesPerTokenChosen = kvBytesPerToken;
89
+ let maxFittingContext = q8MaxFittingContext;
90
+ let contextSize = q8ContextSize;
91
+ if (input.preferAccurateKvWhenHeadroom) {
92
+ const f16BytesPerToken = kvBytesPerToken * F16_OVER_Q8_0_KV_RATIO;
93
+ const f16MaxFittingContext = roundDownToStep(
94
+ kvBudgetBytes / f16BytesPerToken,
95
+ step,
96
+ );
97
+ if (f16MaxFittingContext >= q8ContextSize) {
98
+ kvQuant = "f16";
99
+ kvBytesPerTokenChosen = f16BytesPerToken;
100
+ maxFittingContext = f16MaxFittingContext;
101
+ contextSize = Math.min(input.nativeContext, f16MaxFittingContext);
102
+ }
103
+ }
104
+
105
+ return {
106
+ contextSize,
107
+ contextDownscaled: contextSize < input.nativeContext,
108
+ maxFittingContext,
109
+ kvBytesPerToken: kvBytesPerTokenChosen,
110
+ workingSetMb,
111
+ kvQuant,
112
+ };
113
+ }
@@ -8,7 +8,7 @@
8
8
  * model.
9
9
  *
10
10
  * - The fused lib's `eliza_inference_llm_stream_open` loads the bundle's text
11
- * GGUF (`<bundleRoot>/text/*.gguf`) and applies same-file MTP speculative
11
+ * GGUF (`<bundleRoot>/text/*.gguf`) and applies MTP speculative
12
12
  * decoding + KV-cache quant + per-load GPU layers natively (ABI v9). The
13
13
  * path is gated on the capability probes
14
14
  * (`llmStreamSupported && llmMtpSupported && llmKvQuantSupported`).
@@ -44,6 +44,13 @@ import {
44
44
  loadElizaInferenceFfi,
45
45
  } from "./voice/ffi-bindings";
46
46
 
47
+ function throwIfAborted(signal: AbortSignal | undefined): void {
48
+ if (!signal?.aborted) return;
49
+ throw signal.reason instanceof Error
50
+ ? signal.reason
51
+ : new DOMException("Aborted", "AbortError");
52
+ }
53
+
47
54
  /**
48
55
  * Candidate filenames for the fused library, per platform. Mirrors
49
56
  * `samantha-preset-regenerator.ts::libraryFilenames` so the runtime and the
@@ -116,7 +123,7 @@ export class DesktopFusedFfiBackendRuntime implements FfiBackendRuntime {
116
123
  * Viable only when:
117
124
  * - bun:ffi resolves on the current runtime,
118
125
  * - the fused dylib is present AND reports ABI-v9 capability: the
119
- * streaming-LLM surface, same-file MTP, KV-cache quant, AND native
126
+ * streaming-LLM surface, MTP, KV-cache quant, AND native
120
127
  * tokenization (`eliza_inference_tokenize`).
121
128
  * A pre-v9 fused lib reports the probes as unsupported → refused, and the
122
129
  * engine raises LocalInferenceUnavailable. libllama has been retired; there
@@ -237,8 +244,13 @@ export class DesktopFusedFfiBackendRuntime implements FfiBackendRuntime {
237
244
  draftModelPath: overrides?.draftModelPath ?? null,
238
245
  mmprojPath: overrides?.mmprojPath ?? null,
239
246
  // The fused path applies these at its first `llmStreamOpen`:
240
- // gpuLayers + KV-cache quant types from the session config.
247
+ // context size, gpuLayers, and KV-cache quant types from the
248
+ // session config.
241
249
  loadConfig: {
250
+ contextSize:
251
+ typeof overrides?.contextSize === "number"
252
+ ? overrides.contextSize
253
+ : undefined,
242
254
  gpuLayers:
243
255
  typeof overrides?.gpuLayers === "number"
244
256
  ? overrides.gpuLayers
@@ -272,10 +284,35 @@ export class DesktopFusedFfiBackendRuntime implements FfiBackendRuntime {
272
284
  }
273
285
 
274
286
  /**
275
- * Vision describe through the fused `eliza_inference_describe_image`
276
- * (ABI v9). Reuses the mtmd machinery linked for ASR over the bundle's text
277
- * model + the passed mmproj projector. The `FfiStreamingBackend` forwards
278
- * `describeImage`/`visionSupported` to this runtime by duck-typing.
287
+ * Whether the LIVE session can STREAM a vision describe token-by-token
288
+ * through `eliza_inference_describe_image_stream_open` + the existing
289
+ * `llmStreamNext` loop (ABI v13). A <=v12 lib reports false and the handler
290
+ * uses the buffered one-shot `describeImage` path.
291
+ */
292
+ visionStreamSupported(): boolean {
293
+ if (!this.active) return false;
294
+ const { ffi } = this.active;
295
+ return (
296
+ typeof ffi.visionStreamSupported === "function" &&
297
+ ffi.visionStreamSupported() === true &&
298
+ typeof ffi.describeImageStreamOpen === "function" &&
299
+ typeof ffi.llmStreamNext === "function" &&
300
+ typeof ffi.llmStreamClose === "function"
301
+ );
302
+ }
303
+
304
+ /**
305
+ * Vision describe through the fused mmproj path. Reuses the mtmd machinery
306
+ * linked for ASR over the bundle's text model + the passed mmproj projector.
307
+ * The `FfiStreamingBackend` forwards `describeImage`/`visionSupported` to this
308
+ * runtime by duck-typing.
309
+ *
310
+ * When `onTextChunk` is supplied AND the fused lib exposes ABI-v13 streaming
311
+ * vision, the description is decoded token-by-token: `describeImageStreamOpen`
312
+ * primes a stream with the image+prompt KV and the EXISTING `llmStreamNext`
313
+ * loop pulls tokens — the same machinery that streams chat text, so vision
314
+ * flows into the dashboard through one pipe. Otherwise it falls back to the
315
+ * buffered one-shot `eliza_inference_describe_image`.
279
316
  */
280
317
  async describeImage(args: {
281
318
  imageBytes: Uint8Array;
@@ -284,6 +321,8 @@ export class DesktopFusedFfiBackendRuntime implements FfiBackendRuntime {
284
321
  maxTokens?: number;
285
322
  temperature?: number;
286
323
  signal?: AbortSignal;
324
+ onTextChunk?: (chunk: string) => void | Promise<void>;
325
+ maxTokensPerStep?: number;
287
326
  }): Promise<{ text: string; projectorMs?: number; decodeMs?: number }> {
288
327
  if (!this.active) {
289
328
  throw new Error(
@@ -302,6 +341,59 @@ export class DesktopFusedFfiBackendRuntime implements FfiBackendRuntime {
302
341
  "lib with -DELIZA_ENABLE_VISION=ON (verify-fused-symbols requires it).",
303
342
  );
304
343
  }
344
+
345
+ // Token-by-token streaming path (ABI v13): open a vision stream and drive
346
+ // the shared `llmStreamNext` loop, surfacing each decoded piece through
347
+ // `onTextChunk` so the description renders as it generates.
348
+ if (
349
+ typeof args.onTextChunk === "function" &&
350
+ this.visionStreamSupported() &&
351
+ typeof ffi.describeImageStreamOpen === "function" &&
352
+ typeof ffi.llmStreamNext === "function" &&
353
+ typeof ffi.llmStreamClose === "function"
354
+ ) {
355
+ throwIfAborted(args.signal);
356
+ const startedAt = Date.now();
357
+ const stream = ffi.describeImageStreamOpen({
358
+ ctx,
359
+ imageBytes: args.imageBytes,
360
+ mmprojPath: args.mmprojPath,
361
+ prompt: args.prompt,
362
+ });
363
+ let full = "";
364
+ let generated = 0;
365
+ // JS-side token budget: the native ELIZA_VISION_MAX_TOKENS env does not
366
+ // reliably reach the loaded DLL's getenv across runtimes, so cap here.
367
+ const tokenBudget =
368
+ typeof args.maxTokens === "number" && args.maxTokens > 0
369
+ ? args.maxTokens
370
+ : 256;
371
+ try {
372
+ for (;;) {
373
+ if (args.signal?.aborted) {
374
+ ffi.llmStreamCancel?.(stream);
375
+ throwIfAborted(args.signal);
376
+ }
377
+ const step = ffi.llmStreamNext({
378
+ stream,
379
+ // Fine-grained by default so the description renders token-by-token
380
+ // in the dashboard rather than in coarse ~32-token jumps (matches
381
+ // the tuned chat default). Callers may override per request.
382
+ maxTokensPerStep: args.maxTokensPerStep ?? 8,
383
+ });
384
+ if (step.text.length > 0) {
385
+ full += step.text;
386
+ await args.onTextChunk(step.text);
387
+ }
388
+ generated += step.tokens.length;
389
+ if (step.done || generated >= tokenBudget) break;
390
+ }
391
+ } finally {
392
+ ffi.llmStreamClose(stream);
393
+ }
394
+ return { text: full, decodeMs: Date.now() - startedAt };
395
+ }
396
+
305
397
  const startedAt = Date.now();
306
398
  const text = ffi.describeImage({
307
399
  ctx,
@@ -4,6 +4,7 @@ import {
4
4
  DEVICE_TIER_ORDER,
5
5
  DEVICE_TIER_THRESHOLDS,
6
6
  effectiveModelMemoryGb,
7
+ selectBestEliza1FitForDevice,
7
8
  TIER_WARNING_COPY,
8
9
  } from "./device-tier";
9
10
  import type { HardwareProbe } from "./types";
@@ -24,6 +25,90 @@ function probe(overrides: Partial<HardwareProbe>): HardwareProbe {
24
25
  return { ...baseProbe, ...overrides };
25
26
  }
26
27
 
28
+ describe("selectBestEliza1FitForDevice — mobile guard never hands a phone 9B", () => {
29
+ const prevPlatform = process.env.ELIZA_PLATFORM;
30
+ function withPlatform(value: string | undefined, fn: () => void) {
31
+ if (value === undefined) delete process.env.ELIZA_PLATFORM;
32
+ else process.env.ELIZA_PLATFORM = value;
33
+ try {
34
+ fn();
35
+ } finally {
36
+ if (prevPlatform === undefined) delete process.env.ELIZA_PLATFORM;
37
+ else process.env.ELIZA_PLATFORM = prevPlatform;
38
+ }
39
+ }
40
+
41
+ // The on-device bun probe: reports linux + arm64 + no gpu + no mobile field.
42
+ const devicePhoneProbe = probe({
43
+ totalRamGb: 7.4,
44
+ freeRamGb: 3.3,
45
+ gpu: null,
46
+ arch: "arm64",
47
+ platform: "linux",
48
+ });
49
+
50
+ it("this 8GB phone lands on 2B with a phone-sized window", () => {
51
+ withPlatform("android", () => {
52
+ const fit = selectBestEliza1FitForDevice(devicePhoneProbe);
53
+ expect(fit?.tierId).toBe("eliza-1-2b");
54
+ expect(fit?.contextLength).toBeLessThanOrEqual(65536);
55
+ });
56
+ });
57
+
58
+ it("caps a HIGH-RAM phone at 4B (never 9B+) even when the probe says linux", () => {
59
+ const bigPhone = probe({
60
+ totalRamGb: 24,
61
+ freeRamGb: 16,
62
+ gpu: null,
63
+ arch: "arm64",
64
+ platform: "linux",
65
+ });
66
+ withPlatform("android", () => {
67
+ const fit = selectBestEliza1FitForDevice(bigPhone);
68
+ expect(["eliza-1-2b", "eliza-1-4b"]).toContain(fit?.tierId);
69
+ expect(fit?.tierId).not.toBe("eliza-1-9b");
70
+ expect(fit?.contextLength).toBeLessThanOrEqual(65536);
71
+ });
72
+ });
73
+
74
+ it("arm64 phones never hit the AVX2/NEON POOR gate (NEON is mandatory on ARMv8)", () => {
75
+ // The on-device os-fallback probe (Pixel 9a) reports arm64 + no cpuFeatures.
76
+ // Before the fix it fell to "No AVX2 baseline" → POOR; that wrong reason must
77
+ // be gone (NEON is mandatory on ARMv8).
78
+ const assessment = classifyDeviceTier(devicePhoneProbe);
79
+ expect(assessment.reasons.some((r) => /AVX2|< 4 CPU cores/i.test(r))).toBe(
80
+ false,
81
+ );
82
+ // A 16GB arm64 phone (above the mobile floor) with no cpuFeatures now runs
83
+ // local instead of being misclassified cloud-only by the SIMD gate.
84
+ const midPhone = probe({
85
+ totalRamGb: 16,
86
+ freeRamGb: 9,
87
+ gpu: null,
88
+ arch: "arm64",
89
+ cpuFeatures: undefined,
90
+ });
91
+ expect(classifyDeviceTier(midPhone).canRunLocalLm).toBe(true);
92
+ });
93
+
94
+ it("an 8GB phone is OKAY / local-capable (runs eliza-1 2B), not cloud-only POOR", () => {
95
+ withPlatform("android", () => {
96
+ const assessment = classifyDeviceTier(devicePhoneProbe);
97
+ expect(assessment.tier).toBe("OKAY");
98
+ expect(assessment.canRunLocalLm).toBe(true);
99
+ });
100
+ });
101
+
102
+ it("the SAME 24GB box as a desktop (no android env) may use a larger tier", () => {
103
+ const bigBox = probe({ totalRamGb: 48, freeRamGb: 40, gpu: null });
104
+ withPlatform(undefined, () => {
105
+ const fit = selectBestEliza1FitForDevice(bigBox);
106
+ // effective = 48*0.5 = 24 → 9B fits on a desktop (not capped).
107
+ expect(fit?.tierId).toBe("eliza-1-9b");
108
+ });
109
+ });
110
+ });
111
+
27
112
  describe("classifyDeviceTier", () => {
28
113
  describe("MAX tier", () => {
29
114
  it("classifies a CUDA workstation with 24 GB VRAM as MAX", () => {
@@ -197,7 +282,9 @@ describe("classifyDeviceTier", () => {
197
282
  expect(result.reasons.join(" ")).toMatch(/AVX2|cores/);
198
283
  });
199
284
 
200
- it("classifies ARM without CPU feature evidence as POOR", () => {
285
+ it("classifies 32-bit ARM (ARMv7) without NEON evidence as POOR", () => {
286
+ // NEON is optional on 32-bit ARMv7, so we still require explicit feature
287
+ // evidence there (unlike arm64/ARMv8, where NEON is mandatory).
201
288
  const result = classifyDeviceTier(
202
289
  probe({
203
290
  totalRamGb: 32,
@@ -205,7 +292,7 @@ describe("classifyDeviceTier", () => {
205
292
  gpu: null,
206
293
  cpuCores: 8,
207
294
  platform: "linux",
208
- arch: "arm64",
295
+ arch: "arm",
209
296
  cpuFeatures: undefined,
210
297
  }),
211
298
  );