@elizaos/plugin-local-inference 2.0.0-beta.1 → 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 (893) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/actions/generate-media.d.ts +59 -0
  4. package/dist/actions/generate-media.d.ts.map +1 -0
  5. package/dist/actions/identify-speaker.d.ts +23 -0
  6. package/dist/actions/identify-speaker.d.ts.map +1 -0
  7. package/dist/actions/transcription-control.d.ts +29 -0
  8. package/dist/actions/transcription-control.d.ts.map +1 -0
  9. package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
  10. package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
  11. package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
  12. package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
  13. package/dist/adapters/capacitor-llama/index.d.ts +18 -0
  14. package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
  15. package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
  16. package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
  17. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
  18. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
  19. package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
  20. package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
  21. package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
  22. package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
  23. package/dist/adapters/capacitor-llama/types.d.ts +338 -0
  24. package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
  25. package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
  26. package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
  27. package/dist/backends/apple-foundation.d.ts +56 -0
  28. package/dist/backends/apple-foundation.d.ts.map +1 -0
  29. package/dist/index.d.ts +8 -37
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +38979 -430
  32. package/dist/index.js.map +217 -0
  33. package/dist/local-inference-routes.d.ts +47 -0
  34. package/dist/local-inference-routes.d.ts.map +1 -0
  35. package/dist/provider.d.ts +21 -0
  36. package/dist/provider.d.ts.map +1 -0
  37. package/dist/routes/compat-helpers.d.ts +18 -0
  38. package/dist/routes/compat-helpers.d.ts.map +1 -0
  39. package/dist/routes/family-member-route.d.ts +62 -0
  40. package/dist/routes/family-member-route.d.ts.map +1 -0
  41. package/dist/routes/index.d.ts +20 -0
  42. package/dist/routes/index.d.ts.map +1 -0
  43. package/dist/routes/index.js +42040 -0
  44. package/dist/routes/index.js.map +236 -0
  45. package/dist/routes/live-diarization-route.d.ts +33 -0
  46. package/dist/routes/live-diarization-route.d.ts.map +1 -0
  47. package/dist/routes/local-inference-asr-route.d.ts +4 -0
  48. package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
  49. package/dist/routes/local-inference-asr-transcribe.d.ts +20 -0
  50. package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
  51. package/dist/routes/local-inference-compat-routes.d.ts +16 -0
  52. package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
  53. package/dist/routes/local-inference-tts-route.d.ts +7 -0
  54. package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/dist/routes/native-pcm-turn-route.d.ts +3 -0
  56. package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
  57. package/dist/routes/transcript-audio-store.d.ts +15 -0
  58. package/dist/routes/transcript-audio-store.d.ts.map +1 -0
  59. package/dist/routes/transcripts-routes.d.ts +44 -0
  60. package/dist/routes/transcripts-routes.d.ts.map +1 -0
  61. package/dist/routes/voice-first-run-routes.d.ts +62 -0
  62. package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
  63. package/dist/routes/voice-models-routes.d.ts +62 -0
  64. package/dist/routes/voice-models-routes.d.ts.map +1 -0
  65. package/dist/routes/voice-profile-plugin-routes.d.ts +19 -0
  66. package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  67. package/dist/routes/voice-profiles-management-routes.d.ts +52 -0
  68. package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
  69. package/dist/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/dist/runtime/embedding-manager-support.d.ts +77 -0
  72. package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
  73. package/dist/runtime/embedding-presets.d.ts +16 -0
  74. package/dist/runtime/embedding-presets.d.ts.map +1 -0
  75. package/dist/runtime/embedding-warmup-policy.d.ts +14 -0
  76. package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
  77. package/dist/runtime/ensure-local-inference-handler.d.ts +70 -0
  78. package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  79. package/dist/runtime/index.d.ts +15 -0
  80. package/dist/runtime/index.d.ts.map +1 -0
  81. package/dist/runtime/index.js +38768 -0
  82. package/dist/runtime/index.js.map +217 -0
  83. package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
  84. package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  85. package/dist/runtime/voice-entity-binding.d.ts +113 -0
  86. package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
  87. package/dist/services/active-model.d.ts +310 -0
  88. package/dist/services/active-model.d.ts.map +1 -0
  89. package/dist/services/asr-provenance.d.ts +5 -0
  90. package/dist/services/asr-provenance.d.ts.map +1 -0
  91. package/dist/services/assignments.d.ts +84 -0
  92. package/dist/services/assignments.d.ts.map +1 -0
  93. package/dist/services/backend-selector.d.ts +55 -0
  94. package/dist/services/backend-selector.d.ts.map +1 -0
  95. package/dist/services/backend.d.ts +440 -0
  96. package/dist/services/backend.d.ts.map +1 -0
  97. package/dist/services/bionic-host-loader.d.ts +67 -0
  98. package/dist/services/bionic-host-loader.d.ts.map +1 -0
  99. package/dist/services/bundled-models.d.ts +34 -0
  100. package/dist/services/bundled-models.d.ts.map +1 -0
  101. package/dist/services/cache-bridge.d.ts +206 -0
  102. package/dist/services/cache-bridge.d.ts.map +1 -0
  103. package/dist/services/catalog.d.ts +10 -0
  104. package/dist/services/catalog.d.ts.map +1 -0
  105. package/dist/services/checkpoint-client.d.ts +109 -0
  106. package/dist/services/checkpoint-client.d.ts.map +1 -0
  107. package/dist/services/checkpoint-manager.d.ts +217 -0
  108. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  109. package/dist/services/cloud-fallback.d.ts +102 -0
  110. package/dist/services/cloud-fallback.d.ts.map +1 -0
  111. package/dist/services/context-fit.d.ts +36 -0
  112. package/dist/services/context-fit.d.ts.map +1 -0
  113. package/dist/services/conversation-registry.d.ts +142 -0
  114. package/dist/services/conversation-registry.d.ts.map +1 -0
  115. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts +111 -0
  116. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  117. package/dist/services/device-bridge.d.ts +188 -0
  118. package/dist/services/device-bridge.d.ts.map +1 -0
  119. package/dist/services/device-resource-metrics.d.ts +149 -0
  120. package/dist/services/device-resource-metrics.d.ts.map +1 -0
  121. package/dist/services/device-tier.d.ts +133 -0
  122. package/dist/services/device-tier.d.ts.map +1 -0
  123. package/dist/services/downloader.d.ts +94 -0
  124. package/dist/services/downloader.d.ts.map +1 -0
  125. package/dist/services/engine.d.ts +579 -0
  126. package/dist/services/engine.d.ts.map +1 -0
  127. package/dist/services/ensure-local-artifacts.d.ts +82 -0
  128. package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
  129. package/dist/services/external-scanner.d.ts +17 -0
  130. package/dist/services/external-scanner.d.ts.map +1 -0
  131. package/dist/services/ffi-llm-mock.d.ts +90 -0
  132. package/dist/services/ffi-llm-mock.d.ts.map +1 -0
  133. package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
  134. package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
  135. package/dist/services/ffi-streaming-backend.d.ts +201 -0
  136. package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
  137. package/dist/services/ffi-streaming-runner.d.ts +146 -0
  138. package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
  139. package/dist/services/gpu-autotune.d.ts +150 -0
  140. package/dist/services/gpu-autotune.d.ts.map +1 -0
  141. package/dist/services/gpu-detect.d.ts +56 -0
  142. package/dist/services/gpu-detect.d.ts.map +1 -0
  143. package/dist/services/handler-registry.d.ts +72 -0
  144. package/dist/services/handler-registry.d.ts.map +1 -0
  145. package/dist/services/hardware.d.ts +63 -0
  146. package/dist/services/hardware.d.ts.map +1 -0
  147. package/dist/services/image-description-runtime.d.ts +14 -0
  148. package/dist/services/image-description-runtime.d.ts.map +1 -0
  149. package/dist/services/imagegen/aosp-unavailable.d.ts +134 -0
  150. package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  151. package/dist/services/imagegen/backend-selector.d.ts +118 -0
  152. package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
  153. package/dist/services/imagegen/coreml-unavailable.d.ts +105 -0
  154. package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  155. package/dist/services/imagegen/errors.d.ts +16 -0
  156. package/dist/services/imagegen/errors.d.ts.map +1 -0
  157. package/dist/services/imagegen/index.d.ts +58 -0
  158. package/dist/services/imagegen/index.d.ts.map +1 -0
  159. package/dist/services/imagegen/mflux.d.ts +74 -0
  160. package/dist/services/imagegen/mflux.d.ts.map +1 -0
  161. package/dist/services/imagegen/sd-cpp.d.ts +181 -0
  162. package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
  163. package/dist/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  164. package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  165. package/dist/services/imagegen/types.d.ts +181 -0
  166. package/dist/services/imagegen/types.d.ts.map +1 -0
  167. package/dist/services/index.d.ts +31 -0
  168. package/dist/services/index.d.ts.map +1 -0
  169. package/dist/services/index.js +39453 -0
  170. package/dist/services/index.js.map +227 -0
  171. package/dist/services/inference-capabilities.d.ts +132 -0
  172. package/dist/services/inference-capabilities.d.ts.map +1 -0
  173. package/dist/services/inference-telemetry.d.ts +59 -0
  174. package/dist/services/inference-telemetry.d.ts.map +1 -0
  175. package/dist/services/ios-llama-streaming.d.ts +119 -0
  176. package/dist/services/ios-llama-streaming.d.ts.map +1 -0
  177. package/dist/services/kv-spill.d.ts +189 -0
  178. package/dist/services/kv-spill.d.ts.map +1 -0
  179. package/dist/services/latency-trace.d.ts +346 -0
  180. package/dist/services/latency-trace.d.ts.map +1 -0
  181. package/dist/services/lib-target.d.ts +55 -0
  182. package/dist/services/lib-target.d.ts.map +1 -0
  183. package/dist/services/live-signals.d.ts +86 -0
  184. package/dist/services/live-signals.d.ts.map +1 -0
  185. package/dist/services/llama-server-metrics.d.ts +114 -0
  186. package/dist/services/llama-server-metrics.d.ts.map +1 -0
  187. package/dist/services/llm-streaming-binding.d.ts +96 -0
  188. package/dist/services/llm-streaming-binding.d.ts.map +1 -0
  189. package/dist/services/load-args.d.ts +82 -0
  190. package/dist/services/load-args.d.ts.map +1 -0
  191. package/dist/services/manifest/index.d.ts +4 -0
  192. package/dist/services/manifest/index.d.ts.map +1 -0
  193. package/dist/services/manifest/schema.d.ts +903 -0
  194. package/dist/services/manifest/schema.d.ts.map +1 -0
  195. package/dist/services/manifest/types.d.ts +32 -0
  196. package/dist/services/manifest/types.d.ts.map +1 -0
  197. package/dist/services/manifest/validator.d.ts +66 -0
  198. package/dist/services/manifest/validator.d.ts.map +1 -0
  199. package/dist/services/memory-arbiter.d.ts +348 -0
  200. package/dist/services/memory-arbiter.d.ts.map +1 -0
  201. package/dist/services/memory-benchmark.d.ts +76 -0
  202. package/dist/services/memory-benchmark.d.ts.map +1 -0
  203. package/dist/services/memory-monitor.d.ts +128 -0
  204. package/dist/services/memory-monitor.d.ts.map +1 -0
  205. package/dist/services/memory-pressure.d.ts +130 -0
  206. package/dist/services/memory-pressure.d.ts.map +1 -0
  207. package/dist/services/mtp-doctor.d.ts +13 -0
  208. package/dist/services/mtp-doctor.d.ts.map +1 -0
  209. package/dist/services/network-policy.d.ts +127 -0
  210. package/dist/services/network-policy.d.ts.map +1 -0
  211. package/dist/services/paths.d.ts +6 -0
  212. package/dist/services/paths.d.ts.map +1 -0
  213. package/dist/services/planner-skeleton.d.ts +124 -0
  214. package/dist/services/planner-skeleton.d.ts.map +1 -0
  215. package/dist/services/providers.d.ts +38 -0
  216. package/dist/services/providers.d.ts.map +1 -0
  217. package/dist/services/ram-budget.d.ts +110 -0
  218. package/dist/services/ram-budget.d.ts.map +1 -0
  219. package/dist/services/readiness.d.ts +9 -0
  220. package/dist/services/readiness.d.ts.map +1 -0
  221. package/dist/services/recommendation.d.ts +111 -0
  222. package/dist/services/recommendation.d.ts.map +1 -0
  223. package/dist/services/registry.d.ts +33 -0
  224. package/dist/services/registry.d.ts.map +1 -0
  225. package/dist/services/router-handler.d.ts +92 -0
  226. package/dist/services/router-handler.d.ts.map +1 -0
  227. package/dist/services/routing-policy.d.ts +92 -0
  228. package/dist/services/routing-policy.d.ts.map +1 -0
  229. package/dist/services/routing-preferences.d.ts +8 -0
  230. package/dist/services/routing-preferences.d.ts.map +1 -0
  231. package/dist/services/runtime-target.d.ts +98 -0
  232. package/dist/services/runtime-target.d.ts.map +1 -0
  233. package/dist/services/service.d.ts +128 -0
  234. package/dist/services/service.d.ts.map +1 -0
  235. package/dist/services/session-pool.d.ts +72 -0
  236. package/dist/services/session-pool.d.ts.map +1 -0
  237. package/dist/services/structured-output/deterministic-repair.d.ts +23 -0
  238. package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
  239. package/dist/services/structured-output/index.d.ts +2 -0
  240. package/dist/services/structured-output/index.d.ts.map +1 -0
  241. package/dist/services/structured-output.d.ts +311 -0
  242. package/dist/services/structured-output.d.ts.map +1 -0
  243. package/dist/services/system-memory.d.ts +33 -0
  244. package/dist/services/system-memory.d.ts.map +1 -0
  245. package/dist/services/types.d.ts +19 -0
  246. package/dist/services/types.d.ts.map +1 -0
  247. package/dist/services/verify-on-device.d.ts +34 -0
  248. package/dist/services/verify-on-device.d.ts.map +1 -0
  249. package/dist/services/verify.d.ts +8 -0
  250. package/dist/services/verify.d.ts.map +1 -0
  251. package/dist/services/vision/aosp-unavailable.d.ts +115 -0
  252. package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
  253. package/dist/services/vision/capacitor-llama.d.ts +99 -0
  254. package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
  255. package/dist/services/vision/cloud-fallback.d.ts +47 -0
  256. package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
  257. package/dist/services/vision/hash.d.ts +71 -0
  258. package/dist/services/vision/hash.d.ts.map +1 -0
  259. package/dist/services/vision/index.d.ts +95 -0
  260. package/dist/services/vision/index.d.ts.map +1 -0
  261. package/dist/services/vision/llama-server.d.ts +73 -0
  262. package/dist/services/vision/llama-server.d.ts.map +1 -0
  263. package/dist/services/vision/types.d.ts +162 -0
  264. package/dist/services/vision/types.d.ts.map +1 -0
  265. package/dist/services/vision/vast-fallback.d.ts +18 -0
  266. package/dist/services/vision/vast-fallback.d.ts.map +1 -0
  267. package/dist/services/vision-embedding-cache.d.ts +98 -0
  268. package/dist/services/vision-embedding-cache.d.ts.map +1 -0
  269. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
  270. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
  271. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
  272. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
  273. package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
  274. package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
  275. package/dist/services/voice/audio-frame-consumer.d.ts +294 -0
  276. package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
  277. package/dist/services/voice/barge-in.d.ts +112 -0
  278. package/dist/services/voice/barge-in.d.ts.map +1 -0
  279. package/dist/services/voice/cancellation-coordinator.d.ts +127 -0
  280. package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
  281. package/dist/services/voice/checkpoint-manager.d.ts +199 -0
  282. package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
  283. package/dist/services/voice/checkpoint-policy.d.ts +178 -0
  284. package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
  285. package/dist/services/voice/corpus-augment.d.ts +111 -0
  286. package/dist/services/voice/corpus-augment.d.ts.map +1 -0
  287. package/dist/services/voice/corpus-generator.d.ts +134 -0
  288. package/dist/services/voice/corpus-generator.d.ts.map +1 -0
  289. package/dist/services/voice/diarization-error-rate.d.ts +40 -0
  290. package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
  291. package/dist/services/voice/e2e-harness.d.ts +297 -0
  292. package/dist/services/voice/e2e-harness.d.ts.map +1 -0
  293. package/dist/services/voice/eager-context-builder.d.ts +170 -0
  294. package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
  295. package/dist/services/voice/echo-delay.d.ts +67 -0
  296. package/dist/services/voice/echo-delay.d.ts.map +1 -0
  297. package/dist/services/voice/echo-metrics.d.ts +7 -0
  298. package/dist/services/voice/echo-metrics.d.ts.map +1 -0
  299. package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
  300. package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
  301. package/dist/services/voice/eliza1-eot-scorer.d.ts +124 -0
  302. package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  303. package/dist/services/voice/embedding-server.d.ts +37 -0
  304. package/dist/services/voice/embedding-server.d.ts.map +1 -0
  305. package/dist/services/voice/embedding.d.ts +132 -0
  306. package/dist/services/voice/embedding.d.ts.map +1 -0
  307. package/dist/services/voice/emotion-attribution.d.ts +68 -0
  308. package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
  309. package/dist/services/voice/engine-bridge.d.ts +762 -0
  310. package/dist/services/voice/engine-bridge.d.ts.map +1 -0
  311. package/dist/services/voice/eot-classifier-ggml.d.ts +179 -0
  312. package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  313. package/dist/services/voice/eot-classifier.d.ts +211 -0
  314. package/dist/services/voice/eot-classifier.d.ts.map +1 -0
  315. package/dist/services/voice/errors.d.ts +20 -0
  316. package/dist/services/voice/errors.d.ts.map +1 -0
  317. package/dist/services/voice/expressive-tags.d.ts +158 -0
  318. package/dist/services/voice/expressive-tags.d.ts.map +1 -0
  319. package/dist/services/voice/ffi-bindings.d.ts +696 -0
  320. package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
  321. package/dist/services/voice/first-line-cache.d.ts +181 -0
  322. package/dist/services/voice/first-line-cache.d.ts.map +1 -0
  323. package/dist/services/voice/fused-eot-scorer.d.ts +51 -0
  324. package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
  325. package/dist/services/voice/index.d.ts +96 -0
  326. package/dist/services/voice/index.d.ts.map +1 -0
  327. package/dist/services/voice/kokoro/index.d.ts +24 -0
  328. package/dist/services/voice/kokoro/index.d.ts.map +1 -0
  329. package/dist/services/voice/kokoro/kokoro-backend.d.ts +87 -0
  330. package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  331. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  332. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  333. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  334. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  335. package/dist/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  336. package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  337. package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
  338. package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
  339. package/dist/services/voice/kokoro/phonemizer.d.ts +50 -0
  340. package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  341. package/dist/services/voice/kokoro/pick-runtime.d.ts +61 -0
  342. package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  343. package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
  344. package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  345. package/dist/services/voice/kokoro/types.d.ts +82 -0
  346. package/dist/services/voice/kokoro/types.d.ts.map +1 -0
  347. package/dist/services/voice/kokoro/voice-presets.d.ts +23 -0
  348. package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  349. package/dist/services/voice/kokoro/voices.d.ts +30 -0
  350. package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
  351. package/dist/services/voice/lifecycle.d.ts +135 -0
  352. package/dist/services/voice/lifecycle.d.ts.map +1 -0
  353. package/dist/services/voice/live-diarization-session.d.ts +196 -0
  354. package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
  355. package/dist/services/voice/metric-math.d.ts +10 -0
  356. package/dist/services/voice/metric-math.d.ts.map +1 -0
  357. package/dist/services/voice/mic-source.d.ts +136 -0
  358. package/dist/services/voice/mic-source.d.ts.map +1 -0
  359. package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
  360. package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
  361. package/dist/services/voice/optimistic-policy.d.ts +109 -0
  362. package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
  363. package/dist/services/voice/optimistic-rollback.d.ts +151 -0
  364. package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
  365. package/dist/services/voice/partial-stabilizer.d.ts +73 -0
  366. package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
  367. package/dist/services/voice/phoneme-tokenizer.d.ts +49 -0
  368. package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  369. package/dist/services/voice/phrase-cache.d.ts +76 -0
  370. package/dist/services/voice/phrase-cache.d.ts.map +1 -0
  371. package/dist/services/voice/phrase-chunker.d.ts +62 -0
  372. package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
  373. package/dist/services/voice/pipeline-impls.d.ts +151 -0
  374. package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
  375. package/dist/services/voice/pipeline.d.ts +216 -0
  376. package/dist/services/voice/pipeline.d.ts.map +1 -0
  377. package/dist/services/voice/prefill-client.d.ts +123 -0
  378. package/dist/services/voice/prefill-client.d.ts.map +1 -0
  379. package/dist/services/voice/prefix-preserving-queue.d.ts +113 -0
  380. package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  381. package/dist/services/voice/profile-store.d.ts +248 -0
  382. package/dist/services/voice/profile-store.d.ts.map +1 -0
  383. package/dist/services/voice/ring-buffer.d.ts +40 -0
  384. package/dist/services/voice/ring-buffer.d.ts.map +1 -0
  385. package/dist/services/voice/rollback-queue.d.ts +24 -0
  386. package/dist/services/voice/rollback-queue.d.ts.map +1 -0
  387. package/dist/services/voice/samantha-preset-placeholder.d.ts +67 -0
  388. package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  389. package/dist/services/voice/samantha-preset-regenerator.d.ts +87 -0
  390. package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  391. package/dist/services/voice/scheduler.d.ts +146 -0
  392. package/dist/services/voice/scheduler.d.ts.map +1 -0
  393. package/dist/services/voice/self-voice-imprint.d.ts +33 -0
  394. package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
  395. package/dist/services/voice/shared-resources.d.ts +204 -0
  396. package/dist/services/voice/shared-resources.d.ts.map +1 -0
  397. package/dist/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  398. package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  399. package/dist/services/voice/speaker/diarizer-fused.d.ts +59 -0
  400. package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  401. package/dist/services/voice/speaker/diarizer.d.ts +75 -0
  402. package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
  403. package/dist/services/voice/speaker/encoder-fused.d.ts +60 -0
  404. package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  405. package/dist/services/voice/speaker/encoder-ggml.d.ts +33 -0
  406. package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  407. package/dist/services/voice/speaker/encoder.d.ts +37 -0
  408. package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
  409. package/dist/services/voice/speaker-imprint.d.ts +83 -0
  410. package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
  411. package/dist/services/voice/speaker-preset-cache.d.ts +77 -0
  412. package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
  413. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
  414. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
  415. package/dist/services/voice/system-audio-sink.d.ts +73 -0
  416. package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
  417. package/dist/services/voice/transcriber.d.ts +244 -0
  418. package/dist/services/voice/transcriber.d.ts.map +1 -0
  419. package/dist/services/voice/transcript-knowledge.d.ts +37 -0
  420. package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
  421. package/dist/services/voice/transcript-service.d.ts +60 -0
  422. package/dist/services/voice/transcript-service.d.ts.map +1 -0
  423. package/dist/services/voice/transcript-store.d.ts +64 -0
  424. package/dist/services/voice/transcript-store.d.ts.map +1 -0
  425. package/dist/services/voice/turn-controller.d.ts +183 -0
  426. package/dist/services/voice/turn-controller.d.ts.map +1 -0
  427. package/dist/services/voice/types.d.ts +643 -0
  428. package/dist/services/voice/types.d.ts.map +1 -0
  429. package/dist/services/voice/vad.d.ts +283 -0
  430. package/dist/services/voice/vad.d.ts.map +1 -0
  431. package/dist/services/voice/voice-budget.d.ts +241 -0
  432. package/dist/services/voice/voice-budget.d.ts.map +1 -0
  433. package/dist/services/voice/voice-emotion-classifier.d.ts +95 -0
  434. package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  435. package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
  436. package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
  437. package/dist/services/voice/voice-preset-format.d.ts +158 -0
  438. package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
  439. package/dist/services/voice/voice-profile-artifact.d.ts +116 -0
  440. package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
  441. package/dist/services/voice/voice-profile-routes.d.ts +83 -0
  442. package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
  443. package/dist/services/voice/voice-scenario.d.ts +131 -0
  444. package/dist/services/voice/voice-scenario.d.ts.map +1 -0
  445. package/dist/services/voice/voice-state-machine.d.ts +364 -0
  446. package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
  447. package/dist/services/voice/voice-workbench-report.d.ts +117 -0
  448. package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
  449. package/dist/services/voice/wake-word-ggml.d.ts +100 -0
  450. package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
  451. package/dist/services/voice/wake-word.d.ts +255 -0
  452. package/dist/services/voice/wake-word.d.ts.map +1 -0
  453. package/dist/services/voice/wav-codec.d.ts +11 -0
  454. package/dist/services/voice/wav-codec.d.ts.map +1 -0
  455. package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
  456. package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
  457. package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
  458. package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
  459. package/dist/services/voice/workbench-logic-services.d.ts +36 -0
  460. package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
  461. package/dist/services/voice/workbench-real-services.d.ts +17 -0
  462. package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
  463. package/dist/services/voice/workbench-scenarios.d.ts +24 -0
  464. package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
  465. package/dist/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  466. package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  467. package/dist/services/voice-model-updater.d.ts +240 -0
  468. package/dist/services/voice-model-updater.d.ts.map +1 -0
  469. package/dist/services/voice-prewarm.d.ts +3 -0
  470. package/dist/services/voice-prewarm.d.ts.map +1 -0
  471. package/dist/voice-workbench.d.ts +18 -0
  472. package/dist/voice-workbench.d.ts.map +1 -0
  473. package/dist/voice-workbench.js +5259 -0
  474. package/dist/voice-workbench.js.map +34 -0
  475. package/package.json +101 -15
  476. package/registry-entry.json +137 -0
  477. package/src/actions/generate-media.ts +647 -0
  478. package/src/actions/identify-speaker.ts +171 -0
  479. package/src/actions/transcription-control.test.ts +100 -0
  480. package/src/actions/transcription-control.ts +127 -0
  481. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  482. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  483. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  484. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  485. package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -0
  486. package/src/adapters/capacitor-llama/environment.ts +71 -0
  487. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  488. package/src/adapters/capacitor-llama/index.ts +831 -0
  489. package/src/adapters/capacitor-llama/loader.ts +109 -0
  490. package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -0
  491. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  492. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  493. package/src/adapters/capacitor-llama/types.ts +374 -0
  494. package/src/adapters/capacitor-llama/voice-turn.ts +178 -0
  495. package/src/backends/apple-foundation.ts +127 -0
  496. package/src/index.ts +62 -0
  497. package/src/local-inference-routes.test.ts +390 -0
  498. package/src/local-inference-routes.ts +1625 -0
  499. package/src/provider.ts +1111 -0
  500. package/src/routes/compat-helpers.ts +275 -0
  501. package/src/routes/family-member-route.ts +353 -0
  502. package/src/routes/index.ts +61 -0
  503. package/src/routes/live-diarization-route.test.ts +347 -0
  504. package/src/routes/live-diarization-route.ts +198 -0
  505. package/src/routes/local-inference-asr-route.test.ts +246 -0
  506. package/src/routes/local-inference-asr-route.ts +166 -0
  507. package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
  508. package/src/routes/local-inference-asr-transcribe.ts +97 -0
  509. package/src/routes/local-inference-compat-routes.test.ts +485 -0
  510. package/src/routes/local-inference-compat-routes.ts +775 -0
  511. package/src/routes/local-inference-tts-route.test.ts +179 -0
  512. package/src/routes/local-inference-tts-route.ts +230 -0
  513. package/src/routes/native-pcm-turn-route.test.ts +136 -0
  514. package/src/routes/native-pcm-turn-route.ts +121 -0
  515. package/src/routes/transcript-audio-store.ts +27 -0
  516. package/src/routes/transcripts-routes.test.ts +195 -0
  517. package/src/routes/transcripts-routes.ts +191 -0
  518. package/src/routes/voice-first-run-routes.ts +524 -0
  519. package/src/routes/voice-models-routes.ts +554 -0
  520. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  521. package/src/routes/voice-profiles-management-routes.ts +476 -0
  522. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  523. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  524. package/src/runtime/bionic-wire-encoding.test.ts +147 -0
  525. package/src/runtime/capacitor-llama.d.ts +25 -0
  526. package/src/runtime/embedding-manager-support.ts +497 -0
  527. package/src/runtime/embedding-presets.ts +81 -0
  528. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  529. package/src/runtime/embedding-warmup-policy.ts +48 -0
  530. package/src/runtime/ensure-local-inference-handler.test.ts +726 -0
  531. package/src/runtime/ensure-local-inference-handler.ts +1640 -0
  532. package/src/runtime/index.ts +36 -0
  533. package/src/runtime/mobile-local-inference-gate.test.ts +152 -0
  534. package/src/runtime/mobile-local-inference-gate.ts +99 -0
  535. package/src/runtime/voice-entity-binding.transcript.test.ts +98 -0
  536. package/src/runtime/voice-entity-binding.ts +368 -0
  537. package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
  538. package/src/services/README.md +71 -0
  539. package/src/services/__tests__/backend-selector.precedence.test.ts +333 -0
  540. package/src/services/__tests__/backend-selector.test.ts +101 -0
  541. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  542. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  543. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  544. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  545. package/src/services/__tests__/runtime-target.test.ts +176 -0
  546. package/src/services/active-model-context-fit.test.ts +125 -0
  547. package/src/services/active-model-switch-rollback.test.ts +183 -0
  548. package/src/services/active-model.ts +1416 -0
  549. package/src/services/asr-provenance.ts +68 -0
  550. package/src/services/assignment-validation.test.ts +118 -0
  551. package/src/services/assignments.test.ts +106 -0
  552. package/src/services/assignments.ts +278 -0
  553. package/src/services/backend-selector.ts +95 -0
  554. package/src/services/backend.test.ts +84 -0
  555. package/src/services/backend.ts +791 -0
  556. package/src/services/bionic-host-loader.test.ts +226 -0
  557. package/src/services/bionic-host-loader.ts +252 -0
  558. package/src/services/bundled-models.ts +129 -0
  559. package/src/services/cache-bridge.test.ts +516 -0
  560. package/src/services/cache-bridge.ts +423 -0
  561. package/src/services/catalog.test.ts +259 -0
  562. package/src/services/catalog.ts +33 -0
  563. package/src/services/checkpoint-client.ts +258 -0
  564. package/src/services/checkpoint-manager.ts +474 -0
  565. package/src/services/cloud-fallback.ts +230 -0
  566. package/src/services/context-fit.test.ts +121 -0
  567. package/src/services/context-fit.ts +113 -0
  568. package/src/services/conversation-registry.test.ts +235 -0
  569. package/src/services/conversation-registry.ts +264 -0
  570. package/src/services/desktop-fused-ffi-backend-runtime.ts +431 -0
  571. package/src/services/device-bridge.ts +1237 -0
  572. package/src/services/device-resource-metrics.test.ts +98 -0
  573. package/src/services/device-resource-metrics.ts +346 -0
  574. package/src/services/device-tier.test.ts +458 -0
  575. package/src/services/device-tier.ts +502 -0
  576. package/src/services/downloader.test.ts +888 -0
  577. package/src/services/downloader.ts +1039 -0
  578. package/src/services/engine-direct-bundle.test.ts +90 -0
  579. package/src/services/engine-streaming.test.ts +80 -0
  580. package/src/services/engine.ts +2096 -0
  581. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  582. package/src/services/ensure-local-artifacts.test.ts +368 -0
  583. package/src/services/ensure-local-artifacts.ts +351 -0
  584. package/src/services/external-scanner.ts +312 -0
  585. package/src/services/ffi-llm-mock.ts +354 -0
  586. package/src/services/ffi-llm-streaming-abi.ts +445 -0
  587. package/src/services/ffi-streaming-backend.ts +418 -0
  588. package/src/services/ffi-streaming-runner.test.ts +220 -0
  589. package/src/services/ffi-streaming-runner.ts +407 -0
  590. package/src/services/ffi-unload-ordering.test.ts +166 -0
  591. package/src/services/fused-eliza1-no-regression.test.ts +144 -0
  592. package/src/services/gpu-autotune.ts +534 -0
  593. package/src/services/gpu-detect.ts +139 -0
  594. package/src/services/handler-registry.ts +240 -0
  595. package/src/services/hardware.test.ts +236 -0
  596. package/src/services/hardware.ts +438 -0
  597. package/src/services/image-description-runtime.test.ts +61 -0
  598. package/src/services/image-description-runtime.ts +118 -0
  599. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  600. package/src/services/imagegen/backend-selector.test.ts +190 -0
  601. package/src/services/imagegen/backend-selector.ts +277 -0
  602. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  603. package/src/services/imagegen/errors.ts +40 -0
  604. package/src/services/imagegen/index.ts +144 -0
  605. package/src/services/imagegen/mflux.ts +313 -0
  606. package/src/services/imagegen/sd-cpp.ts +715 -0
  607. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  608. package/src/services/imagegen/types.ts +193 -0
  609. package/src/services/index.ts +229 -0
  610. package/src/services/inference-capabilities.test.ts +75 -0
  611. package/src/services/inference-capabilities.ts +204 -0
  612. package/src/services/inference-telemetry.ts +143 -0
  613. package/src/services/ios-llama-streaming.ts +248 -0
  614. package/src/services/kv-spill.test.ts +222 -0
  615. package/src/services/kv-spill.ts +357 -0
  616. package/src/services/latency-trace.test.ts +266 -0
  617. package/src/services/latency-trace.ts +844 -0
  618. package/src/services/lib-target.test.ts +145 -0
  619. package/src/services/lib-target.ts +102 -0
  620. package/src/services/live-signals.test.ts +132 -0
  621. package/src/services/live-signals.ts +177 -0
  622. package/src/services/llama-server-metrics.test.ts +168 -0
  623. package/src/services/llama-server-metrics.ts +304 -0
  624. package/src/services/llm-streaming-binding.ts +136 -0
  625. package/src/services/load-args.ts +81 -0
  626. package/src/services/manifest/eliza-1.manifest.v1.json +790 -0
  627. package/src/services/manifest/index.ts +72 -0
  628. package/src/services/manifest/manifest.test.ts +791 -0
  629. package/src/services/manifest/schema.ts +761 -0
  630. package/src/services/manifest/types.ts +61 -0
  631. package/src/services/manifest/validator.ts +633 -0
  632. package/src/services/memory-arbiter.test.ts +558 -0
  633. package/src/services/memory-arbiter.ts +991 -0
  634. package/src/services/memory-benchmark.test.ts +91 -0
  635. package/src/services/memory-benchmark.ts +354 -0
  636. package/src/services/memory-monitor.test.ts +232 -0
  637. package/src/services/memory-monitor.ts +309 -0
  638. package/src/services/memory-pressure.ts +414 -0
  639. package/src/services/mtp-doctor.ts +86 -0
  640. package/src/services/network-policy.ts +346 -0
  641. package/src/services/paths.ts +25 -0
  642. package/src/services/planner-skeleton.ts +175 -0
  643. package/src/services/providers.ts +507 -0
  644. package/src/services/ram-budget-cache.test.ts +164 -0
  645. package/src/services/ram-budget.ts +309 -0
  646. package/src/services/readiness.test.ts +87 -0
  647. package/src/services/readiness.ts +238 -0
  648. package/src/services/recommendation.test.ts +216 -0
  649. package/src/services/recommendation.ts +671 -0
  650. package/src/services/registry.ts +157 -0
  651. package/src/services/required-kernels-gate.test.ts +64 -0
  652. package/src/services/router-handler.test.ts +45 -0
  653. package/src/services/router-handler.ts +426 -0
  654. package/src/services/routing-policy.test.ts +352 -0
  655. package/src/services/routing-policy.ts +367 -0
  656. package/src/services/routing-preferences.ts +17 -0
  657. package/src/services/runtime-target.ts +154 -0
  658. package/src/services/service.test.ts +223 -0
  659. package/src/services/service.ts +750 -0
  660. package/src/services/session-pool.ts +153 -0
  661. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  662. package/src/services/structured-output/deterministic-repair.ts +443 -0
  663. package/src/services/structured-output/index.ts +4 -0
  664. package/src/services/structured-output.test.ts +483 -0
  665. package/src/services/structured-output.ts +712 -0
  666. package/src/services/system-memory.test.ts +47 -0
  667. package/src/services/system-memory.ts +67 -0
  668. package/src/services/transcription-priority.test.ts +211 -0
  669. package/src/services/types.ts +59 -0
  670. package/src/services/verify-on-device.test.ts +87 -0
  671. package/src/services/verify-on-device.ts +127 -0
  672. package/src/services/verify.ts +13 -0
  673. package/src/services/vision/aosp-unavailable.ts +163 -0
  674. package/src/services/vision/capacitor-llama.ts +255 -0
  675. package/src/services/vision/cloud-fallback.test.ts +243 -0
  676. package/src/services/vision/cloud-fallback.ts +268 -0
  677. package/src/services/vision/fallback-chain.test.ts +86 -0
  678. package/src/services/vision/hash.ts +157 -0
  679. package/src/services/vision/index.ts +251 -0
  680. package/src/services/vision/llama-server.ts +177 -0
  681. package/src/services/vision/types.ts +163 -0
  682. package/src/services/vision/vast-fallback.ts +127 -0
  683. package/src/services/vision-embedding-cache.ts +189 -0
  684. package/src/services/voice/VOICE_WORKBENCH.md +133 -0
  685. package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
  686. package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
  687. package/src/services/voice/__test-helpers__/synthetic-speech.ts +194 -0
  688. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  689. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  690. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  691. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  692. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  693. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  694. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  695. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  696. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  697. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  698. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
  699. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  700. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  701. package/src/services/voice/acoustic-speaker-attribution.test.ts +165 -0
  702. package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
  703. package/src/services/voice/asr-timed.real.test.ts +139 -0
  704. package/src/services/voice/audio-frame-consumer.test.ts +669 -0
  705. package/src/services/voice/audio-frame-consumer.ts +651 -0
  706. package/src/services/voice/barge-in.test.ts +244 -0
  707. package/src/services/voice/barge-in.ts +335 -0
  708. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  709. package/src/services/voice/cancellation-coordinator.ts +269 -0
  710. package/src/services/voice/checkpoint-manager.ts +401 -0
  711. package/src/services/voice/checkpoint-policy.ts +336 -0
  712. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  713. package/src/services/voice/corpus-augment.test.ts +276 -0
  714. package/src/services/voice/corpus-augment.ts +451 -0
  715. package/src/services/voice/corpus-generator.test.ts +201 -0
  716. package/src/services/voice/corpus-generator.ts +413 -0
  717. package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
  718. package/src/services/voice/diarization-error-rate.test.ts +100 -0
  719. package/src/services/voice/diarization-error-rate.ts +249 -0
  720. package/src/services/voice/e2e-harness.der.test.ts +94 -0
  721. package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
  722. package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
  723. package/src/services/voice/e2e-harness.test.ts +182 -0
  724. package/src/services/voice/e2e-harness.ts +902 -0
  725. package/src/services/voice/eager-context-builder.ts +262 -0
  726. package/src/services/voice/echo-delay.test.ts +118 -0
  727. package/src/services/voice/echo-delay.ts +135 -0
  728. package/src/services/voice/echo-metrics.test.ts +17 -0
  729. package/src/services/voice/echo-metrics.ts +20 -0
  730. package/src/services/voice/echo-reference-buffer.test.ts +86 -0
  731. package/src/services/voice/echo-reference-buffer.ts +165 -0
  732. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  733. package/src/services/voice/embedding-server.ts +200 -0
  734. package/src/services/voice/embedding.test.ts +131 -0
  735. package/src/services/voice/embedding.ts +242 -0
  736. package/src/services/voice/emotion-attribution.test.ts +129 -0
  737. package/src/services/voice/emotion-attribution.ts +361 -0
  738. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  739. package/src/services/voice/engine-bridge-transcript-join.test.ts +278 -0
  740. package/src/services/voice/engine-bridge.test.ts +384 -0
  741. package/src/services/voice/engine-bridge.ts +2343 -0
  742. package/src/services/voice/eot-classifier-ggml.ts +569 -0
  743. package/src/services/voice/eot-classifier.test.ts +98 -0
  744. package/src/services/voice/eot-classifier.ts +422 -0
  745. package/src/services/voice/errors.ts +34 -0
  746. package/src/services/voice/expressive-tags.asr.test.ts +77 -0
  747. package/src/services/voice/expressive-tags.test.ts +102 -0
  748. package/src/services/voice/expressive-tags.ts +405 -0
  749. package/src/services/voice/ffi-bindings.test.ts +735 -0
  750. package/src/services/voice/ffi-bindings.ts +3387 -0
  751. package/src/services/voice/first-line-cache.ts +725 -0
  752. package/src/services/voice/fused-eot-scorer.ts +139 -0
  753. package/src/services/voice/index.ts +502 -0
  754. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +262 -0
  755. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +236 -0
  756. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  757. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  758. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  759. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  760. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  761. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +67 -0
  762. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  763. package/src/services/voice/kokoro/index.ts +79 -0
  764. package/src/services/voice/kokoro/kokoro-backend.ts +223 -0
  765. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  766. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  767. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  768. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  769. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  770. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  771. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  772. package/src/services/voice/kokoro/runtime-selection.ts +64 -0
  773. package/src/services/voice/kokoro/types.ts +95 -0
  774. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  775. package/src/services/voice/kokoro/voices.ts +64 -0
  776. package/src/services/voice/lifecycle.test.ts +315 -0
  777. package/src/services/voice/lifecycle.ts +301 -0
  778. package/src/services/voice/live-diarization-session.echo.test.ts +232 -0
  779. package/src/services/voice/live-diarization-session.ts +622 -0
  780. package/src/services/voice/metric-math.test.ts +61 -0
  781. package/src/services/voice/metric-math.ts +25 -0
  782. package/src/services/voice/mic-source.test.ts +210 -0
  783. package/src/services/voice/mic-source.ts +503 -0
  784. package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
  785. package/src/services/voice/nlms-echo-canceller.ts +317 -0
  786. package/src/services/voice/optimistic-policy.power-source.test.ts +36 -0
  787. package/src/services/voice/optimistic-policy.test.ts +101 -0
  788. package/src/services/voice/optimistic-policy.ts +192 -0
  789. package/src/services/voice/optimistic-rollback.ts +343 -0
  790. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  791. package/src/services/voice/partial-stabilizer.ts +140 -0
  792. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  793. package/src/services/voice/phrase-cache.test.ts +242 -0
  794. package/src/services/voice/phrase-cache.ts +186 -0
  795. package/src/services/voice/phrase-chunker.test.ts +239 -0
  796. package/src/services/voice/phrase-chunker.ts +281 -0
  797. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  798. package/src/services/voice/pipeline-impls.test.ts +292 -0
  799. package/src/services/voice/pipeline-impls.ts +315 -0
  800. package/src/services/voice/pipeline.ts +504 -0
  801. package/src/services/voice/prefill-client.ts +316 -0
  802. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  803. package/src/services/voice/profile-store.ts +887 -0
  804. package/src/services/voice/real-audio-decode.test.ts +148 -0
  805. package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
  806. package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
  807. package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
  808. package/src/services/voice/ring-buffer.test.ts +129 -0
  809. package/src/services/voice/ring-buffer.ts +123 -0
  810. package/src/services/voice/rollback-queue.ts +74 -0
  811. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  812. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  813. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  814. package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
  815. package/src/services/voice/scheduler.t2.test.ts +141 -0
  816. package/src/services/voice/scheduler.ts +927 -0
  817. package/src/services/voice/self-voice-imprint.test.ts +59 -0
  818. package/src/services/voice/self-voice-imprint.ts +102 -0
  819. package/src/services/voice/shared-resources.ts +343 -0
  820. package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
  821. package/src/services/voice/speaker/attribution-pipeline.ts +449 -0
  822. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  823. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  824. package/src/services/voice/speaker/diarizer.ts +218 -0
  825. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  826. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  827. package/src/services/voice/speaker/encoder-ggml.test.ts +59 -0
  828. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  829. package/src/services/voice/speaker/encoder.ts +105 -0
  830. package/src/services/voice/speaker-imprint.test.ts +185 -0
  831. package/src/services/voice/speaker-imprint.ts +312 -0
  832. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  833. package/src/services/voice/speaker-preset-cache.ts +195 -0
  834. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  835. package/src/services/voice/system-audio-sink.test.ts +29 -0
  836. package/src/services/voice/system-audio-sink.ts +366 -0
  837. package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
  838. package/src/services/voice/transcriber.test.ts +392 -0
  839. package/src/services/voice/transcriber.ts +704 -0
  840. package/src/services/voice/transcript-knowledge.test.ts +68 -0
  841. package/src/services/voice/transcript-knowledge.ts +75 -0
  842. package/src/services/voice/transcript-service.test.ts +195 -0
  843. package/src/services/voice/transcript-service.ts +205 -0
  844. package/src/services/voice/transcript-store.test.ts +189 -0
  845. package/src/services/voice/transcript-store.ts +164 -0
  846. package/src/services/voice/turn-controller.test.ts +575 -0
  847. package/src/services/voice/turn-controller.ts +596 -0
  848. package/src/services/voice/types.ts +699 -0
  849. package/src/services/voice/vad.test.ts +498 -0
  850. package/src/services/voice/vad.ts +832 -0
  851. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  852. package/src/services/voice/voice-budget.test.ts +415 -0
  853. package/src/services/voice/voice-budget.ts +635 -0
  854. package/src/services/voice/voice-duet.test.ts +375 -0
  855. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  856. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  857. package/src/services/voice/voice-hardening.fuzz.test.ts +116 -0
  858. package/src/services/voice/voice-preload-predictor.test.ts +130 -0
  859. package/src/services/voice/voice-preload-predictor.ts +113 -0
  860. package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
  861. package/src/services/voice/voice-preset-format.test.ts +75 -0
  862. package/src/services/voice/voice-preset-format.ts +713 -0
  863. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  864. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  865. package/src/services/voice/voice-profile-artifact.ts +518 -0
  866. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  867. package/src/services/voice/voice-profile-routes.ts +425 -0
  868. package/src/services/voice/voice-scenario.test.ts +159 -0
  869. package/src/services/voice/voice-scenario.ts +280 -0
  870. package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -0
  871. package/src/services/voice/voice-state-machine.ts +727 -0
  872. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  873. package/src/services/voice/voice-workbench-report.ts +367 -0
  874. package/src/services/voice/voice-workbench.test.ts +158 -0
  875. package/src/services/voice/voice.test.ts +1070 -0
  876. package/src/services/voice/wake-word-ggml.ts +319 -0
  877. package/src/services/voice/wake-word.test.ts +298 -0
  878. package/src/services/voice/wake-word.ts +554 -0
  879. package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
  880. package/src/services/voice/wav-codec.test.ts +32 -0
  881. package/src/services/voice/wav-codec.ts +101 -0
  882. package/src/services/voice/workbench-entrypoint.test.ts +55 -0
  883. package/src/services/voice/workbench-entrypoint.ts +88 -0
  884. package/src/services/voice/workbench-headless-runner.test.ts +162 -0
  885. package/src/services/voice/workbench-headless-runner.ts +396 -0
  886. package/src/services/voice/workbench-logic-services.test.ts +225 -0
  887. package/src/services/voice/workbench-logic-services.ts +184 -0
  888. package/src/services/voice/workbench-real-services.ts +629 -0
  889. package/src/services/voice/workbench-scenarios.ts +407 -0
  890. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  891. package/src/services/voice-model-updater.ts +724 -0
  892. package/src/services/voice-prewarm.ts +51 -0
  893. package/src/voice-workbench.ts +71 -0
