@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,173 @@
1
+ /**
2
+ * The launch gate of a llama.cpp pack on Windows: `llama-server.exe --version`, run from the staging
3
+ * directory with the environment a model load gives the server, before the pack replaces anything.
4
+ *
5
+ * A Windows pack that cannot start — a DLL missing from the archive, a `ggml-*.dll` antivirus
6
+ * quarantined while it was being unpacked, a build for another CPU — used to install without
7
+ * complaint and die at the first model load with nothing on stderr, because the loader ends the
8
+ * process before `main` prints anything. Here that exit code is read instead, the pack is refused
9
+ * with a code the app can name, and the staging directory is removed, so the next install starts
10
+ * clean. A check that runs out of time proves nothing (a first run of a 1 GB CUDA tree waits on the
11
+ * scanner): the pack is then kept, as before this gate existed.
12
+ */
13
+ import { execFile } from 'node:child_process';
14
+ import { join } from 'node:path';
15
+ import { promisify } from 'node:util';
16
+ import { AtomicCoreError, withLoadDiag } from '../../contracts/index.js';
17
+ import { isTransientFsError } from '../../downloads/index.js';
18
+ import { buildProcessEnv, discoverCudaPaths, nodeCudaProbeEnv } from '../../runtime/shared/index.js';
19
+ /** Long enough for a scanner to look at an unseen tree, short enough not to stall an install on a hang. */
20
+ export const WINDOWS_LAUNCH_CHECK_TIMEOUT_MS = 60_000;
21
+ /** A scanner can hold a just-written executable for a moment, which surfaces as a spawn error. */
22
+ export const WINDOWS_LAUNCH_SPAWN_ATTEMPTS = 3;
23
+ export const WINDOWS_LAUNCH_SPAWN_RETRY_MS = 1_000;
24
+ /** NTSTATUS codes the Windows loader ends a process with before `main`: the build cannot start. */
25
+ const LOADER_FAILURES = new Map([
26
+ [0xc000_0135, 'STATUS_DLL_NOT_FOUND'],
27
+ [0xc000_0138, 'STATUS_ORDINAL_NOT_FOUND'],
28
+ [0xc000_0139, 'STATUS_ENTRYPOINT_NOT_FOUND'],
29
+ [0xc000_007b, 'STATUS_INVALID_IMAGE_FORMAT'],
30
+ [0xc000_0142, 'STATUS_DLL_INIT_FAILED'],
31
+ ]);
32
+ /** `STATUS_ILLEGAL_INSTRUCTION`: the build uses an instruction this CPU does not have. */
33
+ const ILLEGAL_INSTRUCTION = 0xc000_001d;
34
+ /** Engine output kept in `details`; the app keeps only the last ~2 KB of them. */
35
+ const OUTPUT_TAIL_CHARS = 800;
36
+ /** A Windows exit code the way the load-diag line spells it: `0xC0000135`, `0x1`. */
37
+ export function windowsExitCodeHex(code) {
38
+ return `0x${(code >>> 0).toString(16).toUpperCase()}`;
39
+ }
40
+ function tail(text) {
41
+ const trimmed = text.trim();
42
+ return trimmed.length > OUTPUT_TAIL_CHARS ? `…${trimmed.slice(-OUTPUT_TAIL_CHARS)}` : trimmed;
43
+ }
44
+ /**
45
+ * The verdict on one finished run: nothing when the pack started (or the run timed out, which proves
46
+ * nothing), otherwise the error to fail the install with. Its `details` end with the load-diag line.
47
+ */
48
+ export function windowsLaunchVerdict(outcome, pack) {
49
+ if (outcome.timedOut)
50
+ return undefined;
51
+ if (!outcome.spawnError && outcome.code === 0 && outcome.signal === null)
52
+ return undefined;
53
+ const id = `${pack.version}/${pack.backend}`;
54
+ const output = tail(`${outcome.stderr}\n${outcome.stdout}`);
55
+ const diag = {
56
+ stage: 'spawn',
57
+ backend: pack.backend,
58
+ build: pack.version,
59
+ ...(output === '' ? { empty_stderr: true } : {}),
60
+ };
61
+ let code = 'ENGINE_BINARY_BROKEN';
62
+ let message;
63
+ let status;
64
+ let exitCode = null;
65
+ if (outcome.spawnError) {
66
+ message = `Windows would not start the downloaded ${id} backend (${outcome.spawnError.code}). Install it again; the current backend stays.`;
67
+ status = `llama-server.exe could not be started: ${outcome.spawnError.message}`;
68
+ }
69
+ else if (outcome.code !== null) {
70
+ exitCode = outcome.code >>> 0;
71
+ const hex = windowsExitCodeHex(exitCode);
72
+ diag.exit_code = hex;
73
+ const loader = LOADER_FAILURES.get(exitCode);
74
+ if (exitCode === ILLEGAL_INSTRUCTION) {
75
+ code = 'CPU_INSTRUCTION_UNSUPPORTED';
76
+ message = `The downloaded ${id} backend uses a CPU instruction this processor does not have. Pick another build; the current backend stays.`;
77
+ status = `llama-server.exe --version: exit code ${hex} (STATUS_ILLEGAL_INSTRUCTION)`;
78
+ }
79
+ else if (loader) {
80
+ message = `Windows could not start the downloaded ${id} backend: a library it needs is missing or was blocked. Install it again; the current backend stays.`;
81
+ status = `llama-server.exe --version: exit code ${hex} (${loader})`;
82
+ }
83
+ else {
84
+ message = `The downloaded ${id} backend failed its launch check. Install it again; the current backend stays.`;
85
+ status = `llama-server.exe --version: exit code ${hex}`;
86
+ }
87
+ }
88
+ else {
89
+ diag.signal = String(outcome.signal);
90
+ message = `The downloaded ${id} backend failed its launch check. Install it again; the current backend stays.`;
91
+ status = `llama-server.exe --version: ended on ${String(outcome.signal)}`;
92
+ }
93
+ return new AtomicCoreError(code, message, withLoadDiag(output ? `${status}\n${output}` : status, diag), {
94
+ diagnostic: {
95
+ component: 'backend',
96
+ operation: 'install',
97
+ stage: 'spawn',
98
+ exitCode,
99
+ engineVersion: pack.version,
100
+ },
101
+ });
102
+ }
103
+ const execFileAsync = promisify(execFile);
104
+ const defaultExec = async (file, args, options) => {
105
+ const { stdout, stderr } = await execFileAsync(file, args, { ...options, encoding: 'utf8' });
106
+ return { stdout, stderr };
107
+ };
108
+ const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
109
+ /** One run, with `execFile`'s rejection read into an outcome rather than thrown. */
110
+ export async function runLaunch(exec, file, options) {
111
+ try {
112
+ const { stdout, stderr } = await exec(file, ['--version'], options);
113
+ return { code: 0, signal: null, stdout, stderr, timedOut: false };
114
+ }
115
+ catch (error) {
116
+ const e = error;
117
+ const stdout = String(e.stdout ?? '');
118
+ const stderr = String(e.stderr ?? '');
119
+ if (e.killed === true)
120
+ return { code: null, signal: String(e.signal ?? 'SIGTERM'), stdout, stderr, timedOut: true };
121
+ if (typeof e.code === 'number')
122
+ return { code: e.code, signal: null, stdout, stderr, timedOut: false };
123
+ if (typeof e.signal === 'string')
124
+ return { code: null, signal: e.signal, stdout, stderr, timedOut: false };
125
+ return {
126
+ code: null,
127
+ signal: null,
128
+ stdout,
129
+ stderr,
130
+ timedOut: false,
131
+ spawnError: {
132
+ code: typeof e.code === 'string' ? e.code : 'UNKNOWN',
133
+ message: error instanceof Error ? error.message : String(error),
134
+ },
135
+ };
136
+ }
137
+ }
138
+ /**
139
+ * Run the staged pack's `llama-server.exe --version` with the PATH a load gives it (its own
140
+ * `build/bin`, then any CUDA toolkit on the host), and throw `ENGINE_BINARY_BROKEN` or
141
+ * `CPU_INSTRUCTION_UNSUPPORTED` when it cannot start. A spawn refused with a held-handle code is
142
+ * retried; a run that times out is logged and accepted.
143
+ */
144
+ export async function verifyWindowsBackendBinary(staging, version, backend, deps = {}) {
145
+ const bin = join(staging, 'build', 'bin');
146
+ const baseEnv = deps.env ?? process.env;
147
+ const { env, cwd } = buildProcessEnv({
148
+ platform: 'win32',
149
+ baseEnv,
150
+ exeDir: bin,
151
+ cuda: discoverCudaPaths(nodeCudaProbeEnv('win32', baseEnv)),
152
+ userEnv: {},
153
+ });
154
+ const exec = deps.exec ?? defaultExec;
155
+ const sleep = deps.sleep ?? defaultSleep;
156
+ const attempts = deps.spawnAttempts ?? WINDOWS_LAUNCH_SPAWN_ATTEMPTS;
157
+ const timeout = deps.timeoutMs ?? WINDOWS_LAUNCH_CHECK_TIMEOUT_MS;
158
+ let outcome;
159
+ for (let attempt = 1;; attempt++) {
160
+ outcome = await runLaunch(exec, join(bin, 'llama-server.exe'), { env, cwd, timeout, windowsHide: true });
161
+ if (!outcome.spawnError || attempt >= attempts || !isTransientFsError(outcome.spawnError))
162
+ break;
163
+ await sleep(deps.spawnRetryMs ?? WINDOWS_LAUNCH_SPAWN_RETRY_MS);
164
+ }
165
+ if (outcome.timedOut) {
166
+ deps.log?.(`${version}/${backend}: llama-server.exe --version did not answer in ${timeout} ms; installing it unverified`);
167
+ return;
168
+ }
169
+ const verdict = windowsLaunchVerdict(outcome, { version, backend });
170
+ if (verdict)
171
+ throw verdict;
172
+ }
173
+ //# sourceMappingURL=windows-launch-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-launch-check.js","sourceRoot":"","sources":["../../../src/backend/install/windows-launch-check.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,19 @@ export declare function mergeBackendOptions(tiers: readonly (readonly BackendOpt
74
74
  * any other OS or major.
