@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,761 @@
1
+ // Eliza-1 manifest schema (`eliza-1.manifest.json`).
2
+ //
3
+ // Source of truth in this checkout: this file (the schema) and the sibling
4
+ // `eliza-1.manifest.v1.json` JSON Schema. The upstream elizaOS source has
5
+ // a longer prose specification under `packages/inference/AGENTS.md` (§6
6
+ // manifest, §3 mandatory kernels, §2 bundle/tier matrix); that file does
7
+ // not exist in the eliza checkout — when editing the schema, treat the
8
+ // Zod definitions below as canonical and consult R5-versioning.md §1 for
9
+ // the latest gap analysis between bundle and per-sub-model versioning.
10
+ //
11
+ // Coupling notes:
12
+ // - The kernel names here are *manifest-level* capabilities (what the bundle
13
+ // advertises), not the lower-level llama.cpp kernel handles in `../types.ts`
14
+ // (`turbo3` / `turbo4` / `turbo3_tcq` / `qjl_full`). The two
15
+ // layers map but are not the same enum.
16
+ // - The schema URL `https://elizaos.ai/schemas/eliza-1.manifest.v1.json` is
17
+ // exported as a JSON Schema sibling file in this directory.
18
+ // - Eliza-1 speculative decoding is native llama.cpp MTP. Post-cutover (#9033)
19
+ // every Gemma 4 tier is SEPARATE-DRAFTER: it ships a dedicated drafter GGUF at
20
+ // `mtp/drafter-<tier>.gguf` in `files.mtp` (loaded `-md … --spec-type
21
+ // draft-mtp`), with its own `lineage.drafter`, and declares top-level
22
+ // `mtp: "separate-drafter"`. (The legacy embedded-draft-head shape carried the
23
+ // draft head inside the primary text GGUF with `files.mtp` empty; no shipped
24
+ // Gemma tier uses it.) AGENTS.md §1/§3 require MTP on every tier.
25
+ // - Per-sub-model versioning (kokoro, omnivoice, turn-detector, voice-emotion,
26
+ // diarizer, speaker-encoder, vad, wakeword, embedding, asr) lives in
27
+ // `packages/shared/src/local-inference/voice-models.ts` and the matching
28
+ // `models/voice/CHANGELOG.md`. The bundle manifest below ships the *current*
29
+ // per-tier set of files; the voice-models module ships the *history* the
30
+ // auto-updater walks.
31
+
32
+ import type { LocalRuntimeKernel } from "@elizaos/shared";
33
+ import z from "zod";
34
+
35
+ export const ELIZA_1_MANIFEST_SCHEMA_VERSION = "1" as const;
36
+ export const ELIZA_1_MANIFEST_SCHEMA_URL =
37
+ "https://elizaos.ai/schemas/eliza-1.manifest.v1.json" as const;
38
+
39
+ // The shared Eliza-1 tokenizer (Gemma 4 SentencePiece, 262144-entry vocab),
40
+ // exported so runtime code can assert it. The cutover (#9033) moved eliza-1 to
41
+ // Gemma 4 bases, whose tokenizer family the bundle builder stamps as "gemma4".
42
+ export const ELIZA_1_TOKENIZER_FAMILY = "gemma4" as const;
43
+ export const ELIZA_1_TOKENIZER_VOCAB_SIZE = 262_144 as const;
44
+
45
+ // MTP (speculative-decode) bundle mode. Gemma 4 uses a SEPARATE drafter GGUF
46
+ // (`mtp/drafter-<tier>.gguf`, loaded `-md … --spec-type draft-mtp`); the older
47
+ // embedded-draft-head shape carried the draft head inside the primary text
48
+ // GGUF. AGENTS.md §1/§3 require MTP on every tier.
49
+ export const ELIZA_1_MTP_MODES = [
50
+ "separate-drafter",
51
+ "embedded-draft-head",
52
+ ] as const;
53
+ export type Eliza1MtpMode = (typeof ELIZA_1_MTP_MODES)[number];
54
+
55
+ // Tiers — size-ordered across the active Eliza-1 bundles. 2b is the
56
+ // smallest/entry tier.
57
+ export const ELIZA_1_TIERS = ["2b", "4b", "9b", "27b", "27b-256k"] as const;
58
+ export type Eliza1Tier = (typeof ELIZA_1_TIERS)[number];
59
+
60
+ // Manifest-level kernel capability names. Per AGENTS.md §3:
61
+ // `turboquant_q3`, `turboquant_q4`, `qjl`, `polarquant` are
62
+ // the named optimizations the bundle declares. `turbo3_tcq` is required
63
+ // for any long-context text variant. The C-level llama.cpp kernel handles in
64
+ // `../types.ts` are an implementation detail of the runtime; the manifest
65
+ // speaks in terms of the optimization, not the .metal/.comp file.
66
+ //
67
+ // The relationship to the runtime-side `LocalRuntimeKernel` enum (the
68
+ // llama.cpp-handle layer, declared in `@elizaos/shared/local-inference/types`)
69
+ // is made explicit by `ELIZA1_TO_RUNTIME_KERNEL` / `RUNTIME_TO_ELIZA1_KERNEL`
70
+ // below — that is the single source of truth for the manifest↔runtime kernel
71
+ // bridge.
72
+ export const ELIZA_1_KERNELS = [
73
+ "turboquant_q3",
74
+ "turboquant_q4",
75
+ "qjl",
76
+ "polarquant",
77
+ "turbo3_tcq",
78
+ ] as const;
79
+ export type Eliza1Kernel = (typeof ELIZA_1_KERNELS)[number];
80
+ export type Eliza1RequiredRuntimeKernel = Exclude<
81
+ LocalRuntimeKernel,
82
+ "openvino"
83
+ >;
84
+
85
+ // Manifest-kernel ↔ runtime-kernel bridge.
86
+ //
87
+ // `Eliza1Kernel` (this module, the bundle-manifest layer) names the *named
88
+ // optimization* a bundle advertises; `LocalRuntimeKernel`
89
+ // (`@elizaos/shared/local-inference/types`, the llama.cpp-handle layer) names
90
+ // the *fork kernel handle* the binary must expose. They overlap but are not the
91
+ // same enum:
92
+ //
93
+ // turboquant_q3 ↔ turbo3 (Q3 KV-cache quant kernel)
94
+ // turboquant_q4 ↔ turbo4 (Q4 KV-cache quant kernel)
95
+ // qjl ↔ qjl_full (QuIP#-JL fused-attention kernel)
96
+ // polarquant ↔ polarquant (same name on both layers)
97
+ // turbo3_tcq ↔ turbo3_tcq (same name on both layers)
98
+ //
99
+ // Every Eliza-1 custom-kernel member is covered (both are total maps over the
100
+ // custom W4-B kernel set). `openvino` is a runtime backend capability,
101
+ // not an Eliza-1 bundle optimization, so it intentionally stays outside this
102
+ // bridge. When code needs to translate between the catalog's custom
103
+ // `requiresKernel` entries and the manifest's `kernels.required:
104
+ // Eliza1Kernel[]`, route it through these.
105
+ export const ELIZA1_TO_RUNTIME_KERNEL: Readonly<
106
+ Record<Eliza1Kernel, Eliza1RequiredRuntimeKernel>
107
+ > = {
108
+ turboquant_q3: "turbo3",
109
+ turboquant_q4: "turbo4",
110
+ qjl: "qjl_full",
111
+ polarquant: "polarquant",
112
+ turbo3_tcq: "turbo3_tcq",
113
+ };
114
+
115
+ export const RUNTIME_TO_ELIZA1_KERNEL: Readonly<
116
+ Record<Eliza1RequiredRuntimeKernel, Eliza1Kernel>
117
+ > = {
118
+ turbo3: "turboquant_q3",
119
+ turbo4: "turboquant_q4",
120
+ qjl_full: "qjl",
121
+ polarquant: "polarquant",
122
+ turbo3_tcq: "turbo3_tcq",
123
+ };
124
+
125
+ export const ELIZA_1_BACKENDS = [
126
+ "metal",
127
+ "vulkan",
128
+ "cuda",
129
+ "rocm",
130
+ "cpu",
131
+ ] as const;
132
+ export type Eliza1Backend = (typeof ELIZA_1_BACKENDS)[number];
133
+
134
+ // Required-kernel set per tier. Mirrors the active Gemma 4 Eliza-1 release
135
+ // policy:
136
+ // - Every tier requires only the geometry-agnostic GGUF weight-quant
137
+ // (`turboquant_q4`). Weight quant operates on (out_features, in_features)
138
+ // matmul tensors and is independent of attention head geometry, so it
139
+ // applies to Gemma's dense MQA backbone unchanged.
140
+ // - The KV-cache kernels (`qjl`, `polarquant`, `turbo3_tcq`, and the
141
+ // `turbo3`/`turbo4` runtime handles) are 128-element FWHT-group kernels
142
+ // that are head_dim-coupled. They do NOT match Gemma's MQA geometry
143
+ // (n_head_kv=1) with dual head dims (512 global / 256 SWA), so Gemma 4
144
+ // ships stock q8_0 KV and these kernels are OPTIONAL, never required.
145
+ // They stay compiled into the shared lib for legacy non-Gemma tiers and the
146
+ // shared OmniVoice/ASR FFI symbols, but no Gemma tier declares them
147
+ // required.
148
+ export const REQUIRED_KERNELS_BY_TIER: Readonly<
149
+ Record<Eliza1Tier, ReadonlyArray<Eliza1Kernel>>
150
+ > = {
151
+ "2b": ["turboquant_q4"],
152
+ "4b": ["turboquant_q4"],
153
+ "9b": ["turboquant_q4"],
154
+ "27b": ["turboquant_q4"],
155
+ "27b-256k": ["turboquant_q4"],
156
+ };
157
+
158
+ // KV-cache kernels that remain available but are NOT required for any Gemma 4
159
+ // tier (head_dim=128/FWHT-group coupled; Gemma uses stock q8_0 KV). Surfaced
160
+ // as the optional kernel set for every tier.
161
+ export const OPTIONAL_KERNELS_BY_TIER: Readonly<
162
+ Record<Eliza1Tier, ReadonlyArray<Eliza1Kernel>>
163
+ > = {
164
+ "2b": ["qjl", "polarquant", "turbo3_tcq"],
165
+ "4b": ["qjl", "polarquant", "turbo3_tcq"],
166
+ "9b": ["qjl", "polarquant", "turbo3_tcq"],
167
+ "27b": ["qjl", "polarquant", "turbo3_tcq"],
168
+ "27b-256k": ["qjl", "polarquant", "turbo3_tcq"],
169
+ };
170
+
171
+ // Backends each tier is expected to support on shipped hardware.
172
+ export const SUPPORTED_BACKENDS_BY_TIER: Readonly<
173
+ Record<Eliza1Tier, ReadonlyArray<Eliza1Backend>>
174
+ > = {
175
+ "2b": ["metal", "vulkan", "cpu"],
176
+ "4b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
177
+ "9b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
178
+ "27b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
179
+ "27b-256k": ["metal", "vulkan", "cuda", "rocm", "cpu"],
180
+ };
181
+
182
+ // ---------------------------------------------------------------------------
183
+ // Zod definitions
184
+ // ---------------------------------------------------------------------------
185
+
186
+ const sha256 = z
187
+ .string()
188
+ .regex(/^[a-f0-9]{64}$/, "sha256 must be 64 lowercase hex chars");
189
+
190
+ const lineageEntry = z.object({
191
+ base: z.string().min(1),
192
+ license: z.string().min(1),
193
+ });
194
+
195
+ export const Eliza1LineageSchema = z.object({
196
+ text: lineageEntry,
197
+ voice: lineageEntry,
198
+ drafter: lineageEntry.optional(),
199
+ // Wave-6 (2026-05-10): manifest now records lineage for every shipped
200
+ // component so license/dataset provenance is auditable per component.
201
+ // All optional — a tier may omit ASR/embedding/vision/vad/wakeword by
202
+ // leaving the corresponding `files.*` slot empty AND the lineage
203
+ // entry undefined. The validator enforces lineage-vs-files consistency.
204
+ asr: lineageEntry.optional(),
205
+ embedding: lineageEntry.optional(),
206
+ imagegen: lineageEntry.optional(),
207
+ vision: lineageEntry.optional(),
208
+ vad: lineageEntry.optional(),
209
+ wakeword: lineageEntry.optional(),
210
+ // Voice Wave 2 (2026-05-14): semantic end-of-turn detector lineage. When
211
+ // `files.turn` ships the bundled `livekit/turn-detector` ONNX (the
212
+ // ≤1.7B-tier `v1.2.2-en` SmolLM2 distill or the ≥4B-tier `v0.4.1-intl`
213
+ // multilingual detector), this records the upstream repo + license. Apache-2.0
214
+ // fallback path is `latishab/turnsense`.
215
+ turn: lineageEntry.optional(),
216
+ // Voice Wave 2 (2026-05-14): acoustic-prosody emotion classifier lineage.
217
+ // When `files.emotion` ships the bundled Wav2Small student GGUF (72K
218
+ // params), this records the audeering teacher repo + license as
219
+ // research-only attribution (the audeering teacher is CC-BY-NC-SA-4.0
220
+ // and NEVER bundled — only the Apache-2.0 student is shipped, distilled
221
+ // via `packages/training/scripts/emotion/distill_wav2small.py`). The
222
+ // SamLowe/roberta-base-go_emotions text classifier may optionally also
223
+ // ship under this slot when the operator enables the text-classifier
224
+ // shadow path; see R3-emotion.md §2.
225
+ emotion: lineageEntry.optional(),
226
+ });
227
+
228
+ // Runtime class a text artifact is served by. Defaults to GGUF/llama.cpp when
229
+ // absent, so every existing manifest round-trips unchanged.
230
+ // - `llama-cpp` — a `.gguf` served by the fused libelizainference llama.cpp
231
+ // path (the default).
232
+ // - `litert-lm` — a `.litertlm` single-file bundle served by the in-process
233
+ // LiteRT-LM backend (Android NPU / GPU delegate). The C-side
234
+ // `llm_backend_select` probes `<bundleRoot>/text/*.litertlm` and routes to
235
+ // it; the TS loader passes `ELIZA_LLM_BACKEND=litert-lm` when this entry is
236
+ // selected. See `tools/omnivoice/src/backends/litert-backend.cpp`.
237
+ export const ELIZA_1_TEXT_RUNTIME_CLASSES = ["llama-cpp", "litert-lm"] as const;
238
+ export type Eliza1TextRuntimeClass =
239
+ (typeof ELIZA_1_TEXT_RUNTIME_CLASSES)[number];
240
+ export const Eliza1TextRuntimeClassEnumSchema = z.enum(
241
+ ELIZA_1_TEXT_RUNTIME_CLASSES,
242
+ );
243
+
244
+ export const Eliza1FileEntrySchema = z.object({
245
+ path: z.string().min(1),
246
+ sha256,
247
+ // text files declare their context length so the runtime can pick the
248
+ // largest variant that fits the device's RAM budget. Other file kinds
249
+ // never have ctx.
250
+ ctx: z.number().int().min(131072, "must be at least 128k").optional(),
251
+ // Optional runtime-class discriminator on a `files.text` entry. Absent ⇒
252
+ // `llama-cpp` (GGUF, the default). A `.litertlm` text artifact declares
253
+ // `runtimeClass: "litert-lm"` so the loader can route it to the LiteRT-LM
254
+ // backend without re-deriving the runtime from the filename.
255
+ runtimeClass: Eliza1TextRuntimeClassEnumSchema.optional(),
256
+ });
257
+
258
+ /**
259
+ * A platform-targeted native-lib file in the bundle's `lib[]` set. The fused
260
+ * `libelizainference` ships as a SET (the fused lib + its ggml/llama/mtmd
261
+ * sibling backends), one set per platform `target`. The downloader fetches ONLY
262
+ * the entries whose `target` matches the host (see `../lib-target.ts`
263
+ * `resolveHostLibTargets`) into `<bundleRoot>/lib/`, where the desktop FFI
264
+ * runtime resolves them with no env wiring via `resolveFusedLibraryPath`
265
+ * (path #2 — bundle-local lib). `target` is free-form (e.g. "win-x64-cpu",
266
+ * "linux-x64-cuda", "darwin-arm64-metal") so new targets need no schema bump;
267
+ * `name` overrides the staged filename (defaults to the basename of `path`).
268
+ */
269
+ export const Eliza1LibFileEntrySchema = z.object({
270
+ path: z.string().min(1),
271
+ sha256,
272
+ target: z.string().min(1),
273
+ name: z.string().min(1).optional(),
274
+ });
275
+
276
+ export const Eliza1FilesSchema = z.object({
277
+ text: z.array(Eliza1FileEntrySchema).min(1),
278
+ voice: z.array(Eliza1FileEntrySchema).min(1),
279
+ asr: z.array(Eliza1FileEntrySchema),
280
+ vision: z.array(Eliza1FileEntrySchema),
281
+ mtp: z.array(Eliza1FileEntrySchema),
282
+ cache: z.array(Eliza1FileEntrySchema).min(1),
283
+ // Wave-6 (2026-05-10): the omni bundle ships a per-bundle dedicated
284
+ // embedding model on non-lite tiers, a Silero-VAD GGUF, and an optional
285
+ // openWakeWord GGUF (the combined GGUF carries the mel filterbank + speech
286
+ // embedding model + every per-phrase head). All three are optional in the
287
+ // schema — the 2b entry tier intentionally omits the dedicated embedding
288
+ // (pools from text backbone) and a tier may ship without wake-word support.
289
+ //
290
+ // Schema-level optionality: empty array = "this bundle does not
291
+ // ship this component"; the validator enforces tier-specific
292
+ // consistency rules (e.g. 4b-and-up MUST ship `embedding[]`).
293
+ embedding: z.array(Eliza1FileEntrySchema).optional(),
294
+ // Optional image-generation artifacts. Most Eliza-1 base bundles do not
295
+ // carry diffusion weights; those are documented in
296
+ // packages/chip/ELIZA_1_BUNDLE_EXTRAS.json and downloaded on first use. When an
297
+ // additional bundle ships local image-gen weights inline, list them here
298
+ // and provide matching `lineage.imagegen`.
299
+ imagegen: z.array(Eliza1FileEntrySchema).optional(),
300
+ vad: z.array(Eliza1FileEntrySchema).optional(),
301
+ wakeword: z.array(Eliza1FileEntrySchema).optional(),
302
+ // Voice Wave 2 (2026-05-14): bundled semantic turn detector. Optional —
303
+ // when omitted, the runtime falls back to `HeuristicEotClassifier` (the
304
+ // deterministic punctuation/conjunction baseline). When present, the
305
+ // runtime loads the model via the GGUF-backed LiveKit turn detector
306
+ // (`eot-classifier-ggml.ts`) and pre-warms it at voice-session start.
307
+ // Tier mapping is data-driven (see
308
+ // `stage_turn_detector` in
309
+ // `packages/training/scripts/manifest/stage_eliza1_bundle_assets.py`):
310
+ // 2b ships the EN-only SmolLM2-135M distill; 4b/9b/27b ship the
311
+ // multilingual detector.
312
+ turn: z.array(Eliza1FileEntrySchema).optional(),
313
+ // Eliza-1 EOT LoRA adapter — optional, complements `turn`. When
314
+ // present, the runtime layers this adapter onto the in-process
315
+ // drafter at voice-session start (`voice/eliza1-eot-scorer.ts`) so
316
+ // P(`<end_of_turn>`) calibration matches a fine-tuned EOT head without
317
+ // shipping a second base model. When both `turn` and `eotLoraAdapter`
318
+ // are present the operator picks via `ELIZA_VOICE_EOT_BACKEND` or
319
+ // `startVoiceSession({ useEliza1Eot })`. Training recipe:
320
+ // `packages/training/scripts/turn_detector/configs/turn_detector_eliza1_drafter.yaml`.
321
+ eotLoraAdapter: z.array(Eliza1FileEntrySchema).optional(),
322
+ // Voice Wave 2 (2026-05-14): bundled acoustic-prosody emotion classifier
323
+ // (Wav2Small student, GGUF). Optional — when omitted, the runtime falls
324
+ // back to the lexicon + audio-prosody heuristic path inside
325
+ // `attributeVoiceEmotion()` (no acoustic-model evidence row). When present,
326
+ // the runtime loads the GGUF via `VoiceEmotionClassifier`, runs it on
327
+ // `isFinal` transcript snapshots, and fuses the output with the Stage-1
328
+ // text-emotion field via the single fusion point in `emotion-attribution.ts`.
329
+ // All tiers ship the same Wav2Small student (the on-device budget is
330
+ // dominated by the LM, not this small head); a 2b entry bundle may still
331
+ // choose to omit it to save the cold-start cost.
332
+ emotion: z.array(Eliza1FileEntrySchema).optional(),
333
+ // Fused libelizainference native-lib SET, per platform target (#9105 /
334
+ // local-inference bundle delivery). Optional — when present the downloader
335
+ // stages the host-matching target's files into `<bundleRoot>/lib/`, which the
336
+ // desktop FFI runtime resolves with no env wiring (`resolveFusedLibraryPath`
337
+ // path #2). CPU baseline is always safe (GGML_CPU is built into the fused
338
+ // lib); GPU targets (`…-cuda` / `…-metal`) are opt-in. This is the bundle
339
+ // path that makes local inference work in a compiled desktop app without a
340
+ // separate lib download; absent ⇒ the runtime falls back to a host-staged
341
+ // `<stateDir>/local-inference/lib` (dev) and otherwise to cloud.
342
+ lib: z.array(Eliza1LibFileEntrySchema).optional(),
343
+ });
344
+
345
+ export const Eliza1KernelEnumSchema = z.enum(ELIZA_1_KERNELS);
346
+ export const Eliza1BackendEnumSchema = z.enum(ELIZA_1_BACKENDS);
347
+ export const Eliza1TierEnumSchema = z.enum(ELIZA_1_TIERS);
348
+
349
+ export const Eliza1VerifiedBackendStatusSchema = z.object({
350
+ status: z.enum(["pass", "fail", "skipped"]),
351
+ atCommit: z.string().min(1),
352
+ report: z.string().min(1),
353
+ // Optional provenance for a "pass" recorded on a single device class — e.g.
354
+ // the runtime Vulkan dispatch smoke that ran on one Intel-ANV GPU. `caveat`
355
+ // names what device coverage is still missing so the recommendation engine
356
+ // and release docs do not over-claim.
357
+ device: z.string().min(1).optional(),
358
+ caveat: z.string().min(1).optional(),
359
+ });
360
+
361
+ // Recipe-level kernel layout pins, folded in from the quantization recipes'
362
+ // `kernel_manifest` sidecar fragments
363
+ // (packages/training/scripts/quantization/_kernel_manifest.py). Keyed by the
364
+ // *recipe* kernel-target name (`turbo3` / `turbo4` / `turbo3_tcq` / `qjl1_256` /
365
+ // `polar_q4`) — NOT the manifest-level capability names in `ELIZA_1_KERNELS`.
366
+ // The runtime/downloader can verify the encoded blocks match the kernels it
367
+ // ships; the publish orchestrator already validates the sidecars exist.
368
+ export const Eliza1RecipeKernelPinsSchema = z.object({
369
+ blockLayoutVersion: z.string().min(1),
370
+ codebookHash: z.string().min(1),
371
+ perBlockTolerance: z.number().positive(),
372
+ });
373
+
374
+ // Generic speculative-decode capability metadata (drafter-agnostic). Covers
375
+ // Gemma 4's separate-drafter MTP, an embedded draft head, or an EAGLE3 head —
376
+ // the shape only records the capability/spec-type/draft model, never the
377
+ // specific drafter family. `specType` names the runtime spec method (e.g.
378
+ // `draft-mtp`, `draft-eagle3`); `model` names the drafter/head artifact.
379
+ export const Eliza1SpecDecodeKernelSchema = z
380
+ .object({
381
+ enabled: z.boolean().optional(),
382
+ capability: z.string().min(1).optional(),
383
+ specType: z.string().min(1).optional(),
384
+ model: z.string().min(1).optional(),
385
+ maxDraftTokens: z.number().int().positive().optional(),
386
+ failure: z.string().min(1).optional(),
387
+ })
388
+ .passthrough();
389
+
390
+ export const Eliza1KernelsSchema = z.object({
391
+ required: z.array(Eliza1KernelEnumSchema).min(1),
392
+ optional: z.array(Eliza1KernelEnumSchema),
393
+ verifiedBackends: z.object({
394
+ metal: Eliza1VerifiedBackendStatusSchema,
395
+ vulkan: Eliza1VerifiedBackendStatusSchema,
396
+ cuda: Eliza1VerifiedBackendStatusSchema,
397
+ rocm: Eliza1VerifiedBackendStatusSchema,
398
+ cpu: Eliza1VerifiedBackendStatusSchema,
399
+ }),
400
+ recipeManifest: z.record(z.string(), Eliza1RecipeKernelPinsSchema).optional(),
401
+ // Optional speculative-decode capability metadata (canonical key).
402
+ specDecode: Eliza1SpecDecodeKernelSchema.optional(),
403
+ // Back-compat alias accepted for one release: pre-cutover manifests emit
404
+ // the same capability object under `eagle3`. New producers stamp
405
+ // `specDecode`; the validator reads `specDecode ?? eagle3`.
406
+ eagle3: Eliza1SpecDecodeKernelSchema.optional(),
407
+ });
408
+
409
+ // Wave-6: voice surface declares which expressive features the bundled
410
+ // TTS supports. Today these are tag-driven inline in the input text;
411
+ // presence of `singing` or `emotion-tags` here lets the runtime expose
412
+ // the relevant API surface and lets the planner emit tags inline.
413
+ export const ELIZA_1_VOICE_CAPABILITIES = [
414
+ "tts",
415
+ "emotion-tags",
416
+ "singing",
417
+ ] as const;
418
+ export const ELIZA_1_VOICE_MANIFEST_VERSION = "1";
419
+ export const VOICE_PRESET_CACHE_PATH = "cache/voice-preset-default.bin";
420
+ export type Eliza1VoiceCapability = (typeof ELIZA_1_VOICE_CAPABILITIES)[number];
421
+
422
+ export const Eliza1VoiceSchema = z.object({
423
+ version: z.string().min(1),
424
+ frozen: z.literal(true),
425
+ cache: z.object({
426
+ speakerPreset: z.string().min(1),
427
+ phraseCacheSeed: z.string().min(1),
428
+ }),
429
+ capabilities: z.array(z.enum(ELIZA_1_VOICE_CAPABILITIES)).default(["tts"]),
430
+ });
431
+
432
+ // Generic speculative-decode eval metadata (drafter-agnostic): records the
433
+ // accepted/drafted acceptance rate and the spec-decode-on ÷ baseline speedup
434
+ // for whatever drafter the bundle ships (MTP separate drafter, EAGLE3 head, …).
435
+ const Eliza1SpecDecodeEvalSchema = z
436
+ .object({
437
+ /** accepted/drafted; null or absent when not measured. */
438
+ acceptanceRate: z.number().min(0).max(1).nullable().optional(),
439
+ /** spec-decode-on tok/s ÷ baseline tok/s; null or absent when not measured. */
440
+ speedup: z.number().nonnegative().nullable().optional(),
441
+ /** Preferred spelling for pass/fail status. */
442
+ passed: z.boolean().optional(),
443
+ /** Back-compat spelling accepted for manifest producers that emit `pass`. */
444
+ pass: z.boolean().optional(),
445
+ /** Human-readable reason when the spec-decode eval was not run or failed. */
446
+ failure: z.string().min(1).optional(),
447
+ })
448
+ .superRefine((specDecode, ctx) => {
449
+ if (
450
+ specDecode.pass !== undefined &&
451
+ specDecode.passed !== undefined &&
452
+ specDecode.pass !== specDecode.passed
453
+ ) {
454
+ ctx.addIssue({
455
+ code: "custom",
456
+ message: "pass and passed must agree when both are present",
457
+ path: ["pass"],
458
+ });
459
+ }
460
+ const passed = specDecode.passed ?? specDecode.pass;
461
+ if (
462
+ passed === true &&
463
+ (specDecode.acceptanceRate == null || specDecode.speedup == null)
464
+ ) {
465
+ ctx.addIssue({
466
+ code: "custom",
467
+ message: "passed=true requires measured acceptanceRate and speedup",
468
+ path: ["passed"],
469
+ });
470
+ }
471
+ });
472
+
473
+ export const Eliza1EvalsSchema = z.object({
474
+ textEval: z.object({
475
+ score: z.number().min(0).max(1),
476
+ passed: z.boolean(),
477
+ }),
478
+ voiceRtf: z.object({
479
+ rtf: z.number().nonnegative(),
480
+ passed: z.boolean(),
481
+ }),
482
+ e2eLoopOk: z.boolean(),
483
+ thirtyTurnOk: z.boolean(),
484
+ // Wave-6 additions — all optional so a tier can publish without
485
+ // an ASR / embedding component declared. `expressive` covers the
486
+ // singing/emotion-tag eval gates from `eliza1_gates.yaml`. The
487
+ // validator refuses defaultEligible=true if any declared component's
488
+ // gate is missing OR fails.
489
+ asrWer: z
490
+ .object({
491
+ wer: z.number().nonnegative(),
492
+ passed: z.boolean(),
493
+ })
494
+ .optional(),
495
+ embedMteb: z
496
+ .object({
497
+ score: z.number().min(0).max(1),
498
+ passed: z.boolean(),
499
+ })
500
+ .optional(),
501
+ vadLatencyMs: z
502
+ .object({
503
+ median: z.number().nonnegative(),
504
+ boundaryMs: z.number().nonnegative().optional(),
505
+ endpointMs: z.number().nonnegative().optional(),
506
+ falseBargeInRate: z.number().min(0).max(1).optional(),
507
+ passed: z.boolean(),
508
+ })
509
+ .optional(),
510
+ expressive: z
511
+ .object({
512
+ tagFaithfulness: z.number().min(0).max(1),
513
+ mosExpressive: z.number().nonnegative(),
514
+ tagLeakage: z.number().nonnegative(),
515
+ passed: z.boolean(),
516
+ })
517
+ .optional(),
518
+ mtp: z
519
+ .object({
520
+ acceptanceRate: z.number().min(0).max(1).nullable(),
521
+ speedup: z.number().nonnegative().nullable(),
522
+ passed: z.boolean(),
523
+ })
524
+ .optional(),
525
+ // Optional speculative-decode bench metadata (canonical key).
526
+ specDecode: Eliza1SpecDecodeEvalSchema.optional(),
527
+ // Back-compat alias accepted for one release: pre-cutover manifests emit
528
+ // the same bench object under `eagle3`. The validator reads
529
+ // `specDecode ?? eagle3`.
530
+ eagle3: Eliza1SpecDecodeEvalSchema.optional(),
531
+ // Voice Wave 2 (2026-05-14): semantic end-of-turn detector eval gates.
532
+ // Required when `files.turn` is non-empty (validator enforces). Thresholds
533
+ // applied by `eval_turn_detector.py` in `packages/training/scripts/turn_detector/`:
534
+ // f1 ≥ TURN_DETECTOR_F1_THRESHOLD (0.85)
535
+ // meanLatencyMs ≤ TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT (30 ms)
536
+ // `passed` is precomputed by the eval script per the constants above so
537
+ // the validator stays a single source of truth; constants are exported
538
+ // from this module for the script + tests to consume.
539
+ turnDetector: z
540
+ .object({
541
+ f1: z.number().min(0).max(1),
542
+ meanLatencyMs: z.number().nonnegative(),
543
+ passed: z.boolean(),
544
+ // Which detector backend the eval was run against. Optional for
545
+ // back-compat with bundles staged before the eliza-1 EOT path;
546
+ // when absent, consumers should assume `livekit`.
547
+ kind: z.enum(["livekit", "turnsense", "eliza-1-drafter"]).optional(),
548
+ })
549
+ .optional(),
550
+ // Voice Wave 2 (2026-05-14): acoustic-emotion classifier eval gates.
551
+ // Required when `files.emotion` is non-empty (validator enforces).
552
+ // Thresholds applied by the bench harness under
553
+ // `packages/benchmarks/voice-emotion/`:
554
+ // macroF1Meld ≥ EMOTION_CLASSIFIER_MELD_F1_THRESHOLD (0.35)
555
+ // macroF1Iemocap ≥ EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD (0.60)
556
+ // The MELD threshold is intentionally low — 7-class conversational SER
557
+ // macro-F1 is 0.40-0.50 even for strong models on MELD; we set the gate so
558
+ // a real improvement does not get refused (R3-emotion §6 risk).
559
+ emotionClassifier: z
560
+ .object({
561
+ macroF1Meld: z.number().min(0).max(1),
562
+ macroF1Iemocap: z.number().min(0).max(1),
563
+ /** Mean per-clip inference latency on CPU. */
564
+ meanLatencyMs: z.number().nonnegative(),
565
+ passed: z.boolean(),
566
+ })
567
+ .optional(),
568
+ });
569
+
570
+ /** Eval-gate threshold: minimum acceptable F1 on the EOU benchmark. */
571
+ export const TURN_DETECTOR_F1_THRESHOLD = 0.85 as const;
572
+
573
+ /** Eval-gate threshold: maximum acceptable mean inference latency (ms). */
574
+ export const TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT = 30 as const;
575
+
576
+ /** Eval-gate threshold: minimum macro-F1 on MELD test (7-class). */
577
+ export const EMOTION_CLASSIFIER_MELD_F1_THRESHOLD = 0.35 as const;
578
+
579
+ /** Eval-gate threshold: minimum macro-F1 on IEMOCAP test (4-class). */
580
+ export const EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD = 0.6 as const;
581
+
582
+ /** Eval-gate threshold: maximum mean CPU inference latency (ms) per window. */
583
+ export const EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT = 30 as const;
584
+
585
+ export const Eliza1RamBudgetSchema = z
586
+ .object({
587
+ min: z.number().int().positive(),
588
+ recommended: z.number().int().positive(),
589
+ })
590
+ .refine((r) => r.recommended >= r.min, {
591
+ message: "ramBudgetMb.recommended must be >= ramBudgetMb.min",
592
+ });
593
+
594
+ // Release-state vocabulary. `base-v1` is the v1 product: the upstream BASE
595
+ // models — GGUF-converted via the elizaOS/llama.cpp fork and fully
596
+ // Eliza-optimized (every quant/kernel trick in inference/AGENTS.md §3) —
597
+ // but NOT fine-tuned (fine-tuning ships in v2). `base-v1-candidate` is the
598
+ // in-progress state of a base-v1 bundle before every release-blocking
599
+ // gate (real fork-built bytes, every supported-backend kernel verify,
600
+ // every required platform-dispatch report, the runnable-on-base evals)
601
+ // has gone green. It is publishable to HuggingFace as a download target
602
+ // and is installable on a device whose backend it verified, but is not
603
+ // the strict release — its `defaultEligible` stays `false` at publish
604
+ // time. `finetuned-v2` is the v2 state; `local-standin` is a non-publishable
605
+ // staging shape; `upload-candidate` / `final` are the historical
606
+ // fine-tuned-v1 publish states retained for forward-compat. Mirrors
607
+ // `ELIZA_1_RELEASE_STATES` in
608
+ // `packages/training/scripts/manifest/eliza1_manifest.py`.
609
+ export const ELIZA_1_RELEASE_STATES = [
610
+ "local-standin",
611
+ "base-v1-candidate",
612
+ "base-v1",
613
+ "finetuned-v2",
614
+ "upload-candidate",
615
+ "final",
616
+ ] as const;
617
+ export type Eliza1ReleaseState = (typeof ELIZA_1_RELEASE_STATES)[number];
618
+
619
+ // Release-channel vocabulary recorded on a published manifest.
620
+ // `recommended` is the fine-tuned Eliza-1 (ships in v2) — the channel a
621
+ // device may auto-promote to the strict default. `base-v1` is the
622
+ // upstream-base + kernel-optimized release: every quant/kernel trick
623
+ // applied, but the text weights are the upstream base GGUFs (not the
624
+ // fine-tuned Eliza-1). A `base-v1`-channel manifest MUST be
625
+ // `defaultEligible: false` at publish time. The on-device gate
626
+ // (`canSetAsDefault`) still promotes a contract-valid `base-v1` bundle to
627
+ // the fallback default when no `recommended` channel bundle is installed —
628
+ // see `validator.ts`. Mirrors `ELIZA_1_RELEASE_CHANNELS` (Python side).
629
+ export const ELIZA_1_RELEASE_CHANNELS = ["recommended", "base-v1"] as const;
630
+ export type Eliza1ReleaseChannel = (typeof ELIZA_1_RELEASE_CHANNELS)[number];
631
+
632
+ // Provenance slots — the bundle components whose upstream source repo a
633
+ // `base-v1` manifest must record. Mirrors `ELIZA_1_PROVENANCE_SLOTS`
634
+ // (Python side).
635
+ export const ELIZA_1_PROVENANCE_SLOTS = [
636
+ "text",
637
+ "voice",
638
+ "asr",
639
+ "vad",
640
+ "embedding",
641
+ "imagegen",
642
+ "vision",
643
+ "drafter",
644
+ ] as const;
645
+ export type Eliza1ProvenanceSlot = (typeof ELIZA_1_PROVENANCE_SLOTS)[number];
646
+
647
+ const eliza1SourceModelEntry = z.object({
648
+ /** Upstream HuggingFace repo this component is converted from. */
649
+ repo: z.string().min(1),
650
+ /** Specific file in the upstream repo, when the source is one file. */
651
+ file: z.string().min(1).optional(),
652
+ /** The converter / recipe path used (e.g. `<fork>/convert_hf_to_gguf.py`). */
653
+ convertedVia: z.string().min(1).optional(),
654
+ /** Free-text provenance note. */
655
+ note: z.string().min(1).optional(),
656
+ });
657
+
658
+ // `provenance` — optional manifest block. Required on a `base-v1` bundle so
659
+ // the "base, not fine-tuned" plan is auditable: which upstream repo each
660
+ // shipped component is converted from, and whether v1 fine-tuning was
661
+ // applied (always `false` for the base-v1 release). The contract validator
662
+ // enforces per-component coverage for `base-v1`.
663
+ export const Eliza1ProvenanceSchema = z.object({
664
+ releaseState: z.enum(ELIZA_1_RELEASE_STATES),
665
+ finetuned: z.boolean(),
666
+ sourceModels: z.record(
667
+ z.enum(ELIZA_1_PROVENANCE_SLOTS),
668
+ eliza1SourceModelEntry,
669
+ ),
670
+ });
671
+
672
+ // Gemma 4 cutover (schemaVersion 2): the shared tokenizer identity the
673
+ // publish-side builder stamps onto every bundle. The contract validator pins
674
+ // `family` to `ELIZA_1_TOKENIZER_FAMILY` and `vocabSize` to
675
+ // `ELIZA_1_TOKENIZER_VOCAB_SIZE` when this block is present.
676
+ export const Eliza1TokenizerSchema = z.object({
677
+ family: z.string().min(1),
678
+ vocabSize: z.number().int().positive(),
679
+ });
680
+
681
+ export const Eliza1ManifestSchema = z
682
+ .object({
683
+ $schema: z.literal(ELIZA_1_MANIFEST_SCHEMA_URL).optional(),
684
+ id: z.string().min(1),
685
+ tier: Eliza1TierEnumSchema,
686
+ version: z
687
+ .string()
688
+ .regex(
689
+ /^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?$/,
690
+ "version must be semver (e.g. 1.0.0)",
691
+ ),
692
+ publishedAt: z.string().datetime(),
693
+ lineage: Eliza1LineageSchema,
694
+ files: Eliza1FilesSchema,
695
+ kernels: Eliza1KernelsSchema,
696
+ evals: Eliza1EvalsSchema,
697
+ ramBudgetMb: Eliza1RamBudgetSchema,
698
+ // Wave-6: optional. Default = `{ capabilities: ["tts"] }` (base TTS only,
699
+ // no emotion tags, no singing). Bundles that ship the omnivoice-singing
700
+ // weights advertise `["tts","emotion-tags","singing"]`.
701
+ voice: Eliza1VoiceSchema.optional(),
702
+ // Optional. Present on `base-v1` bundles (the upstream base models,
703
+ // GGUF-converted + fully optimized, NOT fine-tuned). Records the
704
+ // release state, the not-fine-tuned flag, and the upstream source repo
705
+ // per shipped component. The contract validator requires per-component
706
+ // coverage when `releaseState === "base-v1"`.
707
+ provenance: Eliza1ProvenanceSchema.optional(),
708
+ // Optional. Defaults to `"recommended"` semantically when unset (the
709
+ // fine-tuned Eliza-1 — the channel allowed to auto-promote to the
710
+ // strict device default). A `"base-v1"`-channel manifest is the
711
+ // upstream-base + kernel-optimized release; it MUST be
712
+ // `defaultEligible: false` at publish time. The on-device gate
713
+ // (`canSetAsDefault`) still allows a contract-valid `base-v1` bundle
714
+ // to fill an empty default slot when no `recommended` channel bundle
715
+ // is installed; the recommender prefers `defaultEligible: true` over
716
+ // candidates whenever both are available.
717
+ releaseChannel: z.enum(ELIZA_1_RELEASE_CHANNELS).optional(),
718
+ defaultEligible: z.boolean(),
719
+ // Optional. Quant metadata emitted by the publish-side manifest
720
+ // builder. May be either a free-text tag (`"Q3_K_S"`, `"Q4_K_M"`) or a
721
+ // structured object describing the optimization recipe (PolarQuant +
722
+ // QJL block layout, per-layer outlier counts, etc.). Not consumed by
723
+ // the runtime validator — declared here so a manifest carrying it is
724
+ // accepted instead of being stripped or rejected. The schema is
725
+ // intentionally permissive: the publish-side tool is the source of
726
+ // truth for the shape, and the runtime only needs the manifest to
727
+ // round-trip cleanly.
728
+ textQuant: z
729
+ .union([z.string().min(1), z.record(z.string(), z.unknown())])
730
+ .optional(),
731
+ // Gemma 4 cutover (schemaVersion 2) identity fields, stamped by the
732
+ // publish-side bundle builder. Optional so legacy v1 (pre-cutover)
733
+ // manifests still round-trip; the contract validator enforces their
734
+ // values when present.
735
+ schemaVersion: z.union([z.literal("2"), z.literal(2)]).optional(),
736
+ tokenizer: Eliza1TokenizerSchema.optional(),
737
+ kv: z.string().min(1).optional(),
738
+ mtp: z.enum(ELIZA_1_MTP_MODES).optional(),
739
+ })
740
+ // The id MUST encode the tier so catalogs can derive tier from id without
741
+ // re-reading the manifest. Example: `id: "eliza-1-9b"`.
742
+ .refine(
743
+ (m) =>
744
+ m.id === `eliza-1-${m.tier}` || m.id.startsWith(`eliza-1-${m.tier}-`),
745
+ {
746
+ message: "id must start with `eliza-1-<tier>`",
747
+ path: ["id"],
748
+ },
749
+ )
750
+ // A `base-v1`-channel manifest is the upstream-base release. At publish
751
+ // time it MUST be `defaultEligible: false` — the on-device gate
752
+ // (`canSetAsDefault`) is the one that allows it to fill an empty default
753
+ // slot when no `recommended` bundle is installed. Mirrors
754
+ // inference/AGENTS.md §6 and the Python manifest builder.
755
+ .refine(
756
+ (m) => m.releaseChannel !== "base-v1" || m.defaultEligible === false,
757
+ {
758
+ message: "releaseChannel=base-v1 requires defaultEligible: false",
759
+ path: ["defaultEligible"],
760
+ },
761
+ );