@atomic-chat/core 0.19.0 → 0.20.5

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 (219) hide show
  1. package/dist/app-daemon.js +5 -0
  2. package/dist/app-daemon.js.map +1 -1
  3. package/dist/cli/bin.js +0 -0
  4. package/dist/cli/launch.js +2 -0
  5. package/dist/cli/launch.js.map +1 -1
  6. package/dist/cli/main.d.ts +1 -1
  7. package/dist/cli/main.js +5 -0
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/cloud/registry.js +1 -0
  10. package/dist/cloud/registry.js.map +1 -1
  11. package/dist/config/paths.d.ts +1 -1
  12. package/dist/config/paths.js +12 -0
  13. package/dist/config/paths.js.map +1 -1
  14. package/dist/contracts/engine-builds.d.ts +6 -1
  15. package/dist/contracts/engine-builds.js +1 -1
  16. package/dist/contracts/engine-builds.js.map +1 -1
  17. package/dist/contracts/engines.d.ts +1 -1
  18. package/dist/contracts/engines.js +2 -0
  19. package/dist/contracts/engines.js.map +1 -1
  20. package/dist/contracts/errors.d.ts +7 -1
  21. package/dist/contracts/errors.js.map +1 -1
  22. package/dist/contracts/events.d.ts +3 -1
  23. package/dist/contracts/geniex.d.ts +98 -0
  24. package/dist/contracts/geniex.js +15 -0
  25. package/dist/contracts/geniex.js.map +1 -0
  26. package/dist/contracts/index.d.ts +1 -0
  27. package/dist/contracts/index.js +1 -0
  28. package/dist/contracts/index.js.map +1 -1
  29. package/dist/contracts/model-yml.d.ts +40 -0
  30. package/dist/contracts/model-yml.js +7 -0
  31. package/dist/contracts/model-yml.js.map +1 -1
  32. package/dist/contracts/session.d.ts +6 -1
  33. package/dist/contracts/session.js.map +1 -1
  34. package/dist/contracts/settings.d.ts +12 -1
  35. package/dist/contracts/settings.js.map +1 -1
  36. package/dist/core/app-lease.d.ts +56 -0
  37. package/dist/core/app-lease.js +50 -0
  38. package/dist/core/app-lease.js.map +1 -0
  39. package/dist/core/atomic-core.d.ts +1 -1
  40. package/dist/core/create.js +109 -5
  41. package/dist/core/create.js.map +1 -1
  42. package/dist/engine-builds/engines.d.ts +28 -7
  43. package/dist/engine-builds/engines.js +49 -5
  44. package/dist/engine-builds/engines.js.map +1 -1
  45. package/dist/engine-builds/geniex.d.ts +35 -0
  46. package/dist/engine-builds/geniex.js +111 -0
  47. package/dist/engine-builds/geniex.js.map +1 -0
  48. package/dist/engine-builds/manifest.d.ts +43 -0
  49. package/dist/engine-builds/manifest.js +92 -0
  50. package/dist/engine-builds/manifest.js.map +1 -1
  51. package/dist/engine-builds/order.d.ts +2 -1
  52. package/dist/engine-builds/order.js +2 -0
  53. package/dist/engine-builds/order.js.map +1 -1
  54. package/dist/engine-builds/select.d.ts +15 -0
  55. package/dist/engine-builds/select.js +14 -0
  56. package/dist/engine-builds/select.js.map +1 -1
  57. package/dist/engine-builds/service.d.ts +5 -3
  58. package/dist/engine-builds/service.js +21 -2
  59. package/dist/engine-builds/service.js.map +1 -1
  60. package/dist/engines/service.d.ts +2 -1
  61. package/dist/engines/service.js +3 -1
  62. package/dist/engines/service.js.map +1 -1
  63. package/dist/engines/versions.js +3 -0
  64. package/dist/engines/versions.js.map +1 -1
  65. package/dist/integrations/catalog.d.ts +3 -1
  66. package/dist/integrations/catalog.js +8 -2
  67. package/dist/integrations/catalog.js.map +1 -1
  68. package/dist/integrations/config-io.d.ts +45 -4
  69. package/dist/integrations/config-io.js +91 -6
  70. package/dist/integrations/config-io.js.map +1 -1
  71. package/dist/integrations/configure/codex-repair.d.ts +75 -0
  72. package/dist/integrations/configure/codex-repair.js +254 -0
  73. package/dist/integrations/configure/codex-repair.js.map +1 -0
  74. package/dist/integrations/configure/codex.d.ts +48 -10
  75. package/dist/integrations/configure/codex.js +126 -32
  76. package/dist/integrations/configure/codex.js.map +1 -1
  77. package/dist/integrations/configure/registry.d.ts +4 -1
  78. package/dist/integrations/configure/registry.js +1 -0
  79. package/dist/integrations/configure/registry.js.map +1 -1
  80. package/dist/models/gguf/kv-cache.d.ts +5 -0
  81. package/dist/models/gguf/kv-cache.js +35 -2
  82. package/dist/models/gguf/kv-cache.js.map +1 -1
  83. package/dist/models/gguf/reader.d.ts +5 -0
  84. package/dist/models/gguf/reader.js +15 -3
  85. package/dist/models/gguf/reader.js.map +1 -1
  86. package/dist/router/resolve.d.ts +3 -2
  87. package/dist/router/resolve.js +3 -1
  88. package/dist/router/resolve.js.map +1 -1
  89. package/dist/runtime/geniex/accelerators.d.ts +20 -0
  90. package/dist/runtime/geniex/accelerators.js +53 -0
  91. package/dist/runtime/geniex/accelerators.js.map +1 -0
  92. package/dist/runtime/geniex/check.d.ts +34 -0
  93. package/dist/runtime/geniex/check.js +117 -0
  94. package/dist/runtime/geniex/check.js.map +1 -0
  95. package/dist/runtime/geniex/chip.d.ts +29 -0
  96. package/dist/runtime/geniex/chip.js +35 -0
  97. package/dist/runtime/geniex/chip.js.map +1 -0
  98. package/dist/runtime/geniex/devices.d.ts +13 -0
  99. package/dist/runtime/geniex/devices.js +32 -0
  100. package/dist/runtime/geniex/devices.js.map +1 -0
  101. package/dist/runtime/geniex/geniex-host.d.ts +17 -0
  102. package/dist/runtime/geniex/geniex-host.js +26 -0
  103. package/dist/runtime/geniex/geniex-host.js.map +1 -0
  104. package/dist/runtime/geniex/host/args.d.ts +56 -0
  105. package/dist/runtime/geniex/host/args.js +115 -0
  106. package/dist/runtime/geniex/host/args.js.map +1 -0
  107. package/dist/runtime/geniex/host/engine.d.ts +76 -0
  108. package/dist/runtime/geniex/host/engine.js +122 -0
  109. package/dist/runtime/geniex/host/engine.js.map +1 -0
  110. package/dist/runtime/geniex/host/ffi-bun.d.ts +15 -0
  111. package/dist/runtime/geniex/host/ffi-bun.js +415 -0
  112. package/dist/runtime/geniex/host/ffi-bun.js.map +1 -0
  113. package/dist/runtime/geniex/host/grammar.d.ts +11 -0
  114. package/dist/runtime/geniex/host/grammar.js +223 -0
  115. package/dist/runtime/geniex/host/grammar.js.map +1 -0
  116. package/dist/runtime/geniex/host/inspect.d.ts +25 -0
  117. package/dist/runtime/geniex/host/inspect.js +177 -0
  118. package/dist/runtime/geniex/host/inspect.js.map +1 -0
  119. package/dist/runtime/geniex/host/library.d.ts +117 -0
  120. package/dist/runtime/geniex/host/library.js +38 -0
  121. package/dist/runtime/geniex/host/library.js.map +1 -0
  122. package/dist/runtime/geniex/host/openai.d.ts +62 -0
  123. package/dist/runtime/geniex/host/openai.js +458 -0
  124. package/dist/runtime/geniex/host/openai.js.map +1 -0
  125. package/dist/runtime/geniex/host/run.d.ts +48 -0
  126. package/dist/runtime/geniex/host/run.js +208 -0
  127. package/dist/runtime/geniex/host/run.js.map +1 -0
  128. package/dist/runtime/geniex/host/server.d.ts +39 -0
  129. package/dist/runtime/geniex/host/server.js +232 -0
  130. package/dist/runtime/geniex/host/server.js.map +1 -0
  131. package/dist/runtime/geniex/host/worker-protocol.d.ts +76 -0
  132. package/dist/runtime/geniex/host/worker-protocol.js +116 -0
  133. package/dist/runtime/geniex/host/worker-protocol.js.map +1 -0
  134. package/dist/runtime/geniex/host/worker-source.generated.d.ts +1 -0
  135. package/dist/runtime/geniex/host/worker-source.generated.js +4 -0
  136. package/dist/runtime/geniex/host/worker-source.generated.js.map +1 -0
  137. package/dist/runtime/geniex/host/worker.d.ts +7 -0
  138. package/dist/runtime/geniex/host/worker.js +19 -0
  139. package/dist/runtime/geniex/host/worker.js.map +1 -0
  140. package/dist/runtime/geniex/host-process.d.ts +48 -0
  141. package/dist/runtime/geniex/host-process.js +104 -0
  142. package/dist/runtime/geniex/host-process.js.map +1 -0
  143. package/dist/runtime/geniex/index.d.ts +11 -0
  144. package/dist/runtime/geniex/index.js +12 -0
  145. package/dist/runtime/geniex/index.js.map +1 -0
  146. package/dist/runtime/geniex/model-yml.d.ts +8 -0
  147. package/dist/runtime/geniex/model-yml.js +98 -0
  148. package/dist/runtime/geniex/model-yml.js.map +1 -0
  149. package/dist/runtime/geniex/runtime.d.ts +94 -0
  150. package/dist/runtime/geniex/runtime.js +366 -0
  151. package/dist/runtime/geniex/runtime.js.map +1 -0
  152. package/dist/runtime/litert-lm/host/openai.d.ts +4 -37
  153. package/dist/runtime/litert-lm/host/openai.js +11 -96
  154. package/dist/runtime/litert-lm/host/openai.js.map +1 -1
  155. package/dist/runtime/litert-lm/host/pool.d.ts +1 -7
  156. package/dist/runtime/litert-lm/host/pool.js +1 -17
  157. package/dist/runtime/litert-lm/host/pool.js.map +1 -1
  158. package/dist/runtime/litert-lm/host/server.js +11 -53
  159. package/dist/runtime/litert-lm/host/server.js.map +1 -1
  160. package/dist/runtime/llamacpp/args.d.ts +5 -0
  161. package/dist/runtime/llamacpp/args.js +2 -0
  162. package/dist/runtime/llamacpp/args.js.map +1 -1
  163. package/dist/runtime/llamacpp/fit-margin.d.ts +44 -0
  164. package/dist/runtime/llamacpp/fit-margin.js +50 -0
  165. package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
  166. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  167. package/dist/runtime/llamacpp/load-plan.js +57 -22
  168. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  169. package/dist/runtime/llamacpp/runtime.d.ts +5 -1
  170. package/dist/runtime/llamacpp/runtime.js +6 -1
  171. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  172. package/dist/runtime/shared/external-sessions.js +1 -0
  173. package/dist/runtime/shared/external-sessions.js.map +1 -1
  174. package/dist/runtime/shared/fifo-lock.d.ts +10 -0
  175. package/dist/runtime/shared/fifo-lock.js +21 -0
  176. package/dist/runtime/shared/fifo-lock.js.map +1 -0
  177. package/dist/runtime/shared/index.d.ts +2 -0
  178. package/dist/runtime/shared/index.js +2 -0
  179. package/dist/runtime/shared/index.js.map +1 -1
  180. package/dist/runtime/shared/openai-sse.d.ts +112 -0
  181. package/dist/runtime/shared/openai-sse.js +178 -0
  182. package/dist/runtime/shared/openai-sse.js.map +1 -0
  183. package/dist/server/clients.d.ts +6 -0
  184. package/dist/server/clients.js +11 -0
  185. package/dist/server/clients.js.map +1 -1
  186. package/dist/server/control/router.js +2 -0
  187. package/dist/server/control/router.js.map +1 -1
  188. package/dist/server/control/routes/geniex.d.ts +7 -0
  189. package/dist/server/control/routes/geniex.js +22 -0
  190. package/dist/server/control/routes/geniex.js.map +1 -0
  191. package/dist/server/control/types.d.ts +11 -1
  192. package/dist/server/control/types.js.map +1 -1
  193. package/dist/server/http.js +2 -0
  194. package/dist/server/http.js.map +1 -1
  195. package/dist/server/public/embedding.d.ts +8 -7
  196. package/dist/server/public/embedding.js +15 -7
  197. package/dist/server/public/embedding.js.map +1 -1
  198. package/dist/server/public/forward.js +23 -6
  199. package/dist/server/public/forward.js.map +1 -1
  200. package/dist/server/public/listing.js +1 -0
  201. package/dist/server/public/listing.js.map +1 -1
  202. package/dist/server/public/responses.js +9 -0
  203. package/dist/server/public/responses.js.map +1 -1
  204. package/dist/server/public/telemetry.d.ts +7 -1
  205. package/dist/server/public/telemetry.js +11 -3
  206. package/dist/server/public/telemetry.js.map +1 -1
  207. package/dist/server/public/trace.d.ts +8 -4
  208. package/dist/server/public/trace.js +15 -7
  209. package/dist/server/public/trace.js.map +1 -1
  210. package/dist/server/public/validate.d.ts +32 -0
  211. package/dist/server/public/validate.js +146 -0
  212. package/dist/server/public/validate.js.map +1 -0
  213. package/dist/settings/schema/geniex.json +63 -0
  214. package/dist/settings/schema/mlx.json +1 -1
  215. package/dist/settings/schema.js +11 -0
  216. package/dist/settings/schema.js.map +1 -1
  217. package/dist/version.d.ts +1 -1
  218. package/dist/version.js +1 -1
  219. package/package.json +7 -2
