@atomic-chat/core 0.19.1 → 0.20.6

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 (335) hide show
  1. package/dist/app-daemon.js +5 -0
  2. package/dist/app-daemon.js.map +1 -1
  3. package/dist/audio/args.d.ts +19 -0
  4. package/dist/audio/args.js +39 -0
  5. package/dist/audio/args.js.map +1 -0
  6. package/dist/audio/capabilities.d.ts +24 -0
  7. package/dist/audio/capabilities.js +96 -0
  8. package/dist/audio/capabilities.js.map +1 -0
  9. package/dist/audio/config.d.ts +40 -0
  10. package/dist/audio/config.js +57 -0
  11. package/dist/audio/config.js.map +1 -0
  12. package/dist/audio/errors.d.ts +23 -0
  13. package/dist/audio/errors.js +52 -0
  14. package/dist/audio/errors.js.map +1 -0
  15. package/dist/audio/gallery.d.ts +30 -0
  16. package/dist/audio/gallery.js +152 -0
  17. package/dist/audio/gallery.js.map +1 -0
  18. package/dist/audio/http.d.ts +26 -0
  19. package/dist/audio/http.js +56 -0
  20. package/dist/audio/http.js.map +1 -0
  21. package/dist/audio/idle.d.ts +22 -0
  22. package/dist/audio/idle.js +44 -0
  23. package/dist/audio/idle.js.map +1 -0
  24. package/dist/audio/index.d.ts +26 -0
  25. package/dist/audio/index.js +27 -0
  26. package/dist/audio/index.js.map +1 -0
  27. package/dist/audio/install.d.ts +57 -0
  28. package/dist/audio/install.js +196 -0
  29. package/dist/audio/install.js.map +1 -0
  30. package/dist/audio/jobs.d.ts +77 -0
  31. package/dist/audio/jobs.js +340 -0
  32. package/dist/audio/jobs.js.map +1 -0
  33. package/dist/audio/model-files.d.ts +12 -0
  34. package/dist/audio/model-files.js +42 -0
  35. package/dist/audio/model-files.js.map +1 -0
  36. package/dist/audio/output.d.ts +32 -0
  37. package/dist/audio/output.js +93 -0
  38. package/dist/audio/output.js.map +1 -0
  39. package/dist/audio/parse.d.ts +15 -0
  40. package/dist/audio/parse.js +149 -0
  41. package/dist/audio/parse.js.map +1 -0
  42. package/dist/audio/recipe.d.ts +22 -0
  43. package/dist/audio/recipe.js +92 -0
  44. package/dist/audio/recipe.js.map +1 -0
  45. package/dist/audio/request.d.ts +24 -0
  46. package/dist/audio/request.js +86 -0
  47. package/dist/audio/request.js.map +1 -0
  48. package/dist/audio/server-process.d.ts +51 -0
  49. package/dist/audio/server-process.js +202 -0
  50. package/dist/audio/server-process.js.map +1 -0
  51. package/dist/audio/service.d.ts +107 -0
  52. package/dist/audio/service.js +402 -0
  53. package/dist/audio/service.js.map +1 -0
  54. package/dist/audio/session.d.ts +73 -0
  55. package/dist/audio/session.js +216 -0
  56. package/dist/audio/session.js.map +1 -0
  57. package/dist/audio/state.d.ts +68 -0
  58. package/dist/audio/state.js +88 -0
  59. package/dist/audio/state.js.map +1 -0
  60. package/dist/audio/types.d.ts +52 -0
  61. package/dist/audio/types.js +8 -0
  62. package/dist/audio/types.js.map +1 -0
  63. package/dist/audio/wav.d.ts +22 -0
  64. package/dist/audio/wav.js +56 -0
  65. package/dist/audio/wav.js.map +1 -0
  66. package/dist/audio/wiring.d.ts +31 -0
  67. package/dist/audio/wiring.js +41 -0
  68. package/dist/audio/wiring.js.map +1 -0
  69. package/dist/backend/install/service.js +4 -2
  70. package/dist/backend/install/service.js.map +1 -1
  71. package/dist/cli/launch.js +2 -0
  72. package/dist/cli/launch.js.map +1 -1
  73. package/dist/cli/main.d.ts +1 -1
  74. package/dist/cli/main.js +5 -0
  75. package/dist/cli/main.js.map +1 -1
  76. package/dist/client/control-client.d.ts +21 -1
  77. package/dist/client/control-client.js +50 -0
  78. package/dist/client/control-client.js.map +1 -1
  79. package/dist/client/index.d.ts +1 -0
  80. package/dist/client/index.js +1 -0
  81. package/dist/client/index.js.map +1 -1
  82. package/dist/client/model-catalog.d.ts +40 -0
  83. package/dist/client/model-catalog.js +149 -0
  84. package/dist/client/model-catalog.js.map +1 -0
  85. package/dist/cloud/registry.js +1 -0
  86. package/dist/cloud/registry.js.map +1 -1
  87. package/dist/config/paths.d.ts +22 -1
  88. package/dist/config/paths.js +24 -0
  89. package/dist/config/paths.js.map +1 -1
  90. package/dist/contracts/audio.d.ts +290 -0
  91. package/dist/contracts/audio.js +24 -0
  92. package/dist/contracts/audio.js.map +1 -0
  93. package/dist/contracts/embedding.js +1 -0
  94. package/dist/contracts/embedding.js.map +1 -1
  95. package/dist/contracts/engine-builds.d.ts +10 -4
  96. package/dist/contracts/engine-builds.js +10 -2
  97. package/dist/contracts/engine-builds.js.map +1 -1
  98. package/dist/contracts/engines.d.ts +1 -1
  99. package/dist/contracts/engines.js +4 -0
  100. package/dist/contracts/engines.js.map +1 -1
  101. package/dist/contracts/errors.d.ts +14 -2
  102. package/dist/contracts/errors.js +29 -0
  103. package/dist/contracts/errors.js.map +1 -1
  104. package/dist/contracts/events.d.ts +10 -0
  105. package/dist/contracts/geniex.d.ts +98 -0
  106. package/dist/contracts/geniex.js +15 -0
  107. package/dist/contracts/geniex.js.map +1 -0
  108. package/dist/contracts/index.d.ts +2 -0
  109. package/dist/contracts/index.js +2 -0
  110. package/dist/contracts/index.js.map +1 -1
  111. package/dist/contracts/model-yml.d.ts +40 -0
  112. package/dist/contracts/model-yml.js +7 -0
  113. package/dist/contracts/model-yml.js.map +1 -1
  114. package/dist/contracts/session.d.ts +6 -1
  115. package/dist/contracts/session.js.map +1 -1
  116. package/dist/contracts/settings.d.ts +12 -1
  117. package/dist/contracts/settings.js.map +1 -1
  118. package/dist/core/atomic-core.d.ts +6 -1
  119. package/dist/core/atomic-core.js +7 -1
  120. package/dist/core/atomic-core.js.map +1 -1
  121. package/dist/core/create.js +105 -6
  122. package/dist/core/create.js.map +1 -1
  123. package/dist/core/gpu-residency.d.ts +8 -2
  124. package/dist/core/gpu-residency.js +9 -1
  125. package/dist/core/gpu-residency.js.map +1 -1
  126. package/dist/core/types.d.ts +3 -0
  127. package/dist/core/types.js.map +1 -1
  128. package/dist/diffusion/install.d.ts +6 -3
  129. package/dist/diffusion/install.js +5 -4
  130. package/dist/diffusion/install.js.map +1 -1
  131. package/dist/embedding/index.js +1 -0
  132. package/dist/embedding/index.js.map +1 -1
  133. package/dist/engine-builds/engines.d.ts +31 -8
  134. package/dist/engine-builds/engines.js +118 -14
  135. package/dist/engine-builds/engines.js.map +1 -1
  136. package/dist/engine-builds/geniex.d.ts +35 -0
  137. package/dist/engine-builds/geniex.js +111 -0
  138. package/dist/engine-builds/geniex.js.map +1 -0
  139. package/dist/engine-builds/index.d.ts +3 -2
  140. package/dist/engine-builds/index.js +3 -2
  141. package/dist/engine-builds/index.js.map +1 -1
  142. package/dist/engine-builds/manifest.d.ts +95 -5
  143. package/dist/engine-builds/manifest.js +152 -9
  144. package/dist/engine-builds/manifest.js.map +1 -1
  145. package/dist/engine-builds/order.d.ts +7 -1
  146. package/dist/engine-builds/order.js +13 -0
  147. package/dist/engine-builds/order.js.map +1 -1
  148. package/dist/engine-builds/select.d.ts +43 -11
  149. package/dist/engine-builds/select.js +64 -16
  150. package/dist/engine-builds/select.js.map +1 -1
  151. package/dist/engine-builds/service.d.ts +19 -11
  152. package/dist/engine-builds/service.js +31 -9
  153. package/dist/engine-builds/service.js.map +1 -1
  154. package/dist/engines/service.d.ts +4 -3
  155. package/dist/engines/service.js +5 -3
  156. package/dist/engines/service.js.map +1 -1
  157. package/dist/engines/versions.js +3 -0
  158. package/dist/engines/versions.js.map +1 -1
  159. package/dist/integrations/catalog.d.ts +3 -1
  160. package/dist/integrations/catalog.js +8 -2
  161. package/dist/integrations/catalog.js.map +1 -1
  162. package/dist/integrations/config-io.d.ts +45 -4
  163. package/dist/integrations/config-io.js +91 -6
  164. package/dist/integrations/config-io.js.map +1 -1
  165. package/dist/integrations/configure/codex-repair.d.ts +75 -0
  166. package/dist/integrations/configure/codex-repair.js +254 -0
  167. package/dist/integrations/configure/codex-repair.js.map +1 -0
  168. package/dist/integrations/configure/codex.d.ts +48 -10
  169. package/dist/integrations/configure/codex.js +126 -32
  170. package/dist/integrations/configure/codex.js.map +1 -1
  171. package/dist/integrations/configure/registry.d.ts +4 -1
  172. package/dist/integrations/configure/registry.js +1 -0
  173. package/dist/integrations/configure/registry.js.map +1 -1
  174. package/dist/lock/process-journal.d.ts +3 -3
  175. package/dist/models/compatibility/rules-baseline.js +1 -0
  176. package/dist/models/compatibility/rules-baseline.js.map +1 -1
  177. package/dist/models/compatibility/rules.js +1 -0
  178. package/dist/models/compatibility/rules.js.map +1 -1
  179. package/dist/models/gguf/kv-cache.d.ts +5 -0
  180. package/dist/models/gguf/kv-cache.js +35 -2
  181. package/dist/models/gguf/kv-cache.js.map +1 -1
  182. package/dist/models/gguf/reader.d.ts +5 -0
  183. package/dist/models/gguf/reader.js +15 -3
  184. package/dist/models/gguf/reader.js.map +1 -1
  185. package/dist/models/hf.d.ts +3 -0
  186. package/dist/models/hf.js +11 -4
  187. package/dist/models/hf.js.map +1 -1
  188. package/dist/router/resolve.d.ts +3 -2
  189. package/dist/router/resolve.js +3 -1
  190. package/dist/router/resolve.js.map +1 -1
  191. package/dist/runtime/geniex/accelerators.d.ts +20 -0
  192. package/dist/runtime/geniex/accelerators.js +53 -0
  193. package/dist/runtime/geniex/accelerators.js.map +1 -0
  194. package/dist/runtime/geniex/check.d.ts +34 -0
  195. package/dist/runtime/geniex/check.js +117 -0
  196. package/dist/runtime/geniex/check.js.map +1 -0
  197. package/dist/runtime/geniex/chip.d.ts +29 -0
  198. package/dist/runtime/geniex/chip.js +35 -0
  199. package/dist/runtime/geniex/chip.js.map +1 -0
  200. package/dist/runtime/geniex/devices.d.ts +13 -0
  201. package/dist/runtime/geniex/devices.js +32 -0
  202. package/dist/runtime/geniex/devices.js.map +1 -0
  203. package/dist/runtime/geniex/geniex-host.d.ts +17 -0
  204. package/dist/runtime/geniex/geniex-host.js +26 -0
  205. package/dist/runtime/geniex/geniex-host.js.map +1 -0
  206. package/dist/runtime/geniex/host/args.d.ts +56 -0
  207. package/dist/runtime/geniex/host/args.js +115 -0
  208. package/dist/runtime/geniex/host/args.js.map +1 -0
  209. package/dist/runtime/geniex/host/engine.d.ts +76 -0
  210. package/dist/runtime/geniex/host/engine.js +122 -0
  211. package/dist/runtime/geniex/host/engine.js.map +1 -0
  212. package/dist/runtime/geniex/host/ffi-bun.d.ts +15 -0
  213. package/dist/runtime/geniex/host/ffi-bun.js +415 -0
  214. package/dist/runtime/geniex/host/ffi-bun.js.map +1 -0
  215. package/dist/runtime/geniex/host/grammar.d.ts +11 -0
  216. package/dist/runtime/geniex/host/grammar.js +223 -0
  217. package/dist/runtime/geniex/host/grammar.js.map +1 -0
  218. package/dist/runtime/geniex/host/inspect.d.ts +25 -0
  219. package/dist/runtime/geniex/host/inspect.js +177 -0
  220. package/dist/runtime/geniex/host/inspect.js.map +1 -0
  221. package/dist/runtime/geniex/host/library.d.ts +117 -0
  222. package/dist/runtime/geniex/host/library.js +38 -0
  223. package/dist/runtime/geniex/host/library.js.map +1 -0
  224. package/dist/runtime/geniex/host/openai.d.ts +62 -0
  225. package/dist/runtime/geniex/host/openai.js +458 -0
  226. package/dist/runtime/geniex/host/openai.js.map +1 -0
  227. package/dist/runtime/geniex/host/run.d.ts +48 -0
  228. package/dist/runtime/geniex/host/run.js +208 -0
  229. package/dist/runtime/geniex/host/run.js.map +1 -0
  230. package/dist/runtime/geniex/host/server.d.ts +39 -0
  231. package/dist/runtime/geniex/host/server.js +232 -0
  232. package/dist/runtime/geniex/host/server.js.map +1 -0
  233. package/dist/runtime/geniex/host/worker-protocol.d.ts +76 -0
  234. package/dist/runtime/geniex/host/worker-protocol.js +116 -0
  235. package/dist/runtime/geniex/host/worker-protocol.js.map +1 -0
  236. package/dist/runtime/geniex/host/worker-source.generated.d.ts +1 -0
  237. package/dist/runtime/geniex/host/worker-source.generated.js +4 -0
  238. package/dist/runtime/geniex/host/worker-source.generated.js.map +1 -0
  239. package/dist/runtime/geniex/host/worker.d.ts +7 -0
  240. package/dist/runtime/geniex/host/worker.js +19 -0
  241. package/dist/runtime/geniex/host/worker.js.map +1 -0
  242. package/dist/runtime/geniex/host-process.d.ts +48 -0
  243. package/dist/runtime/geniex/host-process.js +104 -0
  244. package/dist/runtime/geniex/host-process.js.map +1 -0
  245. package/dist/runtime/geniex/index.d.ts +11 -0
  246. package/dist/runtime/geniex/index.js +12 -0
  247. package/dist/runtime/geniex/index.js.map +1 -0
  248. package/dist/runtime/geniex/model-yml.d.ts +8 -0
  249. package/dist/runtime/geniex/model-yml.js +98 -0
  250. package/dist/runtime/geniex/model-yml.js.map +1 -0
  251. package/dist/runtime/geniex/runtime.d.ts +94 -0
  252. package/dist/runtime/geniex/runtime.js +366 -0
  253. package/dist/runtime/geniex/runtime.js.map +1 -0
  254. package/dist/runtime/litert-lm/host/openai.d.ts +4 -37
  255. package/dist/runtime/litert-lm/host/openai.js +11 -96
  256. package/dist/runtime/litert-lm/host/openai.js.map +1 -1
  257. package/dist/runtime/litert-lm/host/pool.d.ts +1 -7
  258. package/dist/runtime/litert-lm/host/pool.js +1 -17
  259. package/dist/runtime/litert-lm/host/pool.js.map +1 -1
  260. package/dist/runtime/litert-lm/host/server.js +11 -53
  261. package/dist/runtime/litert-lm/host/server.js.map +1 -1
  262. package/dist/runtime/llamacpp/args.d.ts +5 -0
  263. package/dist/runtime/llamacpp/args.js +2 -0
  264. package/dist/runtime/llamacpp/args.js.map +1 -1
  265. package/dist/runtime/llamacpp/fit-margin.d.ts +44 -0
  266. package/dist/runtime/llamacpp/fit-margin.js +50 -0
  267. package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
  268. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  269. package/dist/runtime/llamacpp/load-plan.js +57 -22
  270. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  271. package/dist/runtime/llamacpp/runtime.d.ts +2 -1
  272. package/dist/runtime/llamacpp/runtime.js +3 -1
  273. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  274. package/dist/runtime/shared/external-sessions.js +1 -0
  275. package/dist/runtime/shared/external-sessions.js.map +1 -1
  276. package/dist/runtime/shared/fifo-lock.d.ts +10 -0
  277. package/dist/runtime/shared/fifo-lock.js +21 -0
  278. package/dist/runtime/shared/fifo-lock.js.map +1 -0
  279. package/dist/runtime/shared/index.d.ts +2 -0
  280. package/dist/runtime/shared/index.js +2 -0
  281. package/dist/runtime/shared/index.js.map +1 -1
  282. package/dist/runtime/shared/openai-sse.d.ts +112 -0
  283. package/dist/runtime/shared/openai-sse.js +178 -0
  284. package/dist/runtime/shared/openai-sse.js.map +1 -0
  285. package/dist/server/control/index.d.ts +1 -1
  286. package/dist/server/control/router.js +4 -0
  287. package/dist/server/control/router.js.map +1 -1
  288. package/dist/server/control/routes/audio.d.ts +15 -0
  289. package/dist/server/control/routes/audio.js +59 -0
  290. package/dist/server/control/routes/audio.js.map +1 -0
  291. package/dist/server/control/routes/geniex.d.ts +7 -0
  292. package/dist/server/control/routes/geniex.js +22 -0
  293. package/dist/server/control/routes/geniex.js.map +1 -0
  294. package/dist/server/control/types.d.ts +36 -2
  295. package/dist/server/control/types.js.map +1 -1
  296. package/dist/server/http.js +4 -0
  297. package/dist/server/http.js.map +1 -1
  298. package/dist/server/public/audio-speech-params.d.ts +47 -0
  299. package/dist/server/public/audio-speech-params.js +177 -0
  300. package/dist/server/public/audio-speech-params.js.map +1 -0
  301. package/dist/server/public/audio-speech.d.ts +14 -0
  302. package/dist/server/public/audio-speech.js +118 -0
  303. package/dist/server/public/audio-speech.js.map +1 -0
  304. package/dist/server/public/embedding.d.ts +8 -7
  305. package/dist/server/public/embedding.js +15 -7
  306. package/dist/server/public/embedding.js.map +1 -1
  307. package/dist/server/public/forward.js +15 -1
  308. package/dist/server/public/forward.js.map +1 -1
  309. package/dist/server/public/index.d.ts +1 -1
  310. package/dist/server/public/index.js +7 -0
  311. package/dist/server/public/index.js.map +1 -1
  312. package/dist/server/public/listing.js +1 -0
  313. package/dist/server/public/listing.js.map +1 -1
  314. package/dist/server/public/responses.js +9 -0
  315. package/dist/server/public/responses.js.map +1 -1
  316. package/dist/server/public/trace.js +2 -0
  317. package/dist/server/public/trace.js.map +1 -1
  318. package/dist/server/public/types.d.ts +29 -1
  319. package/dist/server/public/validate.d.ts +32 -0
  320. package/dist/server/public/validate.js +146 -0
  321. package/dist/server/public/validate.js.map +1 -0
  322. package/dist/settings/schema/geniex.json +63 -0
  323. package/dist/settings/schema/mlx.json +1 -1
  324. package/dist/settings/schema.js +11 -0
  325. package/dist/settings/schema.js.map +1 -1
  326. package/dist/telemetry/reports.d.ts +12 -0
  327. package/dist/telemetry/reports.js +38 -0
  328. package/dist/telemetry/reports.js.map +1 -1
  329. package/dist/telemetry/subscribe.d.ts +3 -3
  330. package/dist/telemetry/subscribe.js +8 -3
  331. package/dist/telemetry/subscribe.js.map +1 -1
  332. package/dist/telemetry/types.d.ts +1 -1
  333. package/dist/version.d.ts +1 -1
  334. package/dist/version.js +1 -1
  335. package/package.json +11 -2