75
75
  */
76
76
  export declare function cudaRuntimeLibName(osType: string, version: string): string | null;
77
+ /**
78
+ * Every DLL a Windows `ggml-cuda.dll` imports from the CUDA runtime companion, by CUDA major. Without
79
+ * any one of them the CUDA backend does not load and llama.cpp quietly runs on the CPU (or dies with
80
+ * an empty stderr), so a pack counts as having its runtime only when all of them are beside it.
81
+ * Matches the contents of ggml-org's `cudart-llama-bin-win-cuda-{12.4,13.3}-x64.zip` (b10205):
82
+ * `cudart64_<N>.dll`, `cublas64_<N>.dll`, `cublasLt64_<N>.dll`. `null` for another OS or major.
83
+ */
84
+ export declare function windowsCudaRuntimeDlls(version: string): string[] | null;
85
+ /**
86
+ * The CUDA runtime DLLs missing from `binDir` (compared case-insensitively, as Windows does); `[]`
87
+ * when all are there or the toolkit has no Windows runtime set. A missing directory misses them all.
88
+ */
89
+ export declare function missingWindowsCudaRuntimeDlls(binDir: string, toolkit: string, list?: (dir: string) => Promise<string[]>): Promise<string[]>;
77
90
  export interface CudaLibFs {
78
91
  exists: (path: string) => Promise<boolean>;
79
92
  mkdir: (path: string) => Promise<void>;
@@ -9,6 +9,7 @@
9
9
  * legacy flat `<backend>/llama-server`. Directory scanning, `rm` and `stat` are phase 1
10
10
  * (`store.ts`); this file only turns scan results into decisions and joins paths.
11
11
  */
12
+ import { readdir } from 'node:fs/promises';
12
13
  import { join } from 'node:path';
13
14
  import { llamaServerExeName } from '../../config/index.js';
14
15
  import { AtomicCoreError } from '../../contracts/index.js';
@@ -177,6 +178,37 @@ export function cudaRuntimeLibName(osType, version) {
177
178
  return null;
178
179
  }
179
180
  }
