@atomic-chat/core 0.21.1 → 0.21.2

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 (109) hide show
  1. package/dist/backend/advisor/advisor.js +11 -2
  2. package/dist/backend/advisor/advisor.js.map +1 -1
  3. package/dist/backend/install/cuda-guard.d.ts +62 -0
  4. package/dist/backend/install/cuda-guard.js +80 -0
  5. package/dist/backend/install/cuda-guard.js.map +1 -0
  6. package/dist/backend/install/cuda-runtime-source.d.ts +76 -0
  7. package/dist/backend/install/cuda-runtime-source.js +294 -0
  8. package/dist/backend/install/cuda-runtime-source.js.map +1 -0
  9. package/dist/backend/install/index.d.ts +3 -0
  10. package/dist/backend/install/index.js +3 -0
  11. package/dist/backend/install/index.js.map +1 -1
  12. package/dist/backend/install/runtime-backend.d.ts +30 -3
  13. package/dist/backend/install/runtime-backend.js +106 -28
  14. package/dist/backend/install/runtime-backend.js.map +1 -1
  15. package/dist/backend/install/service.d.ts +40 -4
  16. package/dist/backend/install/service.js +175 -31
  17. package/dist/backend/install/service.js.map +1 -1
  18. package/dist/backend/install/windows-launch-check.d.ts +72 -0
  19. package/dist/backend/install/windows-launch-check.js +173 -0
  20. package/dist/backend/install/windows-launch-check.js.map +1 -0
  21. package/dist/backend/installed/installed.d.ts +13 -0
  22. package/dist/backend/installed/installed.js +32 -0
  23. package/dist/backend/installed/installed.js.map +1 -1
  24. package/dist/backend/select/bad-backends.d.ts +68 -0
  25. package/dist/backend/select/bad-backends.js +136 -0
  26. package/dist/backend/select/bad-backends.js.map +1 -0
  27. package/dist/backend/select/features.d.ts +18 -1
  28. package/dist/backend/select/features.js +29 -1
  29. package/dist/backend/select/features.js.map +1 -1
  30. package/dist/backend/select/index.d.ts +1 -0
  31. package/dist/backend/select/index.js +1 -0
  32. package/dist/backend/select/index.js.map +1 -1
  33. package/dist/backend/turboquant.d.ts +8 -0
  34. package/dist/backend/turboquant.js +37 -9
  35. package/dist/backend/turboquant.js.map +1 -1
  36. package/dist/cli/main.d.ts +1 -1
  37. package/dist/contracts/diagnostics.d.ts +1 -1
  38. package/dist/contracts/diagnostics.js +1 -0
  39. package/dist/contracts/diagnostics.js.map +1 -1
  40. package/dist/contracts/errors.d.ts +3 -3
  41. package/dist/contracts/errors.js +15 -0
  42. package/dist/contracts/errors.js.map +1 -1
  43. package/dist/contracts/hardware.d.ts +8 -0
  44. package/dist/contracts/index.d.ts +1 -0
  45. package/dist/contracts/index.js +1 -0
  46. package/dist/contracts/index.js.map +1 -1
  47. package/dist/contracts/load-diag.d.ts +34 -0
  48. package/dist/contracts/load-diag.js +48 -0
  49. package/dist/contracts/load-diag.js.map +1 -0
  50. package/dist/core/atomic-core.d.ts +1 -1
  51. package/dist/core/create.js +16 -13
  52. package/dist/core/create.js.map +1 -1
  53. package/dist/downloads/archive.js +8 -3
  54. package/dist/downloads/archive.js.map +1 -1
  55. package/dist/downloads/disk.d.ts +18 -0
  56. package/dist/downloads/disk.js +32 -1
  57. package/dist/downloads/disk.js.map +1 -1
  58. package/dist/downloads/downloader.js +7 -4
  59. package/dist/downloads/downloader.js.map +1 -1
  60. package/dist/downloads/fs-retry.d.ts +27 -0
  61. package/dist/downloads/fs-retry.js +40 -0
  62. package/dist/downloads/fs-retry.js.map +1 -0
  63. package/dist/downloads/index.d.ts +1 -0
  64. package/dist/downloads/index.js +1 -0
  65. package/dist/downloads/index.js.map +1 -1
  66. package/dist/hardware/index.d.ts +1 -0
  67. package/dist/hardware/index.js +1 -0
  68. package/dist/hardware/index.js.map +1 -1
  69. package/dist/hardware/probe-common.d.ts +9 -1
  70. package/dist/hardware/probe-common.js.map +1 -1
  71. package/dist/hardware/probe-windows.d.ts +10 -2
  72. package/dist/hardware/probe-windows.js +65 -10
  73. package/dist/hardware/probe-windows.js.map +1 -1
  74. package/dist/hardware/probe.js +1 -1
  75. package/dist/hardware/probe.js.map +1 -1
  76. package/dist/hardware/service.d.ts +11 -0
  77. package/dist/hardware/service.js +31 -4
  78. package/dist/hardware/service.js.map +1 -1
  79. package/dist/hardware/windows-registry.d.ts +80 -0
  80. package/dist/hardware/windows-registry.js +197 -0
  81. package/dist/hardware/windows-registry.js.map +1 -0
  82. package/dist/runtime/llamacpp/args.d.ts +11 -0
  83. package/dist/runtime/llamacpp/args.js +28 -3
  84. package/dist/runtime/llamacpp/args.js.map +1 -1
  85. package/dist/runtime/llamacpp/devices.d.ts +11 -0
  86. package/dist/runtime/llamacpp/devices.js +22 -0
  87. package/dist/runtime/llamacpp/devices.js.map +1 -1
  88. package/dist/runtime/llamacpp/errors.d.ts +32 -2
  89. package/dist/runtime/llamacpp/errors.js +77 -4
  90. package/dist/runtime/llamacpp/errors.js.map +1 -1
  91. package/dist/runtime/llamacpp/index.d.ts +1 -0
  92. package/dist/runtime/llamacpp/index.js +1 -0
  93. package/dist/runtime/llamacpp/index.js.map +1 -1
  94. package/dist/runtime/llamacpp/load-failure.d.ts +52 -0
  95. package/dist/runtime/llamacpp/load-failure.js +105 -0
  96. package/dist/runtime/llamacpp/load-failure.js.map +1 -0
  97. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  98. package/dist/runtime/llamacpp/load-plan.js +34 -4
  99. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  100. package/dist/runtime/llamacpp/runtime.d.ts +24 -1
  101. package/dist/runtime/llamacpp/runtime.js +116 -27
  102. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  103. package/dist/runtime/shared/env.js +13 -15
  104. package/dist/runtime/shared/env.js.map +1 -1
  105. package/dist/telemetry/diagnostics.js +4 -0
  106. package/dist/telemetry/diagnostics.js.map +1 -1
  107. package/dist/version.d.ts +1 -1
  108. package/dist/version.js +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Put a Windows CUDA pack's runtime beside it — `cudart64_<N>`, `cublas64_<N>`, `cublasLt64_<N>` —
