comfyui-mcp 0.48.8 → 0.48.10
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/services/download-jobs.js +122 -25
- package/dist/services/download-jobs.js.map +1 -1
- package/dist/services/env-capabilities.js +73 -63
- package/dist/services/env-capabilities.js.map +1 -1
- package/dist/services/model-resolver.js +58 -4
- package/dist/services/model-resolver.js.map +1 -1
- package/dist/services/process-control.js +10 -5
- package/dist/services/process-control.js.map +1 -1
- package/dist/services/train-caption.js +53 -0
- package/dist/services/train-caption.js.map +1 -1
- package/dist/services/workspace-env.js +186 -33
- package/dist/services/workspace-env.js.map +1 -1
- package/dist/tools/model-extras.js +9 -2
- package/dist/tools/model-extras.js.map +1 -1
- package/dist/tools/train.js +1 -1
- package/dist/tools/train.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,10 +14,37 @@
|
|
|
14
14
|
* `enqueue_workflow` + `get_job_status`.
|
|
15
15
|
*/
|
|
16
16
|
import { createHash } from "node:crypto";
|
|
17
|
-
import {
|
|
18
|
-
import { downloadModel, resolveDownloadTarget } from "./model-resolver.js";
|
|
17
|
+
import { downloadModel, resolveDownloadTarget, shouldDispatchDownloadToManager, } from "./model-resolver.js";
|
|
19
18
|
import { logger } from "../utils/logger.js";
|
|
19
|
+
// The in-flight registry is indexed under MULTIPLE keys per job so dedup is
|
|
20
|
+
// ROUTE-INDEPENDENT: a repeated request finds the in-flight job whether or not the
|
|
21
|
+
// Manager↔local route flipped between calls (#420 codex round 2). One Entry object
|
|
22
|
+
// is shared by all its keys.
|
|
20
23
|
const jobs = new Map();
|
|
24
|
+
/**
|
|
25
|
+
* Point `key` at `entry`, ENTRY-SCOPED (#420 codex round 3, rule 2/3): never clobber
|
|
26
|
+
* a row currently owned by a DIFFERENT, still-in-flight writer — that would orphan a
|
|
27
|
+
* live download's index. Records the key on the entry so it can be retired later.
|
|
28
|
+
*/
|
|
29
|
+
function registerKey(entry, key) {
|
|
30
|
+
const cur = jobs.get(key);
|
|
31
|
+
if (cur && cur !== entry && cur.job.status === "downloading")
|
|
32
|
+
return;
|
|
33
|
+
if (!entry.keys.includes(key))
|
|
34
|
+
entry.keys.push(key);
|
|
35
|
+
jobs.set(key, entry);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Retire a superseded (done/error) entry, ENTRY-SCOPED (#420 codex round 3, rule 2):
|
|
39
|
+
* only delete an index row that STILL points at THIS entry, so retiring an older job
|
|
40
|
+
* can never delete a key that has since been reassigned to a newer/live entry.
|
|
41
|
+
*/
|
|
42
|
+
function retireEntry(entry) {
|
|
43
|
+
for (const key of entry.keys) {
|
|
44
|
+
if (jobs.get(key) === entry)
|
|
45
|
+
jobs.delete(key);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
21
48
|
/** The tray keys rows on a hash of the SOURCE URL; match it so both agree. */
|
|
22
49
|
export function downloadIdFor(url) {
|
|
23
50
|
return createHash("sha256").update(url).digest("hex").slice(0, 16);
|
|
@@ -33,14 +60,15 @@ export function downloadJobIdFor(targetPath) {
|
|
|
33
60
|
return createHash("sha256").update(targetPath).digest("hex").slice(0, 16);
|
|
34
61
|
}
|
|
35
62
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
63
|
+
* ROUTE-INDEPENDENT request key: a canonical, collision-safe JSON-encoded tuple of
|
|
64
|
+
* {url, trimmed subfolder, filename}. Derived ONLY from the request inputs — never
|
|
65
|
+
* from the resolved destination or the chosen route — so a repeated call for the
|
|
66
|
+
* SAME request adopts the in-flight job regardless of a Manager↔local reachability
|
|
67
|
+
* flip between calls (#420 codex round 2). Every job is indexed under this key; a
|
|
68
|
+
* locally-resolvable job is ALSO indexed under its destination key (below) so the
|
|
69
|
+
* "two different URLs → one local destination → one writer" dedup still holds.
|
|
42
70
|
*/
|
|
43
|
-
function
|
|
71
|
+
function requestDownloadKey(url, targetSubfolder, filename) {
|
|
44
72
|
const canonical = JSON.stringify([
|
|
45
73
|
url,
|
|
46
74
|
String(targetSubfolder ?? "").trim(),
|
|
@@ -76,19 +104,76 @@ onComplete) {
|
|
|
76
104
|
// there is NO local filesystem — downloadModel short-circuits to the Manager
|
|
77
105
|
// dispatch, so resolving a local models dir would wrongly THROW (COMFYUI_PATH
|
|
78
106
|
// unset). Key by a canonical remote identity instead and let downloadModel take
|
|
79
|
-
// the Manager path.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
107
|
+
// the Manager path. shouldDispatchDownloadToManager() also covers the #420
|
|
108
|
+
// reconnect case: a nominally-local session whose effective base was lost still
|
|
109
|
+
// routes through the connected Manager (and must NOT try to resolve a local
|
|
110
|
+
// targetPath, which would throw), keying by the same canonical remote identity.
|
|
111
|
+
//
|
|
112
|
+
// CRITICAL: evaluate the route EXACTLY ONCE and thread it into downloadModel
|
|
113
|
+
// below. The predicate awaits live /system_stats and reads mutable base config,
|
|
114
|
+
// so a reconnect/reachability flip between two evaluations would split the job —
|
|
115
|
+
// Manager-key + local-writer (or a duplicate job) for one request (#420 codex
|
|
116
|
+
// round 1). One decision keys the identity AND drives the writer.
|
|
117
|
+
const dispatchToManager = await shouldDispatchDownloadToManager();
|
|
118
|
+
// DEDUP INDEX (route-independent) vs WRITER ROUTE (the single decision above) are
|
|
119
|
+
// deliberately separated (#420 codex round 2). The in-flight lookup/registration
|
|
120
|
+
// is keyed by the REQUEST (url+subfolder+filename), which NEVER changes with the
|
|
121
|
+
// route — so two separate calls for one request with a Manager↔local flip between
|
|
122
|
+
// them still resolve to ONE job (no same-file double-write). When the request is
|
|
123
|
+
// locally resolvable we ALSO index the destination-path key, preserving the
|
|
124
|
+
// "two different URLs → same local destination → one writer" dedup (WS-4). An
|
|
125
|
+
// invalid filename/subfolder is REJECTED here (by resolveDownloadTarget), up
|
|
126
|
+
// front, exactly as the write would reject it.
|
|
127
|
+
const reqKey = requestDownloadKey(url, targetSubfolder, filename);
|
|
128
|
+
let destKey;
|
|
129
|
+
if (!dispatchToManager) {
|
|
130
|
+
const target = await resolveDownloadTarget(url, targetSubfolder, filename);
|
|
131
|
+
destKey = downloadJobIdFor(target.targetPath);
|
|
132
|
+
}
|
|
133
|
+
// The PUBLIC id (download_status handle): the destination key when we have one
|
|
134
|
+
// (so distinct destinations are separately pollable), else the request key.
|
|
135
|
+
const id = destKey ?? reqKey;
|
|
136
|
+
// This call's keys: the route-independent request key, plus the destination key
|
|
137
|
+
// when locally resolvable (two-URLs-one-dest dedup).
|
|
138
|
+
const lookupKeys = destKey ? [reqKey, destKey] : [reqKey];
|
|
83
139
|
const trayId = downloadIdFor(url);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
140
|
+
// ADOPT ONLY AN IN-FLIGHT ENTRY (#420 codex round 3, rule 3): a FINISHED entry
|
|
141
|
+
// under any key is treated as absent — it must never shadow a currently-downloading
|
|
142
|
+
// writer reachable under another key, nor cause a retire that overwrites a live row.
|
|
143
|
+
// Scan every key and prefer an in-flight match.
|
|
144
|
+
let adopted;
|
|
145
|
+
for (const k of lookupKeys) {
|
|
146
|
+
const e = jobs.get(k);
|
|
147
|
+
if (e && e.job.status === "downloading") {
|
|
148
|
+
adopted = e;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (adopted) {
|
|
153
|
+
// Re-index THIS call's keys onto the adopted entry (#420 codex round 3, rule 1):
|
|
154
|
+
// when URL B adopts URL A's in-flight job by destination, B's request key must
|
|
155
|
+
// now point at the same entry too — otherwise a later repeat of B (especially
|
|
156
|
+
// after a local→Manager flip that drops the destination key) would miss it and
|
|
157
|
+
// start a second writer onto one file. Entry-scoped, so it can't steal a live row.
|
|
158
|
+
for (const k of lookupKeys)
|
|
159
|
+
registerKey(adopted, k);
|
|
160
|
+
logger.info(`Download already in flight, adopting it: ${adopted.job.id}`, {
|
|
87
161
|
url,
|
|
88
162
|
target_subfolder: targetSubfolder,
|
|
89
163
|
filename,
|
|
90
164
|
});
|
|
91
|
-
return
|
|
165
|
+
return adopted;
|
|
166
|
+
}
|
|
167
|
+
// No in-flight match. Retire any superseded (done/error) entries shadowing our keys
|
|
168
|
+
// — entry-scoped, so we only clear rows still pointing at that finished entry and
|
|
169
|
+
// never delete a row now owned by a different, live writer (rule 2).
|
|
170
|
+
const retired = new Set();
|
|
171
|
+
for (const k of lookupKeys) {
|
|
172
|
+
const e = jobs.get(k);
|
|
173
|
+
if (e && !retired.has(e)) {
|
|
174
|
+
retireEntry(e);
|
|
175
|
+
retired.add(e);
|
|
176
|
+
}
|
|
92
177
|
}
|
|
93
178
|
const job = {
|
|
94
179
|
id,
|
|
@@ -101,7 +186,7 @@ onComplete) {
|
|
|
101
186
|
};
|
|
102
187
|
// The promise is stored, never left dangling — an unhandled rejection here
|
|
103
188
|
// would take down the process on a simple 404.
|
|
104
|
-
const settled = downloadModel(url, targetSubfolder, filename, auth)
|
|
189
|
+
const settled = downloadModel(url, targetSubfolder, filename, auth, dispatchToManager)
|
|
105
190
|
.then(async (path) => {
|
|
106
191
|
job.path = path;
|
|
107
192
|
if (onComplete) {
|
|
@@ -125,19 +210,31 @@ onComplete) {
|
|
|
125
210
|
job.error = err instanceof Error ? err.message : String(err);
|
|
126
211
|
job.finished_at = Date.now();
|
|
127
212
|
});
|
|
128
|
-
|
|
129
|
-
|
|
213
|
+
// Index under EVERY key (deduped) so any of them adopts this one writer. Uses the
|
|
214
|
+
// entry-scoped registerKey guard so a fresh registration can never overwrite a row
|
|
215
|
+
// still owned by a different, live writer (rule 3).
|
|
216
|
+
const entry = { job, settled, keys: [] };
|
|
217
|
+
for (const k of new Set(lookupKeys))
|
|
218
|
+
registerKey(entry, k);
|
|
130
219
|
return entry;
|
|
131
220
|
}
|
|
132
221
|
export function getDownloadJob(id) {
|
|
133
|
-
// The registry
|
|
134
|
-
// destination
|
|
222
|
+
// The registry indexes each job under its request key and (when local) its
|
|
223
|
+
// destination key; the public id is one of those, so a direct get resolves it.
|
|
135
224
|
return jobs.get(id)?.job;
|
|
136
225
|
}
|
|
137
226
|
export function listDownloadJobs() {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
227
|
+
// One Entry is indexed under multiple keys — dedup by identity so a job appears
|
|
228
|
+
// once regardless of how many keys point at it.
|
|
229
|
+
const seen = new Set();
|
|
230
|
+
const out = [];
|
|
231
|
+
for (const e of jobs.values()) {
|
|
232
|
+
if (seen.has(e))
|
|
233
|
+
continue;
|
|
234
|
+
seen.add(e);
|
|
235
|
+
out.push(e.job);
|
|
236
|
+
}
|
|
237
|
+
return out.sort((a, b) => b.started_at - a.started_at);
|
|
141
238
|
}
|
|
142
239
|
/** Test seam — the registry is process-global otherwise. */
|
|
143
240
|
export function resetDownloadJobs() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-jobs.js","sourceRoot":"","sources":["../../src/services/download-jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"download-jobs.js","sourceRoot":"","sources":["../../src/services/download-jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
// - formatEnvBlock(caps): a PURE function (stats object → compact string) that
|
|
15
15
|
// is unit-tested and omits unknown fields cleanly.
|
|
16
16
|
import { execFile } from "node:child_process";
|
|
17
|
-
import { existsSync } from "node:fs";
|
|
18
17
|
import { createRequire } from "node:module";
|
|
19
18
|
import { comfyuiFetch } from "../comfyui/fetch.js";
|
|
20
19
|
import { platform, release, totalmem, cpus } from "node:os";
|
|
21
|
-
import { join } from "node:path";
|
|
22
20
|
import { isForceRemoteFlagSet } from "../config.js";
|
|
21
|
+
import { resolveComfyuiPython } from "./workspace-env.js";
|
|
22
|
+
// The interpreter resolver lives in workspace-env (which owns ComfyUI-base
|
|
23
|
+
// resolution) so get_environment and this panel probe share ONE live-first
|
|
24
|
+
// implementation and can never disagree (#401 / PR #433). Re-export for
|
|
25
|
+
// back-compat with existing importers/tests.
|
|
26
|
+
export { resolveComfyuiPython };
|
|
23
27
|
const IS_WIN = platform() === "win32";
|
|
24
28
|
// ---------------------------------------------------------------------------
|
|
25
29
|
// Small helpers
|
|
@@ -244,60 +248,12 @@ async function detectAttentionFromComfyLog(comfyuiUrl, timeoutMs) {
|
|
|
244
248
|
// Triton + SageAttention detection (find the ComfyUI python, then import-probe)
|
|
245
249
|
// ---------------------------------------------------------------------------
|
|
246
250
|
/**
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
* running server's argv main.py), then fall back to PATH python. Returns the
|
|
251
|
-
* first candidate that exists on disk, or a PATH name as a last resort.
|
|
251
|
+
* Back-compat shim: returns just the interpreter path (LIVE-first resolution lives
|
|
252
|
+
* in workspace-env.resolveComfyuiPython). Prefer resolveComfyuiPython when the caller
|
|
253
|
+
* needs to know whether the interpreter is the LIVE server's own (issue #401).
|
|
252
254
|
*/
|
|
253
255
|
export function findComfyuiPython(comfyuiPath, statsArgv) {
|
|
254
|
-
|
|
255
|
-
const roots = [];
|
|
256
|
-
if (comfyuiPath)
|
|
257
|
-
roots.push(comfyuiPath);
|
|
258
|
-
// Infer the install root from the running server's argv (…/main.py).
|
|
259
|
-
if (Array.isArray(statsArgv)) {
|
|
260
|
-
const mainPy = statsArgv.find((a) => typeof a === "string" && /main\.py$/i.test(a));
|
|
261
|
-
if (mainPy) {
|
|
262
|
-
const root = mainPy.replace(/[\\/]+main\.py$/i, "");
|
|
263
|
-
if (root && !roots.includes(root))
|
|
264
|
-
roots.push(root);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
const candidates = [];
|
|
268
|
-
for (const root of roots) {
|
|
269
|
-
if (IS_WIN) {
|
|
270
|
-
candidates.push(join(root, "standalone-env", "python.exe"));
|
|
271
|
-
candidates.push(join(root, "python_embeded", "python.exe"));
|
|
272
|
-
candidates.push(join(root, ".venv", "Scripts", "python.exe"));
|
|
273
|
-
candidates.push(join(root, "venv", "Scripts", "python.exe"));
|
|
274
|
-
// Desktop app keeps the embedded python a level up beside the install.
|
|
275
|
-
candidates.push(join(root, "..", "python_embeded", "python.exe"));
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
candidates.push(join(root, ".venv", "bin", "python3"));
|
|
279
|
-
candidates.push(join(root, ".venv", "bin", "python"));
|
|
280
|
-
candidates.push(join(root, "venv", "bin", "python3"));
|
|
281
|
-
candidates.push(join(root, "venv", "bin", "python"));
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
for (const c of candidates) {
|
|
285
|
-
// Skip UNC / network roots (\\server\share) — a dead/slow network path makes
|
|
286
|
-
// existsSync() block for seconds and we gather env at startup. Local drive
|
|
287
|
-
// paths are instant. (Linux/Mac UNC isn't a thing; this is the Windows risk.)
|
|
288
|
-
if (/^\\\\/.test(c))
|
|
289
|
-
continue;
|
|
290
|
-
try {
|
|
291
|
-
if (existsSync(c))
|
|
292
|
-
return c;
|
|
293
|
-
}
|
|
294
|
-
catch {
|
|
295
|
-
// ignore and continue
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Last resort: a PATH-resolved interpreter (may not be ComfyUI's, but better
|
|
299
|
-
// than nothing for the import probe).
|
|
300
|
-
return names[0];
|
|
256
|
+
return resolveComfyuiPython(comfyuiPath, statsArgv).python;
|
|
301
257
|
}
|
|
302
258
|
/**
|
|
303
259
|
* Probe whether triton + sageattention are importable in the ComfyUI python.
|
|
@@ -313,8 +269,12 @@ export function probeTritonSage(pythonExe, timeoutMs = 5000) {
|
|
|
313
269
|
return;
|
|
314
270
|
}
|
|
315
271
|
// Print a clear per-package marker so we can tell which imported, even if one
|
|
316
|
-
// succeeds and the other fails (avoids an all-or-nothing answer).
|
|
317
|
-
|
|
272
|
+
// succeeds and the other fails (avoids an all-or-nothing answer). Also print
|
|
273
|
+
// the interpreter's own major.minor so the caller can confirm we probed the
|
|
274
|
+
// SAME python the running ComfyUI reports (#401 — a mismatch means we're
|
|
275
|
+
// looking at the wrong environment and any negative is untrustworthy).
|
|
276
|
+
const code = "import importlib.util as u,sys;" +
|
|
277
|
+
"print('python', '%d.%d' % sys.version_info[:2]);" +
|
|
318
278
|
"print('triton', u.find_spec('triton') is not None);" +
|
|
319
279
|
"print('sageattention', u.find_spec('sageattention') is not None)";
|
|
320
280
|
let done = false;
|
|
@@ -334,10 +294,15 @@ export function probeTritonSage(pythonExe, timeoutMs = 5000) {
|
|
|
334
294
|
return "unknown";
|
|
335
295
|
return m[1] === "True" ? "installed" : "not-installed";
|
|
336
296
|
};
|
|
297
|
+
const pyMatch = out.match(/^python\s+(\d+\.\d+)/m);
|
|
337
298
|
// If python ran but errored AFTER printing partial output, still trust
|
|
338
299
|
// whatever lines we got; missing lines stay "unknown".
|
|
339
300
|
void err;
|
|
340
|
-
resolve({
|
|
301
|
+
resolve({
|
|
302
|
+
triton: read("triton"),
|
|
303
|
+
sageattention: read("sageattention"),
|
|
304
|
+
pythonVersion: pyMatch ? pyMatch[1] : undefined,
|
|
305
|
+
});
|
|
341
306
|
});
|
|
342
307
|
child.on?.("error", () => {
|
|
343
308
|
if (done)
|
|
@@ -347,6 +312,25 @@ export function probeTritonSage(pythonExe, timeoutMs = 5000) {
|
|
|
347
312
|
});
|
|
348
313
|
});
|
|
349
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Reconcile a raw import-probe tri-state against how much we trust the interpreter
|
|
317
|
+
* we probed (#401). A definitive "not-installed" is only believable when we probed
|
|
318
|
+
* ComfyUI's OWN python — i.e. the LIVE interpreter resolved from the running server's
|
|
319
|
+
* argv root, whose major.minor also matches what /system_stats reports. When the
|
|
320
|
+
* interpreter is NOT the live one (a bare PATH fallback, or a different/persisted
|
|
321
|
+
* workspace) or its version disagrees with the running ComfyUI, we are looking at the
|
|
322
|
+
* wrong environment, so a "not-installed" is downgraded to "unknown" rather than
|
|
323
|
+
* emitted as a false negative that would make an agent disable working acceleration.
|
|
324
|
+
* Positives pass through unchanged (a positive can't be a harmful false negative).
|
|
325
|
+
*/
|
|
326
|
+
export function reconcileProbeState(state, opts) {
|
|
327
|
+
const s = state ?? "unknown";
|
|
328
|
+
const versionMismatch = !!(opts.runningPython &&
|
|
329
|
+
opts.probePython &&
|
|
330
|
+
opts.runningPython !== opts.probePython);
|
|
331
|
+
const trustworthy = opts.live && !versionMismatch;
|
|
332
|
+
return s === "not-installed" && !trustworthy ? "unknown" : s;
|
|
333
|
+
}
|
|
350
334
|
// ---------------------------------------------------------------------------
|
|
351
335
|
// Backend availability (active provider + whether the OTHER is resolvable)
|
|
352
336
|
// ---------------------------------------------------------------------------
|
|
@@ -416,12 +400,38 @@ export async function gatherEnvCapabilities(opts) {
|
|
|
416
400
|
if (opts.comfyuiUrl) {
|
|
417
401
|
caps.manager = await withTimeout(probeManagerGeneration(opts.comfyuiUrl, opts.statsTimeoutMs ?? 4000), (opts.statsTimeoutMs ?? 4000) + 1000).then((m) => m ?? "unknown");
|
|
418
402
|
}
|
|
419
|
-
// --- triton + sageattention (
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
403
|
+
// --- triton + sageattention (resolve the LIVE python, import-probe, ~5s cap) ---
|
|
404
|
+
// In REMOTE mode the local python-import probe can't reach the server's host, and a
|
|
405
|
+
// coincident LOCAL path is NOT the remote interpreter — probing it risks BOTH a
|
|
406
|
+
// false negative and a false positive for the remote server. So skip the probe
|
|
407
|
+
// entirely and rely solely on the ComfyUI-log positive markers below (#401 round 3).
|
|
408
|
+
const remote = caps.location === "REMOTE";
|
|
409
|
+
let live = false;
|
|
410
|
+
let ts;
|
|
411
|
+
if (!remote) {
|
|
412
|
+
const resolved = resolveComfyuiPython(opts.comfyuiPath, statsArgv);
|
|
413
|
+
live = resolved.live;
|
|
414
|
+
const tritonTimeout = opts.tritonTimeoutMs ?? 5000;
|
|
415
|
+
ts = await withTimeout(probeTritonSage(resolved.python, tritonTimeout), tritonTimeout + 1000);
|
|
416
|
+
}
|
|
417
|
+
// Only trust a definitive "not-installed" when we probed the LIVE running server's
|
|
418
|
+
// OWN interpreter (#401). Otherwise it can be the WRONG python:
|
|
419
|
+
// 1. A bare PATH fallback (no on-disk venv/embedded interpreter found).
|
|
420
|
+
// 2. A different/persisted workspace that merely happens to have a venv — its
|
|
421
|
+
// negative would still be a false report about the running instance.
|
|
422
|
+
// 3. Its major.minor disagrees with what /system_stats reports.
|
|
423
|
+
// 4. REMOTE mode — no local interpreter is the server's (probe skipped above).
|
|
424
|
+
// In each case a "not-installed" is untrustworthy, so we degrade it to "unknown"
|
|
425
|
+
// rather than emit a false negative that makes an agent disable working
|
|
426
|
+
// acceleration. A positive ("installed") is still reported — it can't be a false
|
|
427
|
+
// negative, and the log-marker check below only ever reinforces a positive.
|
|
428
|
+
const reconcile = (state) => reconcileProbeState(state, {
|
|
429
|
+
live,
|
|
430
|
+
runningPython: caps.python,
|
|
431
|
+
probePython: ts?.pythonVersion,
|
|
432
|
+
});
|
|
433
|
+
caps.triton = reconcile(ts?.triton);
|
|
434
|
+
caps.sageattention = reconcile(ts?.sageattention);
|
|
425
435
|
// A positive signal from the ComfyUI HOST's log wins over the local python probe:
|
|
426
436
|
// in remote mode (pod) the probe can't reach the host, and even locally the log
|
|
427
437
|
// reflects what ComfyUI is actually USING. So the agent sees the host's real
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-capabilities.js","sourceRoot":"","sources":["../../src/services/env-capabilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env-capabilities.js","sourceRoot":"","sources":["../../src/services/env-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { readdir, stat, mkdir, readFile } from "node:fs/promises";
|
|
3
3
|
import { join, basename, resolve, relative, sep, isAbsolute } from "node:path";
|
|
4
4
|
import { config, isRemoteMode } from "../config.js";
|
|
5
|
-
import { getClient } from "../comfyui/client.js";
|
|
5
|
+
import { getClient, getSystemStats } from "../comfyui/client.js";
|
|
6
6
|
import { getExtraModelRoots } from "./extra-paths.js";
|
|
7
7
|
import { resolveEffectiveComfyUIBase } from "./workspace-env.js";
|
|
8
8
|
import { installModelViaManager } from "./node-management.js";
|
|
@@ -10,7 +10,7 @@ import { ModelError, ValidationError } from "../utils/errors.js";
|
|
|
10
10
|
import { logger } from "../utils/logger.js";
|
|
11
11
|
import { downloadWithCache } from "./download-cache.js";
|
|
12
12
|
import { reportDownloadProgress } from "./download-progress.js";
|
|
13
|
-
import { resolveModelsDir } from "./output-dir.js";
|
|
13
|
+
import { resolveModelsDir, parseModelsDirFromArgv } from "./output-dir.js";
|
|
14
14
|
import { applyDownloadAuth, redactUrlForLogs, } from "./download-auth.js";
|
|
15
15
|
export const MODEL_SUBDIRS = [
|
|
16
16
|
"checkpoints",
|
|
@@ -558,7 +558,56 @@ async function downloadModelViaManagerRemote(url, targetSubfolder, filename, aut
|
|
|
558
558
|
});
|
|
559
559
|
return `${normalizedSubfolder}/${resolvedFilename} (dispatched to the remote ComfyUI via ComfyUI-Manager — download continues server-side; the file lists under /models when complete)${authWarning}`;
|
|
560
560
|
}
|
|
561
|
-
|
|
561
|
+
/**
|
|
562
|
+
* Decide whether a model download must be handed to the CONNECTED ComfyUI's
|
|
563
|
+
* ComfyUI-Manager (a server-side fetch) instead of being streamed to local disk.
|
|
564
|
+
*
|
|
565
|
+
* Returns true when:
|
|
566
|
+
* - REMOTE mode — there is no local filesystem at all (the original behavior); OR
|
|
567
|
+
* - we are NOMINALLY LOCAL (loopback target) but have NO resolvable local base:
|
|
568
|
+
* COMFYUI_PATH is unset — or was LOST across a panel/orchestrator reconnect
|
|
569
|
+
* (#420) — and no default workspace is saved, AND the connected server did not
|
|
570
|
+
* advertise a discoverable `--base-directory` to stream into, YET a live server
|
|
571
|
+
* IS reachable to accept a Manager dispatch. This is exactly the reconnect
|
|
572
|
+
* failure in #420: the previous session downloaded fine, the reconnect dropped
|
|
573
|
+
* the effective base, and the local path then threw "no local ComfyUI path
|
|
574
|
+
* configured" instead of routing through the still-connected Manager (the same
|
|
575
|
+
* route list_local_models keeps using over HTTP). #418 fixed base resolution
|
|
576
|
+
* at START; this keeps downloads working when the base goes missing LATER.
|
|
577
|
+
*
|
|
578
|
+
* Stays LOCAL (false) whenever a local base is resolvable (resolveEffectiveComfyUIBase)
|
|
579
|
+
* OR the server reports a base/models dir we can write to directly; also false when
|
|
580
|
+
* no server is reachable, so the local resolver surfaces its clear, actionable error
|
|
581
|
+
* rather than silently succeeding.
|
|
582
|
+
*/
|
|
583
|
+
export async function shouldDispatchDownloadToManager() {
|
|
584
|
+
if (isRemoteMode())
|
|
585
|
+
return true;
|
|
586
|
+
// A configured/auto-detected COMFYUI_PATH or saved default workspace → stream local.
|
|
587
|
+
if (resolveEffectiveComfyUIBase())
|
|
588
|
+
return false;
|
|
589
|
+
try {
|
|
590
|
+
const stats = await getSystemStats();
|
|
591
|
+
// Reachable server: stream locally only if it exposes a base/models dir we can
|
|
592
|
+
// write to; otherwise hand the fetch to its ComfyUI-Manager (reconnect-safe).
|
|
593
|
+
return !parseModelsDirFromArgv(stats.system?.argv);
|
|
594
|
+
}
|
|
595
|
+
catch {
|
|
596
|
+
// No reachable server → nothing to dispatch to. Let the local resolver throw.
|
|
597
|
+
return false;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
export async function downloadModel(url, targetSubfolder, filename, auth,
|
|
601
|
+
/**
|
|
602
|
+
* The ALREADY-DECIDED route (Manager vs local disk). startDownloadJob computes
|
|
603
|
+
* shouldDispatchDownloadToManager() ONCE to key the job identity, then threads
|
|
604
|
+
* that same decision here so the writer can never diverge from the key — a
|
|
605
|
+
* reconnect/reachability flip BETWEEN two evaluations would otherwise split the
|
|
606
|
+
* job (Manager-key + local-writer, or a duplicate job) (#420 codex round 1).
|
|
607
|
+
* Omitted by direct callers (the download_model tool path without a job), which
|
|
608
|
+
* evaluate the predicate themselves.
|
|
609
|
+
*/
|
|
610
|
+
dispatchToManager) {
|
|
562
611
|
// Region flags (issue #127) applied at THE choke point every download path
|
|
563
612
|
// funnels through (local disk AND the remote Manager dispatch below).
|
|
564
613
|
const wasHfUrl = /^https?:\/\/huggingface\.co([/?#]|$)/i.test(url);
|
|
@@ -575,7 +624,12 @@ export async function downloadModel(url, targetSubfolder, filename, auth) {
|
|
|
575
624
|
// can carry query params); header/basic/bearer auth can't be forwarded to
|
|
576
625
|
// Manager, so those are surfaced as a clear warning rather than reported as a
|
|
577
626
|
// clean success.
|
|
578
|
-
|
|
627
|
+
// Use the route the caller already decided (job path), else evaluate it now
|
|
628
|
+
// (direct callers). Never re-evaluate when a decision was threaded in — that is
|
|
629
|
+
// the split-brain guard: the writer must follow the SAME route the job id was
|
|
630
|
+
// keyed on, even if reachability/base config flipped since (#420 codex round 1).
|
|
631
|
+
const routeToManager = dispatchToManager ?? (await shouldDispatchDownloadToManager());
|
|
632
|
+
if (routeToManager) {
|
|
579
633
|
return downloadModelViaManagerRemote(url, targetSubfolder, filename, auth);
|
|
580
634
|
}
|
|
581
635
|
// Root the destination at the LIVE server's models dir (its --base-directory),
|