181
+ /**
182
+ * Every DLL a Windows `ggml-cuda.dll` imports from the CUDA runtime companion, by CUDA major. Without
183
+ * any one of them the CUDA backend does not load and llama.cpp quietly runs on the CPU (or dies with
184
+ * an empty stderr), so a pack counts as having its runtime only when all of them are beside it.
185
+ * Matches the contents of ggml-org's `cudart-llama-bin-win-cuda-{12.4,13.3}-x64.zip` (b10205):
186
+ * `cudart64_<N>.dll`, `cublas64_<N>.dll`, `cublasLt64_<N>.dll`. `null` for another OS or major.
187
+ */
188
+ export function windowsCudaRuntimeDlls(version) {
189
+ const major = parseRustU32(version.split('.')[0] ?? '') ?? 0;
190
+ switch (major) {
191
+ case 11:
192
+ return ['cudart64_110.dll', 'cublas64_11.dll', 'cublasLt64_11.dll'];
193
+ case 12:
194
+ return ['cudart64_12.dll', 'cublas64_12.dll', 'cublasLt64_12.dll'];
195
+ case 13:
196
+ return ['cudart64_13.dll', 'cublas64_13.dll', 'cublasLt64_13.dll'];
197
+ default:
198
+ return null;
199
+ }
200
+ }
201
+ /**
202
+ * The CUDA runtime DLLs missing from `binDir` (compared case-insensitively, as Windows does); `[]`
203
+ * when all are there or the toolkit has no Windows runtime set. A missing directory misses them all.
204
+ */
205
+ export async function missingWindowsCudaRuntimeDlls(binDir, toolkit, list = (dir) => readdir(dir).catch(() => [])) {
206
+ const required = windowsCudaRuntimeDlls(toolkit);
207
+ if (!required)
208
+ return [];
209
+ const present = new Set((await list(binDir)).map((name) => name.toLowerCase()));
210
+ return required.filter((name) => !present.has(name.toLowerCase()));
211
+ }
180
212
  /**
181
213
  * Rust `is_cuda_installed`: the runtime library is present at `<backendDir>/build/bin/<lib>`, or it
182
214
  * sits at the legacy `<data>/llamacpp/lib/<lib>` and is moved into place (creating `build/bin`;
@@ -1 +1 @@
1
- {"version":3,"file":"installed.js","sourceRoot":"","sources":["../../../src/backend/installed/installed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installed.js","sourceRoot":"","sources":["../../../src/backend/installed/installed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * llama.cpp packs that could not run on this machine, and the one-shot fallback order a failed load
3
+ * walks (CUDA 13 → CUDA 12 / ROCm → Vulkan / OpenCL → CPU). Pure: the record list, the GPU facts and
4
+ * the installed packs are parameters; `install/runtime-backend.ts` reads and writes the file.
5
+ *
6
+ * GPU incompatibility is keyed by provider, backend and driver. Binary and unexplained crash
7
+ * failures also match the release tag, so a fixed build can restore acceleration without a driver update.
8
+ */
9
+ import type { BackendVersion, GpuProbeInfo } from '../types.js';
10
+ /** `<data>/atomic-core/bad-backends.json`. */
11
+ export declare const BAD_BACKENDS_FILE = "bad-backends.json";
12
+ export declare const BAD_BACKENDS_SCHEMA_VERSION = 1;
13
+ export interface BadBackendEntry {
14
+ provider: string;
15
+ /** The backend directory name, e.g. `win-cuda-13.3-x64`. */
16
+ backend: string;
17
+ /** `gpuDriverKey` of the machine when the pack failed. */
18
+ driver: string;
19
+ /** The error code that marked it (`GPU_BACKEND_INCOMPATIBLE`, …). */
20
+ reason: string;
21
+ /** The release tag that failed; part of the key unless the GPU is incompatible. */
22
+ version: string;
23
+ /** ISO time it was marked. */
24
+ at: string;
25
+ }
26
+ /**
27
+ * The driver a record is keyed by: the NVIDIA driver when there is an NVIDIA GPU (CUDA builds are
28
+ * what fail), otherwise every GPU's driver, so an AMD or Intel update clears a Vulkan record too.
29
+ * `''` on a machine without a GPU.
30
+ */
31
+ export declare function gpuDriverKey(gpus: readonly GpuProbeInfo[]): string;
32
+ /** The records of a `bad-backends.json` document; anything malformed is dropped, never thrown. */
33
+ export declare function parseBadBackends(raw: unknown): BadBackendEntry[];
34
+ /**
35
+ * How long a record lasts when its cause can go away without a driver update: a pack Windows could
36
+ * not load (`ENGINE_BINARY_BROKEN`: a DLL an antivirus quarantined, a VC++ runtime installed later)
37
+ * or one that died before printing anything. A card that cannot run the build at all
38
+ * (`GPU_BACKEND_INCOMPATIBLE`, e.g. CUDA 13 on Turing before R616) stays recorded until the driver
39
+ * changes.
40
+ */
41
+ export declare const TRANSIENT_BAD_BACKEND_TTL_MS: number;
42
+ /** Whether a record still applies at `now`: driver-bound ones always, others for the TTL. */
43
+ export declare function isBadBackendEntryLive(entry: BadBackendEntry, now?: number): boolean;
44
+ /**
45
+ * Whether `backend` of `provider` (release `version`) failed on this machine with the driver it has now,
46
+ * and still counts: a GPU incompatibility for any release until the driver changes, any other cause for
47
+ * that release only and for `TRANSIENT_BAD_BACKEND_TTL_MS`.
48
+ */
49
+ export declare function isBackendMarkedBad(entries: readonly BadBackendEntry[], provider: string, backend: string, driver: string, version: string, now?: number): boolean;
50
+ /** Keep failed releases distinct; a GPU incompatibility supersedes them, and a new driver clears them. */
51
+ export declare function withBadBackend(entries: readonly BadBackendEntry[], entry: BadBackendEntry): BadBackendEntry[];
52
+ /** The document `bad-backends.json` holds. */
53
+ export declare function serializeBadBackends(entries: readonly BadBackendEntry[]): string;
54
+ /**
55
+ * Where a backend sits in the fallback order, lower is tried first: CUDA 13 (0), CUDA 12 / 11 and
56
+ * ROCm / HIP (1), Vulkan / OpenCL / SYCL (2), a CPU build (3). `undefined` for an id that says neither
57
+ * (Metal, a hand-named pack): it is never a fallback target and never falls back.
58
+ */
59
+ export declare function backendFallbackRank(backend: string): number | undefined;
60
+ /**
61
+ * The pack a load that failed on `failed` tries next: the first further down the fallback order,
62
+ * the same release tag first, then in the order `candidates` came in (callers pass them newest
63
+ * first). Never `failed` itself or a pack `skip` rules out; `undefined` when nothing is left.
64
+ */
65
+ export declare function nextFallbackBackend(failed: {
66
+ version: string;
67
+ backend: string;
68
+ }, candidates: readonly BackendVersion[], skip?: (backend: string, version: string) => boolean): BackendVersion | undefined;
@@ -0,0 +1,136 @@
1
+ /**
2
+ * llama.cpp packs that could not run on this machine, and the one-shot fallback order a failed load
3
+ * walks (CUDA 13 → CUDA 12 / ROCm → Vulkan / OpenCL → CPU). Pure: the record list, the GPU facts and
4
+ * the installed packs are parameters; `install/runtime-backend.ts` reads and writes the file.
5
+ *
6
+ * GPU incompatibility is keyed by provider, backend and driver. Binary and unexplained crash
7
+ * failures also match the release tag, so a fixed build can restore acceleration without a driver update.
8
+ */
9
+ import { stripBom } from '../version.js';
10
+ /** `<data>/atomic-core/bad-backends.json`. */
11
+ export const BAD_BACKENDS_FILE = 'bad-backends.json';
12
+ export const BAD_BACKENDS_SCHEMA_VERSION = 1;
13
+ /**
14
+ * The driver a record is keyed by: the NVIDIA driver when there is an NVIDIA GPU (CUDA builds are
15
+ * what fail), otherwise every GPU's driver, so an AMD or Intel update clears a Vulkan record too.
16
+ * `''` on a machine without a GPU.
17
+ */
18
+ export function gpuDriverKey(gpus) {
19
+ const driverOf = (gpu) => (gpu.driver_version ?? '').trim();
20
+ const nvidia = gpus.filter((gpu) => gpu.nvidia_info || gpu.vendor === 'NVIDIA').map(driverOf);
21
+ const drivers = (nvidia.length > 0 ? nvidia : gpus.map(driverOf)).filter((d) => d !== '');
22
+ return [...new Set(drivers)].join(',');
23
+ }
24
+ /** The records of a `bad-backends.json` document; anything malformed is dropped, never thrown. */
25
+ export function parseBadBackends(raw) {
26
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
27
+ return [];
28
+ const entries = raw['entries'];
29
+ if (!Array.isArray(entries))
30
+ return [];
31
+ const out = [];
32
+ for (const value of entries) {
33
+ if (!value || typeof value !== 'object')
34
+ continue;
35
+ const e = value;
36
+ const text = (key) => (typeof e[key] === 'string' ? e[key] : undefined);
37
+ const provider = text('provider');
38
+ const backend = text('backend');
39
+ const driver = text('driver');
40
+ if (!provider || !backend || driver === undefined)
41
+ continue;
42
+ out.push({
43
+ provider,
44
+ backend: stripBom(backend),
45
+ driver,
46
+ reason: text('reason') ?? '',
47
+ version: text('version') ?? '',
48
+ at: text('at') ?? '',
49
+ });
50
+ }
51
+ return out;
52
+ }
53
+ const sameKey = (e, provider, backend, driver) => e.provider === provider && e.backend === stripBom(backend) && e.driver === driver;
54
+ /**
55
+ * How long a record lasts when its cause can go away without a driver update: a pack Windows could
56
+ * not load (`ENGINE_BINARY_BROKEN`: a DLL an antivirus quarantined, a VC++ runtime installed later)
57
+ * or one that died before printing anything. A card that cannot run the build at all
58
+ * (`GPU_BACKEND_INCOMPATIBLE`, e.g. CUDA 13 on Turing before R616) stays recorded until the driver
59
+ * changes.
60
+ */
61
+ export const TRANSIENT_BAD_BACKEND_TTL_MS = 7 * 24 * 60 * 60 * 1000;
62
+ /** Reasons that only a driver update clears; any other record lapses after the TTL. */
63
+ const DRIVER_BOUND_REASONS = new Set(['GPU_BACKEND_INCOMPATIBLE']);
64
+ /** Whether a record still applies at `now`: driver-bound ones always, others for the TTL. */
65
+ export function isBadBackendEntryLive(entry, now = Date.now()) {
66
+ if (DRIVER_BOUND_REASONS.has(entry.reason))
67
+ return true;
68
+ const at = Date.parse(entry.at);
69
+ // A record without a readable time cannot be aged; keep it, as before the TTL existed.
70
+ if (Number.isNaN(at))
71
+ return true;
72
+ return now - at < TRANSIENT_BAD_BACKEND_TTL_MS;
73
+ }
74
+ /**
75
+ * Whether `backend` of `provider` (release `version`) failed on this machine with the driver it has now,
76
+ * and still counts: a GPU incompatibility for any release until the driver changes, any other cause for
77
+ * that release only and for `TRANSIENT_BAD_BACKEND_TTL_MS`.
78
+ */
79
+ export function isBackendMarkedBad(entries, provider, backend, driver, version, now = Date.now()) {
80
+ return entries.some((e) => sameKey(e, provider, backend, driver) &&
81
+ (e.reason === 'GPU_BACKEND_INCOMPATIBLE' || stripBom(e.version) === stripBom(version)) &&
82
+ isBadBackendEntryLive(e, now));
83
+ }
84
+ /** Keep failed releases distinct; a GPU incompatibility supersedes them, and a new driver clears them. */
85
+ export function withBadBackend(entries, entry) {
86
+ const kept = entries.filter((e) => {
87
+ if (e.provider !== entry.provider || e.backend !== stripBom(entry.backend))
88
+ return true;
89
+ if (e.driver !== entry.driver || entry.reason === 'GPU_BACKEND_INCOMPATIBLE')
90
+ return false;
91
+ return e.reason === 'GPU_BACKEND_INCOMPATIBLE' || stripBom(e.version) !== stripBom(entry.version);
92
+ });
93
+ return [...kept, { ...entry, backend: stripBom(entry.backend) }];
94
+ }
95
+ /** The document `bad-backends.json` holds. */
96
+ export function serializeBadBackends(entries) {
97
+ return `${JSON.stringify({ schema_version: BAD_BACKENDS_SCHEMA_VERSION, entries }, null, 2)}\n`;
98
+ }
99
+ /**
100
+ * Where a backend sits in the fallback order, lower is tried first: CUDA 13 (0), CUDA 12 / 11 and
101
+ * ROCm / HIP (1), Vulkan / OpenCL / SYCL (2), a CPU build (3). `undefined` for an id that says neither
102
+ * (Metal, a hand-named pack): it is never a fallback target and never falls back.
103
+ */
104
+ export function backendFallbackRank(backend) {
105
+ const id = stripBom(backend).toLowerCase();
106
+ if (/cuda-(cu)?13/.test(id))
107
+ return 0;
108
+ if (/cuda-(cu)?1[12]|rocm|(^|-)hip(-|$)/.test(id))
109
+ return 1;
110
+ if (/vulkan|opencl|sycl/.test(id))
111
+ return 2;
112
+ if (/(^|-)cpu(-|$)|(^|-)(no)?avx(2|512)?(-|$)|common_cpus|^(linux|win)-(x64|x86_64|arm64|aarch64)$/.test(id))
113
+ return 3;
114
+ return undefined;
115
+ }
116
+ /**
117
+ * The pack a load that failed on `failed` tries next: the first further down the fallback order,
118
+ * the same release tag first, then in the order `candidates` came in (callers pass them newest
119
+ * first). Never `failed` itself or a pack `skip` rules out; `undefined` when nothing is left.
120
+ */
121
+ export function nextFallbackBackend(failed, candidates, skip = () => false) {
122
+ const from = backendFallbackRank(failed.backend);
123
+ if (from === undefined)
124
+ return undefined;
125
+ const failedBackend = stripBom(failed.backend);
126
+ const ranked = candidates
127
+ .map((candidate, index) => ({ candidate, index, rank: backendFallbackRank(candidate.backend) }))
128
+ .filter((c) => c.rank !== undefined &&
129
+ c.rank > from &&
130
+ stripBom(c.candidate.backend) !== failedBackend &&
131
+ !skip(c.candidate.backend, c.candidate.version));
132
+ const sameTag = (c) => (stripBom(c.version) === stripBom(failed.version) ? 0 : 1);
133
+ ranked.sort((a, b) => a.rank - b.rank || sameTag(a.candidate) - sameTag(b.candidate) || a.index - b.index);
134
+ return ranked[0]?.candidate;
135
+ }
136
+ //# sourceMappingURL=bad-backends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bad-backends.js","sourceRoot":"","sources":["../../../src/backend/select/bad-backends.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,22 @@ export declare const MIN_CUDA13_COMPUTE_CAPABILITY: readonly [number, number];
40
40
  export declare function parseComputeCapability(raw: string): [number, number] | undefined;