@@ -16,15 +16,30 @@ export interface Build extends EngineBuildRef {
16
16
  published_at: string | null;
17
17
  /** Foundry Local: the C API version recorded at install; `null` when unknown. */
18
18
  c_api_version?: number | null;
19
- /** LiteRT-LM: the binding number recorded at install; `null` when unknown. */
19
+ /** LiteRT-LM and GenieX: the binding number recorded at install; `null` when unknown. */
20
20
  abi?: number | null;
21
+ /** GenieX: the device ids the install's probe found (`HTP0`, `GPUOpenCL`, `CPU`). */
22
+ devices?: string[];
23
+ /** GenieX: `geniex_version()` as the install's probe read it. */
24
+ library_version?: string | null;
25
+ }
26
+ /**
27
+ * What a host's probe learns about an unpacked build beyond "it loads", kept in its install record
28
+ * (GenieX, task 4.4): the devices the library found and its own version. Hosts whose probe learns
29
+ * nothing to keep answer `void`.
30
+ */
31
+ export interface EngineProbeFacts {
32
+ libraryVersion: string | null;
33
+ devices: string[];
21
34
  }
22
35
  /**
23
36
  * Which build of an engine with one archive per platform this host runs, or why none
24
- * (`foundryLocalHostPlatform`, `liteRtLmHostPlatform`).
37
+ * (`foundryLocalHostPlatform`, `liteRtLmHostPlatform`, `geniexHostPlatform`); an engine may carry
38
+ * more beside the platform (GenieX: the chip), which only its own row reads.
25
39
  */