@@ -0,0 +1,62 @@
1
+ /**
2
+ * OpenAI chat completions over GenieX's chat template and token stream (spec `geniex-runtime`,
3
+ * "Сервер хоста отвечает как OpenAI chat completions"; task 5.4, design D6). Pure: a request in,
4
+ * the template's messages out; tokens in, OpenAI deltas and the reply out.
5
+ *
6
+ * What the library does (design): renders the chat template with `tools` and `enable_thinking`,
7
+ * streams raw tokens. What it has no notion of and the host adds: reading `<think>…</think>` as
8
+ * `reasoning_content`, `<tool_call>{…}</tool_call>` (Qwen3) and fenced JSON (Gemma 4) as
9
+ * `tool_calls`, stop strings, call ids, `finish_reason`, images as files.
10
+ */
11
+ import type { CommonChatRequest, Delta, FinishReason, ModelCaps } from '../../shared/index.js';
12
+ import type { GeniexChatMessage, GeniexStopReason } from './library.js';
13
+ export interface ParsedGeniexChat extends CommonChatRequest {
14
+ /** Every message, as the template takes them; images as the `imageIndex`th of `images`. */
15
+ messages: GeniexChatMessage[];
16
+ /** The images of the request, base64 bodies in order of appearance; the host writes them to files. */
17
+ images: Array<{
18
+ base64: string;
19
+ mime: string;
20
+ }>;
21
+ /** `tools` as one JSON string for the template; `null` for none. */
22
+ toolsJson: string | null;
23
+ }
24
+ /** A content part's text, or an image placeholder path the host fills in once the file is written. */
25
+ export declare const IMAGE_PLACEHOLDER: (index: number) => string;
26
+ /** A chat completions body, or `OpenAiRequestError` (400) naming the field it cannot serve. */
27
+ export declare function parseGeniexChatRequest(raw: unknown, caps: ModelCaps): ParsedGeniexChat;
28
+ /**
29
+ * Builds one reply from the library's tokens: deltas as they come, the whole message at the end. A
30
+ * `<think>` block (Gemma 4: `<|channel>thought…<channel|>`) becomes `reasoning_content`; a `<tool_call>`
31
+ * block (Gemma 4: `<|tool_call>call:…<tool_call|>`), and with tools requested a fenced JSON block,
32
+ * become `tool_calls`; a stop string ends the text and asks to cancel the library.
33
+ */
34
+ export declare class GeniexReplyParser {
35
+ private readonly stops;
36
+ private readonly toolsRequested;
37
+ private readonly newCallId;
38
+ private content;
39
+ private reasoning;
40
+ private readonly calls;
41
+ /** Text not yet classified: may begin a marker or a stop string. */
42
+ private held;
43
+ private state;
44
+ /** The fence's opening line (` ```json `), kept to replay a block that was not a tool call. */
45
+ private fenceHead;
46
+ /** A stop string was met: everything after it is dropped and the library should be cancelled. */
47
+ stopped: boolean;
48
+ tokens: number;
49
+ constructor(stops: readonly string[], toolsRequested: boolean, newCallId?: () => string);
50
+ /** One token; the deltas it makes. */
51
+ add(token: string): Delta[];
52
+ /** At the end: whatever was held back for a marker or a stop string that never came. */
53
+ flush(): Delta[];
54
+ private drain;
55
+ private emitText;
56
+ private emitReasoning;
57
+ private record;
58
+ /** The finish reason: calls win, then the library's own stop reason. */
59
+ finish(stopReason: GeniexStopReason): FinishReason;
60
+ /** `choices[0].message` of a non-stream reply. */
61
+ message(): Record<string, unknown>;
62
+ }
@@ -0,0 +1,458 @@
1
+ /**
2
+ * OpenAI chat completions over GenieX's chat template and token stream (spec `geniex-runtime`,
3
+ * "Сервер хоста отвечает как OpenAI chat completions"; task 5.4, design D6). Pure: a request in,
4
+ * the template's messages out; tokens in, OpenAI deltas and the reply out.
5
+ *
6
+ * What the library does (design): renders the chat template with `tools` and `enable_thinking`,
7
+ * streams raw tokens. What it has no notion of and the host adds: reading `<think>…</think>` as
8
+ * `reasoning_content`, `<tool_call>{…}</tool_call>` (Qwen3) and fenced JSON (Gemma 4) as
9
+ * `tool_calls`, stop strings, call ids, `finish_reason`, images as files.
10
+ */
11
+ import { invalidRequest as invalid, isRecord, parseCommonChatRequest, textOf } from '../../shared/index.js';
12
+ const DATA_URL_RE = /^data:(image\/[a-z0-9.+-]+);base64,([A-Za-z0-9+/=]+)$/i;
13
+ /** A content part's text, or an image placeholder path the host fills in once the file is written. */
14
+ export const IMAGE_PLACEHOLDER = (index) => `{{image:${index}}}`;
15
+ function userContent(content, caps, param, images) {
16
+ if (typeof content === 'string')
17
+ return [{ type: 'text', text: content }];
18
+ if (!Array.isArray(content))
19
+ throw invalid(`${param} must be a string or an array of parts`, param);
20
+ return content.map((part, index) => {
21
+ const at = `${param}[${index}]`;
22
+ if (!isRecord(part))
23
+ throw invalid(`${at} is not a content part`, at);
24
+ if (part['type'] === 'text' && typeof part['text'] === 'string')
25
+ return { type: 'text', text: part['text'] };
26
+ if (part['type'] === 'image_url') {
27
+ if (!caps.vision)
28
+ throw invalid('This model does not take image input.', at);
29
+ const url = isRecord(part['image_url']) ? part['image_url']['url'] : part['image_url'];
30
+ const match = typeof url === 'string' ? DATA_URL_RE.exec(url) : null;
31
+ if (!match)
32
+ throw invalid('An image must be a base64 data URL (data:image/…;base64,…).', at);
33
+ images.push({ mime: match[1].toLowerCase(), base64: match[2] });
34
+ return { type: 'image', path: IMAGE_PLACEHOLDER(images.length - 1) };
35
+ }
36
+ throw invalid(`Content part type ${JSON.stringify(part['type'])} is not supported.`, at);
37
+ });
38
+ }
39
+ function convertMessages(raw, caps, images) {
40
+ const callNames = new Map();
41
+ return raw.map((item, index) => {
42
+ const param = `messages[${index}]`;
43
+ if (!isRecord(item))
44
+ throw invalid(`${param} is not a message`, param);
45
+ const role = item['role'];
46
+ if (role === 'system' || role === 'developer')
47
+ return {
48
+ role: 'system',
49
+ content: [{ type: 'text', text: textOf(item['content'], `${param}.content`) }],
50
+ };
51
+ if (role === 'user')
52
+ return { role: 'user', content: userContent(item['content'], caps, `${param}.content`, images) };
53
+ if (role === 'assistant') {
54
+ const said = textOf(item['content'], `${param}.content`);
55
+ const calls = Array.isArray(item['tool_calls']) ? item['tool_calls'] : [];
56
+ const message = {
57
+ role: 'assistant',
58
+ content: said ? [{ type: 'text', text: said }] : [],
59
+ };
60
+ if (calls.length > 0)
61
+ message.tool_calls = calls.map((call) => {
62
+ const fn = isRecord(call) && isRecord(call['function']) ? call['function'] : {};
63
+ const name = typeof fn['name'] === 'string' ? fn['name'] : '';
64
+ const id = isRecord(call) && typeof call['id'] === 'string' ? call['id'] : null;
65
+ if (id)
66
+ callNames.set(id, name);
67
+ const args = fn['arguments'];
68
+ return { id, name, arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}) };
69
+ });
70
+ return message;
71
+ }
72
+ if (role === 'tool') {
73
+ const id = typeof item['tool_call_id'] === 'string' ? item['tool_call_id'] : null;
74
+ const name = (id ? callNames.get(id) : undefined) ?? (typeof item['name'] === 'string' ? item['name'] : null);
75
+ return {
76
+ role: 'tool',
77
+ content: [{ type: 'text', text: textOf(item['content'], `${param}.content`) }],
78
+ tool_call_id: id,
79
+ tool_name: name,
80
+ };
81
+ }
82
+ throw invalid(`${param}.role ${JSON.stringify(role)} is not system, developer, user, assistant or tool`, `${param}.role`);
83
+ });
84
+ }
85
+ /** A chat completions body, or `OpenAiRequestError` (400) naming the field it cannot serve. */
86
+ export function parseGeniexChatRequest(raw, caps) {
87
+ if (!isRecord(raw))
88
+ throw invalid('The request body must be a JSON object.');
89
+ const common = parseCommonChatRequest(raw, caps);
90
+ const images = [];
91
+ const messages = convertMessages(raw['messages'], caps, images);
92
+ const last = messages.at(-1);
93
+ if (!last || (last.role !== 'user' && last.role !== 'tool'))
94
+ throw invalid('The last message must be from the user or a tool.', 'messages');
95
+ return { ...common, messages, images, toolsJson: common.tools ? JSON.stringify(common.tools) : null };
96
+ }
97
+ const THINK_OPEN = '<think>';
98
+ const THINK_CLOSE = '</think>';
99
+ const CALL_OPEN = '<tool_call>';
100
+ const CALL_CLOSE = '</tool_call>';
101
+ const FENCE = '```';
102
+ // Gemma 4's own syntax (spike S2, 2026-10-28; the format vLLM's `gemma4` parser reads):
103
+ // `<|channel>thought …<channel|>` is thinking, `<|tool_call>call:name{key:<|"|>text<|"|>,n:42,…}<tool_call|>`
104
+ // (or `<turn|>`) a call — bare keys, strings in `<|"|>` with no escapes, nested `{}` and `[]`.
105
+ const GEMMA_THINK_OPEN = '<|channel>thought';
106
+ const GEMMA_THINK_CLOSE = '<channel|>';
107
+ const GEMMA_CALL_OPEN = '<|tool_call>';
108
+ const GEMMA_CALL_CLOSES = ['<tool_call|>', '<turn|>'];
109
+ const GEMMA_QUOTE = '<|"|>';
110
+ /** A JSON object with `name` and `arguments` (or `parameters`), or a list of them. */
111
+ function callsOf(json) {
112
+ let parsed;
113
+ try {
114
+ parsed = JSON.parse(json.trim());
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ const items = Array.isArray(parsed) ? parsed : [parsed];
120
+ const calls = [];
121
+ for (const item of items) {
122
+ if (!isRecord(item))
123
+ return null;
124
+ const fn = isRecord(item['function']) ? item['function'] : item;
125
+ const name = fn['name'];
126
+ if (typeof name !== 'string' || name === '')
127
+ return null;
128
+ const args = fn['arguments'] ?? fn['parameters'] ?? {};
129
+ calls.push({ name, arguments: typeof args === 'string' ? args : JSON.stringify(args) });
130
+ }
131
+ return calls.length > 0 ? calls : null;
132
+ }
133
+ /** The longest prefix of a marker that `text` ends with; 0 when none. */
134
+ /** `call:name{…}` blocks of a Gemma 4 tool-call body, their arguments as JSON; `null` when there is none. */
135
+ function gemmaCallsOf(body) {
136
+ const calls = [];
137
+ const re = /call:(\w+)\{/g;
138
+ let match;
139
+ while ((match = re.exec(body))) {
140
+ const open = match.index + match[0].length - 1;
141
+ const close = gemmaMatching(body, open);
142
+ if (close < 0)
143
+ return null;
144
+ calls.push({
145
+ name: match[1],
146
+ arguments: JSON.stringify(gemmaObject(body.slice(open + 1, close))),
147
+ });
148
+ re.lastIndex = close + 1;
149
+ }
150
+ return calls.length > 0 ? calls : null;
151
+ }
152
+ /** The index of the bracket closing the one at `open`, skipping quoted strings; -1 when unbalanced. */
153
+ function gemmaMatching(text, open) {
154
+ const pairs = { '{': '}', '[': ']' };
155
+ const stack = [pairs[text[open]]];
156
+ for (let i = open + 1; i < text.length; i++) {
157
+ if (text.startsWith(GEMMA_QUOTE, i)) {
158
+ const end = text.indexOf(GEMMA_QUOTE, i + GEMMA_QUOTE.length);
159
+ if (end < 0)
160
+ return -1;
161
+ i = end + GEMMA_QUOTE.length - 1;
162
+ continue;
163
+ }
164
+ const c = text[i];
165
+ if (c === '{' || c === '[')
166
+ stack.push(pairs[c]);
167
+ else if (c === '}' || c === ']') {
168
+ if (stack.pop() !== c)
169
+ return -1;
170
+ if (stack.length === 0)
171
+ return i;
172
+ }
173
+ }
174
+ return -1;
175
+ }
176
+ /** Splits `text` at the commas outside strings and brackets. */
177
+ function gemmaItems(text) {
178
+ const items = [];
179
+ let depth = 0;
180
+ let from = 0;
181
+ for (let i = 0; i < text.length; i++) {
182
+ if (text.startsWith(GEMMA_QUOTE, i)) {
183
+ const end = text.indexOf(GEMMA_QUOTE, i + GEMMA_QUOTE.length);
184
+ i = end < 0 ? text.length : end + GEMMA_QUOTE.length - 1;
185
+ continue;
186
+ }
187
+ const c = text[i];
188
+ if (c === '{' || c === '[')
189
+ depth++;
190
+ else if (c === '}' || c === ']')
191
+ depth--;
192
+ else if (c === ',' && depth === 0) {
193
+ items.push(text.slice(from, i));
194
+ from = i + 1;
195
+ }
196
+ }
197
+ items.push(text.slice(from));
198
+ return items.map((item) => item.trim()).filter((item) => item !== '');
199
+ }
200
+ function gemmaValue(raw) {
201
+ const text = raw.trim();
202
+ if (text.startsWith(GEMMA_QUOTE)) {
203
+ const end = text.indexOf(GEMMA_QUOTE, GEMMA_QUOTE.length);
204
+ return end < 0 ? text.slice(GEMMA_QUOTE.length) : text.slice(GEMMA_QUOTE.length, end);
205
+ }
206
+ if (text.startsWith('{') && text.endsWith('}'))
207
+ return gemmaObject(text.slice(1, -1));
208
+ if (text.startsWith('[') && text.endsWith(']'))
209
+ return gemmaItems(text.slice(1, -1)).map(gemmaValue);
210
+ if (text === 'true')
211
+ return true;
212
+ if (text === 'false')
213
+ return false;
214
+ if (text === 'null' || text === 'None')
215
+ return null;
216
+ if (/^-?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(text))
217
+ return Number(text);
218
+ return text;
219
+ }
220
+ /** `key:value,…` of a Gemma 4 call (keys bare or in `<|"|>`), as an object. */
221
+ function gemmaObject(text) {
222
+ const out = {};
223
+ for (const item of gemmaItems(text)) {
224
+ const colon = item.startsWith(GEMMA_QUOTE)
225
+ ? item.indexOf(':', item.indexOf(GEMMA_QUOTE, GEMMA_QUOTE.length) + GEMMA_QUOTE.length)
226
+ : item.indexOf(':');
227
+ if (colon < 0)
228
+ continue;
229
+ let key = item.slice(0, colon).trim();
230
+ if (key.startsWith(GEMMA_QUOTE) && key.endsWith(GEMMA_QUOTE))
231
+ key = key.slice(GEMMA_QUOTE.length, -GEMMA_QUOTE.length);
232
+ out[key] = gemmaValue(item.slice(colon + 1));
233
+ }
234
+ return out;
235
+ }
236
+ function partialSuffix(text, markers) {
237
+ let keep = 0;
238
+ for (const marker of markers)
239
+ for (let length = Math.min(marker.length - 1, text.length); length > keep; length--)
240
+ if (text.endsWith(marker.slice(0, length))) {
241
+ keep = length;
242
+ break;
243
+ }
244
+ return keep;
245
+ }
246
+ /**
247
+ * Builds one reply from the library's tokens: deltas as they come, the whole message at the end. A
248
+ * `<think>` block (Gemma 4: `<|channel>thought…<channel|>`) becomes `reasoning_content`; a `<tool_call>`
249
+ * block (Gemma 4: `<|tool_call>call:…<tool_call|>`), and with tools requested a fenced JSON block,
250
+ * become `tool_calls`; a stop string ends the text and asks to cancel the library.
251
+ */
252
+ export class GeniexReplyParser {
253
+ stops;
254
+ toolsRequested;
255
+ newCallId;
256
+ content = '';
257
+ reasoning = '';
258
+ calls = [];
259
+ /** Text not yet classified: may begin a marker or a stop string. */
260
+ held = '';
261
+ state = 'text';
262
+ /** The fence's opening line (` ```json `), kept to replay a block that was not a tool call. */
263
+ fenceHead = '';
264
+ /** A stop string was met: everything after it is dropped and the library should be cancelled. */
265
+ stopped = false;
266
+ tokens = 0;
267
+ constructor(stops, toolsRequested, newCallId = () => `call_${Math.random().toString(36).slice(2, 14)}`) {
268
+ this.stops = stops;
269
+ this.toolsRequested = toolsRequested;
270
+ this.newCallId = newCallId;
271
+ }
272
+ /** One token; the deltas it makes. */
273
+ add(token) {
274
+ if (this.stopped)
275
+ return [];
276
+ this.tokens++;
277
+ this.held += token;
278
+ return this.drain(false);
279
+ }
280
+ /** At the end: whatever was held back for a marker or a stop string that never came. */
281
+ flush() {
282
+ return this.stopped ? [] : this.drain(true);
283
+ }
284
+ drain(final) {
285
+ const deltas = [];
286
+ let progress = true;
287
+ while (progress && this.held.length > 0) {
288
+ progress = false;
289
+ if (this.state === 'text') {
290
+ const stopAt = this.stops
291
+ .map((stop) => [this.held.indexOf(stop), stop])
292
+ .filter(([at]) => at >= 0)
293
+ .sort((a, b) => a[0] - b[0])[0];
294
+ const openers = {
295
+ think: THINK_OPEN,
296
+ call: CALL_OPEN,
297
+ fence: this.toolsRequested ? FENCE : null,
298
+ gthink: GEMMA_THINK_OPEN,
299
+ gcall: GEMMA_CALL_OPEN,
300
+ };
301
+ const marks = Object.keys(openers)
302
+ .map((kind) => [openers[kind] === null ? -1 : this.held.indexOf(openers[kind]), kind])
303
+ .filter(([at]) => at >= 0)
304
+ .sort((a, b) => a[0] - b[0]);
305
+ const first = marks[0];
306
+ if (stopAt && (!first || stopAt[0] <= first[0])) {
307
+ this.emitText(this.held.slice(0, stopAt[0]), deltas);
308
+ this.held = '';
309
+ this.stopped = true;
310
+ return deltas;
311
+ }
312
+ if (first) {
313
+ const [at, kind] = first;
314
+ this.emitText(this.held.slice(0, at), deltas);
315
+ this.held = this.held.slice(at + openers[kind].length);
316
+ this.state = kind;
317
+ this.fenceHead = '';
318
+ progress = true;
319
+ continue;
320
+ }
321
+ const keep = final
322
+ ? 0
323
+ : partialSuffix(this.held, [
324
+ THINK_OPEN,
325
+ CALL_OPEN,
326
+ GEMMA_THINK_OPEN,
327
+ GEMMA_CALL_OPEN,
328
+ ...(this.toolsRequested ? [FENCE] : []),
329
+ ...this.stops,
330
+ ]);
331
+ const out = this.held.slice(0, this.held.length - keep);
332
+ this.held = this.held.slice(this.held.length - keep);
333
+ this.emitText(out, deltas);
334
+ continue;
335
+ }
336
+ if (this.state === 'think' || this.state === 'gthink') {
337
+ const closer = this.state === 'think' ? THINK_CLOSE : GEMMA_THINK_CLOSE;
338
+ const close = this.held.indexOf(closer);
339
+ if (close >= 0) {
340
+ this.emitReasoning(this.held.slice(0, close), deltas);
341
+ this.held = this.held.slice(close + closer.length);
342
+ this.state = 'text';
343
+ progress = true;
344
+ continue;
345
+ }
346
+ const keep = final ? 0 : partialSuffix(this.held, [closer]);
347
+ this.emitReasoning(this.held.slice(0, this.held.length - keep), deltas);
348
+ this.held = this.held.slice(this.held.length - keep);
349
+ continue;
350
+ }
351
+ if (this.state === 'call' || this.state === 'gcall') {
352
+ const gemma = this.state === 'gcall';
353
+ const closers = gemma ? GEMMA_CALL_CLOSES : [CALL_CLOSE];
354
+ const found = closers
355
+ .map((closer) => [this.held.indexOf(closer), closer])
356
+ .filter(([at]) => at >= 0)
357
+ .sort((a, b) => a[0] - b[0])[0];
358
+ if (found || final) {
359
+ const body = found ? this.held.slice(0, found[0]) : this.held;
360
+ this.held = found ? this.held.slice(found[0] + found[1].length) : '';
361
+ this.state = 'text';
362
+ const calls = gemma ? gemmaCallsOf(body) : callsOf(body);
363
+ if (calls)
364
+ deltas.push(this.record(calls));
365
+ else
366
+ this.emitText(`${gemma ? GEMMA_CALL_OPEN : CALL_OPEN}${body}${found ? found[1] : ''}`, deltas);
367
+ progress = found !== undefined;
368
+ continue;
369
+ }
370
+ return deltas;
371
+ }
372
+ // A fenced block: the first line names the language; the body runs to the closing fence.
373
+ if (this.fenceHead === '' && !this.held.includes('\n')) {
374
+ if (final) {
375
+ this.emitText(`${FENCE}${this.held}`, deltas);
376
+ this.held = '';
377
+ }
378
+ return deltas;
379
+ }
380
+ if (this.fenceHead === '') {
381
+ const newline = this.held.indexOf('\n');
382
+ this.fenceHead = this.held.slice(0, newline + 1);
383
+ this.held = this.held.slice(newline + 1);
384
+ }
385
+ const close = this.held.indexOf(FENCE);
386
+ if (close >= 0 || final) {
387
+ const body = close >= 0 ? this.held.slice(0, close) : this.held;
388
+ this.held = close >= 0 ? this.held.slice(close + FENCE.length) : '';
389
+ this.state = 'text';
390
+ const language = this.fenceHead.trim().toLowerCase();
391
+ const calls = language === '' || language === 'json' || language === 'tool_call' || language === 'tool_code'
392
+ ? callsOf(body)
393
+ : null;
394
+ if (calls)
395
+ deltas.push(this.record(calls));
396
+ else
397
+ this.emitText(`${FENCE}${this.fenceHead}${body}${close >= 0 ? FENCE : ''}`, deltas);
398
+ this.fenceHead = '';
399
+ progress = close >= 0;
400
+ continue;
401
+ }
402
+ return deltas;
403
+ }
404
+ return deltas;
405
+ }
406
+ emitText(text, deltas) {
407
+ if (!text)
408
+ return;
409
+ this.content += text;
410
+ deltas.push({ content: text });
411
+ }
412
+ emitReasoning(text, deltas) {
413
+ if (!text)
414
+ return;
415
+ this.reasoning += text;
416
+ deltas.push({ reasoning_content: text });
417
+ }
418
+ record(calls) {
419
+ const added = calls.map((call) => {
420
+ const made = { id: this.newCallId(), ...call };
421
+ this.calls.push(made);
422
+ return made;
423
+ });
424
+ return {
425
+ tool_calls: added.map((call) => ({
426
+ index: this.calls.indexOf(call),
427
+ id: call.id,
428
+ type: 'function',
429
+ function: { name: call.name, arguments: call.arguments },
430
+ })),
431
+ };
432
+ }
433
+ /** The finish reason: calls win, then the library's own stop reason. */
434
+ finish(stopReason) {
435
+ if (this.calls.length > 0)
436
+ return 'tool_calls';
437
+ return stopReason === 'length' || stopReason === 'context_length' ? 'length' : 'stop';
438
+ }
439
+ /** `choices[0].message` of a non-stream reply. */
440
+ message() {
441
+ const content = this.content.replace(/^\s*\n/, '');
442
+ return {
443
+ role: 'assistant',
444
+ content: content || this.calls.length === 0 ? content : null,
445
+ ...(this.reasoning.trim() ? { reasoning_content: this.reasoning.replace(/^\n+|\n+$/g, '') } : {}),
446
+ ...(this.calls.length > 0
447
+ ? {
448
+ tool_calls: this.calls.map((call) => ({
449
+ id: call.id,
450
+ type: 'function',
451
+ function: { name: call.name, arguments: call.arguments },
452
+ })),
453
+ }
454
+ : {}),
455
+ };
456
+ }
457
+ }
458
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/runtime/geniex/host/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The hidden `geniex-host` mode of the core binaries (openspec change `add-geniex-runtime`, design
3
+ * D1): one process per model or command, so a crash of Qualcomm's native library never takes the
4
+ * core down. Core starts it with `process.execPath`; nothing else should. The library runs in a
5
+ * Worker (`engine.ts`); this thread keeps the HTTP server and the queue.
6
+ *
7
+ * stdout carries JSON lines only: the probe answer, the model metadata, or `serve`'s readiness line.
8
+ * Errors go to stderr; the ones core maps to its own codes are one JSON line `{code, …}` there.
9
+ */
10
+ import type { GeniexEngine } from './engine.js';
11
+ /** The host's exit codes; core reads 6 and 7 as its `GENIEX_*` codes. */
12
+ export declare const EXIT: {
13
+ readonly ok: 0;
14
+ /** A bug on core's side. */
15
+ readonly usage: 2;
16
+ /** The library does not load (or there is no Worker to load it in). */
17
+ readonly load: 3;
18
+ /** A library call failed, a model file cannot be read, a port is in use. */
19
+ readonly libraryCall: 4;
20
+ readonly requiresNewerEngine: 6;
21
+ readonly variantUnsupported: 7;
22
+ };
23
+ export interface StopWatch {
24
+ stopped: Promise<void>;
25
+ dispose(): void;
26
+ }
27
+ export interface GeniexHostDeps {
28
+ stdout: (line: string) => void;
29
+ stderr: (line: string) => void;
30
+ /** The Worker with the library in it; made once per run, destroyed at the end. */
31
+ startEngine: () => GeniexEngine | Promise<GeniexEngine>;
32
+ /** SIGTERM, SIGINT or stdin closed; made before the model, so an early stop is never missed. */
33
+ watchStop?: () => StopWatch;
34
+ }
35
+ /** SIGTERM, SIGINT or the end of stdin, whichever comes first (Windows has no SIGTERM). */
36
+ export declare function watchStopSignals(): StopWatch;
37
+ /** Line-oriented output over a stream-oriented CLI io. */
38
+ export declare function lineIo(io: {
39
+ stdout: (text: string) => void;
40
+ stderr: (text: string) => void;
41
+ }): Pick<GeniexHostDeps, 'stdout' | 'stderr'>;
42
+ /**
43
+ * Where a build keeps the library: `<build>/lib` (task 4.2), absolute. Windows searches DLLs in the
44
+ * folder `SetDllDirectoryW` names instead of the working one, so a relative path would not load.
45
+ */
46
+ export declare function libraryDir(build: string): string;
47
+ /** Runs `geniex-host <argv…>` and returns its exit code. */
48
+ export declare function runGeniexHost(argv: readonly string[], deps: GeniexHostDeps): Promise<number>;