3
+ * from the best source this machine has, so a CUDA build never runs without it (and never quietly
4
+ * runs on the CPU). Sources, in order, until the whole set is in the pack's `build/bin`:
5
+ *
6
+ * 1. Already there.
7
+ * 2. Offline: another installed llama.cpp pack of any provider with the same CUDA major and at least
8
+ * the same minor, or the legacy `<data>/llamacpp/lib` folder.
9
+ * 3. Offline: a CUDA toolkit installed on the host (`CUDA_PATH*`, `Program Files\NVIDIA GPU Computing
10
+ * Toolkit\CUDA\vX.Y`), from `bin\x64` (CUDA 13) or `bin` (CUDA 12), same major, minor at least.
11
+ * 4. The pack's own ggml-org companion for its release tag (the caller passes it, with its sha256
12
+ * when the release list names it).
13
+ * 5. NVIDIA's own redistributable archives (`cuda_cudart` + `libcublas`, windows-x86_64) from the
14
+ * `redistrib_<X.Y.Z>.json` manifest of the same major and the nearest minor, verified by sha256.
15
+ * 6. The pinned ggml-org companions below, verified by GitHub's digests.
16
+ *
17
+ * An incomplete runtime is replaced as a whole from one source: existing cuBLAS and cuBLASLt may
18
+ * belong to different releases, so filling only the missing filenames is not enough. A failed copy is never reported as a successful repair; the caller decides how to
19
+ * handle a pack that remains unusable.
20
+ */
21
+ import { copyFile, mkdir, readdir, rm } from 'node:fs/promises';
22
+ import { join } from 'node:path';
23
+ import { AtomicCoreError } from '../../contracts/index.js';
24
+ import { DOWNLOAD_CANCELLED, extractArchive } from '../../downloads/index.js';
25
+ import { getCudaToolkitVersion, windowsCudaBackendArch } from '../catalog/index.js';
26
+ import { missingWindowsCudaRuntimeDlls, windowsCudaRuntimeDlls } from '../installed/index.js';
27
+ import { turboquantCudaToolkit } from '../turboquant.js';
28
+ import { parseRustU32 } from '../version.js';
29
+ export const NVIDIA_CUDA_REDIST_BASE = 'https://developer.download.nvidia.com/compute/cuda/redist';
30
+ /** ggml-org's Windows runtime companions with GitHub's digests; the fallback when nothing better answers. */
31
+ export const PINNED_WINDOWS_CUDA_RUNTIMES = [
32
+ {
33
+ toolkit: '12.4',
34
+ arch: 'x64',
35
+ url: 'https://github.com/ggml-org/llama.cpp/releases/download/b10205/cudart-llama-bin-win-cuda-12.4-x64.zip',
36
+ sha256: '8c79a9b226de4b3cacfd1f83d24f962d0773be79f1e7b75c6af4ded7e32ae1d6',
37
+ size: 391_443_627,
38
+ },
39
+ {
40
+ toolkit: '13.3',
41
+ arch: 'x64',
42
+ url: 'https://github.com/ggml-org/llama.cpp/releases/download/b10205/cudart-llama-bin-win-cuda-13.3-x64.zip',
43
+ sha256: '1462a050eb4c684921ba51dcc4cc488a036674c3e73e9945ee705b854808d03e',
44
+ size: 390_970_417,
45
+ },
46
+ {
47
+ toolkit: '13.4',
48
+ arch: 'x64',
49
+ url: 'https://github.com/ggml-org/llama.cpp/releases/download/b12019/cudart-llama-bin-win-cuda-13.4-x64.zip',
50
+ sha256: '738f8c251ac22b70c3ae6f83a10cf222725df0395246a2cf58f32bdb85fbe668',
51
+ size: 423_535_356,
52
+ },
53
+ {
54
+ toolkit: '13.4',
55
+ arch: 'arm64',
56
+ url: 'https://github.com/ggml-org/llama.cpp/releases/download/b12019/cudart-llama-bin-win-cuda-13.4-arm64.zip',
57
+ sha256: '642dcde8805b3e3165ca710a5443b3b4044b27d96bd3ee3132473988c9bcb774',
58
+ size: 153_262_407,
59
+ },
60
+ ];
61
+ function parseToolkit(text) {
62
+ const [major, minor] = (text ?? '').split('.');
63
+ const ma = parseRustU32(major ?? '');
64
+ const mi = parseRustU32(minor ?? '0');
65
+ return ma === undefined || mi === undefined ? undefined : { major: ma, minor: mi };
66
+ }
67
+ /** Same major, and at least the minor the pack was built with. */
68
+ function satisfies(candidate, wanted) {
69
+ return candidate !== undefined && candidate.major === wanted.major && candidate.minor >= wanted.minor;
70
+ }
71
+ export function cudaToolkitOfPack(provider, backend) {
72
+ return provider === 'llamacpp' ? turboquantCudaToolkit(backend) : getCudaToolkitVersion(backend);
73
+ }
74
+ function archOfPack(provider, backend) {
75
+ return provider === 'llamacpp' ? 'x64' : (windowsCudaBackendArch(backend) ?? 'x64');
76
+ }
77
+ const defaultList = (dir) => readdir(dir).catch(() => []);
78
+ /** Copy `names` from `fromDir` into `toDir` when it has every one of them (case-insensitive). */
79
+ async function copyAllFrom(fromDir, toDir, names, list) {
80
+ const byLower = new Map((await list(fromDir)).map((name) => [name.toLowerCase(), name]));
81
+ const sources = names.map((name) => byLower.get(name.toLowerCase()));
82
+ if (sources.some((s) => s === undefined))
83
+ return false;
84
+ await mkdir(toDir, { recursive: true });
85
+ for (const [i, name] of names.entries())
86
+ await copyFile(join(fromDir, sources[i]), join(toDir, name));
87
+ return true;
88
+ }
89
+ /** Installed packs and the legacy lib folder that may lend the runtime, best match first. */
90
+ async function localDonors(target, wanted, arch, deps, list) {
91
+ const scored = [];
92
+ for (const provider of ['llamacpp-upstream', 'llamacpp', 'atomic-prism']) {
93
+ const root = deps.layout.provider(provider).backendsDir;
94
+ for (const version of await list(root)) {
95
+ for (const backend of await list(join(root, version))) {
96
+ if (provider === target.provider && version === target.version && backend === target.backend)
97
+ continue;
98
+ const toolkit = parseToolkit(cudaToolkitOfPack(provider, backend));
99
+ if (!satisfies(toolkit, wanted) || archOfPack(provider, backend) !== arch)
100
+ continue;
101
+ scored.push({ dir: join(root, version, backend, 'build', 'bin'), minor: toolkit.minor });
102
+ }
103
+ }
104
+ }
105
+ // The nearest minor first: the runtime closest to what the pack was built with.
106
+ scored.sort((a, b) => a.minor - b.minor);
107
+ return [...scored.map((s) => s.dir), join(deps.layout.root, 'llamacpp', 'lib')];
108
+ }
109
+ /** Host CUDA toolkits' DLL folders, nearest minor first. Windows only: other hosts have none. */
110
+ async function hostToolkitDirs(wanted, env, list) {
111
+ const roots = new Map();
112
+ const versionIn = (text) => {
113
+ const m = /v(\d+)\.(\d+)/i.exec(text);
114
+ return m ? parseToolkit(`${m[1]}.${m[2]}`) : undefined;
115
+ };
116
+ for (const [key, value] of Object.entries(env)) {
117
+ if (!value)
118
+ continue;
119
+ const keyed = /^CUDA_PATH_V(\d+)_(\d+)$/i.exec(key);
120
+ if (keyed)
121
+ roots.set(value, parseToolkit(`${keyed[1]}.${keyed[2]}`));
122
+ else if (key.toUpperCase() === 'CUDA_PATH' && !roots.has(value))
123
+ roots.set(value, versionIn(value));
124
+ }
125
+ const programFiles = env['ProgramFiles'] ?? 'C:\\Program Files';
126
+ const toolkits = join(programFiles, 'NVIDIA GPU Computing Toolkit', 'CUDA');
127
+ for (const name of await list(toolkits)) {
128
+ const root = join(toolkits, name);
129
+ if (!roots.has(root))
130
+ roots.set(root, versionIn(name));
131
+ }
132
+ return [...roots.entries()]
133
+ .filter(([, toolkit]) => satisfies(toolkit, wanted))
134
+ .sort((a, b) => a[1].minor - b[1].minor)
135
+ .flatMap(([root]) => [join(root, 'bin', 'x64'), join(root, 'bin')]);
136
+ }
137
+ /** Download archives into a scratch folder, extract them, and copy `names` out if all are inside. */
138
+ async function fromArchives(items, binDir, names, deps) {
139
+ const scratch = join(deps.layout.provider('llamacpp-upstream').tmpDir, `cuda-runtime-${Date.now()}`);
140
+ await mkdir(scratch, { recursive: true });
141
+ try {
142
+ const download = items.map(({ name, ...item }) => ({
143
+ ...item,
144
+ save_path: join(scratch, name),
145
+ ...(deps.proxy ? { proxy: deps.proxy } : {}),
146
+ }));
147
+ await deps.downloader.download(deps.taskId, download);
148
+ const found = new Map();
149
+ for (const [i, item] of items.entries()) {
150
+ const out = join(scratch, `x${i}`);
151
+ await mkdir(out, { recursive: true });
152
+ await extractArchive(join(scratch, item.name), out);
153
+ const stack = [out];
154
+ while (stack.length > 0) {
155
+ const dir = stack.pop();
156
+ for (const entry of await readdir(dir, { withFileTypes: true })) {
157
+ const path = join(dir, entry.name);
158
+ if (entry.isDirectory())
159
+ stack.push(path);
160
+ else if (entry.name.toLowerCase().endsWith('.dll'))
161
+ found.set(entry.name.toLowerCase(), path);
162
+ }
163
+ }
164
+ }
165
+ const sources = names.map((name) => found.get(name.toLowerCase()));
166
+ if (sources.some((s) => s === undefined))
167
+ return false;
168
+ await mkdir(binDir, { recursive: true });
169
+ for (const [i, name] of names.entries())
170
+ await copyFile(sources[i], join(binDir, name));
171
+ return true;
172
+ }
173
+ finally {
174
+ await rm(scratch, { recursive: true, force: true }).catch(() => { });
175
+ }
176
+ }
177
+ /** NVIDIA's cudart + cuBLAS archives for the nearest release of the same major, or nothing. */
178
+ export async function nvidiaRedistArchives(wanted, fetchImpl) {
179
+ const index = await fetchImpl(`${NVIDIA_CUDA_REDIST_BASE}/`);
180
+ if (!index.ok)
181
+ return undefined;
182
+ const releases = [
183
+ ...new Set([...(await index.text()).matchAll(/redistrib_(\d+)\.(\d+)\.(\d+)\.json/g)].map((m) => m[0])),
184
+ ]
185
+ .map((file) => {
186
+ const [, ma, mi, pa] = /redistrib_(\d+)\.(\d+)\.(\d+)\.json/.exec(file);
187
+ return { file, major: Number(ma), minor: Number(mi), patch: Number(pa) };
188
+ })
189
+ .filter((r) => r.major === wanted.major && r.minor >= wanted.minor)
190
+ // The same minor's newest patch first, then the next minors up.
191
+ .sort((a, b) => a.minor - b.minor || b.patch - a.patch);
192
+ for (const release of releases) {
193
+ const res = await fetchImpl(`${NVIDIA_CUDA_REDIST_BASE}/${release.file}`);
194
+ if (!res.ok)
195
+ continue;
196
+ const manifest = (await res.json());
197
+ const cudart = manifest['cuda_cudart']?.['windows-x86_64'];
198
+ const cublas = manifest['libcublas']?.['windows-x86_64'];
199
+ if (!cudart?.relative_path || !cublas?.relative_path || !cudart.sha256 || !cublas.sha256)
200
+ continue;
201
+ return [cudart, cublas].map((entry) => ({
202
+ url: `${NVIDIA_CUDA_REDIST_BASE}/${entry.relative_path}`,
203
+ sha256: entry.sha256,
204
+ size: Number(entry.size),
205
+ name: entry.relative_path.split('/').pop(),
206
+ }));
207
+ }
208
+ return undefined;
209
+ }
210
+ /**
211
+ * Make `target` carry its whole CUDA runtime; answer where it came from. Not a CUDA pack, or not
212
+ * Windows: `'present'` with nothing done. Throws `ENGINE_BINARY_BROKEN` naming the missing DLLs and
213
+ * every source tried when none could supply them.
214
+ */
215
+ export async function deliverWindowsCudaRuntime(target, deps) {
216
+ const toolkitText = cudaToolkitOfPack(target.provider, target.backend);
217
+ const wanted = parseToolkit(toolkitText);
218
+ if (!toolkitText || !wanted)
219
+ return 'present';
220
+ const list = deps.listDir ?? defaultList;
221
+ const binDir = join(target.packDir, 'build', 'bin');
222
+ const arch = archOfPack(target.provider, target.backend);
223
+ const missing = () => missingWindowsCudaRuntimeDlls(binDir, toolkitText, list);
224
+ const tried = [];
225
+ const log = (source, from) => deps.log?.(`CUDA runtime for ${target.version}/${target.backend}: ${source} (${from})`);
226
+ let need = await missing();
227
+ if (need.length === 0)
228
+ return 'present';
229
+ const runtimeDlls = windowsCudaRuntimeDlls(toolkitText) ?? need;
230
+ for (const dir of await localDonors(target, wanted, arch, deps, list)) {
231
+ if (await copyAllFrom(dir, binDir, runtimeDlls, list)) {
232
+ log('installed-pack', dir);
233
+ return 'installed-pack';
234
+ }
235
+ }
236
+ tried.push('installed packs');
237
+ for (const dir of await hostToolkitDirs(wanted, deps.env ?? process.env, list)) {
238
+ if (await copyAllFrom(dir, binDir, runtimeDlls, list)) {
239
+ log('host-toolkit', dir);
240
+ return 'host-toolkit';
241
+ }
242
+ }
243
+ tried.push('CUDA toolkit on this computer');
244
+ const attempt = async (source, label, items) => {
245
+ try {
246
+ if (await fromArchives(items, binDir, runtimeDlls, deps)) {
247
+ log(source, label);
248
+ return true;
249
+ }
250
+ tried.push(`${label}: did not contain ${runtimeDlls.join(', ')}`);
251
+ }
252
+ catch (error) {
253
+ if (error instanceof Error && error.message === DOWNLOAD_CANCELLED)
254
+ throw error;
255
+ tried.push(`${label}: ${error instanceof Error ? error.message : String(error)}`);
256
+ }
257
+ return false;
258
+ };
259
+ const companion = deps.releaseCompanion;
260
+ if (companion) {
261
+ const name = companion.url.split('/').pop() || 'cudart.zip';
262
+ const item = {
263
+ url: companion.url,
264
+ name,
265
+ ...(companion.sha256 ? { sha256: companion.sha256 } : {}),
266
+ ...(companion.size ? { size: companion.size } : {}),
267
+ };
268
+ if (await attempt('release-companion', companion.url, [item]))
269
+ return 'release-companion';
270
+ }
271
+ if (deps.fetch && arch === 'x64') {
272
+ const archives = await nvidiaRedistArchives(wanted, deps.fetch).catch((error) => {
273
+ tried.push(`NVIDIA redist manifest: ${error instanceof Error ? error.message : String(error)}`);
274
+ return undefined;
275
+ });
276
+ if (archives && (await attempt('nvidia-redist', 'NVIDIA CUDA redistributables', archives)))
277
+ return 'nvidia-redist';
278
+ if (!archives)
279
+ tried.push('NVIDIA redist: no release for this CUDA version');
280
+ }
281
+ const pinned = PINNED_WINDOWS_CUDA_RUNTIMES.filter((p) => p.arch === arch && satisfies(parseToolkit(p.toolkit), wanted)).sort((a, b) => parseToolkit(a.toolkit).minor - parseToolkit(b.toolkit).minor);
282
+ for (const p of pinned) {
283
+ if (companion && companion.url === p.url)
284
+ continue;
285
+ const name = p.url.split('/').pop();
286
+ if (await attempt('pinned-companion', p.url, [{ url: p.url, name, sha256: p.sha256, size: p.size }]))
287
+ return 'pinned-companion';
288
+ }
289
+ need = await missing();
290
+ if (need.length === 0)
291
+ need = runtimeDlls;
292
+ throw new AtomicCoreError('ENGINE_BINARY_BROKEN', `The ${target.version}/${target.backend} backend is missing its CUDA runtime (${need.join(', ')}) and it could not be downloaded. Check the connection and install the backend again, or install the NVIDIA CUDA Toolkit ${toolkitText}.`, `tried: ${tried.join('; ')}`);
293
+ }
294
+ //# sourceMappingURL=cuda-runtime-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cuda-runtime-source.js","sourceRoot":"","sources":["../../../src/backend/install/cuda-runtime-source.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  /** Installing and updating backends, and resolving the installed backend a runtime runs on. */
2
2
  export * from './runtime-backend.js';