41
41
  /** Tuple comparison against the floor, so `10.0 ≥ 7.5` holds (a string compare gets Blackwell wrong). */
42
42
  export declare function gpuMeetsCuda13ArchFloor(computeCapability: string | undefined): boolean;
43
+ /**
44
+ * Below this compute capability (Turing and older) a Windows CUDA 13 build also needs
45
+ * `WINDOWS_PRE_AMPERE_CUDA13_MIN_DRIVER`. The 13.x builds carry Turing only as PTX, and drivers before
46
+ * R616 refuse that toolchain at load ("the provided PTX was compiled with an unsupported toolchain",
47
+ * in `ggml_cuda_kernel_can_use_pdl`). Windows telemetry over 14 days, CC 7.5 on CUDA 13.x: drivers
48
+ * 581–597 crashed 45 users and loaded 12, 610 crashed 46 and loaded 30, 616/617/621 crashed none of
49
+ * 128. CUDA 12.4 loads on the same cards.
50
+ */
51
+ export declare const CUDA13_DRIVER_GATED_BELOW_COMPUTE_CAPABILITY: readonly [number, number];
52
+ export declare const WINDOWS_PRE_AMPERE_CUDA13_MIN_DRIVER = "616.00";
53
+ /**
54
+ * Whether this card may run a CUDA 13 build with this driver, beyond the system-wide driver floor and
55
+ * the architecture floor. Windows only (Linux has no such data); an unreadable compute capability is
56
+ * not gated, as in `gpuMeetsCuda13ArchFloor`.
57
+ */
58
+ export declare function gpuMeetsCuda13DriverForArch(osType: string, computeCapability: string | undefined, driver: string): boolean;
43
59
  export declare function isAmdGpu(gpu: GpuProbeInfo): boolean;
