@atomic-chat/core 0.21.1 → 0.21.3
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.
- package/dist/backend/advisor/advisor.js +11 -2
- package/dist/backend/advisor/advisor.js.map +1 -1
- package/dist/backend/install/cuda-guard.d.ts +62 -0
- package/dist/backend/install/cuda-guard.js +80 -0
- package/dist/backend/install/cuda-guard.js.map +1 -0
- package/dist/backend/install/cuda-runtime-source.d.ts +76 -0
- package/dist/backend/install/cuda-runtime-source.js +294 -0
- package/dist/backend/install/cuda-runtime-source.js.map +1 -0
- package/dist/backend/install/index.d.ts +3 -0
- package/dist/backend/install/index.js +3 -0
- package/dist/backend/install/index.js.map +1 -1
- package/dist/backend/install/runtime-backend.d.ts +30 -3
- package/dist/backend/install/runtime-backend.js +106 -28
- package/dist/backend/install/runtime-backend.js.map +1 -1
- package/dist/backend/install/service.d.ts +40 -4
- package/dist/backend/install/service.js +175 -31
- package/dist/backend/install/service.js.map +1 -1
- package/dist/backend/install/windows-launch-check.d.ts +72 -0
- package/dist/backend/install/windows-launch-check.js +173 -0
- package/dist/backend/install/windows-launch-check.js.map +1 -0
- package/dist/backend/installed/installed.d.ts +13 -0
- package/dist/backend/installed/installed.js +32 -0
- package/dist/backend/installed/installed.js.map +1 -1
- package/dist/backend/select/bad-backends.d.ts +68 -0
- package/dist/backend/select/bad-backends.js +136 -0
- package/dist/backend/select/bad-backends.js.map +1 -0
- package/dist/backend/select/features.d.ts +18 -1
- package/dist/backend/select/features.js +29 -1
- package/dist/backend/select/features.js.map +1 -1
- package/dist/backend/select/index.d.ts +1 -0
- package/dist/backend/select/index.js +1 -0
- package/dist/backend/select/index.js.map +1 -1
- package/dist/backend/turboquant.d.ts +8 -0
- package/dist/backend/turboquant.js +37 -9
- package/dist/backend/turboquant.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/contracts/diagnostics.d.ts +1 -1
- package/dist/contracts/diagnostics.js +1 -0
- package/dist/contracts/diagnostics.js.map +1 -1
- package/dist/contracts/errors.d.ts +3 -3
- package/dist/contracts/errors.js +15 -0
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/hardware.d.ts +8 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/load-diag.d.ts +34 -0
- package/dist/contracts/load-diag.js +48 -0
- package/dist/contracts/load-diag.js.map +1 -0
- package/dist/core/atomic-core.d.ts +1 -1
- package/dist/core/create.js +16 -13
- package/dist/core/create.js.map +1 -1
- package/dist/downloads/archive.js +8 -3
- package/dist/downloads/archive.js.map +1 -1
- package/dist/downloads/disk.d.ts +18 -0
- package/dist/downloads/disk.js +32 -1
- package/dist/downloads/disk.js.map +1 -1
- package/dist/downloads/downloader.js +7 -4
- package/dist/downloads/downloader.js.map +1 -1
- package/dist/downloads/fs-retry.d.ts +27 -0
- package/dist/downloads/fs-retry.js +40 -0
- package/dist/downloads/fs-retry.js.map +1 -0
- package/dist/downloads/index.d.ts +1 -0
- package/dist/downloads/index.js +1 -0
- package/dist/downloads/index.js.map +1 -1
- package/dist/hardware/index.d.ts +1 -0
- package/dist/hardware/index.js +1 -0
- package/dist/hardware/index.js.map +1 -1
- package/dist/hardware/probe-common.d.ts +9 -1
- package/dist/hardware/probe-common.js.map +1 -1
- package/dist/hardware/probe-windows.d.ts +10 -2
- package/dist/hardware/probe-windows.js +65 -10
- package/dist/hardware/probe-windows.js.map +1 -1
- package/dist/hardware/probe.js +1 -1
- package/dist/hardware/probe.js.map +1 -1
- package/dist/hardware/service.d.ts +11 -0
- package/dist/hardware/service.js +31 -4
- package/dist/hardware/service.js.map +1 -1
- package/dist/hardware/windows-registry.d.ts +80 -0
- package/dist/hardware/windows-registry.js +197 -0
- package/dist/hardware/windows-registry.js.map +1 -0
- package/dist/runtime/llamacpp/args.d.ts +11 -0
- package/dist/runtime/llamacpp/args.js +28 -3
- package/dist/runtime/llamacpp/args.js.map +1 -1
- package/dist/runtime/llamacpp/devices.d.ts +11 -0
- package/dist/runtime/llamacpp/devices.js +22 -0
- package/dist/runtime/llamacpp/devices.js.map +1 -1
- package/dist/runtime/llamacpp/errors.d.ts +32 -2
- package/dist/runtime/llamacpp/errors.js +77 -4
- package/dist/runtime/llamacpp/errors.js.map +1 -1
- package/dist/runtime/llamacpp/index.d.ts +1 -0
- package/dist/runtime/llamacpp/index.js +1 -0
- package/dist/runtime/llamacpp/index.js.map +1 -1
- package/dist/runtime/llamacpp/load-failure.d.ts +52 -0
- package/dist/runtime/llamacpp/load-failure.js +105 -0
- package/dist/runtime/llamacpp/load-failure.js.map +1 -0
- package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
- package/dist/runtime/llamacpp/load-plan.js +34 -4
- package/dist/runtime/llamacpp/load-plan.js.map +1 -1
- package/dist/runtime/llamacpp/runtime.d.ts +24 -1
- package/dist/runtime/llamacpp/runtime.js +116 -27
- package/dist/runtime/llamacpp/runtime.js.map +1 -1
- package/dist/runtime/shared/env.js +13 -15
- package/dist/runtime/shared/env.js.map +1 -1
- package/dist/telemetry/diagnostics.d.ts +10 -2
- package/dist/telemetry/diagnostics.js +14 -3
- package/dist/telemetry/diagnostics.js.map +1 -1
- package/dist/telemetry/envelope.d.ts +6 -0
- package/dist/telemetry/envelope.js +12 -2
- package/dist/telemetry/envelope.js.map +1 -1
- package/dist/telemetry/reporter.d.ts +9 -0
- package/dist/telemetry/reporter.js +3 -0
- package/dist/telemetry/reporter.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- 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":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AACpD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAA;AAgB5C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6B;IACxD,MAAM,QAAQ,GAAG,CAAC,GAAiB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7F,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACzF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IACpE,MAAM,OAAO,GAAI,GAA+B,CAAC,SAAS,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACtC,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAQ;QACjD,MAAM,CAAC,GAAG,KAAgC,CAAA;QAC1C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAC3D,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ;YACR,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;YAC1B,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;SACrB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAkB,EAAE,QAAgB,EAAE,OAAe,EAAE,MAAc,EAAE,EAAE,CACxF,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAA;AAEnF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEnE,uFAAuF;AACvF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAA;AAElE,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,KAAsB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACpF,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC/B,uFAAuF;IACvF,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,GAAG,GAAG,EAAE,GAAG,4BAA4B,CAAA;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAmC,EACnC,QAAgB,EAChB,OAAe,EACf,MAAc,EACd,OAAe,EACf,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;QACrC,CAAC,CAAC,CAAC,MAAM,KAAK,0BAA0B,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtF,qBAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,CAChC,CAAA;AACH,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,cAAc,CAC5B,OAAmC,EACnC,KAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACvF,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,0BAA0B;YAAE,OAAO,KAAK,CAAA;QAC1F,OAAO,CAAC,CAAC,MAAM,KAAK,0BAA0B,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnG,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAClE,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,oBAAoB,CAAC,OAAmC;IACtE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,2BAA2B,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;AACjG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,CAAA;IACrC,IAAI,oCAAoC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,CAAA;IAC3D,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,CAAA;IAC3C,IACE,+FAA+F,CAAC,IAAI,CAAC,EAAE,CAAC;QAExG,OAAO,CAAC,CAAA;IACV,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA4C,EAC5C,UAAqC,EACrC,OAAsD,GAAG,EAAE,CAAC,KAAK;IAEjE,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,UAAU;SACtB,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC/F,MAAM,CACL,CAAC,CAAC,EAAmE,EAAE,CACrE,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,GAAG,IAAI;QACb,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,aAAa;QAC/C,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAClD,CAAA;IACH,MAAM,OAAO,GAAG,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1G,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAA;AAC7B,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAEnG,OAAO,EAAE,6BAA6B,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,gGAAgG;AAChG,6CAA6C;AAC7C,gGAAgG;AAEhG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IAClE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;CACzD,CAAA;AAEV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAA8B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE9E;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;IACzD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACvB,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,uBAAuB,CAAC,iBAAqC;IAC3E,MAAM,EAAE,GAAG,sBAAsB,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IACpB,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,6BAA6B,CAAA;IAC9D,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAiB;IACxC,OAAO,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;AAC7E,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,UAAU;QAAE,OAAO,IAAI,CAAA;IAC1F,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAkB,EAAE,SAA4B;IACnF,OAAO,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/backend/select/features.ts"],"names":[],"mappings":"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"}
|