3
3
  export * from './service.js';
4
+ export * from './windows-launch-check.js';
5
+ export * from './cuda-guard.js';
6
+ export * from './cuda-runtime-source.js';
@@ -1,4 +1,7 @@
1
1
  /** Installing and updating backends, and resolving the installed backend a runtime runs on. */
2
2
  export * from './runtime-backend.js';
3
3
  export * from './service.js';
4
+ export * from './windows-launch-check.js';
5
+ export * from './cuda-guard.js';
6
+ export * from './cuda-runtime-source.js';
4
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backend/install/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backend/install/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA"}
@@ -3,13 +3,16 @@ import type { DataLayout } from '../../config/index.js';
3
3
  import type { RuntimeSettings } from '../../runtime/llamacpp/index.js';
4
4
  import type { SettingsStore } from '../../settings/index.js';
5
5
  import type { HardwareFactsSource } from '../../hardware/index.js';
6
+ import type { BadBackendEntry } from '../select/index.js';
6
7
  import type { RocmHostProbe } from '../turboquant.js';
7
8
  /** Provider settings plus the engine-level keys the load plan reads. */
8
9
  export declare function readRuntimeSettings(settings: SettingsStore, provider: LocalProviderId, layout: DataLayout, hardware: HardwareFactsSource): Promise<RuntimeSettings>;