26
40
  export type EngineHostPlatform = {
27
41
  platform: string;
42
+ [fact: string]: unknown;
28
43
  } | {
29
44
  platform: null;
30
45
  reason: string;
@@ -42,9 +57,10 @@ export interface EngineContext {
42
57
  hostPlatform: EngineHostPlatform;
43
58
  /**
44
59
  * This core's own host mode run against an unpacked build (`foundry-host probe`, `litert-host
45
- * probe`); throws `ENGINE_INSTALL_FAILED` with what it printed. Absent where this core has none.
60
+ * probe`, `geniex-host probe`); throws `ENGINE_INSTALL_FAILED` with what it printed, and answers
61
+ * the facts the record keeps, when the host has any. Absent where this core has none.
46
62
  */
47
- hostProbe?: ((buildDir: string) => Promise<void>) | undefined;
63
+ hostProbe?: ((buildDir: string) => Promise<EngineProbeFacts | void>) | undefined;
48
64
  }
49
65
  export interface HostChoice {
50
66
  /** What this host would install, best first. */
@@ -66,8 +82,10 @@ export interface BuildRecordInfo {
66
82
  publishedAt: string | null;
67
83
  /** Foundry Local: the release's C API version. */
68
84
  cApiVersion: number | null;
69
- /** LiteRT-LM: the release's binding number. */
85
+ /** LiteRT-LM and GenieX: the release's binding number. */
70
86
  abi: number | null;
87
+ /** What the probe learned (`EngineProbeFacts`), for the hosts whose record keeps it. */
88
+ probe: EngineProbeFacts | null;
71
89
  }
72
90
  export interface EngineDescriptor<M> {
73
91
  /** The release an install takes from the manifest, and the order key it carries. */
@@ -82,8 +100,11 @@ export interface EngineDescriptor<M> {
82
100
  archives(manifest: M, backendId: string): ArchiveRef[];
83
101
  /** Fix the unpacked tree up before the probe; runs even when a test replaces the probe. */
84
102
  prepare?(staging: string, ctx: EngineContext): Promise<void>;
85
- /** Make the unpacked tree runnable and prove it runs here; throws `ENGINE_INSTALL_FAILED`. */
86
- probe(staging: string, ctx: EngineContext): Promise<void>;
103
+ /**
104
+ * Make the unpacked tree runnable and prove it runs here; throws `ENGINE_INSTALL_FAILED`. What it
105
+ * answers (if anything) reaches `record` as `info.probe`.
106
+ */
107
+ probe(staging: string, ctx: EngineContext): Promise<EngineProbeFacts | void>;
87
108
  /** The ownership marker and `install.json`. */
88
109
  record(staging: string, info: BuildRecordInfo): Promise<void>;
89
110
  builds(ctx: EngineContext): Promise<Build[]>;
@@ -9,9 +9,10 @@ import { listInstalledBackends, prepareSdcppTree, writeInstallRecord } from '../
9
9
  import { listDownloadedMlx, probeMlxServer, readBundledMlx, writeMlxInstallRecord } from './builds.js';
10
10
  import { listFoundryLocalBuilds, prepareFoundryLocalTree, writeFoundryLocalInstallRecord, } from './foundry-local.js';
11
11
  import { listLiteRtLmBuilds, prepareLiteRtLmTree, writeLiteRtLmInstallRecord } from './litert-lm.js';
12
- import { FOUNDRY_LOCAL_C_API_VERSIONS, foundryLocalAssetUrl, mlxAssetUrl, sdcppAssetUrl, SUPPORTED_LITERT_LM_ABI, } from './manifest.js';
12
+ import { listGeniexBuilds, prepareGeniexTree, writeGeniexInstallRecord } from './geniex.js';
13
+ import { FOUNDRY_LOCAL_C_API_VERSIONS, foundryLocalAssetUrl, mlxAssetUrl, sdcppAssetUrl, SUPPORTED_GENIEX_ABI, SUPPORTED_LITERT_LM_ABI, } from './manifest.js';
13
14
  import { compareBuilds } from './order.js';
14
- import { backendKindOf, companionFor, foundryLocalHostChoice, liteRtLmHostChoice, mlxHostChoice, readFailedBackends, rememberFailedBackend, sdcppHostChoice, sdcppHostOf, } from './select.js';
15
+ import { backendKindOf, companionFor, foundryLocalHostChoice, geniexHostChoice, liteRtLmHostChoice, mlxHostChoice, readFailedBackends, rememberFailedBackend, sdcppHostChoice, sdcppHostOf, } from './select.js';
15
16
  const pin = (asset) => ({
16
17
  ...(asset.sha256 !== undefined ? { sha256: asset.sha256 } : {}),
17
18
  ...(asset.size !== undefined ? { size: asset.size } : {}),
@@ -75,7 +76,7 @@ const mlx = {
75
76
  .filter((asset) => asset.backend === backendId)
76
77
  .map((asset) => ({ ...pin(asset), url: mlxAssetUrl(manifest, asset), name: asset.name })),
77
78
  probe: (staging, ctx) => probeMlxServer(staging, { platform: ctx.platform }),
78
- record: (staging, { cApiVersion: _cApiVersion, abi: _abi, ...info }) => writeMlxInstallRecord(staging, info),
79
+ record: (staging, { cApiVersion: _cApiVersion, abi: _abi, probe: _probe, ...info }) => writeMlxInstallRecord(staging, info),
79
80
  async builds(ctx) {
80
81
  const out = (await listDownloadedMlx(ctx.root)).map((record) => ({
81
82
  tag: record.tag,
@@ -122,7 +123,7 @@ const foundryLocal = {
122
123
  throw new AtomicCoreError('ENGINE_INSTALL_FAILED', 'This core has no Foundry Local host to check the build with.');
123
124
  await ctx.hostProbe(staging);
124
125
  },
125
- record: (staging, { abi: _abi, ...info }) => writeFoundryLocalInstallRecord(staging, info),
126
+ record: (staging, { abi: _abi, probe: _probe, ...info }) => writeFoundryLocalInstallRecord(staging, info),
126
127
  async builds(ctx) {
127
128
  return (await listFoundryLocalBuilds(ctx.root)).map((record) => ({
128
129
  tag: record.tag,
@@ -157,7 +158,7 @@ const liteRtLm = {
157
158
  throw new AtomicCoreError('ENGINE_INSTALL_FAILED', 'This core has no LiteRT-LM host to check the build with.');
158
159
  await ctx.hostProbe(staging);
159
160
  },
160
- record: (staging, { cApiVersion: _cApiVersion, ...info }) => writeLiteRtLmInstallRecord(staging, info),
161
+ record: (staging, { cApiVersion: _cApiVersion, probe: _probe, ...info }) => writeLiteRtLmInstallRecord(staging, info),
161
162
  async builds(ctx) {
162
163
  return (await listLiteRtLmBuilds(ctx.root)).map((record) => ({
163
164
  tag: record.tag,
@@ -172,10 +173,53 @@ const liteRtLm = {
172
173
  /** The newest by `published_at` among the builds whose ABI this core's host binds (design D2). */
173
174
  active: (builds) => newest('litert-lm', builds.filter((build) => build.abi != null && SUPPORTED_LITERT_LM_ABI.includes(build.abi))),
174
175
  };
176
+ /**
177
+ * GenieX (change `add-geniex-runtime`, task 4.4): the SDK zip of the newest release; `lib/**` of it
178
+ * goes to the build, `geniex-host probe --lib <staging>` of this core proves the library loads and
179
+ * names the devices it sees, which the record keeps for `GET /runtimes/geniex/accelerators`.
180
+ */
181
+ const geniex = {
182
+ release: (manifest) => {
183
+ const newest = manifest.releases[0];
184
+ return { tag: newest.version, published_at: newest.published_at, abi: newest.abi };
185
+ },
186
+ hostChoice: async (ctx, manifest) => geniexHostChoice(ctx.hostPlatform, manifest?.releases[0] ?? null),
187
+ archives(manifest, backendId) {
188
+ const asset = manifest.releases[0]?.assets.find((candidate) => candidate.platform === backendId);
189
+ return asset ? [{ url: asset.url, name: asset.name, sha256: asset.sha256, size: asset.size }] : [];
190
+ },
191
+ prepare: (staging) => prepareGeniexTree(staging),
192
+ async probe(staging, ctx) {
193
+ if (!ctx.hostProbe)
194
+ throw new AtomicCoreError('ENGINE_INSTALL_FAILED', 'This core has no GenieX host to check the build with.');
195
+ return ctx.hostProbe(staging);
196
+ },
197
+ record: (staging, { cApiVersion: _cApiVersion, probe, ...info }) => writeGeniexInstallRecord(staging, {
198
+ ...info,
199
+ libraryVersion: probe?.libraryVersion ?? null,
200
+ devices: probe?.devices ?? [],
201
+ }),
202
+ async builds(ctx) {
203
+ return (await listGeniexBuilds(ctx.root)).map((record) => ({
204
+ tag: record.tag,
205
+ backend_id: record.backendId,
206
+ origin: 'downloaded',
207
+ dir: record.dir,
208
+ installed_at_ms: record.installedAtMs,
209
+ published_at: record.publishedAt,
210
+ abi: record.abi,
211
+ devices: record.devices,
212
+ library_version: record.libraryVersion,
213
+ }));
214
+ },
215
+ /** The newest by `published_at` among the builds whose ABI this core's host binds (design D2). */
216
+ active: (builds) => newest('geniex', builds.filter((build) => build.abi != null && SUPPORTED_GENIEX_ABI.includes(build.abi))),
217
+ };
175
218
  export const ENGINE_DESCRIPTORS = {
176
219
  'sd-cpp': sdcpp,
177
220
  'mlx': mlx,
178
221
  'foundry-local': foundryLocal,
179
222
  'litert-lm': liteRtLm,
223
+ 'geniex': geniex,
180
224
  };
181
225
  //# sourceMappingURL=engines.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engines.js","sourceRoot":"","sources":["../../src/engine-builds/engines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engines.js","sourceRoot":"","sources":["../../src/engine-builds/engines.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAErG,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGtG,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAC3F,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAStB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,aAAa,CAAA;AA2GpB,MAAM,GAAG,GAAG,CAAC,KAAyC,EAAE,EAAE,CAAC,CAAC;IAC1D,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAA;AAEF,8EAA8E;AAC9E,SAAS,MAAM,CAAC,MAAqB,EAAE,MAAe;IACpD,IAAI,IAAuB,CAAA;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,IAAI,GAAG,KAAK,CAAA;IAC7F,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,KAAK,GAAoC;IAC7C,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACvE,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAA;QACrG,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC1F,CAAC;IACD,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAChD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA;YAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CACtB,gBAAgB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7F,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CACxB,kBAAkB,CAAC,OAAO,EAAE;QAC1B,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,GAAG,EAAE,OAAO;KACb,CAAC;IACJ,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,OAAO,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;aACzD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;aAC9C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC,CAAA;IACP,CAAC;IACD,0EAA0E;IAC1E,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,EAAE,SAAS,CAAC;CAC3G,CAAA;AAED,MAAM,GAAG,GAAkC;IACzC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;IACxF,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;QACzE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAC5E,CAAC;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAChC,QAAQ,CAAC,MAAM;SACZ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;SAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7F,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC5E,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACpF,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC;IACtC,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,MAAM,GAAG,GAAY,CAAC,MAAM,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACxE,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,YAAY,EAAE,MAAM,CAAC,WAAW;SACjC,CAAC,CAAC,CAAA;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,OAAO;YAAE,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,YAAsB,CAAC,CAAC,CAAA;QAC9E,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,gHAAgH;IAChH,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1C,CAAA;AAED,SAAS,eAAe,CAAC,OAAmB,EAAE,YAAoB;IAChE,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,SAAS;QAC7B,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,YAAY;QACjB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAA2C;IAC3D,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAA6C,CAAA;QAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAA;IACpG,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAClC,sBAAsB,CAAC,GAAG,CAAC,YAAwC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACrG,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;QACnF,OAAO,OAAO,IAAI,KAAK;YACrB,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YAC5F,CAAC,CAAC,EAAE,CAAA;IACR,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC;IACzE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS;YAChB,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,8DAA8D,CAC/D,CAAA;QACH,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,EAAE,IAAI,CAAC;IACzG,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,OAAO,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,aAAa,EAAE,MAAM,CAAC,WAAW;SAClC,CAAC,CAAC,CAAA;IACL,CAAC;IACD,oGAAoG;IACpG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CACJ,eAAe,EACf,MAAM,CAAC,MAAM,CACX,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,4BAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CACrG,CACF;CACJ,CAAA;AAED;;;GAGG;AACH,MAAM,QAAQ,GAAuC;IACnD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAyC,CAAA;QAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAA;IACpF,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAClC,kBAAkB,CAAC,GAAG,CAAC,YAAoC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7F,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;QAChG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpG,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAClD,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS;YAChB,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,0DAA0D,CAC3D,CAAA;QACH,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACzE,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC;IAC3C,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,OAAO,CAAC,MAAM,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3D,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC,CAAA;IACL,CAAC;IACD,kGAAkG;IAClG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CACJ,WAAW,EACX,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAC3F;CACJ,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,GAAqC;IAC/C,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAuC,CAAA;QACzE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAA;IACpF,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAClC,gBAAgB,CAAC,GAAG,CAAC,YAAkC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;QAChG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpG,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAChD,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS;YAChB,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,uDAAuD,CACxD,CAAA;QACH,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACjE,wBAAwB,CAAC,OAAO,EAAE;QAChC,GAAG,IAAI;QACP,cAAc,EAAE,KAAK,EAAE,cAAc,IAAI,IAAI;QAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE;KAC9B,CAAC;IACJ,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,OAAO,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,MAAM,EAAE,YAAY;YACpB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,eAAe,EAAE,MAAM,CAAC,cAAc;SACvC,CAAC,CAAC,CAAA;IACL,CAAC;IACD,kGAAkG;IAClG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CACJ,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACxF;CACJ,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA8D;IAC3F,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,GAAG;IACV,eAAe,EAAE,YAAY;IAC7B,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,MAAM;CACjB,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * What is particular to GenieX builds (openspec change `add-geniex-runtime`, design D2): a build is
3
+ * Qualcomm's SDK zip (`geniex-sdk-windows-arm64-<tag>.zip`), of which only the library folder is kept
4
+ * — `lib/geniex.dll`, the `llama_cpp` and `qairt` plugins, QAIRT and the Microsoft-signed HTP files —
5
+ * without the zip's top folder (`sdk-windows-arm64/`), its `bin/` and `include/` (task 4.2). Each
6
+ * build records the `abi` it was published with, which decides whether this core's host binds it, and
7
+ * the devices `geniex-host probe` found when it was installed (task 4.4), which
8
+ * `GET /runtimes/geniex/accelerators` answers from without starting a host again.
9
+ */
10
+ /** The C API's library; the plugins load beside it. GenieX has no macOS or Linux x64 build. */
11
+ export declare const GENIEX_LIBRARY_FILE = "geniex.dll";
12
+ /**
13
+ * Turn the unpacked zip into a build: `<top>/lib` (or `lib` already at the root) becomes `<staging>/lib`,
14
+ * everything else goes. Throws `ENGINE_INSTALL_FAILED` when the zip holds no `lib/geniex.dll`.
15
+ * Path traversal is refused earlier, by `extractArchive`.
16
+ */
17
+ export declare function prepareGeniexTree(staging: string): Promise<void>;
18
+ export interface GeniexInstallRecord {
19
+ /** The GenieX version, `X.Y.Z`. */
20
+ tag: string;
21
+ backendId: string;
22
+ sha256: string | null;
23
+ installedAtMs: number;
24
+ publishedAt: string | null;
25
+ abi: number | null;
26
+ /** `geniex_version()` as the probe read it; `null` where it could not. */
27
+ libraryVersion: string | null;
28
+ /** The device ids `geniex_get_device_list` gave at the install's probe (`HTP0`, `GPUOpenCL`, `CPU`). */
29
+ devices: string[];
30
+ dir: string;
31
+ }
32
+ /** The marker, then `install.json` without `dir`. */
33
+ export declare function writeGeniexInstallRecord(dir: string, record: Omit<GeniexInstallRecord, 'dir'>): Promise<void>;
34
+ /** Every marked `<root>/<version>/<platform>/` with a record and its library, newest install first. */
35
+ export declare function listGeniexBuilds(root: string): Promise<GeniexInstallRecord[]>;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * What is particular to GenieX builds (openspec change `add-geniex-runtime`, design D2): a build is
3
+ * Qualcomm's SDK zip (`geniex-sdk-windows-arm64-<tag>.zip`), of which only the library folder is kept
4
+ * — `lib/geniex.dll`, the `llama_cpp` and `qairt` plugins, QAIRT and the Microsoft-signed HTP files —
5
+ * without the zip's top folder (`sdk-windows-arm64/`), its `bin/` and `include/` (task 4.2). Each
6
+ * build records the `abi` it was published with, which decides whether this core's host binds it, and
7
+ * the devices `geniex-host probe` found when it was installed (task 4.4), which
8
+ * `GET /runtimes/geniex/accelerators` answers from without starting a host again.
9
+ */
10
+ import { mkdir, readdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
11
+ import { join } from 'node:path';
12
+ import { AtomicCoreError } from '../contracts/index.js';
13
+ import { INSTALL_RECORD, OWNER_MARKER } from '../diffusion/install.js';
14
+ import { isDateTime } from './manifest.js';
15
+ /** The C API's library; the plugins load beside it. GenieX has no macOS or Linux x64 build. */
16
+ export const GENIEX_LIBRARY_FILE = 'geniex.dll';
17
+ const LIB_DIR = 'lib';
18
+ const exists = (path) => stat(path).then(() => true, () => false);
19
+ const isDirectory = (path) => stat(path).then((s) => s.isDirectory(), () => false);
20
+ /**
21
+ * Turn the unpacked zip into a build: `<top>/lib` (or `lib` already at the root) becomes `<staging>/lib`,
22
+ * everything else goes. Throws `ENGINE_INSTALL_FAILED` when the zip holds no `lib/geniex.dll`.
23
+ * Path traversal is refused earlier, by `extractArchive`.
24
+ */
25
+ export async function prepareGeniexTree(staging) {
26
+ const lib = join(staging, LIB_DIR);
27
+ let found;
28
+ if (await exists(join(lib, GENIEX_LIBRARY_FILE)))
29
+ found = lib;
30
+ else
31
+ for (const name of await readdir(staging)) {
32
+ const candidate = join(staging, name, LIB_DIR);
33
+ if ((await isDirectory(join(staging, name))) && (await exists(join(candidate, GENIEX_LIBRARY_FILE)))) {
34
+ found = candidate;
35
+ break;
36
+ }
37
+ }
38
+ if (!found)
39
+ throw new AtomicCoreError('ENGINE_INSTALL_FAILED', `The GenieX SDK zip holds no lib/${GENIEX_LIBRARY_FILE}.`);
40
+ if (found !== lib) {
41
+ const parked = join(staging, `.lib-${process.pid}`);
42
+ await rename(found, parked);
43
+ for (const name of await readdir(staging))
44
+ if (name !== `.lib-${process.pid}`)
45
+ await rm(join(staging, name), { recursive: true, force: true });
46
+ await rename(parked, lib);
47
+ return;
48
+ }
49
+ for (const name of await readdir(staging))
50
+ if (name !== LIB_DIR)
51
+ await rm(join(staging, name), { recursive: true, force: true });
52
+ }
53
+ /** The marker, then `install.json` without `dir`. */
54
+ export async function writeGeniexInstallRecord(dir, record) {
55
+ await mkdir(dir, { recursive: true });
56
+ await writeFile(join(dir, OWNER_MARKER), 'atomic-chat\n');
57
+ const file = {
58
+ tag: record.tag,
59
+ backendId: record.backendId,
60
+ sha256: record.sha256,
61
+ installedAtMs: record.installedAtMs,
62
+ publishedAt: record.publishedAt,
63
+ abi: record.abi,
64
+ libraryVersion: record.libraryVersion,
65
+ devices: record.devices,
66
+ };
67
+ await writeFile(join(dir, INSTALL_RECORD), JSON.stringify(file, null, 2));
68
+ }
69
+ async function readGeniexInstallRecord(dir) {
70
+ let raw;
71
+ try {
72
+ raw = JSON.parse(await readFile(join(dir, INSTALL_RECORD), 'utf8'));
73
+ }
74
+ catch {
75
+ return undefined;
76
+ }
77
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
78
+ return undefined;
79
+ const { tag, backendId, sha256, installedAtMs, publishedAt, abi, libraryVersion, devices } = raw;
80
+ if (typeof tag !== 'string' ||
81
+ typeof backendId !== 'string' ||
82
+ typeof installedAtMs !== 'number' ||
83
+ !Number.isSafeInteger(installedAtMs))
84
+ return undefined;
85
+ return {
86
+ tag,
87
+ backendId,
88
+ sha256: typeof sha256 === 'string' ? sha256 : null,
89
+ installedAtMs,
90
+ publishedAt: isDateTime(publishedAt) ? publishedAt : null,
91
+ abi: typeof abi === 'number' && Number.isSafeInteger(abi) ? abi : null,
92
+ libraryVersion: typeof libraryVersion === 'string' ? libraryVersion : null,
93
+ devices: Array.isArray(devices) ? devices.filter((d) => typeof d === 'string') : [],
94
+ dir,
95
+ };
96
+ }
97
+ /** Every marked `<root>/<version>/<platform>/` with a record and its library, newest install first. */
98
+ export async function listGeniexBuilds(root) {
99
+ const out = [];
100
+ for (const tag of await readdir(root).catch(() => []))
101
+ for (const backend of await readdir(join(root, tag)).catch(() => [])) {
102
+ const dir = join(root, tag, backend);
103
+ if (!(await exists(join(dir, OWNER_MARKER))))
104
+ continue;
105
+ const record = await readGeniexInstallRecord(dir);
106
+ if (record && (await exists(join(dir, LIB_DIR, GENIEX_LIBRARY_FILE))))
107
+ out.push(record);
108
+ }
109
+ return out.sort((a, b) => b.installedAtMs - a.installedAtMs);
110
+ }
111
+ //# sourceMappingURL=geniex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geniex.js","sourceRoot":"","sources":["../../src/engine-builds/geniex.ts"],"names":[],"mappings":"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"}
@@ -29,10 +29,17 @@ export declare const FOUNDRY_LOCAL_C_API_VERSIONS: readonly number[];
29
29
  * number is ours, not Google's: it moves when the C functions `ffi-bun.ts` reads change.
30
30
  */
31
31
  export declare const SUPPORTED_LITERT_LM_ABI: readonly number[];
32
+ /**
33
+ * The `abi` numbers this core's `geniex-host` binds (change `add-geniex-runtime`, design D2). Ours, not
34
+ * Qualcomm's: GenieX is pre-1.0 and changes `geniex.h` with minor versions; the number moves when the
35
+ * C functions and structs `geniex/host/ffi-bun.ts` reads change.
36
+ */
37
+ export declare const SUPPORTED_GENIEX_ABI: readonly number[];
32
38
  export declare const SDCPP_MANIFEST_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/sdcpp-manifest.json";
33
39
  export declare const MLX_MANIFEST_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/mlx-manifest.json";
34
40
  export declare const FOUNDRY_LOCAL_MANIFEST_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/foundry-local-manifest.json";
35
41
  export declare const LITERT_LM_MANIFEST_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/litert-lm-manifest.json";
42
+ export declare const GENIEX_MANIFEST_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/geniex-manifest.json";
36
43
  export declare const ENGINE_MANIFEST_TIMEOUT_MS = 8000;
37
44
  /** A fetched manifest is reused for this long unless the caller forces a re-read. */
38
45
  export declare const ENGINE_MANIFEST_TTL_MS: number;
@@ -137,6 +144,33 @@ export interface LiteRtLmAcceptance {
137
144
  coreVersion: string;
138
145
  abis: readonly number[];
139
146
  }
147
+ /** The platforms GenieX SDK zips exist for; only Windows on Snapdragon X in the first iteration. */
148
+ export declare const GENIEX_PLATFORMS: readonly ["win-arm64"];
149
+ export type GeniexPlatform = (typeof GENIEX_PLATFORMS)[number];
150
+ /** One SDK zip. The URL is explicit, on Qualcomm's S3 mirror or a `qualcomm/GenieX` GitHub release (design D2). */
151
+ export interface GeniexAsset {
152
+ platform: GeniexPlatform;
153
+ url: string;
154
+ name: string;
155
+ size: number;
156
+ sha256: string;
157
+ }
158
+ export interface GeniexRelease {
159
+ /** Qualcomm's GenieX version, `X.Y.Z` (the tag without its `v`). */
160
+ version: string;
161
+ /** The order builds of this engine have. */
162
+ published_at: string;
163
+ min_core_version: string;
164
+ /** Our binding number; see `SUPPORTED_GENIEX_ABI`. */
165
+ abi: number;
166
+ notes_url?: string;
167
+ assets: GeniexAsset[];
168
+ }
169
+ /** The releases this core can install, newest first; never empty. */
170
+ export interface GeniexManifest {
171
+ releases: GeniexRelease[];
172
+ }
173
+ export type GeniexAcceptance = LiteRtLmAcceptance;
140
174
  /** A conf date-time this core can order by: RFC 3339 shape and a real calendar date. */
141
175
  export declare function isDateTime(value: unknown): value is string;
142
176
  /** `backends/sdcpp-manifest.json`, or throw why it is not one. */
@@ -156,6 +190,14 @@ export declare function parseFoundryLocalManifest(data: unknown, accept: Foundry
156
190
  * does not bind (spec `litert-lm-runtime`). Throws for another schema version or no release left.
157
191
  */
158
192
  export declare function parseLiteRtLmManifest(data: unknown, accept: LiteRtLmAcceptance): LiteRtLmManifest;
193
+ /**
194
+ * `backends/geniex-manifest.json` (change `add-geniex-runtime`, task 4.1): strict per field, lenient
195
+ * per record — a release or zip that does not parse is skipped, as is a release for a newer core or an
196
+ * `abi` this core does not bind (spec `geniex-runtime`, "Релизы SDK публикуются в conf"); a zip on any
197
+ * host but the two of conf's schema is never installed. Throws for another schema version or no
198
+ * release left.
199
+ */
200
+ export declare function parseGeniexManifest(data: unknown, accept: GeniexAcceptance): GeniexManifest;
159
201
  /** An asset core may download and run: pinned by both `sha256` and `size`. */
160
202
  export declare function assetInstallable(asset: {
161
203
  sha256?: string;
@@ -179,6 +221,7 @@ export interface ManifestOf {
179
221
  'mlx': MlxManifest;
180
222
  'foundry-local': FoundryLocalManifest;
181
223
  'litert-lm': LiteRtLmManifest;
224
+ 'geniex': GeniexManifest;
182
225
  }
183
226
  export declare function manifestKinds(layout: DataLayout): {
184
227
  [K in EngineBuildId]: ManifestKind<ManifestOf[K]>;
@@ -32,10 +32,17 @@ export const FOUNDRY_LOCAL_C_API_VERSIONS = [2];
32
32
  * number is ours, not Google's: it moves when the C functions `ffi-bun.ts` reads change.
33
33
  */
34
34
  export const SUPPORTED_LITERT_LM_ABI = [1];
35
+ /**
36
+ * The `abi` numbers this core's `geniex-host` binds (change `add-geniex-runtime`, design D2). Ours, not
37
+ * Qualcomm's: GenieX is pre-1.0 and changes `geniex.h` with minor versions; the number moves when the
38
+ * C functions and structs `geniex/host/ffi-bun.ts` reads change.
39
+ */
40
+ export const SUPPORTED_GENIEX_ABI = [1];
35
41
  export const SDCPP_MANIFEST_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/sdcpp-manifest.json';
36
42
  export const MLX_MANIFEST_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/mlx-manifest.json';
37
43
  export const FOUNDRY_LOCAL_MANIFEST_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/foundry-local-manifest.json';
38
44
  export const LITERT_LM_MANIFEST_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/litert-lm-manifest.json';
45
+ export const GENIEX_MANIFEST_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/geniex-manifest.json';
39
46
  export const ENGINE_MANIFEST_TIMEOUT_MS = 8_000;
40
47
  /** A fetched manifest is reused for this long unless the caller forces a re-read. */
41
48
  export const ENGINE_MANIFEST_TTL_MS = 60 * 60 * 1000;
@@ -48,6 +55,8 @@ export const FOUNDRY_LOCAL_PLATFORMS = [
48
55
  'linux-arm64',
49
56
  ];
50
57
  export const LITERT_LM_PLATFORMS = ['macos-arm64', 'linux-x64', 'linux-arm64', 'win-x64'];
58
+ /** The platforms GenieX SDK zips exist for; only Windows on Snapdragon X in the first iteration. */
59
+ export const GENIEX_PLATFORMS = ['win-arm64'];
51
60
  const SDCPP_TAG_RE = /^master-[0-9]+-[0-9a-f]{7}(-a[0-9a-f]{7})?$/;
52
61
  const MLX_TAG_RE = /^mlxvlm-macos-arm64-[0-9a-f]{7,40}$/;
53
62
  const BACKEND_ID_RE = /^[a-z0-9.-]+$/;
@@ -59,6 +68,9 @@ const SEMVER_RE = /^\d+\.\d+\.\d+$/;
59
68
  const PYPI_URL_RE = /^https:\/\/files\.pythonhosted\.org\/\S+$/;
60
69
  const LITERT_LM_WHEEL_RE = /^litert_lm_api-[0-9.]+-[A-Za-z0-9._-]+\.whl$/;
61
70
  const OPENVINO_WHEEL_RE = /^openvino-[A-Za-z0-9._-]+\.whl$/;
71
+ /** conf's `sdk_url`: the S3 mirror's `qai-hub-geniex/` folder or a `qualcomm/GenieX` release download. */
72
+ const GENIEX_SDK_URL_RE = /^https:\/\/(qaihub-public-assets\.s3\.us-west-2\.amazonaws\.com\/qai-hub-geniex\/|github\.com\/qualcomm\/GenieX\/releases\/download\/)\S+$/;
73
+ const GENIEX_ASSET_NAME_RE = /^geniex-sdk-[a-z0-9-]+-v[0-9.]+\.zip$/;
62
74
  const REPO_RE = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
63
75
  const SHA256_RE = /^[0-9a-f]{64}$/;
64
76
  /** RFC 3339 with a zone; `Date.parse` alone accepts far more. */
@@ -317,6 +329,79 @@ export function parseLiteRtLmManifest(data, accept) {
317
329
  throw new Error(`the LiteRT-LM manifest lists no release this core can install (core ${accept.coreVersion}, ABI ${accept.abis.join('/')})`);
318
330
  return { releases };
319
331
  }
332
+ function parseGeniexAsset(raw) {
333
+ if (!isRecord(raw))
334
+ return null;
335
+ const { platform, url, name, size, sha256 } = raw;
336
+ if (!GENIEX_PLATFORMS.some((known) => known === platform))
337
+ return null;
338
+ if (typeof name !== 'string' || !GENIEX_ASSET_NAME_RE.test(name))
339
+ return null;
340
+ if (typeof url !== 'string' || !GENIEX_SDK_URL_RE.test(url))
341
+ return null;
342
+ if (typeof size !== 'number' || !Number.isSafeInteger(size) || size <= 0)
343
+ return null;
344
+ if (typeof sha256 !== 'string' || !SHA256_RE.test(sha256))
345
+ return null;
346
+ return { platform: platform, url, name, size, sha256 };
347
+ }
348
+ /** One release, or `null` when a field is not what the conf schema says. */
349
+ function parseGeniexRelease(raw) {
350
+ if (!isRecord(raw))
351
+ return null;
352
+ const { version, published_at, min_core_version, abi, notes_url } = raw;
353
+ if (typeof version !== 'string' || !SEMVER_RE.test(version))
354
+ return null;
355
+ if (!isDateTime(published_at))
356
+ return null;
357
+ if (typeof min_core_version !== 'string' || !SEMVER_RE.test(min_core_version))
358
+ return null;
359
+ if (typeof abi !== 'number' || !Number.isSafeInteger(abi) || abi < 1)
360
+ return null;
361
+ if (!Array.isArray(raw['assets']))
362
+ return null;
363
+ const assets = [];
364
+ for (const item of raw['assets']) {
365
+ const asset = parseGeniexAsset(item);
366
+ // conf's check refuses a platform listed twice; here the first one wins, as for the other engines.
367
+ if (asset && !assets.some((known) => known.platform === asset.platform))
368
+ assets.push(asset);
369
+ }
370
+ if (assets.length === 0)
371
+ return null;
372
+ return {
373
+ version,
374
+ published_at,
375
+ min_core_version,
376
+ abi,
377
+ ...(typeof notes_url === 'string' && /^https:\/\/\S+$/.test(notes_url) ? { notes_url } : {}),
378
+ assets,
379
+ };
380
+ }
381
+ /**
382
+ * `backends/geniex-manifest.json` (change `add-geniex-runtime`, task 4.1): strict per field, lenient
383
+ * per record — a release or zip that does not parse is skipped, as is a release for a newer core or an
384
+ * `abi` this core does not bind (spec `geniex-runtime`, "Релизы SDK публикуются в conf"); a zip on any
385
+ * host but the two of conf's schema is never installed. Throws for another schema version or no
386
+ * release left.
387
+ */
388
+ export function parseGeniexManifest(data, accept) {
389
+ if (!isRecord(data))
390
+ throw new Error('the GenieX manifest is not an object');
391
+ if (data['schema_version'] !== 1)
392
+ throw new Error(`the GenieX manifest has schema_version ${JSON.stringify(data['schema_version'])}, not 1`);
393
+ if (!Array.isArray(data['releases']))
394
+ throw new Error('the GenieX manifest has no releases array');
395
+ const releases = data['releases']
396
+ .map(parseGeniexRelease)
397
+ .filter((release) => release !== null)
398
+ .filter((release) => compareVersions(release.min_core_version, accept.coreVersion) <= 0 &&
399
+ accept.abis.includes(release.abi))
400
+ .sort((a, b) => Date.parse(b.published_at) - Date.parse(a.published_at));
401
+ if (releases.length === 0)
402
+ throw new Error(`the GenieX manifest lists no release this core can install (core ${accept.coreVersion}, ABI ${accept.abis.join('/')})`);
403
+ return { releases };
404
+ }
320
405
  /** An asset core may download and run: pinned by both `sha256` and `size`. */
321
406
  export function assetInstallable(asset) {
322
407
  return typeof asset.sha256 === 'string' && typeof asset.size === 'number';
@@ -367,6 +452,13 @@ export function manifestKinds(layout) {
367
452
  parse: (data) => parseLiteRtLmManifest(data, { coreVersion: CORE_VERSION, abis: SUPPORTED_LITERT_LM_ABI }),
368
453
  cacheFile: join(layout.provider('litert-lm').root, 'litert-lm-manifest.cache.json'),
369
454
  },
455
+ 'geniex': {
456
+ label: 'GenieX manifest',
457
+ url: GENIEX_MANIFEST_URL,
458
+ urlEnv: 'ATOMIC_GENIEX_MANIFEST_URL',
459
+ parse: (data) => parseGeniexManifest(data, { coreVersion: CORE_VERSION, abis: SUPPORTED_GENIEX_ABI }),
460
+ cacheFile: join(layout.provider('geniex').root, 'geniex-manifest.cache.json'),
461
+ },
370
462
  };
371
463
  }
372
464
  export class EngineManifestSource {