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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/package.json +81 -15
  4. package/src/actions/generate-media.d.ts +59 -0
  5. package/src/actions/generate-media.d.ts.map +1 -0
  6. package/src/actions/generate-media.ts +647 -0
  7. package/src/actions/identify-speaker.d.ts +23 -0
  8. package/src/actions/identify-speaker.d.ts.map +1 -0
  9. package/src/actions/identify-speaker.ts +171 -0
  10. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  11. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  12. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  13. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  14. package/src/adapters/capacitor-llama/environment.ts +71 -0
  15. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  16. package/src/adapters/capacitor-llama/index.ts +807 -0
  17. package/src/adapters/capacitor-llama/loader.ts +109 -0
  18. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  19. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  20. package/src/adapters/capacitor-llama/types.ts +374 -0
  21. package/src/backends/apple-foundation.ts +127 -0
  22. package/src/index.d.ts +7 -0
  23. package/src/index.d.ts.map +1 -0
  24. package/src/index.ts +54 -0
  25. package/src/local-inference-routes.d.ts +38 -0
  26. package/src/local-inference-routes.d.ts.map +1 -0
  27. package/src/local-inference-routes.test.ts +344 -0
  28. package/src/local-inference-routes.ts +1543 -0
  29. package/src/provider.d.ts +21 -0
  30. package/src/provider.d.ts.map +1 -0
  31. package/src/provider.ts +1171 -0
  32. package/src/routes/compat-helpers.d.ts +18 -0
  33. package/src/routes/compat-helpers.d.ts.map +1 -0
  34. package/src/routes/compat-helpers.ts +274 -0
  35. package/src/routes/family-member-route.d.ts +62 -0
  36. package/src/routes/family-member-route.d.ts.map +1 -0
  37. package/src/routes/family-member-route.ts +353 -0
  38. package/src/routes/index.d.ts +19 -0
  39. package/src/routes/index.d.ts.map +1 -0
  40. package/src/routes/index.ts +60 -0
  41. package/src/routes/live-diarization-route.d.ts +26 -0
  42. package/src/routes/live-diarization-route.d.ts.map +1 -0
  43. package/src/routes/live-diarization-route.test.ts +213 -0
  44. package/src/routes/live-diarization-route.ts +122 -0
  45. package/src/routes/local-inference-asr-route.d.ts +4 -0
  46. package/src/routes/local-inference-asr-route.d.ts.map +1 -0
  47. package/src/routes/local-inference-asr-route.test.ts +190 -0
  48. package/src/routes/local-inference-asr-route.ts +213 -0
  49. package/src/routes/local-inference-compat-routes.d.ts +16 -0
  50. package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
  51. package/src/routes/local-inference-compat-routes.test.ts +423 -0
  52. package/src/routes/local-inference-compat-routes.ts +782 -0
  53. package/src/routes/local-inference-tts-route.d.ts +7 -0
  54. package/src/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/src/routes/local-inference-tts-route.test.ts +179 -0
  56. package/src/routes/local-inference-tts-route.ts +230 -0
  57. package/src/routes/voice-first-run-routes.d.ts +62 -0
  58. package/src/routes/voice-first-run-routes.d.ts.map +1 -0
  59. package/src/routes/voice-first-run-routes.ts +524 -0
  60. package/src/routes/voice-models-routes.d.ts +62 -0
  61. package/src/routes/voice-models-routes.d.ts.map +1 -0
  62. package/src/routes/voice-models-routes.ts +554 -0
  63. package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
  64. package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  65. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  66. package/src/routes/voice-profiles-management-routes.d.ts +52 -0
  67. package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
  68. package/src/routes/voice-profiles-management-routes.ts +476 -0
  69. package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  72. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  73. package/src/runtime/capacitor-llama.d.ts +25 -0
  74. package/src/runtime/embedding-manager-support.d.ts +77 -0
  75. package/src/runtime/embedding-manager-support.d.ts.map +1 -0
  76. package/src/runtime/embedding-manager-support.ts +497 -0
  77. package/src/runtime/embedding-presets.d.ts +16 -0
  78. package/src/runtime/embedding-presets.d.ts.map +1 -0
  79. package/src/runtime/embedding-presets.ts +81 -0
  80. package/src/runtime/embedding-warmup-policy.d.ts +14 -0
  81. package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
  82. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  83. package/src/runtime/embedding-warmup-policy.ts +48 -0
  84. package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
  85. package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  86. package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
  87. package/src/runtime/ensure-local-inference-handler.ts +1398 -0
  88. package/src/runtime/index.d.ts +14 -0
  89. package/src/runtime/index.d.ts.map +1 -0
  90. package/src/runtime/index.ts +27 -0
  91. package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
  92. package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  93. package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
  94. package/src/runtime/mobile-local-inference-gate.ts +44 -0
  95. package/src/runtime/voice-entity-binding.d.ts +103 -0
  96. package/src/runtime/voice-entity-binding.d.ts.map +1 -0
  97. package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
  98. package/src/runtime/voice-entity-binding.ts +328 -0
  99. package/src/services/README.md +71 -0
  100. package/src/services/__tests__/backend-selector.test.ts +101 -0
  101. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  102. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  103. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  104. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  105. package/src/services/__tests__/runtime-target.test.ts +176 -0
  106. package/src/services/active-model-switch-rollback.test.ts +183 -0
  107. package/src/services/active-model.d.ts +282 -0
  108. package/src/services/active-model.d.ts.map +1 -0
  109. package/src/services/active-model.ts +1213 -0
  110. package/src/services/asr/errors.d.ts +21 -0
  111. package/src/services/asr/errors.d.ts.map +1 -0
  112. package/src/services/asr/errors.ts +50 -0
  113. package/src/services/asr/hash.d.ts +28 -0
  114. package/src/services/asr/hash.d.ts.map +1 -0
  115. package/src/services/asr/hash.ts +49 -0
  116. package/src/services/asr/index.d.ts +76 -0
  117. package/src/services/asr/index.d.ts.map +1 -0
  118. package/src/services/asr/index.ts +178 -0
  119. package/src/services/asr/types.d.ts +91 -0
  120. package/src/services/asr/types.d.ts.map +1 -0
  121. package/src/services/asr/types.ts +95 -0
  122. package/src/services/assignments.d.ts +71 -0
  123. package/src/services/assignments.d.ts.map +1 -0
  124. package/src/services/assignments.test.ts +80 -0
  125. package/src/services/assignments.ts +230 -0
  126. package/src/services/backend-selector.ts +95 -0
  127. package/src/services/backend.d.ts +346 -0
  128. package/src/services/backend.d.ts.map +1 -0
  129. package/src/services/backend.ts +612 -0
  130. package/src/services/bundled-models.d.ts +34 -0
  131. package/src/services/bundled-models.d.ts.map +1 -0
  132. package/src/services/bundled-models.ts +129 -0
  133. package/src/services/cache-bridge.d.ts +206 -0
  134. package/src/services/cache-bridge.d.ts.map +1 -0
  135. package/src/services/cache-bridge.test.ts +516 -0
  136. package/src/services/cache-bridge.ts +423 -0
  137. package/src/services/catalog.d.ts +10 -0
  138. package/src/services/catalog.d.ts.map +1 -0
  139. package/src/services/catalog.test.ts +240 -0
  140. package/src/services/catalog.ts +27 -0
  141. package/src/services/checkpoint-client.d.ts +109 -0
  142. package/src/services/checkpoint-client.d.ts.map +1 -0
  143. package/src/services/checkpoint-client.ts +258 -0
  144. package/src/services/checkpoint-manager.ts +474 -0
  145. package/src/services/cloud-fallback.d.ts +102 -0
  146. package/src/services/cloud-fallback.d.ts.map +1 -0
  147. package/src/services/cloud-fallback.ts +230 -0
  148. package/src/services/conversation-registry.d.ts +142 -0
  149. package/src/services/conversation-registry.d.ts.map +1 -0
  150. package/src/services/conversation-registry.test.ts +235 -0
  151. package/src/services/conversation-registry.ts +264 -0
  152. package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
  153. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  154. package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
  155. package/src/services/device-bridge.d.ts +188 -0
  156. package/src/services/device-bridge.d.ts.map +1 -0
  157. package/src/services/device-bridge.ts +1237 -0
  158. package/src/services/device-resource-metrics.d.ts +149 -0
  159. package/src/services/device-resource-metrics.d.ts.map +1 -0
  160. package/src/services/device-resource-metrics.test.ts +98 -0
  161. package/src/services/device-resource-metrics.ts +346 -0
  162. package/src/services/device-tier.d.ts +115 -0
  163. package/src/services/device-tier.d.ts.map +1 -0
  164. package/src/services/device-tier.test.ts +371 -0
  165. package/src/services/device-tier.ts +410 -0
  166. package/src/services/downloader.d.ts +82 -0
  167. package/src/services/downloader.d.ts.map +1 -0
  168. package/src/services/downloader.test.ts +724 -0
  169. package/src/services/downloader.ts +899 -0
  170. package/src/services/engine-direct-bundle.test.ts +58 -0
  171. package/src/services/engine-streaming.test.ts +80 -0
  172. package/src/services/engine.d.ts +534 -0
  173. package/src/services/engine.d.ts.map +1 -0
  174. package/src/services/engine.ts +1891 -0
  175. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  176. package/src/services/ensure-local-artifacts.test.ts +368 -0
  177. package/src/services/ensure-local-artifacts.ts +351 -0
  178. package/src/services/external-scanner.d.ts +17 -0
  179. package/src/services/external-scanner.d.ts.map +1 -0
  180. package/src/services/external-scanner.ts +312 -0
  181. package/src/services/ffi-llm-mock.ts +354 -0
  182. package/src/services/ffi-llm-streaming-abi.ts +442 -0
  183. package/src/services/ffi-streaming-backend.d.ts +180 -0
  184. package/src/services/ffi-streaming-backend.d.ts.map +1 -0
  185. package/src/services/ffi-streaming-backend.ts +382 -0
  186. package/src/services/ffi-streaming-runner.d.ts +122 -0
  187. package/src/services/ffi-streaming-runner.d.ts.map +1 -0
  188. package/src/services/ffi-streaming-runner.test.ts +60 -0
  189. package/src/services/ffi-streaming-runner.ts +354 -0
  190. package/src/services/ffi-unload-ordering.test.ts +162 -0
  191. package/src/services/gpu-autotune.ts +534 -0
  192. package/src/services/gpu-detect.ts +139 -0
  193. package/src/services/handler-registry.d.ts +72 -0
  194. package/src/services/handler-registry.d.ts.map +1 -0
  195. package/src/services/handler-registry.ts +240 -0
  196. package/src/services/hardware.d.ts +63 -0
  197. package/src/services/hardware.d.ts.map +1 -0
  198. package/src/services/hardware.test.ts +183 -0
  199. package/src/services/hardware.ts +404 -0
  200. package/src/services/hf-search.d.ts +26 -0
  201. package/src/services/hf-search.d.ts.map +1 -0
  202. package/src/services/hf-search.test.ts +69 -0
  203. package/src/services/hf-search.ts +420 -0
  204. package/src/services/image-description-runtime.d.ts +14 -0
  205. package/src/services/image-description-runtime.d.ts.map +1 -0
  206. package/src/services/image-description-runtime.test.ts +61 -0
  207. package/src/services/image-description-runtime.ts +118 -0
  208. package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
  209. package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  210. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  211. package/src/services/imagegen/backend-selector.d.ts +118 -0
  212. package/src/services/imagegen/backend-selector.d.ts.map +1 -0
  213. package/src/services/imagegen/backend-selector.ts +281 -0
  214. package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
  215. package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  216. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  217. package/src/services/imagegen/errors.d.ts +16 -0
  218. package/src/services/imagegen/errors.d.ts.map +1 -0
  219. package/src/services/imagegen/errors.ts +40 -0
  220. package/src/services/imagegen/index.d.ts +58 -0
  221. package/src/services/imagegen/index.d.ts.map +1 -0
  222. package/src/services/imagegen/index.ts +144 -0
  223. package/src/services/imagegen/mflux.d.ts +74 -0
  224. package/src/services/imagegen/mflux.d.ts.map +1 -0
  225. package/src/services/imagegen/mflux.ts +313 -0
  226. package/src/services/imagegen/sd-cpp.d.ts +180 -0
  227. package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
  228. package/src/services/imagegen/sd-cpp.ts +718 -0
  229. package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  230. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  231. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  232. package/src/services/imagegen/types.d.ts +181 -0
  233. package/src/services/imagegen/types.d.ts.map +1 -0
  234. package/src/services/imagegen/types.ts +193 -0
  235. package/src/services/index.d.ts +30 -0
  236. package/src/services/index.d.ts.map +1 -0
  237. package/src/services/index.ts +225 -0
  238. package/src/services/inference-capabilities.d.ts +132 -0
  239. package/src/services/inference-capabilities.d.ts.map +1 -0
  240. package/src/services/inference-capabilities.test.ts +75 -0
  241. package/src/services/inference-capabilities.ts +204 -0
  242. package/src/services/inference-telemetry.d.ts +59 -0
  243. package/src/services/inference-telemetry.d.ts.map +1 -0
  244. package/src/services/inference-telemetry.ts +143 -0
  245. package/src/services/ios-llama-streaming.ts +248 -0
  246. package/src/services/kv-spill.d.ts +189 -0
  247. package/src/services/kv-spill.d.ts.map +1 -0
  248. package/src/services/kv-spill.test.ts +222 -0
  249. package/src/services/kv-spill.ts +356 -0
  250. package/src/services/latency-trace.d.ts +346 -0
  251. package/src/services/latency-trace.d.ts.map +1 -0
  252. package/src/services/latency-trace.test.ts +266 -0
  253. package/src/services/latency-trace.ts +844 -0
  254. package/src/services/llama-server-metrics.ts +304 -0
  255. package/src/services/llm-streaming-binding.d.ts +96 -0
  256. package/src/services/llm-streaming-binding.d.ts.map +1 -0
  257. package/src/services/llm-streaming-binding.ts +136 -0
  258. package/src/services/load-args.d.ts +82 -0
  259. package/src/services/load-args.d.ts.map +1 -0
  260. package/src/services/load-args.ts +81 -0
  261. package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
  262. package/src/services/manifest/index.d.ts +4 -0
  263. package/src/services/manifest/index.d.ts.map +1 -0
  264. package/src/services/manifest/index.ts +66 -0
  265. package/src/services/manifest/manifest.test.ts +693 -0
  266. package/src/services/manifest/schema.d.ts +715 -0
  267. package/src/services/manifest/schema.d.ts.map +1 -0
  268. package/src/services/manifest/schema.ts +655 -0
  269. package/src/services/manifest/types.d.ts +30 -0
  270. package/src/services/manifest/types.d.ts.map +1 -0
  271. package/src/services/manifest/types.ts +55 -0
  272. package/src/services/manifest/validator.d.ts +66 -0
  273. package/src/services/manifest/validator.d.ts.map +1 -0
  274. package/src/services/manifest/validator.ts +569 -0
  275. package/src/services/memory-arbiter.d.ts +343 -0
  276. package/src/services/memory-arbiter.d.ts.map +1 -0
  277. package/src/services/memory-arbiter.test.ts +419 -0
  278. package/src/services/memory-arbiter.ts +1000 -0
  279. package/src/services/memory-monitor.d.ts +119 -0
  280. package/src/services/memory-monitor.d.ts.map +1 -0
  281. package/src/services/memory-monitor.test.ts +208 -0
  282. package/src/services/memory-monitor.ts +296 -0
  283. package/src/services/memory-pressure.d.ts +127 -0
  284. package/src/services/memory-pressure.d.ts.map +1 -0
  285. package/src/services/memory-pressure.ts +413 -0
  286. package/src/services/mtp-doctor.d.ts +13 -0
  287. package/src/services/mtp-doctor.d.ts.map +1 -0
  288. package/src/services/mtp-doctor.ts +78 -0
  289. package/src/services/network-policy.d.ts +127 -0
  290. package/src/services/network-policy.d.ts.map +1 -0
  291. package/src/services/network-policy.ts +346 -0
  292. package/src/services/paths.d.ts +6 -0
  293. package/src/services/paths.d.ts.map +1 -0
  294. package/src/services/paths.ts +25 -0
  295. package/src/services/planner-skeleton.d.ts +124 -0
  296. package/src/services/planner-skeleton.d.ts.map +1 -0
  297. package/src/services/planner-skeleton.ts +175 -0
  298. package/src/services/providers.d.ts +38 -0
  299. package/src/services/providers.d.ts.map +1 -0
  300. package/src/services/providers.ts +507 -0
  301. package/src/services/ram-budget-cache.test.ts +163 -0
  302. package/src/services/ram-budget.d.ts +110 -0
  303. package/src/services/ram-budget.d.ts.map +1 -0
  304. package/src/services/ram-budget.ts +0 -0
  305. package/src/services/readiness.d.ts +9 -0
  306. package/src/services/readiness.d.ts.map +1 -0
  307. package/src/services/readiness.test.ts +87 -0
  308. package/src/services/readiness.ts +238 -0
  309. package/src/services/recommendation.d.ts +111 -0
  310. package/src/services/recommendation.d.ts.map +1 -0
  311. package/src/services/recommendation.ts +672 -0
  312. package/src/services/registry.d.ts +35 -0
  313. package/src/services/registry.d.ts.map +1 -0
  314. package/src/services/registry.ts +151 -0
  315. package/src/services/router-handler.d.ts +92 -0
  316. package/src/services/router-handler.d.ts.map +1 -0
  317. package/src/services/router-handler.test.ts +45 -0
  318. package/src/services/router-handler.ts +376 -0
  319. package/src/services/routing-policy.d.ts +55 -0
  320. package/src/services/routing-policy.d.ts.map +1 -0
  321. package/src/services/routing-policy.ts +228 -0
  322. package/src/services/routing-preferences.d.ts +8 -0
  323. package/src/services/routing-preferences.d.ts.map +1 -0
  324. package/src/services/routing-preferences.ts +15 -0
  325. package/src/services/runtime-target.d.ts +98 -0
  326. package/src/services/runtime-target.d.ts.map +1 -0
  327. package/src/services/runtime-target.ts +154 -0
  328. package/src/services/service.d.ts +128 -0
  329. package/src/services/service.d.ts.map +1 -0
  330. package/src/services/service.test.ts +223 -0
  331. package/src/services/service.ts +735 -0
  332. package/src/services/session-pool.d.ts +72 -0
  333. package/src/services/session-pool.d.ts.map +1 -0
  334. package/src/services/session-pool.ts +153 -0
  335. package/src/services/structured-output/deterministic-repair.d.ts +23 -0
  336. package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
  337. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  338. package/src/services/structured-output/deterministic-repair.ts +443 -0
  339. package/src/services/structured-output/index.ts +4 -0
  340. package/src/services/structured-output.d.ts +311 -0
  341. package/src/services/structured-output.d.ts.map +1 -0
  342. package/src/services/structured-output.test.ts +483 -0
  343. package/src/services/structured-output.ts +712 -0
  344. package/src/services/transcription-priority.test.ts +211 -0
  345. package/src/services/tts/errors.ts +46 -0
  346. package/src/services/tts/index.ts +214 -0
  347. package/src/services/tts/tts-audio-cache.ts +235 -0
  348. package/src/services/tts/types.ts +157 -0
  349. package/src/services/types.d.ts +19 -0
  350. package/src/services/types.d.ts.map +1 -0
  351. package/src/services/types.ts +55 -0
  352. package/src/services/verify-on-device.d.ts +34 -0
  353. package/src/services/verify-on-device.d.ts.map +1 -0
  354. package/src/services/verify-on-device.test.ts +87 -0
  355. package/src/services/verify-on-device.ts +127 -0
  356. package/src/services/verify.d.ts +8 -0
  357. package/src/services/verify.d.ts.map +1 -0
  358. package/src/services/verify.ts +13 -0
  359. package/src/services/vision/aosp-unavailable.d.ts +115 -0
  360. package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
  361. package/src/services/vision/aosp-unavailable.ts +163 -0
  362. package/src/services/vision/capacitor-llama.d.ts +99 -0
  363. package/src/services/vision/capacitor-llama.d.ts.map +1 -0
  364. package/src/services/vision/capacitor-llama.ts +255 -0
  365. package/src/services/vision/cloud-fallback.d.ts +47 -0
  366. package/src/services/vision/cloud-fallback.d.ts.map +1 -0
  367. package/src/services/vision/cloud-fallback.test.ts +243 -0
  368. package/src/services/vision/cloud-fallback.ts +268 -0
  369. package/src/services/vision/fallback-chain.test.ts +86 -0
  370. package/src/services/vision/hash.d.ts +71 -0
  371. package/src/services/vision/hash.d.ts.map +1 -0
  372. package/src/services/vision/hash.ts +157 -0
  373. package/src/services/vision/index.d.ts +95 -0
  374. package/src/services/vision/index.d.ts.map +1 -0
  375. package/src/services/vision/index.ts +251 -0
  376. package/src/services/vision/llama-server.d.ts +73 -0
  377. package/src/services/vision/llama-server.d.ts.map +1 -0
  378. package/src/services/vision/llama-server.ts +177 -0
  379. package/src/services/vision/types.d.ts +153 -0
  380. package/src/services/vision/types.d.ts.map +1 -0
  381. package/src/services/vision/types.ts +154 -0
  382. package/src/services/vision/vast-fallback.d.ts +18 -0
  383. package/src/services/vision/vast-fallback.d.ts.map +1 -0
  384. package/src/services/vision/vast-fallback.ts +127 -0
  385. package/src/services/vision-embedding-cache.d.ts +98 -0
  386. package/src/services/vision-embedding-cache.d.ts.map +1 -0
  387. package/src/services/vision-embedding-cache.ts +189 -0
  388. package/src/services/voice/VOICE_WORKBENCH.md +88 -0
  389. package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
  390. package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
  391. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  392. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  393. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  394. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  395. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  396. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  397. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  398. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  399. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  400. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  401. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
  402. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  403. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  404. package/src/services/voice/audio-frame-consumer.d.ts +212 -0
  405. package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
  406. package/src/services/voice/audio-frame-consumer.test.ts +343 -0
  407. package/src/services/voice/audio-frame-consumer.ts +491 -0
  408. package/src/services/voice/barge-in.d.ts +112 -0
  409. package/src/services/voice/barge-in.d.ts.map +1 -0
  410. package/src/services/voice/barge-in.test.ts +244 -0
  411. package/src/services/voice/barge-in.ts +336 -0
  412. package/src/services/voice/cancellation-coordinator.d.ts +127 -0
  413. package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
  414. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  415. package/src/services/voice/cancellation-coordinator.ts +269 -0
  416. package/src/services/voice/checkpoint-manager.d.ts +199 -0
  417. package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
  418. package/src/services/voice/checkpoint-manager.ts +401 -0
  419. package/src/services/voice/checkpoint-policy.ts +336 -0
  420. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  421. package/src/services/voice/e2e-harness.test.ts +182 -0
  422. package/src/services/voice/e2e-harness.ts +743 -0
  423. package/src/services/voice/eager-context-builder.d.ts +170 -0
  424. package/src/services/voice/eager-context-builder.d.ts.map +1 -0
  425. package/src/services/voice/eager-context-builder.ts +262 -0
  426. package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
  427. package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  428. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  429. package/src/services/voice/embedding-server.ts +200 -0
  430. package/src/services/voice/embedding.d.ts +133 -0
  431. package/src/services/voice/embedding.d.ts.map +1 -0
  432. package/src/services/voice/embedding.test.ts +148 -0
  433. package/src/services/voice/embedding.ts +244 -0
  434. package/src/services/voice/emotion-attribution.d.ts +68 -0
  435. package/src/services/voice/emotion-attribution.d.ts.map +1 -0
  436. package/src/services/voice/emotion-attribution.test.ts +129 -0
  437. package/src/services/voice/emotion-attribution.ts +361 -0
  438. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  439. package/src/services/voice/engine-bridge.d.ts +746 -0
  440. package/src/services/voice/engine-bridge.d.ts.map +1 -0
  441. package/src/services/voice/engine-bridge.test.ts +384 -0
  442. package/src/services/voice/engine-bridge.ts +2226 -0
  443. package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
  444. package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  445. package/src/services/voice/eot-classifier-ggml.ts +566 -0
  446. package/src/services/voice/eot-classifier.d.ts +214 -0
  447. package/src/services/voice/eot-classifier.d.ts.map +1 -0
  448. package/src/services/voice/eot-classifier.ts +533 -0
  449. package/src/services/voice/errors.d.ts +20 -0
  450. package/src/services/voice/errors.d.ts.map +1 -0
  451. package/src/services/voice/errors.ts +32 -0
  452. package/src/services/voice/expressive-tags.d.ts +158 -0
  453. package/src/services/voice/expressive-tags.d.ts.map +1 -0
  454. package/src/services/voice/expressive-tags.ts +405 -0
  455. package/src/services/voice/ffi-bindings.d.ts +636 -0
  456. package/src/services/voice/ffi-bindings.d.ts.map +1 -0
  457. package/src/services/voice/ffi-bindings.test.ts +671 -0
  458. package/src/services/voice/ffi-bindings.ts +3050 -0
  459. package/src/services/voice/first-line-cache.d.ts +181 -0
  460. package/src/services/voice/first-line-cache.d.ts.map +1 -0
  461. package/src/services/voice/first-line-cache.ts +725 -0
  462. package/src/services/voice/fused-eot-scorer.d.ts +51 -0
  463. package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
  464. package/src/services/voice/fused-eot-scorer.ts +135 -0
  465. package/src/services/voice/index.d.ts +91 -0
  466. package/src/services/voice/index.d.ts.map +1 -0
  467. package/src/services/voice/index.ts +481 -0
  468. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
  469. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
  470. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  471. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  472. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  473. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  474. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  475. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
  476. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  477. package/src/services/voice/kokoro/index.ts +79 -0
  478. package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
  479. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  480. package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
  481. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  482. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  483. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  484. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  485. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  486. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  487. package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  488. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  489. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  490. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  491. package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
  492. package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  493. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  494. package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
  495. package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  496. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  497. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  498. package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
  499. package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  500. package/src/services/voice/kokoro/runtime-selection.ts +237 -0
  501. package/src/services/voice/kokoro/types.d.ts +82 -0
  502. package/src/services/voice/kokoro/types.d.ts.map +1 -0
  503. package/src/services/voice/kokoro/types.ts +95 -0
  504. package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
  505. package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  506. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  507. package/src/services/voice/kokoro/voices.d.ts +30 -0
  508. package/src/services/voice/kokoro/voices.d.ts.map +1 -0
  509. package/src/services/voice/kokoro/voices.ts +64 -0
  510. package/src/services/voice/lifecycle.d.ts +135 -0
  511. package/src/services/voice/lifecycle.d.ts.map +1 -0
  512. package/src/services/voice/lifecycle.test.ts +315 -0
  513. package/src/services/voice/lifecycle.ts +301 -0
  514. package/src/services/voice/live-diarization-session.d.ts +96 -0
  515. package/src/services/voice/live-diarization-session.d.ts.map +1 -0
  516. package/src/services/voice/live-diarization-session.ts +289 -0
  517. package/src/services/voice/mic-source.d.ts +136 -0
  518. package/src/services/voice/mic-source.d.ts.map +1 -0
  519. package/src/services/voice/mic-source.test.ts +210 -0
  520. package/src/services/voice/mic-source.ts +503 -0
  521. package/src/services/voice/optimistic-policy.d.ts +109 -0
  522. package/src/services/voice/optimistic-policy.d.ts.map +1 -0
  523. package/src/services/voice/optimistic-policy.test.ts +101 -0
  524. package/src/services/voice/optimistic-policy.ts +192 -0
  525. package/src/services/voice/optimistic-rollback.ts +343 -0
  526. package/src/services/voice/partial-stabilizer.d.ts +73 -0
  527. package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
  528. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  529. package/src/services/voice/partial-stabilizer.ts +140 -0
  530. package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
  531. package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  532. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  533. package/src/services/voice/phrase-cache.d.ts +76 -0
  534. package/src/services/voice/phrase-cache.d.ts.map +1 -0
  535. package/src/services/voice/phrase-cache.test.ts +242 -0
  536. package/src/services/voice/phrase-cache.ts +186 -0
  537. package/src/services/voice/phrase-chunker.d.ts +62 -0
  538. package/src/services/voice/phrase-chunker.d.ts.map +1 -0
  539. package/src/services/voice/phrase-chunker.test.ts +239 -0
  540. package/src/services/voice/phrase-chunker.ts +281 -0
  541. package/src/services/voice/pipeline-impls.d.ts +151 -0
  542. package/src/services/voice/pipeline-impls.d.ts.map +1 -0
  543. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  544. package/src/services/voice/pipeline-impls.test.ts +292 -0
  545. package/src/services/voice/pipeline-impls.ts +315 -0
  546. package/src/services/voice/pipeline.d.ts +216 -0
  547. package/src/services/voice/pipeline.d.ts.map +1 -0
  548. package/src/services/voice/pipeline.ts +505 -0
  549. package/src/services/voice/prefill-client.d.ts +123 -0
  550. package/src/services/voice/prefill-client.d.ts.map +1 -0
  551. package/src/services/voice/prefill-client.ts +316 -0
  552. package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
  553. package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  554. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  555. package/src/services/voice/profile-store.d.ts +248 -0
  556. package/src/services/voice/profile-store.d.ts.map +1 -0
  557. package/src/services/voice/profile-store.ts +887 -0
  558. package/src/services/voice/ring-buffer.d.ts +40 -0
  559. package/src/services/voice/ring-buffer.d.ts.map +1 -0
  560. package/src/services/voice/ring-buffer.ts +105 -0
  561. package/src/services/voice/rollback-queue.d.ts +24 -0
  562. package/src/services/voice/rollback-queue.d.ts.map +1 -0
  563. package/src/services/voice/rollback-queue.ts +74 -0
  564. package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
  565. package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  566. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  567. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  568. package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
  569. package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  570. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  571. package/src/services/voice/scheduler.d.ts +146 -0
  572. package/src/services/voice/scheduler.d.ts.map +1 -0
  573. package/src/services/voice/scheduler.t2.test.ts +141 -0
  574. package/src/services/voice/scheduler.ts +927 -0
  575. package/src/services/voice/shared-resources.d.ts +190 -0
  576. package/src/services/voice/shared-resources.d.ts.map +1 -0
  577. package/src/services/voice/shared-resources.ts +320 -0
  578. package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  579. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  580. package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
  581. package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
  582. package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  583. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  584. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  585. package/src/services/voice/speaker/diarizer.d.ts +75 -0
  586. package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
  587. package/src/services/voice/speaker/diarizer.ts +218 -0
  588. package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
  589. package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  590. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  591. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  592. package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
  593. package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  594. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  595. package/src/services/voice/speaker/encoder.d.ts +37 -0
  596. package/src/services/voice/speaker/encoder.d.ts.map +1 -0
  597. package/src/services/voice/speaker/encoder.ts +105 -0
  598. package/src/services/voice/speaker-imprint.d.ts +83 -0
  599. package/src/services/voice/speaker-imprint.d.ts.map +1 -0
  600. package/src/services/voice/speaker-imprint.test.ts +185 -0
  601. package/src/services/voice/speaker-imprint.ts +312 -0
  602. package/src/services/voice/speaker-preset-cache.d.ts +77 -0
  603. package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
  604. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  605. package/src/services/voice/speaker-preset-cache.ts +195 -0
  606. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  607. package/src/services/voice/system-audio-sink.d.ts +73 -0
  608. package/src/services/voice/system-audio-sink.d.ts.map +1 -0
  609. package/src/services/voice/system-audio-sink.test.ts +29 -0
  610. package/src/services/voice/system-audio-sink.ts +366 -0
  611. package/src/services/voice/transcriber.d.ts +244 -0
  612. package/src/services/voice/transcriber.d.ts.map +1 -0
  613. package/src/services/voice/transcriber.test.ts +392 -0
  614. package/src/services/voice/transcriber.ts +704 -0
  615. package/src/services/voice/turn-controller.d.ts +183 -0
  616. package/src/services/voice/turn-controller.d.ts.map +1 -0
  617. package/src/services/voice/turn-controller.test.ts +575 -0
  618. package/src/services/voice/turn-controller.ts +596 -0
  619. package/src/services/voice/types.d.ts +643 -0
  620. package/src/services/voice/types.d.ts.map +1 -0
  621. package/src/services/voice/types.ts +699 -0
  622. package/src/services/voice/vad.d.ts +282 -0
  623. package/src/services/voice/vad.d.ts.map +1 -0
  624. package/src/services/voice/vad.test.ts +480 -0
  625. package/src/services/voice/vad.ts +827 -0
  626. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  627. package/src/services/voice/voice-budget.d.ts +241 -0
  628. package/src/services/voice/voice-budget.d.ts.map +1 -0
  629. package/src/services/voice/voice-budget.test.ts +420 -0
  630. package/src/services/voice/voice-budget.ts +656 -0
  631. package/src/services/voice/voice-duet.test.ts +375 -0
  632. package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
  633. package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  634. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  635. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  636. package/src/services/voice/voice-preset-format.d.ts +158 -0
  637. package/src/services/voice/voice-preset-format.d.ts.map +1 -0
  638. package/src/services/voice/voice-preset-format.ts +700 -0
  639. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  640. package/src/services/voice/voice-profile-artifact.d.ts +116 -0
  641. package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
  642. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  643. package/src/services/voice/voice-profile-artifact.ts +518 -0
  644. package/src/services/voice/voice-profile-routes.d.ts +83 -0
  645. package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
  646. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  647. package/src/services/voice/voice-profile-routes.ts +425 -0
  648. package/src/services/voice/voice-scenario.ts +154 -0
  649. package/src/services/voice/voice-settings.d.ts +82 -0
  650. package/src/services/voice/voice-settings.d.ts.map +1 -0
  651. package/src/services/voice/voice-settings.ts +172 -0
  652. package/src/services/voice/voice-state-machine.d.ts +364 -0
  653. package/src/services/voice/voice-state-machine.d.ts.map +1 -0
  654. package/src/services/voice/voice-state-machine.ts +727 -0
  655. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  656. package/src/services/voice/voice-workbench-report.ts +326 -0
  657. package/src/services/voice/voice-workbench.test.ts +158 -0
  658. package/src/services/voice/voice.test.ts +1070 -0
  659. package/src/services/voice/wake-word-ggml.d.ts +101 -0
  660. package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
  661. package/src/services/voice/wake-word-ggml.ts +320 -0
  662. package/src/services/voice/wake-word.d.ts +255 -0
  663. package/src/services/voice/wake-word.d.ts.map +1 -0
  664. package/src/services/voice/wake-word.test.ts +298 -0
  665. package/src/services/voice/wake-word.ts +554 -0
  666. package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  667. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  668. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  669. package/src/services/voice-model-updater.d.ts +240 -0
  670. package/src/services/voice-model-updater.d.ts.map +1 -0
  671. package/src/services/voice-model-updater.ts +724 -0
  672. package/src/services/voice-prewarm.d.ts +3 -0
  673. package/src/services/voice-prewarm.d.ts.map +1 -0
  674. package/src/services/voice-prewarm.ts +51 -0
  675. package/dist/index.d.ts +0 -37
  676. package/dist/index.js +0 -1098
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,+BAA+B,EAAG,GAAY,CAAC;AAC5D,eAAO,MAAM,2BAA2B,EACvC,qDAA8D,CAAC;AAGhE,eAAO,MAAM,wBAAwB,EAAG,QAAiB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,EAAG,MAAgB,CAAC;AAG7D,eAAO,MAAM,aAAa,wDAOhB,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAcxD,eAAO,MAAM,eAAe,gFAMlB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAChD,kBAAkB,EAClB,UAAU,CACV,CAAC;AAsBF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC9C,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAOjD,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC9C,MAAM,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAOjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,qDAMnB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAY9D,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC9C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAQ/C,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAQhD,CAAC;AAeF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+B9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAOhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0D5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;EAA0B,CAAC;AAC9D,eAAO,MAAM,uBAAuB;;;;;;EAA2B,CAAC;AAChE,eAAO,MAAM,oBAAoB;;;;;;;EAAwB,CAAC;AAE1D,eAAO,MAAM,iCAAiC;;;;;;;;;;iBAU5C,CAAC;AASH,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;iBAStB,CAAC;AAEhB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAa9B,CAAC;AAMH,eAAO,MAAM,0BAA0B,6CAI7B,CAAC;AACX,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAQ5B,CAAC;AAwCH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2F5B,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,EAAG,IAAa,CAAC;AAExD,2EAA2E;AAC3E,eAAO,MAAM,mCAAmC,EAAG,EAAW,CAAC;AAE/D,oEAAoE;AACpE,eAAO,MAAM,oCAAoC,EAAG,IAAa,CAAC;AAElE,uEAAuE;AACvE,eAAO,MAAM,uCAAuC,EAAG,GAAY,CAAC;AAEpE,+EAA+E;AAC/E,eAAO,MAAM,wCAAwC,EAAG,EAAW,CAAC;AAEpE,eAAO,MAAM,qBAAqB;;;iBAO/B,CAAC;AAiBJ,eAAO,MAAM,sBAAsB,yGAOzB,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAYzE,eAAO,MAAM,wBAAwB,qCAAsC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK7E,eAAO,MAAM,wBAAwB,wFAS3B,CAAC;AACX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkB7E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;iBAOjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwE/B,CAAC"}
@@ -0,0 +1,655 @@
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. MTP-enabled tiers
19
+ // ship a bundled drafter GGUF under `files.mtp`; the runtime resolves it at
20
+ // load time and passes it as the draft model.
21
+ // - Per-sub-model versioning (kokoro, omnivoice, turn-detector, voice-emotion,
22
+ // diarizer, speaker-encoder, vad, wakeword, embedding, asr) lives in
23
+ // `packages/shared/src/local-inference/voice-models.ts` and the matching
24
+ // `models/voice/CHANGELOG.md`. The bundle manifest below ships the *current*
25
+ // per-tier set of files; the voice-models module ships the *history* the
26
+ // auto-updater walks.
27
+
28
+ import type { LocalRuntimeKernel } from "@elizaos/shared";
29
+ import { z } from "zod";
30
+
31
+ export const ELIZA_1_MANIFEST_SCHEMA_VERSION = "1" as const;
32
+ export const ELIZA_1_MANIFEST_SCHEMA_URL =
33
+ "https://elizaos.ai/schemas/eliza-1.manifest.v1.json" as const;
34
+
35
+ // The shared Eliza-1 BPE vocabulary exported so runtime code can assert it.
36
+ export const ELIZA_1_TOKENIZER_FAMILY = "qwen35" as const;
37
+ export const ELIZA_1_TOKENIZER_VOCAB_SIZE = 248_320 as const;
38
+
39
+ // Tiers — size-ordered across the active Eliza-1 bundles.
40
+ export const ELIZA_1_TIERS = [
41
+ "0_8b",
42
+ "2b",
43
+ "4b",
44
+ "9b",
45
+ "27b",
46
+ "27b-256k",
47
+ ] as const;
48
+ export type Eliza1Tier = (typeof ELIZA_1_TIERS)[number];
49
+
50
+ // Manifest-level kernel capability names. Per AGENTS.md §3:
51
+ // `turboquant_q3`, `turboquant_q4`, `qjl`, `polarquant` are
52
+ // the named optimizations the bundle declares. `turbo3_tcq` is required
53
+ // for any long-context text variant. The C-level llama.cpp kernel handles in
54
+ // `../types.ts` are an implementation detail of the runtime; the manifest
55
+ // speaks in terms of the optimization, not the .metal/.comp file.
56
+ //
57
+ // The relationship to the runtime-side `LocalRuntimeKernel` enum (the
58
+ // llama.cpp-handle layer, declared in `@elizaos/shared/local-inference/types`)
59
+ // is made explicit by `ELIZA1_TO_RUNTIME_KERNEL` / `RUNTIME_TO_ELIZA1_KERNEL`
60
+ // below — that is the single source of truth for the manifest↔runtime kernel
61
+ // bridge.
62
+ export const ELIZA_1_KERNELS = [
63
+ "turboquant_q3",
64
+ "turboquant_q4",
65
+ "qjl",
66
+ "polarquant",
67
+ "turbo3_tcq",
68
+ ] as const;
69
+ export type Eliza1Kernel = (typeof ELIZA_1_KERNELS)[number];
70
+ export type Eliza1RequiredRuntimeKernel = Exclude<
71
+ LocalRuntimeKernel,
72
+ "openvino"
73
+ >;
74
+
75
+ // Manifest-kernel ↔ runtime-kernel bridge.
76
+ //
77
+ // `Eliza1Kernel` (this module, the bundle-manifest layer) names the *named
78
+ // optimization* a bundle advertises; `LocalRuntimeKernel`
79
+ // (`@elizaos/shared/local-inference/types`, the llama.cpp-handle layer) names
80
+ // the *fork kernel handle* the binary must expose. They overlap but are not the
81
+ // same enum:
82
+ //
83
+ // turboquant_q3 ↔ turbo3 (Q3 KV-cache quant kernel)
84
+ // turboquant_q4 ↔ turbo4 (Q4 KV-cache quant kernel)
85
+ // qjl ↔ qjl_full (QuIP#-JL fused-attention kernel)
86
+ // polarquant ↔ polarquant (same name on both layers)
87
+ // turbo3_tcq ↔ turbo3_tcq (same name on both layers)
88
+ //
89
+ // Every Eliza-1 custom-kernel member is covered (both are total maps over the
90
+ // custom W4-B kernel set). `openvino` is a runtime backend capability,
91
+ // not an Eliza-1 bundle optimization, so it intentionally stays outside this
92
+ // bridge. When code needs to translate between the catalog's custom
93
+ // `requiresKernel` entries and the manifest's `kernels.required:
94
+ // Eliza1Kernel[]`, route it through these.
95
+ export const ELIZA1_TO_RUNTIME_KERNEL: Readonly<
96
+ Record<Eliza1Kernel, Eliza1RequiredRuntimeKernel>
97
+ > = {
98
+ turboquant_q3: "turbo3",
99
+ turboquant_q4: "turbo4",
100
+ qjl: "qjl_full",
101
+ polarquant: "polarquant",
102
+ turbo3_tcq: "turbo3_tcq",
103
+ };
104
+
105
+ export const RUNTIME_TO_ELIZA1_KERNEL: Readonly<
106
+ Record<Eliza1RequiredRuntimeKernel, Eliza1Kernel>
107
+ > = {
108
+ turbo3: "turboquant_q3",
109
+ turbo4: "turboquant_q4",
110
+ qjl_full: "qjl",
111
+ polarquant: "polarquant",
112
+ turbo3_tcq: "turbo3_tcq",
113
+ };
114
+
115
+ export const ELIZA_1_BACKENDS = [
116
+ "metal",
117
+ "vulkan",
118
+ "cuda",
119
+ "rocm",
120
+ "cpu",
121
+ ] as const;
122
+ export type Eliza1Backend = (typeof ELIZA_1_BACKENDS)[number];
123
+
124
+ // Required-kernel set per tier. Mirrors the active Eliza-1 release policy:
125
+ // - All tiers require turboquant + qjl + polarquant.
126
+ // - All current text GGUFs ship at the 128k half-context floor or the 262k
127
+ // native tier, so every tier requires `turbo3_tcq`. The validator also
128
+ // enforces the same requirement dynamically for any bundle that declares
129
+ // a >64k text file, so additional tiers cannot publish long-context text
130
+ // without TCQ.
131
+ //
132
+ // Q4 is the release text quant baseline. TCQ is part of the release contract
133
+ // for the full text ladder, including the smallest 0.8B and 2B bundles.
134
+ export const REQUIRED_KERNELS_BY_TIER: Readonly<
135
+ Record<Eliza1Tier, ReadonlyArray<Eliza1Kernel>>
136
+ > = {
137
+ "0_8b": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
138
+ "2b": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
139
+ "4b": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
140
+ "9b": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
141
+ "27b": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
142
+ "27b-256k": ["turboquant_q4", "qjl", "polarquant", "turbo3_tcq"],
143
+ };
144
+
145
+ // Backends each tier is expected to support on shipped hardware.
146
+ export const SUPPORTED_BACKENDS_BY_TIER: Readonly<
147
+ Record<Eliza1Tier, ReadonlyArray<Eliza1Backend>>
148
+ > = {
149
+ "0_8b": ["metal", "vulkan", "cpu"],
150
+ "2b": ["metal", "vulkan", "cpu"],
151
+ "4b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
152
+ "9b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
153
+ "27b": ["metal", "vulkan", "cuda", "rocm", "cpu"],
154
+ "27b-256k": ["metal", "vulkan", "cuda", "rocm", "cpu"],
155
+ };
156
+
157
+ // ---------------------------------------------------------------------------
158
+ // Zod definitions
159
+ // ---------------------------------------------------------------------------
160
+
161
+ const sha256 = z
162
+ .string()
163
+ .regex(/^[a-f0-9]{64}$/, "sha256 must be 64 lowercase hex chars");
164
+
165
+ const lineageEntry = z.object({
166
+ base: z.string().min(1),
167
+ license: z.string().min(1),
168
+ });
169
+
170
+ export const Eliza1LineageSchema = z.object({
171
+ text: lineageEntry,
172
+ voice: lineageEntry,
173
+ drafter: lineageEntry.optional(),
174
+ // Wave-6 (2026-05-10): manifest now records lineage for every shipped
175
+ // component so license/dataset provenance is auditable per component.
176
+ // All optional — a tier may omit ASR/embedding/vision/vad/wakeword by
177
+ // leaving the corresponding `files.*` slot empty AND the lineage
178
+ // entry undefined. The validator enforces lineage-vs-files consistency.
179
+ asr: lineageEntry.optional(),
180
+ embedding: lineageEntry.optional(),
181
+ imagegen: lineageEntry.optional(),
182
+ vision: lineageEntry.optional(),
183
+ vad: lineageEntry.optional(),
184
+ wakeword: lineageEntry.optional(),
185
+ // Voice Wave 2 (2026-05-14): semantic end-of-turn detector lineage. When
186
+ // `files.turn` ships the bundled `livekit/turn-detector` ONNX (the
187
+ // ≤1.7B-tier `v1.2.2-en` SmolLM2 distill or the ≥4B-tier `v0.4.1-intl`
188
+ // pruned Qwen2.5-0.5B), this records the upstream repo + license. Apache-2.0
189
+ // fallback path is `latishab/turnsense`.
190
+ turn: lineageEntry.optional(),
191
+ // Voice Wave 2 (2026-05-14): acoustic-prosody emotion classifier lineage.
192
+ // When `files.emotion` ships the bundled Wav2Small student GGUF (72K
193
+ // params), this records the audeering teacher repo + license as
194
+ // research-only attribution (the audeering teacher is CC-BY-NC-SA-4.0
195
+ // and NEVER bundled — only the Apache-2.0 student is shipped, distilled
196
+ // via `packages/training/scripts/emotion/distill_wav2small.py`). The
197
+ // SamLowe/roberta-base-go_emotions text classifier may optionally also
198
+ // ship under this slot when the operator enables the text-classifier
199
+ // shadow path; see R3-emotion.md §2.
200
+ emotion: lineageEntry.optional(),
201
+ });
202
+
203
+ export const Eliza1FileEntrySchema = z.object({
204
+ path: z.string().min(1),
205
+ sha256,
206
+ // text files declare their context length so the runtime can pick the
207
+ // largest variant that fits the device's RAM budget. Other file kinds
208
+ // never have ctx.
209
+ ctx: z.number().int().min(131072, "must be at least 128k").optional(),
210
+ });
211
+
212
+ export const Eliza1FilesSchema = z.object({
213
+ text: z.array(Eliza1FileEntrySchema).min(1),
214
+ voice: z.array(Eliza1FileEntrySchema).min(1),
215
+ asr: z.array(Eliza1FileEntrySchema),
216
+ vision: z.array(Eliza1FileEntrySchema),
217
+ mtp: z.array(Eliza1FileEntrySchema),
218
+ cache: z.array(Eliza1FileEntrySchema).min(1),
219
+ // Wave-6 (2026-05-10): the omni bundle ships a per-bundle dedicated
220
+ // embedding model (Qwen3-Embedding-GGUF on non-lite tiers), a
221
+ // Silero-VAD GGUF, and an optional openWakeWord GGUF (the combined GGUF
222
+ // carries the mel filterbank + speech embedding model + every per-phrase
223
+ // head). All three are optional in the schema — the 0_8b tier
224
+ // intentionally omits the dedicated embedding (pools from text backbone)
225
+ // and a tier may ship without wake-word support.
226
+ //
227
+ // Schema-level optionality: empty array = "this bundle does not
228
+ // ship this component"; the validator enforces tier-specific
229
+ // consistency rules (e.g. 4b-and-up MUST ship `embedding[]`).
230
+ embedding: z.array(Eliza1FileEntrySchema).optional(),
231
+ // Optional image-generation artifacts. Most Eliza-1 base bundles do not
232
+ // carry diffusion weights; those are documented in
233
+ // packages/chip/ELIZA_1_BUNDLE_EXTRAS.json and downloaded on first use. When an
234
+ // additional bundle ships local image-gen weights inline, list them here
235
+ // and provide matching `lineage.imagegen`.
236
+ imagegen: z.array(Eliza1FileEntrySchema).optional(),
237
+ vad: z.array(Eliza1FileEntrySchema).optional(),
238
+ wakeword: z.array(Eliza1FileEntrySchema).optional(),
239
+ // Voice Wave 2 (2026-05-14): bundled semantic turn detector. Optional —
240
+ // when omitted, the runtime falls back to `HeuristicEotClassifier` (the
241
+ // deterministic punctuation/conjunction baseline). When present, the
242
+ // runtime loads the model via the GGUF-backed LiveKit turn detector
243
+ // (`eot-classifier-ggml.ts`) and pre-warms it at voice-session start.
244
+ // Tier mapping is data-driven (see
245
+ // `stage_turn_detector` in
246
+ // `packages/training/scripts/manifest/stage_eliza1_bundle_assets.py`):
247
+ // 0_8b/2b ship the EN-only SmolLM2-135M distill; 4b/9b/27b ship the
248
+ // multilingual pruned Qwen2.5-0.5B.
249
+ turn: z.array(Eliza1FileEntrySchema).optional(),
250
+ // Eliza-1 EOT LoRA adapter — optional, complements `turn`. When
251
+ // present, the runtime layers this adapter onto the in-process
252
+ // drafter at voice-session start (`voice/eliza1-eot-scorer.ts`) so
253
+ // P(`<|im_end|>`) calibration matches a fine-tuned EOT head without
254
+ // shipping a second base model. When both `turn` and `eotLoraAdapter`
255
+ // are present the operator picks via `ELIZA_VOICE_EOT_BACKEND` or
256
+ // `startVoiceSession({ useEliza1Eot })`. Training recipe:
257
+ // `packages/training/scripts/turn_detector/configs/turn_detector_eliza1_drafter.yaml`.
258
+ eotLoraAdapter: z.array(Eliza1FileEntrySchema).optional(),
259
+ // Voice Wave 2 (2026-05-14): bundled acoustic-prosody emotion classifier
260
+ // (Wav2Small student, GGUF). Optional — when omitted, the runtime falls
261
+ // back to the lexicon + audio-prosody heuristic path inside
262
+ // `attributeVoiceEmotion()` (no acoustic-model evidence row). When present,
263
+ // the runtime loads the GGUF via `VoiceEmotionClassifier`, runs it on
264
+ // `isFinal` transcript snapshots, and fuses the output with the Stage-1
265
+ // text-emotion field via the single fusion point in `emotion-attribution.ts`.
266
+ // All tiers ship the same Wav2Small student (the on-device budget is
267
+ // dominated by the LM, not this small head); a 0_8b bundle may still
268
+ // choose to omit it to save the cold-start cost.
269
+ emotion: z.array(Eliza1FileEntrySchema).optional(),
270
+ });
271
+
272
+ export const Eliza1KernelEnumSchema = z.enum(ELIZA_1_KERNELS);
273
+ export const Eliza1BackendEnumSchema = z.enum(ELIZA_1_BACKENDS);
274
+ export const Eliza1TierEnumSchema = z.enum(ELIZA_1_TIERS);
275
+
276
+ export const Eliza1VerifiedBackendStatusSchema = z.object({
277
+ status: z.enum(["pass", "fail", "skipped"]),
278
+ atCommit: z.string().min(1),
279
+ report: z.string().min(1),
280
+ // Optional provenance for a "pass" recorded on a single device class — e.g.
281
+ // the runtime Vulkan dispatch smoke that ran on one Intel-ANV GPU. `caveat`
282
+ // names what device coverage is still missing so the recommendation engine
283
+ // and release docs do not over-claim.
284
+ device: z.string().min(1).optional(),
285
+ caveat: z.string().min(1).optional(),
286
+ });
287
+
288
+ // Recipe-level kernel layout pins, folded in from the quantization recipes'
289
+ // `kernel_manifest` sidecar fragments
290
+ // (packages/training/scripts/quantization/_kernel_manifest.py). Keyed by the
291
+ // *recipe* kernel-target name (`turbo3` / `turbo4` / `turbo3_tcq` / `qjl1_256` /
292
+ // `polar_q4`) — NOT the manifest-level capability names in `ELIZA_1_KERNELS`.
293
+ // The runtime/downloader can verify the encoded blocks match the kernels it
294
+ // ships; the publish orchestrator already validates the sidecars exist.
295
+ export const Eliza1RecipeKernelPinsSchema = z.object({
296
+ blockLayoutVersion: z.string().min(1),
297
+ codebookHash: z.string().min(1),
298
+ perBlockTolerance: z.number().positive(),
299
+ });
300
+
301
+ export const Eliza1Eagle3KernelSchema = z
302
+ .object({
303
+ enabled: z.boolean().optional(),
304
+ capability: z.string().min(1).optional(),
305
+ specType: z.string().min(1).optional(),
306
+ model: z.string().min(1).optional(),
307
+ maxDraftTokens: z.number().int().positive().optional(),
308
+ failure: z.string().min(1).optional(),
309
+ })
310
+ .passthrough();
311
+
312
+ export const Eliza1KernelsSchema = z.object({
313
+ required: z.array(Eliza1KernelEnumSchema).min(1),
314
+ optional: z.array(Eliza1KernelEnumSchema),
315
+ verifiedBackends: z.object({
316
+ metal: Eliza1VerifiedBackendStatusSchema,
317
+ vulkan: Eliza1VerifiedBackendStatusSchema,
318
+ cuda: Eliza1VerifiedBackendStatusSchema,
319
+ rocm: Eliza1VerifiedBackendStatusSchema,
320
+ cpu: Eliza1VerifiedBackendStatusSchema,
321
+ }),
322
+ recipeManifest: z.record(z.string(), Eliza1RecipeKernelPinsSchema).optional(),
323
+ // Optional EAGLE3 capability metadata.
324
+ eagle3: Eliza1Eagle3KernelSchema.optional(),
325
+ });
326
+
327
+ // Wave-6: voice surface declares which expressive features the bundled
328
+ // TTS supports. Today these are tag-driven inline in the input text;
329
+ // presence of `singing` or `emotion-tags` here lets the runtime expose
330
+ // the relevant API surface and lets the planner emit tags inline.
331
+ export const ELIZA_1_VOICE_CAPABILITIES = [
332
+ "tts",
333
+ "emotion-tags",
334
+ "singing",
335
+ ] as const;
336
+ export const ELIZA_1_VOICE_MANIFEST_VERSION = "1";
337
+ export const VOICE_PRESET_CACHE_PATH = "cache/voice-preset-default.bin";
338
+ export type Eliza1VoiceCapability = (typeof ELIZA_1_VOICE_CAPABILITIES)[number];
339
+
340
+ export const Eliza1VoiceSchema = z.object({
341
+ version: z.string().min(1),
342
+ frozen: z.literal(true),
343
+ cache: z.object({
344
+ speakerPreset: z.string().min(1),
345
+ phraseCacheSeed: z.string().min(1),
346
+ }),
347
+ capabilities: z.array(z.enum(ELIZA_1_VOICE_CAPABILITIES)).default(["tts"]),
348
+ });
349
+
350
+ const Eliza1Eagle3EvalSchema = z
351
+ .object({
352
+ /** accepted/drafted; null or absent when not measured. */
353
+ acceptanceRate: z.number().min(0).max(1).nullable().optional(),
354
+ /** EAGLE3-on tok/s ÷ baseline tok/s; null or absent when not measured. */
355
+ speedup: z.number().nonnegative().nullable().optional(),
356
+ /** Preferred spelling for pass/fail status. */
357
+ passed: z.boolean().optional(),
358
+ /** Back-compat spelling accepted for manifest producers that emit `pass`. */
359
+ pass: z.boolean().optional(),
360
+ /** Human-readable reason when the EAGLE3 eval was not run or failed. */
361
+ failure: z.string().min(1).optional(),
362
+ })
363
+ .superRefine((eagle3, ctx) => {
364
+ if (
365
+ eagle3.pass !== undefined &&
366
+ eagle3.passed !== undefined &&
367
+ eagle3.pass !== eagle3.passed
368
+ ) {
369
+ ctx.addIssue({
370
+ code: "custom",
371
+ message: "pass and passed must agree when both are present",
372
+ path: ["pass"],
373
+ });
374
+ }
375
+ const passed = eagle3.passed ?? eagle3.pass;
376
+ if (
377
+ passed === true &&
378
+ (eagle3.acceptanceRate == null || eagle3.speedup == null)
379
+ ) {
380
+ ctx.addIssue({
381
+ code: "custom",
382
+ message: "passed=true requires measured acceptanceRate and speedup",
383
+ path: ["passed"],
384
+ });
385
+ }
386
+ });
387
+
388
+ export const Eliza1EvalsSchema = z.object({
389
+ textEval: z.object({
390
+ score: z.number().min(0).max(1),
391
+ passed: z.boolean(),
392
+ }),
393
+ voiceRtf: z.object({
394
+ rtf: z.number().nonnegative(),
395
+ passed: z.boolean(),
396
+ }),
397
+ e2eLoopOk: z.boolean(),
398
+ thirtyTurnOk: z.boolean(),
399
+ // Wave-6 additions — all optional so a tier can publish without
400
+ // an ASR / embedding component declared. `expressive` covers the
401
+ // singing/emotion-tag eval gates from `eliza1_gates.yaml`. The
402
+ // validator refuses defaultEligible=true if any declared component's
403
+ // gate is missing OR fails.
404
+ asrWer: z
405
+ .object({
406
+ wer: z.number().nonnegative(),
407
+ passed: z.boolean(),
408
+ })
409
+ .optional(),
410
+ embedMteb: z
411
+ .object({
412
+ score: z.number().min(0).max(1),
413
+ passed: z.boolean(),
414
+ })
415
+ .optional(),
416
+ vadLatencyMs: z
417
+ .object({
418
+ median: z.number().nonnegative(),
419
+ boundaryMs: z.number().nonnegative().optional(),
420
+ endpointMs: z.number().nonnegative().optional(),
421
+ falseBargeInRate: z.number().min(0).max(1).optional(),
422
+ passed: z.boolean(),
423
+ })
424
+ .optional(),
425
+ expressive: z
426
+ .object({
427
+ tagFaithfulness: z.number().min(0).max(1),
428
+ mosExpressive: z.number().nonnegative(),
429
+ tagLeakage: z.number().nonnegative(),
430
+ passed: z.boolean(),
431
+ })
432
+ .optional(),
433
+ mtp: z
434
+ .object({
435
+ acceptanceRate: z.number().min(0).max(1).nullable(),
436
+ speedup: z.number().nonnegative().nullable(),
437
+ passed: z.boolean(),
438
+ })
439
+ .optional(),
440
+ // Optional EAGLE3 speculative-decoding bench metadata.
441
+ eagle3: Eliza1Eagle3EvalSchema.optional(),
442
+ // Voice Wave 2 (2026-05-14): semantic end-of-turn detector eval gates.
443
+ // Required when `files.turn` is non-empty (validator enforces). Thresholds
444
+ // applied by `eval_turn_detector.py` in `packages/training/scripts/turn_detector/`:
445
+ // f1 ≥ TURN_DETECTOR_F1_THRESHOLD (0.85)
446
+ // meanLatencyMs ≤ TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT (30 ms)
447
+ // `passed` is precomputed by the eval script per the constants above so
448
+ // the validator stays a single source of truth; constants are exported
449
+ // from this module for the script + tests to consume.
450
+ turnDetector: z
451
+ .object({
452
+ f1: z.number().min(0).max(1),
453
+ meanLatencyMs: z.number().nonnegative(),
454
+ passed: z.boolean(),
455
+ // Which detector backend the eval was run against. Optional for
456
+ // back-compat with bundles staged before the eliza-1 EOT path;
457
+ // when absent, consumers should assume `livekit`.
458
+ kind: z.enum(["livekit", "turnsense", "eliza-1-drafter"]).optional(),
459
+ })
460
+ .optional(),
461
+ // Voice Wave 2 (2026-05-14): acoustic-emotion classifier eval gates.
462
+ // Required when `files.emotion` is non-empty (validator enforces).
463
+ // Thresholds applied by the bench harness under
464
+ // `packages/benchmarks/voice-emotion/`:
465
+ // macroF1Meld ≥ EMOTION_CLASSIFIER_MELD_F1_THRESHOLD (0.35)
466
+ // macroF1Iemocap ≥ EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD (0.60)
467
+ // The MELD threshold is intentionally low — 7-class conversational SER
468
+ // macro-F1 is 0.40-0.50 even for strong models on MELD; we set the gate so
469
+ // a real improvement does not get refused (R3-emotion §6 risk).
470
+ emotionClassifier: z
471
+ .object({
472
+ macroF1Meld: z.number().min(0).max(1),
473
+ macroF1Iemocap: z.number().min(0).max(1),
474
+ /** Mean per-clip inference latency on CPU. */
475
+ meanLatencyMs: z.number().nonnegative(),
476
+ passed: z.boolean(),
477
+ })
478
+ .optional(),
479
+ });
480
+
481
+ /** Eval-gate threshold: minimum acceptable F1 on the EOU benchmark. */
482
+ export const TURN_DETECTOR_F1_THRESHOLD = 0.85 as const;
483
+
484
+ /** Eval-gate threshold: maximum acceptable mean inference latency (ms). */
485
+ export const TURN_DETECTOR_MEAN_LATENCY_MS_LIMIT = 30 as const;
486
+
487
+ /** Eval-gate threshold: minimum macro-F1 on MELD test (7-class). */
488
+ export const EMOTION_CLASSIFIER_MELD_F1_THRESHOLD = 0.35 as const;
489
+
490
+ /** Eval-gate threshold: minimum macro-F1 on IEMOCAP test (4-class). */
491
+ export const EMOTION_CLASSIFIER_IEMOCAP_F1_THRESHOLD = 0.6 as const;
492
+
493
+ /** Eval-gate threshold: maximum mean CPU inference latency (ms) per window. */
494
+ export const EMOTION_CLASSIFIER_MEAN_LATENCY_MS_LIMIT = 30 as const;
495
+
496
+ export const Eliza1RamBudgetSchema = z
497
+ .object({
498
+ min: z.number().int().positive(),
499
+ recommended: z.number().int().positive(),
500
+ })
501
+ .refine((r) => r.recommended >= r.min, {
502
+ message: "ramBudgetMb.recommended must be >= ramBudgetMb.min",
503
+ });
504
+
505
+ // Release-state vocabulary. `base-v1` is the v1 product: the upstream BASE
506
+ // models — GGUF-converted via the elizaOS/llama.cpp fork and fully
507
+ // Eliza-optimized (every quant/kernel trick in inference/AGENTS.md §3) —
508
+ // but NOT fine-tuned (fine-tuning ships in v2). `base-v1-candidate` is the
509
+ // in-progress state of a base-v1 bundle before every release-blocking
510
+ // gate (real fork-built bytes, every supported-backend kernel verify,
511
+ // every required platform-dispatch report, the runnable-on-base evals)
512
+ // has gone green. It is publishable to HuggingFace as a download target
513
+ // and is installable on a device whose backend it verified, but is not
514
+ // the strict release — its `defaultEligible` stays `false` at publish
515
+ // time. `finetuned-v2` is the v2 state; `local-standin` is a non-publishable
516
+ // staging shape; `upload-candidate` / `final` are the historical
517
+ // fine-tuned-v1 publish states retained for forward-compat. Mirrors
518
+ // `ELIZA_1_RELEASE_STATES` in
519
+ // `packages/training/scripts/manifest/eliza1_manifest.py`.
520
+ export const ELIZA_1_RELEASE_STATES = [
521
+ "local-standin",
522
+ "base-v1-candidate",
523
+ "base-v1",
524
+ "finetuned-v2",
525
+ "upload-candidate",
526
+ "final",
527
+ ] as const;
528
+ export type Eliza1ReleaseState = (typeof ELIZA_1_RELEASE_STATES)[number];
529
+
530
+ // Release-channel vocabulary recorded on a published manifest.
531
+ // `recommended` is the fine-tuned Eliza-1 (ships in v2) — the channel a
532
+ // device may auto-promote to the strict default. `base-v1` is the
533
+ // upstream-base + kernel-optimized release: every quant/kernel trick
534
+ // applied, but the text weights are the upstream base GGUFs (not the
535
+ // fine-tuned Eliza-1). A `base-v1`-channel manifest MUST be
536
+ // `defaultEligible: false` at publish time. The on-device gate
537
+ // (`canSetAsDefault`) still promotes a contract-valid `base-v1` bundle to
538
+ // the fallback default when no `recommended` channel bundle is installed —
539
+ // see `validator.ts`. Mirrors `ELIZA_1_RELEASE_CHANNELS` (Python side).
540
+ export const ELIZA_1_RELEASE_CHANNELS = ["recommended", "base-v1"] as const;
541
+ export type Eliza1ReleaseChannel = (typeof ELIZA_1_RELEASE_CHANNELS)[number];
542
+
543
+ // Provenance slots — the bundle components whose upstream source repo a
544
+ // `base-v1` manifest must record. Mirrors `ELIZA_1_PROVENANCE_SLOTS`
545
+ // (Python side).
546
+ export const ELIZA_1_PROVENANCE_SLOTS = [
547
+ "text",
548
+ "voice",
549
+ "asr",
550
+ "vad",
551
+ "embedding",
552
+ "imagegen",
553
+ "vision",
554
+ "drafter",
555
+ ] as const;
556
+ export type Eliza1ProvenanceSlot = (typeof ELIZA_1_PROVENANCE_SLOTS)[number];
557
+
558
+ const eliza1SourceModelEntry = z.object({
559
+ /** Upstream HuggingFace repo this component is converted from. */
560
+ repo: z.string().min(1),
561
+ /** Specific file in the upstream repo, when the source is one file. */
562
+ file: z.string().min(1).optional(),
563
+ /** The converter / recipe path used (e.g. `<fork>/convert_hf_to_gguf.py`). */
564
+ convertedVia: z.string().min(1).optional(),
565
+ /** Free-text provenance note. */
566
+ note: z.string().min(1).optional(),
567
+ });
568
+
569
+ // `provenance` — optional manifest block. Required on a `base-v1` bundle so
570
+ // the "base, not fine-tuned" plan is auditable: which upstream repo each
571
+ // shipped component is converted from, and whether v1 fine-tuning was
572
+ // applied (always `false` for the base-v1 release). The contract validator
573
+ // enforces per-component coverage for `base-v1`.
574
+ export const Eliza1ProvenanceSchema = z.object({
575
+ releaseState: z.enum(ELIZA_1_RELEASE_STATES),
576
+ finetuned: z.boolean(),
577
+ sourceModels: z.record(
578
+ z.enum(ELIZA_1_PROVENANCE_SLOTS),
579
+ eliza1SourceModelEntry,
580
+ ),
581
+ });
582
+
583
+ export const Eliza1ManifestSchema = z
584
+ .object({
585
+ $schema: z.literal(ELIZA_1_MANIFEST_SCHEMA_URL).optional(),
586
+ id: z.string().min(1),
587
+ tier: Eliza1TierEnumSchema,
588
+ version: z
589
+ .string()
590
+ .regex(
591
+ /^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?$/,
592
+ "version must be semver (e.g. 1.0.0)",
593
+ ),
594
+ publishedAt: z.string().datetime(),
595
+ lineage: Eliza1LineageSchema,
596
+ files: Eliza1FilesSchema,
597
+ kernels: Eliza1KernelsSchema,
598
+ evals: Eliza1EvalsSchema,
599
+ ramBudgetMb: Eliza1RamBudgetSchema,
600
+ // Wave-6: optional. Default = `{ capabilities: ["tts"] }` (base TTS only,
601
+ // no emotion tags, no singing). Bundles that ship the omnivoice-singing
602
+ // weights advertise `["tts","emotion-tags","singing"]`.
603
+ voice: Eliza1VoiceSchema.optional(),
604
+ // Optional. Present on `base-v1` bundles (the upstream base models,
605
+ // GGUF-converted + fully optimized, NOT fine-tuned). Records the
606
+ // release state, the not-fine-tuned flag, and the upstream source repo
607
+ // per shipped component. The contract validator requires per-component
608
+ // coverage when `releaseState === "base-v1"`.
609
+ provenance: Eliza1ProvenanceSchema.optional(),
610
+ // Optional. Defaults to `"recommended"` semantically when unset (the
611
+ // fine-tuned Eliza-1 — the channel allowed to auto-promote to the
612
+ // strict device default). A `"base-v1"`-channel manifest is the
613
+ // upstream-base + kernel-optimized release; it MUST be
614
+ // `defaultEligible: false` at publish time. The on-device gate
615
+ // (`canSetAsDefault`) still allows a contract-valid `base-v1` bundle
616
+ // to fill an empty default slot when no `recommended` channel bundle
617
+ // is installed; the recommender prefers `defaultEligible: true` over
618
+ // candidates whenever both are available.
619
+ releaseChannel: z.enum(ELIZA_1_RELEASE_CHANNELS).optional(),
620
+ defaultEligible: z.boolean(),
621
+ // Optional. Quant metadata emitted by the publish-side manifest
622
+ // builder. May be either a free-text tag (`"Q3_K_S"`, `"Q4_K_M"`) or a
623
+ // structured object describing the optimization recipe (PolarQuant +
624
+ // QJL block layout, per-layer outlier counts, etc.). Not consumed by
625
+ // the runtime validator — declared here so a manifest carrying it is
626
+ // accepted instead of being stripped or rejected. The schema is
627
+ // intentionally permissive: the publish-side tool is the source of
628
+ // truth for the shape, and the runtime only needs the manifest to
629
+ // round-trip cleanly.
630
+ textQuant: z
631
+ .union([z.string().min(1), z.record(z.string(), z.unknown())])
632
+ .optional(),
633
+ })
634
+ // The id MUST encode the tier so catalogs can derive tier from id without
635
+ // re-reading the manifest. Example: `id: "eliza-1-9b"`.
636
+ .refine(
637
+ (m) =>
638
+ m.id === `eliza-1-${m.tier}` || m.id.startsWith(`eliza-1-${m.tier}-`),
639
+ {
640
+ message: "id must start with `eliza-1-<tier>`",
641
+ path: ["id"],
642
+ },
643
+ )
644
+ // A `base-v1`-channel manifest is the upstream-base release. At publish
645
+ // time it MUST be `defaultEligible: false` — the on-device gate
646
+ // (`canSetAsDefault`) is the one that allows it to fill an empty default
647
+ // slot when no `recommended` bundle is installed. Mirrors
648
+ // inference/AGENTS.md §6 and the Python manifest builder.
649
+ .refine(
650
+ (m) => m.releaseChannel !== "base-v1" || m.defaultEligible === false,
651
+ {
652
+ message: "releaseChannel=base-v1 requires defaultEligible: false",
653
+ path: ["defaultEligible"],
654
+ },
655
+ );