9
10
  /**
10
- * The installed backend a load runs on: the configured pack when it is on disk, otherwise the best
11
- * compatible installed one. `repair` runs on the pack that will be used before it is returned — the
12
- * TurboQuant provider puts a missing CUDA runtime back there, as its extension did before every load.
11
+ * The installed backend a load runs on: the configured pack when it is on disk and has not failed on
12
+ * this machine, otherwise the best compatible installed one; a pack that failed here is still used
13
+ * when nothing else is installed. `repair` runs on the pack that will be used before it is returned —
14
+ * the TurboQuant provider puts a missing CUDA runtime back there, as its extension did before every
15
+ * load.
13
16
  */
14
17
  export declare function ensureBackend(layout: DataLayout, provider: LocalProviderId, backend: string, version: string, hardware: HardwareFactsSource, hostArch?: NodeJS.Architecture, repair?: (backend: string, version: string) => Promise<void>): Promise<{
15
18
  version: string;
@@ -18,5 +21,29 @@ export declare function ensureBackend(layout: DataLayout, provider: LocalProvide
18
21
  }>;
19
22
  /** Choose among installed packs using the hardware facts (probe or override), never directory order. */
20
23
  export declare function selectInstalledBackend(layout: DataLayout, provider: LocalProviderId, hardware: HardwareFactsSource, hostArch?: NodeJS.Architecture, probeRocm?: () => Promise<RocmHostProbe>): Promise<import("../installed/scan.js").DiscoveredBackendBinary | undefined>;
24
+ /** `<data>/atomic-core/bad-backends.json`: the llama.cpp packs that could not run on this machine. */
25
+ export declare function badBackendsPath(layout: DataLayout): string;
26
+ /** The records on disk; a missing or unreadable file is none. */
27
+ export declare function readBadBackends(layout: DataLayout): Promise<BadBackendEntry[]>;
28
+ /** Add or replace one record, written whole through a temporary file so a crash leaves the old one. */
29
+ export declare function rememberBadBackend(layout: DataLayout, entry: BadBackendEntry): Promise<void>;
30
+ /**
31
+ * The runtime's one-shot fallback (`LlamacppRuntimeOptions.backendFallback`): remember that `failed`
32
+ * could not run on this machine (`reason`, keyed by its GPU driver), then answer the next installed
33
+ * compatible pack down the fallback order — CUDA 13 → CUDA 12 → Vulkan → CPU — or nothing. A record
34
+ * that cannot be written does not stop the fallback; it is reported through `log`.
35
+ */
36
+ export declare function llamaBackendFallback(layout: DataLayout, provider: LocalProviderId, hardware: HardwareFactsSource, failed: {
37
+ version: string;
38
+ backend: string;
39
+ }, reason: string, options?: {
40
+ hostArch?: string;
41
+ probeRocm?: () => Promise<RocmHostProbe>;
42
+ now?: () => Date;
43
+ log?: (message: string) => void;
44
+ }): Promise<{
45
+ version: string;
46
+ backend: string;
47
+ } | undefined>;
21
48
  /** Node's `process.arch` in the Rust spelling the backend and CPU policies expect; the rule is `hardware/facts.ts`'s `rustArch`. */
22
49
  export declare function platformArch(arch: string): string;
@@ -1,11 +1,14 @@
1
1
  /** Resolve the installed backend a runtime may actually execute on this host. */
2
+ import { randomUUID } from 'node:crypto';
3
+ import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
4
+ import { dirname, join } from 'node:path';
2
5
  import { AtomicCoreError } from '../../contracts/index.js';
3
6
  import { isConcreteVersionBackend } from '../../runtime/llamacpp/index.js';
4
7
  import { canonicalProviderDefaults } from '../../settings/index.js';
5
8
  import { rustArch } from '../../hardware/index.js';
6
9
  import { prismTagBuild } from '../catalog/index.js';
7
10
  import { discoverBackendBinary, resolveBackendExe, scanInstalledBackends } from '../installed/index.js';
8
- import { determineBestBackend, determineBestPrismBackend, determinePrismSupportedBackends, determineSupportedBackends, filterBackendsBySupport, filterPrismBackendsBySupport, getPrismSupportedFeatures, getSupportedFeatures, } from '../select/index.js';
11
+ import { BAD_BACKENDS_FILE, determineBestBackend, determineBestPrismBackend, determinePrismSupportedBackends, determineSupportedBackends, filterBackendsBySupport, filterPrismBackendsBySupport, getPrismSupportedFeatures, getSupportedFeatures, gpuDriverKey, isBackendMarkedBad, nextFallbackBackend, parseBadBackends, serializeBadBackends, withBadBackend, } from '../select/index.js';
9
12
  import { determineBestTurboquantBackend, determineTurboquantSupportedBackends, filterTurboquantBackendsBySupport, getTurboquantSupportedFeatures, probeLinuxRocmHost, } from '../turboquant.js';
10
13
  /** Provider settings plus the engine-level keys the load plan reads. */
11
14
  export async function readRuntimeSettings(settings, provider, layout, hardware) {
@@ -28,21 +31,28 @@ export async function readRuntimeSettings(settings, provider, layout, hardware)
28
31
  };
29
32
  }