@@ -0,0 +1,61 @@
1
+ // TypeScript types derived from the Zod schema in `./schema.ts`.
2
+ // Importing this module gives consumers a strongly-typed view of an Eliza-1
3
+ // manifest without depending on Zod at runtime — useful for catalog code,
4
+ // recommendation, and downloader interfaces that only read manifests.
5
+
6
+ import type { z } from "zod";
7
+ import type { CpuFeatureProbe } from "../types";
8
+ import type {
9
+ ELIZA_1_PROVENANCE_SLOTS,
10
+ ELIZA_1_RELEASE_CHANNELS,
11
+ ELIZA_1_RELEASE_STATES,
12
+ Eliza1BackendEnumSchema,
13
+ Eliza1EvalsSchema,
14
+ Eliza1FileEntrySchema,
15
+ Eliza1FilesSchema,
16
+ Eliza1KernelEnumSchema,
17
+ Eliza1KernelsSchema,
18
+ Eliza1LibFileEntrySchema,
19
+ Eliza1LineageSchema,
20
+ Eliza1ManifestSchema,
21
+ Eliza1ProvenanceSchema,
22
+ Eliza1RamBudgetSchema,
23
+ Eliza1TextRuntimeClassEnumSchema,
24
+ Eliza1TierEnumSchema,
25
+ Eliza1VerifiedBackendStatusSchema,
26
+ Eliza1VoiceSchema,
27
+ } from "./schema";
28
+
29
+ export type Eliza1Tier = z.infer<typeof Eliza1TierEnumSchema>;
30
+ export type Eliza1Kernel = z.infer<typeof Eliza1KernelEnumSchema>;
31
+ export type Eliza1Backend = z.infer<typeof Eliza1BackendEnumSchema>;
32
+ export type Eliza1TextRuntimeClass = z.infer<
33
+ typeof Eliza1TextRuntimeClassEnumSchema
34
+ >;
35
+ export type Eliza1FileEntry = z.infer<typeof Eliza1FileEntrySchema>;
36
+ export type Eliza1LibFileEntry = z.infer<typeof Eliza1LibFileEntrySchema>;
37
+ export type Eliza1Files = z.infer<typeof Eliza1FilesSchema>;
38
+ export type Eliza1Lineage = z.infer<typeof Eliza1LineageSchema>;
39
+ export type Eliza1Kernels = z.infer<typeof Eliza1KernelsSchema>;
40
+ export type Eliza1Evals = z.infer<typeof Eliza1EvalsSchema>;
41
+ export type Eliza1RamBudget = z.infer<typeof Eliza1RamBudgetSchema>;
42
+ export type Eliza1Voice = z.infer<typeof Eliza1VoiceSchema>;
43
+ export type Eliza1Provenance = z.infer<typeof Eliza1ProvenanceSchema>;
44
+ export type Eliza1ProvenanceSlot = (typeof ELIZA_1_PROVENANCE_SLOTS)[number];
45
+ export type Eliza1ReleaseState = (typeof ELIZA_1_RELEASE_STATES)[number];
46
+ export type Eliza1ReleaseChannel = (typeof ELIZA_1_RELEASE_CHANNELS)[number];
47
+ export type Eliza1VerifiedBackendStatus = z.infer<
48
+ typeof Eliza1VerifiedBackendStatusSchema
49
+ >;
50
+ export type Eliza1Manifest = z.infer<typeof Eliza1ManifestSchema>;
51
+
52
+ /**
53
+ * Capability snapshot of a target device — whatever the runtime detected
54
+ * (Metal on Mac, Vulkan on Linux/Android, CUDA on NVIDIA, CPU as floor).
55
+ * `canSetAsDefault()` checks the manifest's verifiedBackends against this.
56
+ */
57
+ export interface Eliza1DeviceCaps {
58
+ availableBackends: ReadonlyArray<Eliza1Backend>;
59
+ ramMb: number;
60
+ cpuFeatures?: CpuFeatureProbe;
61
+ }
@@ -0,0 +1,633 @@
1
+ // Runtime validator and capability-check helpers for Eliza-1 manifests.
2
+ //
3
+ // Two layers of validation:
4
+ //
5
+ // 1. Schema validation (Zod) — shape + types + per-field invariants.
6
+ // 2. Contract validation (this file) — cross-field rules from
7
+ // packages/inference/AGENTS.md §3 + §6:
8
+ // - required-kernel set per tier is satisfied,
9
+ // - long-context bundles (ctx > 64k) require `turbo3_tcq`,
10
+ // - structural bundle invariants (voice-preset cache present, lineage
11
+ // ↔ files consistency, base-v1 provenance coverage),
12
+ // - and — for a *production* release only (`base-v1` / `finetuned-v2` /
13
+ // `final`, or any `defaultEligible: true` manifest) — every supported
14
+ // backend kernel-verified `pass` and every eval green. A
15
+ // candidate/staging release (`base-v1-candidate` / `local-standin` /
16
+ // `upload-candidate`) is publishable + installable on a device whose
17
+ // backend it verified, but is not held to the full bar; its
18
+ // `defaultEligible` must stay false.
19
+ //
20
+ // `defaultEligible: true` is the strongest claim a manifest can make. The
21
+ // validator REFUSES the combination of `defaultEligible: true` and any
22
+ // failing contract rule. This mirrors the publish-side gate in
23
+ // `packages/training/scripts/manifest/eliza1_manifest.py`.
24
+
25
+ import {
26
+ collectQwenAsrProvenanceBlockers,
27
+ QWEN_PROVENANCE_RE,
28
+ } from "../asr-provenance";
29
+ import {
30
+ ELIZA_1_TOKENIZER_FAMILY,
31
+ ELIZA_1_TOKENIZER_VOCAB_SIZE,
32
+ Eliza1ManifestSchema,
33
+ EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD,
34
+ EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT,
35
+ EMOTION_CLASSIFIER_MELD_F1_THRESHOLD,
36
+ REQUIRED_KERNELS_BY_TIER,
37
+ SUPPORTED_BACKENDS_BY_TIER,
38
+ TURN_DETECTOR_F1_THRESHOLD,
39
+ TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT,
40
+ VOICE_PRESET_CACHE_PATH,
41
+ } from "./schema";
42
+ import type {
43
+ Eliza1Backend,
44
+ Eliza1DeviceCaps,
45
+ Eliza1Kernel,
46
+ Eliza1Manifest,
47
+ Eliza1Tier,
48
+ } from "./types";
49
+
50
+ export interface ValidationOk {
51
+ ok: true;
52
+ manifest: Eliza1Manifest;
53
+ }
54
+
55
+ export interface ValidationErr {
56
+ ok: false;
57
+ errors: ReadonlyArray<string>;
58
+ }
59
+
60
+ export type ValidationResult = ValidationOk | ValidationErr;
61
+
62
+ /**
63
+ * Schema + contract validation. Returns a Result-shaped object so callers
64
+ * can inspect every error rather than catching the first thrown one.
65
+ *
66
+ * Throws nothing for invalid input — invalid manifests are reported via
67
+ * `{ ok: false, errors }`. Truly exceptional cases (non-object input)
68
+ * surface as Zod issues, not exceptions.
69
+ */
70
+ export function validateManifest(input: unknown): ValidationResult {
71
+ const parsed = Eliza1ManifestSchema.safeParse(input);
72
+ if (!parsed.success) {
73
+ return {
74
+ ok: false,
75
+ errors: parsed.error.issues.map(
76
+ (i) => `${i.path.join(".") || "<root>"}: ${i.message}`,
77
+ ),
78
+ };
79
+ }
80
+
81
+ const errors = collectContractErrors(parsed.data, {
82
+ allowVersionStaging: true,
83
+ });
84
+ if (errors.length > 0) {
85
+ return { ok: false, errors };
86
+ }
87
+ return { ok: true, manifest: parsed.data };
88
+ }
89
+
90
+ /**
91
+ * Throws on invalid input. Use this from boot paths where a structured
92
+ * error is already attached at the boundary. Internal use only — UI
93
+ * code should prefer `validateManifest`.
94
+ */
95
+ export function parseManifestOrThrow(input: unknown): Eliza1Manifest {
96
+ const result = validateManifest(input);
97
+ if (result.ok === false) {
98
+ throw new Error(
99
+ `Invalid Eliza-1 manifest:\n - ${result.errors.join("\n - ")}`,
100
+ );
101
+ }
102
+ return result.manifest;
103
+ }
104
+
105
+ /**
106
+ * `canSetAsDefault` is the recommendation-engine gate. A manifest that
107
+ * passes this is allowed to fill an empty default slot for the device:
108
+ *
109
+ * - the manifest is contract-valid (every required kernel declared, every
110
+ * required eval green for a strict release, lineage/files consistent),
111
+ * - the device RAM meets the manifest's `ramBudgetMb.min` floor,
112
+ * - the device exposes at least one backend the manifest verified `pass`
113
+ * on out of the tier's supported set.
114
+ *
115
+ * A `defaultEligible: true` manifest is the strict release: every supported
116
+ * backend kernel-verified `pass`, every required eval green. A
117
+ * `defaultEligible: false` manifest with an explicit candidate/staging
118
+ * `releaseState` (`base-v1-candidate`, `local-standin`, `upload-candidate`)
119
+ * is still permitted to fill an empty default slot **when this device can
120
+ * run it** — the recommender prefers a strict release over a candidate when
121
+ * both are installed (see `isStrictReleaseManifest`). Version-only staging
122
+ * stamps such as `1.0.0-weights-staged.2` are accepted by the install parser
123
+ * so QA bundles can be materialized, but they do not get this auto-default
124
+ * relaxation unless the manifest also carries an explicit staging
125
+ * `releaseState`.
126
+ *
127
+ * The device-caps check rejects "this device has Vulkan only but the
128
+ * manifest only verified Metal/CUDA" — a manifest may be contract-valid
129
+ * but not runnable on this device.
130
+ */
131
+ export function canSetAsDefault(
132
+ manifest: Eliza1Manifest,
133
+ device: Eliza1DeviceCaps,
134
+ ): boolean {
135
+ if (
136
+ collectContractErrors(manifest, { allowVersionStaging: false }).length > 0
137
+ ) {
138
+ return false;
139
+ }
140
+ if (manifest.ramBudgetMb.min > device.ramMb) return false;
141
+
142
+ // The device must expose at least one backend that the manifest verified
143
+ // pass on. Pre-check against the tier's supported set so we don't accept
144
+ // a tier-server bundle on a Mac via the cpu fallback alone.
145
+ const supported = new Set<Eliza1Backend>(
146
+ SUPPORTED_BACKENDS_BY_TIER[manifest.tier],
147
+ );
148
+ const overlapping = device.availableBackends.filter(
149
+ (b) =>
150
+ supported.has(b) &&
151
+ manifest.kernels.verifiedBackends[b].status === "pass",
152
+ );
153
+ return overlapping.length > 0;
154
+ }
155
+
156
+ /**
157
+ * Strict release identifier: a `defaultEligible: true` manifest. The
158
+ * recommender uses this to prefer a strict release over a candidate
159
+ * bundle when both are installed and contract-valid. Mirrors the
160
+ * publish-side `eliza1_gates.yaml` strict bar.
161
+ */
162
+ export function isStrictReleaseManifest(manifest: Eliza1Manifest): boolean {
163
+ return manifest.defaultEligible === true;
164
+ }
165
+
166
+ // ---------------------------------------------------------------------------
167
+ // Internal: contract rules from AGENTS.md §3 + §6
168
+ // ---------------------------------------------------------------------------
169
+
170
+ // Release states that make the full "production" claim: every supported
171
+ // backend kernel-verified `pass`, every eval green. `base-v1` / `finetuned-v2`
172
+ // / `final` are published releases; `defaultEligible: true` always implies it
173
+ // (it is the device auto-default). A manifest with no `provenance` block is
174
+ // treated as production too — that was the only behaviour before this guard,
175
+ // so back-compat holds. `base-v1-candidate` / `local-standin` /
176
+ // `upload-candidate` are publishable + installable on a device whose backend
177
+ // they *did* verify, but are not held to the full bar — their `defaultEligible`
178
+ // must stay false (the schema's `releaseChannel=base-v1 → defaultEligible:false`
179
+ // refinement already enforces that for the base-v1 channel; the validator now
180
+ // honours the release-state vocabulary instead of applying the auto-default
181
+ // bar to every manifest).
182
+ const STRICT_RELEASE_STATES: ReadonlySet<string> = new Set([
183
+ "base-v1",
184
+ "finetuned-v2",
185
+ "final",
186
+ ]);
187
+
188
+ const VISION_TIERS: ReadonlySet<Eliza1Tier> = new Set([
189
+ "2b",
190
+ "4b",
191
+ "9b",
192
+ "27b",
193
+ "27b-256k",
194
+ ]);
195
+
196
+ const MTP_TIERS: ReadonlySet<Eliza1Tier> = new Set([
197
+ "2b",
198
+ "4b",
199
+ "9b",
200
+ "27b",
201
+ "27b-256k",
202
+ ]);
203
+
204
+ const MIN_TEXT_CONTEXT = 131072;
205
+
206
+ const STAGING_VERSION_TOKENS: ReadonlySet<string> = new Set([
207
+ "candidate",
208
+ "staged",
209
+ "dev",
210
+ "local",
211
+ ]);
212
+
213
+ function isStagingManifestVersion(version: string): boolean {
214
+ const prerelease = version.match(
215
+ /^[0-9]+\.[0-9]+\.[0-9]+-([^+]+)(?:\+.*)?$/,
216
+ )?.[1];
217
+ if (!prerelease) return false;
218
+ return prerelease
219
+ .split(/[.-]/)
220
+ .some((token) => STAGING_VERSION_TOKENS.has(token.toLowerCase()));
221
+ }
222
+
223
+ function collectContractErrors(
224
+ m: Eliza1Manifest,
225
+ options: { allowVersionStaging?: boolean } = {},
226
+ ): string[] {
227
+ const errors: string[] = [];
228
+
229
+ const releaseState = m.provenance?.releaseState;
230
+ const strictRelease =
231
+ m.defaultEligible === true ||
232
+ (releaseState === undefined &&
233
+ !(
234
+ options.allowVersionStaging === true &&
235
+ isStagingManifestVersion(m.version)
236
+ )) ||
237
+ (releaseState !== undefined && STRICT_RELEASE_STATES.has(releaseState));
238
+
239
+ // Gemma 4 cutover: a release-shaped (strict/defaultEligible) bundle must be
240
+ // the real Gemma-4 base, never the Qwen3.5 / local-standin placeholder the
241
+ // pre-cutover bundles shipped. Block a stand-in from defining the default.
242
+ if (strictRelease) {
243
+ const textBase = m.lineage.text.base;
244
+ if (
245
+ /^local-standin:/i.test(textBase) ||
246
+ QWEN_PROVENANCE_RE.test(textBase)
247
+ ) {
248
+ errors.push(
249
+ `lineage.text.base: a strict/defaultEligible release must ship the real Gemma-4 base, not a stand-in (${textBase})`,
250
+ );
251
+ }
252
+ errors.push(...collectQwenAsrProvenanceBlockers(m));
253
+ }
254
+
255
+ // Tokenizer identity: when the bundle stamps the Gemma 4 tokenizer block
256
+ // (schemaVersion 2), it must be the shared Gemma 4 tokenizer.
257
+ if (m.tokenizer) {
258
+ if (m.tokenizer.family !== ELIZA_1_TOKENIZER_FAMILY) {
259
+ errors.push(
260
+ `tokenizer.family: expected ${ELIZA_1_TOKENIZER_FAMILY}, got ${m.tokenizer.family}`,
261
+ );
262
+ }
263
+ if (m.tokenizer.vocabSize !== ELIZA_1_TOKENIZER_VOCAB_SIZE) {
264
+ errors.push(
265
+ `tokenizer.vocabSize: expected ${ELIZA_1_TOKENIZER_VOCAB_SIZE}, got ${m.tokenizer.vocabSize}`,
266
+ );
267
+ }
268
+ }
269
+
270
+ // Required-kernel coverage.
271
+ const declaredRequired = new Set<Eliza1Kernel>(m.kernels.required);
272
+ const tierRequired = REQUIRED_KERNELS_BY_TIER[m.tier];
273
+ for (const k of tierRequired) {
274
+ if (!declaredRequired.has(k)) {
275
+ errors.push(
276
+ `kernels.required: missing required kernel for tier ${m.tier}: ${k}`,
277
+ );
278
+ }
279
+ }
280
+
281
+ for (const [i, entry] of m.files.text.entries()) {
282
+ if (typeof entry.ctx !== "number") {
283
+ errors.push(`files.text[${i}].ctx: required for text GGUFs`);
284
+ } else if (entry.ctx < MIN_TEXT_CONTEXT) {
285
+ errors.push(
286
+ `files.text[${i}].ctx: ${entry.ctx} is below the 128k text GGUF floor`,
287
+ );
288
+ }
289
+ if (/-(32k|64k)\.gguf$/i.test(entry.path)) {
290
+ errors.push(
291
+ `files.text[${i}].path: 32k/64k text GGUFs are below the Eliza-1 release floor`,
292
+ );
293
+ }
294
+ }
295
+
296
+ // Gemma 4 cutover (#9033): long-context KV is handled by Gemma's native
297
+ // windowed-SWA + shared-KV at stock q8_0, so the legacy turbo3_tcq trellis
298
+ // KV-cache kernel is no longer a required long-context kernel — it is an
299
+ // optional (head_dim=128) accelerator the Gemma stock-KV path doesn't use.
300
+ // Required kernels are governed by REQUIRED_KERNELS_BY_TIER (turboquant_q4
301
+ // weight-quant), checked above; nothing extra is gated on context length.
302
+
303
+ const visionEnabled = VISION_TIERS.has(m.tier);
304
+ if (visionEnabled) {
305
+ if (m.files.vision.length === 0) {
306
+ errors.push(`files.vision: required for vision-enabled tier ${m.tier}`);
307
+ }
308
+ } else if (m.files.vision.length > 0) {
309
+ errors.push(`files.vision: unsupported for non-vision tier ${m.tier}`);
310
+ }
311
+
312
+ const mtpEnabled = MTP_TIERS.has(m.tier);
313
+ if (mtpEnabled) {
314
+ // Gemma 4 MTP is separate-drafter: every MTP tier bundles a dedicated
315
+ // drafter GGUF at `mtp/drafter-<tier>.gguf` (loaded by llama.cpp as
316
+ // `-md mtp/drafter-<tier>.gguf --spec-type draft-mtp`). A strict release
317
+ // that omits the drafter is not release-shaped (AGENTS.md §1/§3 require
318
+ // MTP on every tier); a candidate/staging bundle may still be
319
+ // materialized without it. The legacy embedded-draft-head shape — no
320
+ // shipped Gemma tier uses it — is honored only when the manifest
321
+ // explicitly declares `mtp: "embedded-draft-head"`.
322
+ if (m.mtp === "embedded-draft-head") {
323
+ if (m.files.mtp.length > 0) {
324
+ errors.push(
325
+ `files.mtp: must be empty for embedded-draft-head MTP tier ${m.tier}`,
326
+ );
327
+ }
328
+ } else {
329
+ const expectedDrafterPath = `mtp/drafter-${m.tier}.gguf`;
330
+ if (m.files.mtp.length === 0) {
331
+ if (strictRelease) {
332
+ errors.push(
333
+ `files.mtp: MTP drafter not bundled — separate-drafter tier ${m.tier} must ship ${expectedDrafterPath}`,
334
+ );
335
+ }
336
+ } else {
337
+ for (const [i, entry] of m.files.mtp.entries()) {
338
+ if (entry.path !== expectedDrafterPath) {
339
+ errors.push(
340
+ `files.mtp[${i}].path: separate-drafter tier ${m.tier} must bundle the drafter at ${expectedDrafterPath}, got ${entry.path}`,
341
+ );
342
+ }
343
+ }
344
+ }
345
+ }
346
+ if (!m.evals.mtp) {
347
+ errors.push(`evals.mtp: required for MTP-enabled tier ${m.tier}`);
348
+ } else {
349
+ if (
350
+ m.evals.mtp.passed &&
351
+ (m.evals.mtp.acceptanceRate == null || m.evals.mtp.speedup == null)
352
+ ) {
353
+ errors.push(
354
+ "evals.mtp.passed: cannot be true when acceptanceRate or speedup is null (needs-hardware bench)",
355
+ );
356
+ }
357
+ if (strictRelease && !m.evals.mtp.passed) {
358
+ errors.push("evals.mtp.passed: false");
359
+ }
360
+ }
361
+ } else if (m.files.mtp.length > 0) {
362
+ errors.push(`files.mtp: unsupported for non-MTP tier ${m.tier}`);
363
+ }
364
+
365
+ // Backend kernel-verify coverage. A production release must verify every
366
+ // backend the tier supports; a candidate/staging bundle need only verify at
367
+ // least one supported backend (the device-side `canSetAsDefault` /
368
+ // installability check then matches the device's available backends against
369
+ // the verified-`pass` set, so a CUDA-only candidate installs on CUDA hosts
370
+ // and is rejected on a Mac whose Metal it never verified).
371
+ const supportedBackends = SUPPORTED_BACKENDS_BY_TIER[m.tier];
372
+ if (strictRelease) {
373
+ for (const b of supportedBackends) {
374
+ const status = m.kernels.verifiedBackends[b].status;
375
+ if (status !== "pass") {
376
+ errors.push(
377
+ `kernels.verifiedBackends.${b}: status is "${status}", expected "pass" for tier ${m.tier}`,
378
+ );
379
+ }
380
+ }
381
+ } else if (
382
+ !supportedBackends.some(
383
+ (b) => m.kernels.verifiedBackends[b].status === "pass",
384
+ )
385
+ ) {
386
+ errors.push(
387
+ `kernels.verifiedBackends: a publishable bundle must report status="pass" on at least one supported backend for tier ${m.tier} (got [${supportedBackends
388
+ .map((b) => `${b}:${m.kernels.verifiedBackends[b].status}`)
389
+ .join(", ")}])`,
390
+ );
391
+ }
392
+
393
+ // The precomputed default-voice speaker preset (`cache/voice-preset-default.bin`)
394
+ // is a mandatory bundle artifact — `EngineVoiceBridge.start()` hard-fails
395
+ // without it (AGENTS.md §4 / inference/AGENTS.md §2). It must be listed in
396
+ // `files.cache` so the downloader fetches it, and when the manifest declares
397
+ // a `voice` block its `cache.speakerPreset` must point at the same path.
398
+ if (!m.files.cache.some((f) => f.path === VOICE_PRESET_CACHE_PATH)) {
399
+ errors.push(`files.cache: missing required ${VOICE_PRESET_CACHE_PATH}`);
400
+ }
401
+ if (m.voice && m.voice.cache.speakerPreset !== VOICE_PRESET_CACHE_PATH) {
402
+ errors.push(
403
+ `voice.cache.speakerPreset: must be ${VOICE_PRESET_CACHE_PATH}, got ${m.voice.cache.speakerPreset}`,
404
+ );
405
+ }
406
+
407
+ // Eval gates. Enforced as pass/fail only for a production release; a
408
+ // candidate/staging bundle still carries the eval blobs (Zod-shape-checked,
409
+ // measured-or-`not-run`) but a non-green eval does not block publish/install
410
+ // — only `defaultEligible` promotion (which requires `strictRelease`).
411
+ if (strictRelease) {
412
+ if (!m.evals.textEval.passed) errors.push("evals.textEval.passed: false");
413
+ if (!m.evals.voiceRtf.passed) errors.push("evals.voiceRtf.passed: false");
414
+ if (!m.evals.e2eLoopOk) errors.push("evals.e2eLoopOk: false");
415
+ if (!m.evals.thirtyTurnOk) errors.push("evals.thirtyTurnOk: false");
416
+ }
417
+
418
+ // Optional component slots must be internally consistent: a shipped
419
+ // component needs auditable lineage, and lineage may not point at a
420
+ // component absent from the bundle. Components that affect runtime quality
421
+ // also require their own publish gate to pass.
422
+ if (m.defaultEligible) {
423
+ if (m.files.asr.length === 0) {
424
+ errors.push(
425
+ "files.asr: required for defaultEligible local voice bundles",
426
+ );
427
+ }
428
+ if ((m.files.vad ?? []).length === 0) {
429
+ errors.push(
430
+ "files.vad: required for defaultEligible local voice bundles",
431
+ );
432
+ }
433
+ }
434
+
435
+ for (const slot of [
436
+ "asr",
437
+ "embedding",
438
+ "imagegen",
439
+ "vision",
440
+ "vad",
441
+ "wakeword",
442
+ "turn",
443
+ "emotion",
444
+ ] as const) {
445
+ const files = m.files[slot] ?? [];
446
+ const lineage = m.lineage[slot];
447
+ if (files.length > 0 && !lineage) {
448
+ errors.push(`lineage.${slot}: required when files.${slot} is non-empty`);
449
+ }
450
+ if (lineage && files.length === 0) {
451
+ errors.push(`files.${slot}: required when lineage.${slot} is present`);
452
+ }
453
+ }
454
+ // Gemma 4 separate-drafter MTP: the bundled drafter GGUF carries its own
455
+ // lineage, governed by the same files<->lineage consistency rule as every
456
+ // other component slot above. (Embedded-draft-head bundles ship no separate
457
+ // drafter, so both files.mtp and lineage.drafter are empty — also satisfied.)
458
+ if (m.files.mtp.length > 0 && !m.lineage.drafter) {
459
+ errors.push("lineage.drafter: required when files.mtp is non-empty");
460
+ }
461
+ if (m.lineage.drafter && m.files.mtp.length === 0) {
462
+ errors.push("files.mtp: required when lineage.drafter is present");
463
+ }
464
+
465
+ if (m.files.asr.length > 0) {
466
+ if (!m.evals.asrWer) {
467
+ errors.push("evals.asrWer: required when files.asr is non-empty");
468
+ } else if (strictRelease && !m.evals.asrWer.passed) {
469
+ errors.push("evals.asrWer.passed: false");
470
+ }
471
+ }
472
+ if ((m.files.embedding ?? []).length > 0) {
473
+ if (!m.evals.embedMteb) {
474
+ errors.push(
475
+ "evals.embedMteb: required when files.embedding is non-empty",
476
+ );
477
+ } else if (strictRelease && !m.evals.embedMteb.passed) {
478
+ errors.push("evals.embedMteb.passed: false");
479
+ }
480
+ }
481
+ if ((m.files.vad ?? []).length > 0) {
482
+ if (!m.evals.vadLatencyMs) {
483
+ errors.push("evals.vadLatencyMs: required when files.vad is non-empty");
484
+ } else if (strictRelease && !m.evals.vadLatencyMs.passed) {
485
+ errors.push("evals.vadLatencyMs.passed: false");
486
+ }
487
+ }
488
+ // Voice Wave 2 (2026-05-14): turn-detector eval gate. When the bundle
489
+ // ships `files.turn` (the LiveKit/Turnsense ONNX) the manifest MUST
490
+ // declare a `turnDetector` eval block; a strict release additionally
491
+ // requires `passed=true` AND the precomputed `passed` field to be
492
+ // internally consistent with the threshold constants.
493
+ if ((m.files.turn ?? []).length > 0) {
494
+ const td = m.evals.turnDetector;
495
+ if (!td) {
496
+ errors.push("evals.turnDetector: required when files.turn is non-empty");
497
+ } else {
498
+ const gateMet =
499
+ td.f1 >= TURN_DETECTOR_F1_THRESHOLD &&
500
+ td.meanLatencyMs <= TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT;
501
+ if (td.passed !== gateMet) {
502
+ errors.push(
503
+ `evals.turnDetector.passed: ${td.passed} disagrees with measured gate (f1=${td.f1} ≥ ${TURN_DETECTOR_F1_THRESHOLD} && meanLatencyMs=${td.meanLatencyMs} ≤ ${TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT} → ${gateMet})`,
504
+ );
505
+ }
506
+ if (strictRelease && !td.passed) {
507
+ errors.push("evals.turnDetector.passed: false");
508
+ }
509
+ }
510
+ }
511
+ const expressiveVoice =
512
+ m.voice?.capabilities.includes("emotion-tags") ||
513
+ m.voice?.capabilities.includes("singing");
514
+ if (expressiveVoice) {
515
+ if (!m.evals.expressive) {
516
+ errors.push(
517
+ "evals.expressive: required when voice capabilities include emotion-tags or singing",
518
+ );
519
+ } else if (strictRelease && !m.evals.expressive.passed) {
520
+ errors.push("evals.expressive.passed: false");
521
+ }
522
+ }
523
+
524
+ // Voice Wave 2 (2026-05-14): acoustic-emotion classifier eval gate. Same
525
+ // shape as `turnDetector`: a bundle that ships `files.emotion` MUST
526
+ // declare a precomputed `emotionClassifier` block; a strict release
527
+ // additionally requires `passed=true` and internal consistency with the
528
+ // threshold constants. The MELD bar is intentionally low (~0.35) per
529
+ // R3-emotion §6 — refusing to publish a real improvement is worse than
530
+ // admitting 7-class conversational SER is hard.
531
+ if ((m.files.emotion ?? []).length > 0) {
532
+ const ec = m.evals.emotionClassifier;
533
+ if (!ec) {
534
+ errors.push(
535
+ "evals.emotionClassifier: required when files.emotion is non-empty",
536
+ );
537
+ } else {
538
+ const gateMet =
539
+ ec.macroF1Meld >= EMOTION_CLASSIFIER_MELD_F1_THRESHOLD &&
540
+ ec.macroF1Iemocap >= EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD &&
541
+ ec.meanLatencyMs <= EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT;
542
+ if (ec.passed !== gateMet) {
543
+ errors.push(
544
+ `evals.emotionClassifier.passed: ${ec.passed} disagrees with measured gate (` +
545
+ `macroF1Meld=${ec.macroF1Meld} ≥ ${EMOTION_CLASSIFIER_MELD_F1_THRESHOLD} && ` +
546
+ `macroF1Iemocap=${ec.macroF1Iemocap} ≥ ${EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD} && ` +
547
+ `meanLatencyMs=${ec.meanLatencyMs} ≤ ${EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT} → ${gateMet})`,
548
+ );
549
+ }
550
+ if (strictRelease && !ec.passed) {
551
+ errors.push("evals.emotionClassifier.passed: false");
552
+ }
553
+ }
554
+ }
555
+
556
+ // base-v1 provenance coverage. A `base-v1` manifest (the upstream base
557
+ // models, GGUF-converted + fully optimized, NOT fine-tuned) MUST record
558
+ // where every shipped component comes from — that is the whole point of
559
+ // the release state.
560
+ if (m.provenance) {
561
+ if (
562
+ m.provenance.releaseState === "base-v1" &&
563
+ m.provenance.finetuned !== false
564
+ ) {
565
+ errors.push(
566
+ "provenance.finetuned: must be false for releaseState=base-v1",
567
+ );
568
+ }
569
+ if (m.provenance.releaseState === "base-v1") {
570
+ const requiredSlots: Array<keyof typeof m.provenance.sourceModels> = [
571
+ "text",
572
+ "voice",
573
+ ];
574
+ for (const slot of ["asr", "vad", "embedding", "vision"] as const) {
575
+ if ((m.files[slot] ?? []).length > 0) requiredSlots.push(slot);
576
+ }
577
+ if (m.files.mtp.length > 0) {
578
+ requiredSlots.push("drafter");
579
+ }
580
+ if ((m.files.imagegen ?? []).length > 0) {
581
+ requiredSlots.push("imagegen");
582
+ }
583
+ for (const slot of requiredSlots) {
584
+ if (!m.provenance.sourceModels[slot]) {
585
+ errors.push(
586
+ `provenance.sourceModels.${slot}: required for releaseState=base-v1 (component is in files.${slot})`,
587
+ );
588
+ }
589
+ }
590
+ }
591
+ }
592
+
593
+ // Speculative-decode bench metadata is always optional. When present, it may
594
+ // record a not-run/failure state; only a passing claim must include measured
595
+ // acceptance/speedup values. The canonical key is `specDecode`; `eagle3` is
596
+ // the back-compat alias accepted for one release.
597
+ const specDecodeEval = m.evals.specDecode ?? m.evals.eagle3;
598
+ if (specDecodeEval) {
599
+ const specDecodePassed = specDecodeEval.passed ?? specDecodeEval.pass;
600
+ if (
601
+ specDecodePassed === true &&
602
+ (specDecodeEval.acceptanceRate == null || specDecodeEval.speedup == null)
603
+ ) {
604
+ errors.push(
605
+ "evals.specDecode: passed=true requires measured acceptanceRate and speedup",
606
+ );
607
+ }
608
+ }
609
+
610
+ // The strongest claim: defaultEligible. If anything above failed, this
611
+ // flag must be false. (Contract errors are already accumulated; we add
612
+ // an explicit message so callers can identify the violation cleanly.)
613
+ if (m.defaultEligible && errors.length > 0) {
614
+ errors.unshift(
615
+ "defaultEligible: true requires all required kernels, supported backends, and evals to pass",
616
+ );
617
+ }
618
+
619
+ return errors;
620
+ }
621
+
622
+ /**
623
+ * Convenience: list missing required kernels for a tier without doing
624
+ * full validation. Used by the recommendation engine when surfacing
625
+ * "this bundle is broken" diagnostics.
626
+ */
627
+ export function missingRequiredKernels(
628
+ tier: Eliza1Tier,
629
+ declaredRequired: ReadonlyArray<Eliza1Kernel>,
630
+ ): ReadonlyArray<Eliza1Kernel> {
631
+ const declared = new Set(declaredRequired);
632
+ return REQUIRED_KERNELS_BY_TIER[tier].filter((k) => !declared.has(k));
633
+ }