44
60
  /** Snapdragon's Adreno, by the probe's vendor or, when the vendor id was not recognised, its name. */
45
61
  export declare function isAdrenoGpu(gpu: GpuProbeInfo): boolean;
@@ -53,7 +69,8 @@ export declare function rocmSupportedWindows(hasAmdGpu: boolean, deviceIds: read
53
69
  /**
54
70
  * Which CPU/GPU tiers this host can run. The driver is system-wide, so *any* NVIDIA GPU over a floor
55
71
  * enables that CUDA tier; architecture is per-card and must hold for *every* card (llama.cpp
56
- * offloads across all visible devices), so one sub-7.5 GPU vetoes CUDA 13 for the whole host.
72
+ * offloads across all visible devices), so one sub-7.5 GPU vetoes CUDA 13 for the whole host, and on
73
+ * Windows so does one pre-Ampere GPU on a driver before R616 (`gpuMeetsCuda13DriverForArch`).
57
74
  * Vulkan is on when any GPU carries `vulkan_info`; ROCm only on Windows via the PCI table; OpenCL
58
75
  * only on Windows with an Adreno GPU (the only OpenCL build ggml-org ships is for Adreno). On any OS
59
76
  * other than linux/windows only the CPU flags are set (no CUDA, no Vulkan — macOS has Metal).
@@ -51,6 +51,31 @@ export function gpuMeetsCuda13ArchFloor(computeCapability) {
51
51
  const [floorMajor, floorMinor] = MIN_CUDA13_COMPUTE_CAPABILITY;
52
52
  return cc[0] > floorMajor || (cc[0] === floorMajor && cc[1] >= floorMinor);
53
53
  }
54
+ /**
55
+ * Below this compute capability (Turing and older) a Windows CUDA 13 build also needs
56
+ * `WINDOWS_PRE_AMPERE_CUDA13_MIN_DRIVER`. The 13.x builds carry Turing only as PTX, and drivers before
57
+ * R616 refuse that toolchain at load ("the provided PTX was compiled with an unsupported toolchain",
58
+ * in `ggml_cuda_kernel_can_use_pdl`). Windows telemetry over 14 days, CC 7.5 on CUDA 13.x: drivers
59
+ * 581–597 crashed 45 users and loaded 12, 610 crashed 46 and loaded 30, 616/617/621 crashed none of
60
+ * 128. CUDA 12.4 loads on the same cards.
61
+ */
62
+ export const CUDA13_DRIVER_GATED_BELOW_COMPUTE_CAPABILITY = [8, 0];
63
+ export const WINDOWS_PRE_AMPERE_CUDA13_MIN_DRIVER = '616.00';
64
+ /**
65
+ * Whether this card may run a CUDA 13 build with this driver, beyond the system-wide driver floor and
66
+ * the architecture floor. Windows only (Linux has no such data); an unreadable compute capability is
67
+ * not gated, as in `gpuMeetsCuda13ArchFloor`.
68
+ */
69
+ export function gpuMeetsCuda13DriverForArch(osType, computeCapability, driver) {
70
+ if (osType !== 'windows')
71
+ return true;
72
+ const cc = parseComputeCapability(computeCapability ?? '');
73
+ if (!cc)
74
+ return true;
75
+ const [gateMajor, gateMinor] = CUDA13_DRIVER_GATED_BELOW_COMPUTE_CAPABILITY;
76
+ const belowGate = cc[0] < gateMajor || (cc[0] === gateMajor && cc[1] < gateMinor);
77
+ return !belowGate || compareVersions(driver, WINDOWS_PRE_AMPERE_CUDA13_MIN_DRIVER) >= 0;
78
+ }
54
79
  export function isAmdGpu(gpu) {
55
80
  return typeof gpu.vendor === 'string' && gpu.vendor.toLowerCase() === 'amd';
56
81
  }
@@ -72,7 +97,8 @@ export function rocmSupportedWindows(hasAmdGpu, deviceIds) {
72
97
  /**
73
98
  * Which CPU/GPU tiers this host can run. The driver is system-wide, so *any* NVIDIA GPU over a floor
74
99
  * enables that CUDA tier; architecture is per-card and must hold for *every* card (llama.cpp
75
- * offloads across all visible devices), so one sub-7.5 GPU vetoes CUDA 13 for the whole host.
100
+ * offloads across all visible devices), so one sub-7.5 GPU vetoes CUDA 13 for the whole host, and on
101
+ * Windows so does one pre-Ampere GPU on a driver before R616 (`gpuMeetsCuda13DriverForArch`).
76
102
  * Vulkan is on when any GPU carries `vulkan_info`; ROCm only on Windows via the PCI table; OpenCL
77
103
  * only on Windows with an Adreno GPU (the only OpenCL build ggml-org ships is for Adreno). On any OS
78
104
  * other than linux/windows only the CPU flags are set (no CUDA, no Vulkan — macOS has Metal).
@@ -115,6 +141,8 @@ export function getSupportedFeatures(osType, cpuExtensions, gpus) {
115
141
  features.cuda13 = true;
116
142
  if (!gpuMeetsCuda13ArchFloor(nvidia.compute_capability))
117
143
  allNvidiaMeetCuda13Arch = false;
144
+ if (!gpuMeetsCuda13DriverForArch(osType, nvidia.compute_capability, driver))
145
+ allNvidiaMeetCuda13Arch = false;
118
146
  }
119
147
  if (gpu.vulkan_info)
120
148
  features.vulkan = true;
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/backend/select/features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/backend/select/features.ts"],"names":[],"mappings":"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"}
@@ -9,3 +9,4 @@ export * from './tiers.js';
9
9
  export * from './recovery.js';
10
10
  export * from './turboquant-tiers.js';
11
11
  export * from './prism.js';
12
+ export * from './bad-backends.js';