30
33
  /**
31
- * The installed backend a load runs on: the configured pack when it is on disk, otherwise the best
32
- * compatible installed one. `repair` runs on the pack that will be used before it is returned — the
33
- * TurboQuant provider puts a missing CUDA runtime back there, as its extension did before every load.
34
+ * The installed backend a load runs on: the configured pack when it is on disk and has not failed on
35
+ * this machine, otherwise the best compatible installed one; a pack that failed here is still used
36
+ * when nothing else is installed. `repair` runs on the pack that will be used before it is returned —
37
+ * the TurboQuant provider puts a missing CUDA runtime back there, as its extension did before every
38
+ * load.
34
39
  */
35
40
  export async function ensureBackend(layout, provider, backend, version, hardware, hostArch = process.arch, repair) {
36
41
  const exact = await resolveBackendExe(layout, provider, version, backend);
37
- if (exact) {
42
+ const skipExact = exact !== undefined && (await badBackendFilter(layout, provider, hardware))(backend, version);
43
+ if (exact && !skipExact) {
38
44
  await repair?.(backend, version);
39
45
  return { version, backend, exePath: exact };
40
46
  }
41
47
  const discovered = await selectInstalledBackend(layout, provider, hardware, hostArch);
42
- if (discovered) {
48
+ if (discovered && !(exact && discovered.path === exact)) {
43
49
  await repair?.(discovered.backend, discovered.version);
44
50
  return { version: discovered.version, backend: discovered.backend, exePath: discovered.path };
45
51
  }
52
+ if (exact) {
53
+ await repair?.(backend, version);
54
+ return { version, backend, exePath: exact };
55
+ }
46
56
  throw new AtomicCoreError('BINARY_NOT_FOUND', 'No llama.cpp backend is installed in this data folder.', `looked for ${version}/${backend} under ${layout.provider(provider).backendsDir}`);
47
57
  }
48
58
  /** Choose among installed packs using the hardware facts (probe or override), never directory order. */
@@ -50,46 +60,114 @@ export async function selectInstalledBackend(layout, provider, hardware, hostArc
50
60
  const installed = await scanInstalledBackends(layout, provider);
51
61
  if (installed.length === 0)
52
62
  return discoverBackendBinary(layout, provider);
63
+ const { compatible, gpus } = await compatibleBackends(installed, provider, hardware, hostArch, probeRocm);
64
+ // A pack that failed on this machine is passed over while another compatible one is installed.
65
+ const isBad = await badBackendFilter(layout, provider, hardware);
66
+ const usable = compatible.filter((pack) => !isBad(pack.backend, pack.version));
67
+ const pool = usable.length > 0 ? usable : compatible;
68
+ if (pool.length === 0)
69
+ return undefined;
70
+ const selected = provider === 'llamacpp'
71
+ ? determineBestTurboquantBackend(pool, gpus)
72
+ : provider === 'atomic-prism'
73
+ ? determineBestPrismBackend(pool, gpus)
74
+ : determineBestBackend(pool, gpus);
75
+ const [version, backend] = selected.split('/');
76
+ if (!version || !backend)
77
+ return undefined;
78
+ const path = await resolveBackendExe(layout, provider, version, backend);
79
+ return path ? { path, version_backend: selected, version, backend } : undefined;
80
+ }
81
+ /** The installed packs this host's hardware may run, by the provider's own matrix and ids. */
82
+ async function compatibleBackends(installed, provider, hardware, hostArch, probeRocm) {
53
83
  const facts = await hardware.facts();
54
84
  const osType = facts.osType;
55
85
  const arch = platformArch(hostArch);
56
86
  const gpus = facts.gpus;
57
87
  // Unknown flags read as none here: the feature gates only add tiers for flags that are present.
58
88
  const cpuExtensions = facts.cpuExtensions ?? [];
59
- let selected;
60
89
  if (provider === 'llamacpp') {
61
90
  // The fork's own matrix, ids and priorities: the upstream ones filter every TurboQuant pack out.
62
91
  const rocm = osType === 'linux' ? await probeRocm() : undefined;
63
92
  const features = getTurboquantSupportedFeatures(osType, cpuExtensions, gpus, rocm);
64
93
  const supported = determineTurboquantSupportedBackends(osType, arch, features);
65
- const compatible = filterTurboquantBackendsBySupport(installed, supported);
66
- if (compatible.length === 0)
67
- return undefined;
68
- selected = determineBestTurboquantBackend(compatible, gpus);
94
+ return { compatible: filterTurboquantBackendsBySupport(installed, supported), gpus };
69
95
  }
70
- else if (provider === 'atomic-prism') {
96
+ if (provider === 'atomic-prism') {
71
97
  const rocm = osType === 'linux' ? await probeRocm() : undefined;
72
98
  const features = getPrismSupportedFeatures(osType, cpuExtensions, gpus, rocm);
73
99
  // A pack under another release train's tag was not installed from the Prism manifest.
74
100
  const prismPacks = installed.filter((pack) => prismTagBuild(pack.version) !== null);
75
- const compatible = filterPrismBackendsBySupport(prismPacks, determinePrismSupportedBackends(osType, arch, features));
76
- if (compatible.length === 0)
77
- return undefined;
78
- selected = determineBestPrismBackend(compatible, gpus);
101
+ const supported = determinePrismSupportedBackends(osType, arch, features);
102
+ return { compatible: filterPrismBackendsBySupport(prismPacks, supported), gpus };
79
103
  }
80
- else {
81
- const features = getSupportedFeatures(osType, cpuExtensions, gpus);
82
- const supported = determineSupportedBackends(osType, arch, features);
83
- const compatible = filterBackendsBySupport(installed, supported, osType);
84
- if (compatible.length === 0)
85
- return undefined;
86
- selected = determineBestBackend(compatible, gpus);
104
+ const features = getSupportedFeatures(osType, cpuExtensions, gpus);
105
+ const supported = determineSupportedBackends(osType, arch, features);
106
+ return { compatible: filterBackendsBySupport(installed, supported, osType), gpus };
107
+ }
108
+ /** `<data>/atomic-core/bad-backends.json`: the llama.cpp packs that could not run on this machine. */
109
+ export function badBackendsPath(layout) {
110
+ return join(layout.core.dir, BAD_BACKENDS_FILE);
111
+ }
112
+ /** The records on disk; a missing or unreadable file is none. */
113
+ export async function readBadBackends(layout) {
114
+ const text = await readFile(badBackendsPath(layout), 'utf8').catch(() => '');
115
+ if (!text.trim())
116
+ return [];
117
+ try {
118
+ return parseBadBackends(JSON.parse(text));
87
119
  }
88
- const [version, backend] = selected.split('/');
89
- if (!version || !backend)
90
- return undefined;
91
- const path = await resolveBackendExe(layout, provider, version, backend);
92
- return path ? { path, version_backend: selected, version, backend } : undefined;
120
+ catch {
121
+ return [];
122
+ }
123
+ }
124
+ /** Add or replace one record, written whole through a temporary file so a crash leaves the old one. */
125
+ export async function rememberBadBackend(layout, entry) {
126
+ const path = badBackendsPath(layout);
127
+ const next = withBadBackend(await readBadBackends(layout), entry);
128
+ const temporary = `${path}.tmp-${randomUUID()}`;
129
+ await mkdir(dirname(path), { recursive: true });
130
+ try {
131
+ await writeFile(temporary, serializeBadBackends(next), 'utf8');
132
+ await rename(temporary, path);
133
+ }
134
+ catch (error) {
135
+ await rm(temporary, { force: true }).catch(() => { });
136
+ throw error;
137
+ }
138
+ }
139
+ /**
140
+ * Whether a backend of `provider` failed on this machine with its current GPU driver. The hardware is
141
+ * asked only when the file names a pack of this provider at all.
142
+ */
143
+ async function badBackendFilter(layout, provider, hardware) {
144
+ const entries = (await readBadBackends(layout)).filter((e) => e.provider === provider);
145
+ if (entries.length === 0)
146
+ return () => false;
147
+ const driver = gpuDriverKey((await hardware.facts()).gpus);
148
+ return (backend, version) => isBackendMarkedBad(entries, provider, backend, driver, version);
149
+ }
150
+ /**
151
+ * The runtime's one-shot fallback (`LlamacppRuntimeOptions.backendFallback`): remember that `failed`
152
+ * could not run on this machine (`reason`, keyed by its GPU driver), then answer the next installed
153
+ * compatible pack down the fallback order — CUDA 13 → CUDA 12 → Vulkan → CPU — or nothing. A record
154
+ * that cannot be written does not stop the fallback; it is reported through `log`.
155
+ */
156
+ export async function llamaBackendFallback(layout, provider, hardware, failed, reason, options = {}) {
157
+ const driver = gpuDriverKey((await hardware.facts()).gpus);
158
+ await rememberBadBackend(layout, {
159
+ provider,
160
+ backend: failed.backend,
161
+ driver,
162
+ reason,
163
+ version: failed.version,
164
+ at: (options.now ?? (() => new Date()))().toISOString(),
165
+ }).catch((error) => options.log?.(`could not remember ${failed.version}/${failed.backend} as unusable here: ${String(error)}`));
166
+ const installed = await scanInstalledBackends(layout, provider);
167
+ const { compatible } = await compatibleBackends(installed, provider, hardware, options.hostArch ?? process.arch, options.probeRocm ?? probeLinuxRocmHost);
168
+ const isBad = await badBackendFilter(layout, provider, hardware);
169
+ const next = nextFallbackBackend(failed, compatible, isBad);
170
+ return next ? { version: next.version, backend: next.backend } : undefined;
93
171
  }
94
172
  /** Node's `process.arch` in the Rust spelling the backend and CPU policies expect; the rule is `hardware/facts.ts`'s `rustArch`. */
95
173
  export function platformArch(arch) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-backend.js","sourceRoot":"","sources":["../../../src/backend/install/runtime-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-backend.js","sourceRoot":"","sources":["../../../src/backend/install/runtime-backend.ts"],"names":[],"mappings":"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"}