comfyui-node 1.6.3 → 1.6.4
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/README.md +50 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/multipool/client-registry.d.ts +23 -32
- package/dist/multipool/client-registry.d.ts.map +1 -1
- package/dist/multipool/client-registry.js +1 -1
- package/dist/multipool/client-registry.js.map +1 -1
- package/dist/multipool/interfaces.d.ts +106 -0
- package/dist/multipool/interfaces.d.ts.map +1 -1
- package/dist/multipool/job-profiler.d.ts +64 -127
- package/dist/multipool/job-profiler.d.ts.map +1 -1
- package/dist/multipool/job-profiler.js +221 -221
- package/dist/multipool/job-profiler.js.map +1 -1
- package/dist/multipool/job-queue-processor.d.ts +23 -27
- package/dist/multipool/job-queue-processor.d.ts.map +1 -1
- package/dist/multipool/job-queue-processor.js +196 -196
- package/dist/multipool/job-queue-processor.js.map +1 -1
- package/dist/multipool/job-state-registry.d.ts +42 -66
- package/dist/multipool/job-state-registry.d.ts.map +1 -1
- package/dist/multipool/job-state-registry.js.map +1 -1
- package/dist/multipool/multi-workflow-pool.d.ts +2 -3
- package/dist/multipool/multi-workflow-pool.d.ts.map +1 -1
- package/dist/multipool/multi-workflow-pool.js.map +1 -1
- package/dist/multipool/pool-event-manager.d.ts +10 -10
- package/dist/multipool/pool-event-manager.d.ts.map +1 -1
- package/dist/multipool/workflow.d.ts +178 -178
- package/dist/multipool/workflow.d.ts.map +1 -1
- package/dist/multipool/workflow.js +333 -333
- package/package.json +1 -1
|
@@ -1,197 +1,197 @@
|
|
|
1
|
-
import { classifyFailure } from "
|
|
2
|
-
export class JobQueueProcessor {
|
|
3
|
-
jobs;
|
|
4
|
-
clientRegistry;
|
|
5
|
-
logger;
|
|
6
|
-
queue = [];
|
|
7
|
-
workflowHash = "";
|
|
8
|
-
isProcessing = false;
|
|
9
|
-
maxAttempts = 3;
|
|
10
|
-
constructor(stateRegistry, clientRegistry, workflowHash, logger) {
|
|
11
|
-
this.logger = logger;
|
|
12
|
-
this.logger.debug(`Creating JobQueueProcessor for workflow hash: '${workflowHash}'`);
|
|
13
|
-
this.clientRegistry = clientRegistry;
|
|
14
|
-
this.jobs = stateRegistry;
|
|
15
|
-
this.workflowHash = workflowHash;
|
|
16
|
-
}
|
|
17
|
-
async enqueueJob(newJobId, workflow) {
|
|
18
|
-
// validate job state on registry
|
|
19
|
-
const jobStatus = this.jobs.getJobStatus(newJobId);
|
|
20
|
-
if (jobStatus !== "pending") {
|
|
21
|
-
throw new Error(`Cannot enqueue job ${newJobId} with status ${jobStatus}`);
|
|
22
|
-
}
|
|
23
|
-
this.queue.push({ jobId: newJobId, workflow, attempts: 1 });
|
|
24
|
-
this.processQueue().catch(reason => {
|
|
25
|
-
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, reason);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
async processQueue() {
|
|
29
|
-
if (this.isProcessing) {
|
|
30
|
-
this.logger.debug(`Job queue for workflow hash ${this.workflowHash} is already being processed, skipping.`);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
this.isProcessing = true;
|
|
34
|
-
// Get the next job in the queue
|
|
35
|
-
const nextJob = this.queue.shift();
|
|
36
|
-
if (nextJob) {
|
|
37
|
-
this.logger.debug(`Processing job ${nextJob.jobId}`);
|
|
38
|
-
let preferredClient;
|
|
39
|
-
// If this processor is for the general queue, try to find a preferred client
|
|
40
|
-
if (this.workflowHash === "general") {
|
|
41
|
-
preferredClient = await this.clientRegistry.getOptimalIdleClient(nextJob.workflow);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
preferredClient = this.clientRegistry.getOptimalClient(nextJob.workflow);
|
|
45
|
-
}
|
|
46
|
-
if (!preferredClient) {
|
|
47
|
-
this.logger.debug(`No idle clients available for job ${nextJob.jobId}.`);
|
|
48
|
-
// Mark as pending again
|
|
49
|
-
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
50
|
-
// Re-add the job to the front of the queue for later processing
|
|
51
|
-
this.queue.unshift(nextJob);
|
|
52
|
-
this.isProcessing = false;
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.logger.info(`Assigning job ${nextJob.jobId} to client ${preferredClient.nodeName}`);
|
|
57
|
-
this.jobs.setJobStatus(nextJob.jobId, "assigned", preferredClient.url);
|
|
58
|
-
await this.runJobOnClient(nextJob, preferredClient);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
this.isProcessing = false;
|
|
62
|
-
// Recursively process the next job if we have idle clients to handle them
|
|
63
|
-
if (this.queue.length > 0) {
|
|
64
|
-
let idleCount = 0;
|
|
65
|
-
for (const client of this.clientRegistry.clients.values()) {
|
|
66
|
-
this.logger.debug(`Client ${client.nodeName} state: ${client.state}`);
|
|
67
|
-
if (client.state === "idle") {
|
|
68
|
-
idleCount++;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (idleCount > 0) {
|
|
72
|
-
this.logger.debug(`Continuing to process next job in queue for workflow hash ${this.workflowHash}.`);
|
|
73
|
-
try {
|
|
74
|
-
await this.processQueue();
|
|
75
|
-
}
|
|
76
|
-
catch (e) {
|
|
77
|
-
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, e);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
applyAutoSeed(workflow) {
|
|
83
|
-
const autoSeeds = {};
|
|
84
|
-
for (const [nodeId, nodeValue] of Object.entries(workflow)) {
|
|
85
|
-
if (!nodeValue || typeof nodeValue !== "object")
|
|
86
|
-
continue;
|
|
87
|
-
const inputs = nodeValue.inputs;
|
|
88
|
-
if (!inputs || typeof inputs !== "object")
|
|
89
|
-
continue;
|
|
90
|
-
if (typeof inputs.seed === "number" && inputs.seed === -1) {
|
|
91
|
-
const val = Math.floor(Math.random() * 2_147_483_647);
|
|
92
|
-
inputs.seed = val;
|
|
93
|
-
autoSeeds[nodeId] = val;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return autoSeeds;
|
|
97
|
-
}
|
|
98
|
-
async runJobOnClient(nextJob, preferredClient) {
|
|
99
|
-
try {
|
|
100
|
-
const api = preferredClient.api;
|
|
101
|
-
// Check if client is idle before sending job
|
|
102
|
-
const queueStatus = await api.getQueue();
|
|
103
|
-
if (queueStatus.queue_running.length !== 0 || queueStatus.queue_pending.length !== 0) {
|
|
104
|
-
this.logger.debug(`Client ${preferredClient.nodeName} is busy, re-adding job ${nextJob.jobId} to queue.`);
|
|
105
|
-
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
106
|
-
this.queue.unshift(nextJob);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
await this.processAttachedMedia(nextJob.workflow, api);
|
|
110
|
-
const workflowJson = nextJob.workflow.toJSON();
|
|
111
|
-
const autoSeeds = this.applyAutoSeed(workflowJson);
|
|
112
|
-
if (Object.keys(autoSeeds).length > 0) {
|
|
113
|
-
this.logger.queue(this.workflowHash, `Applied auto seeds for job ${nextJob.jobId}: ${JSON.stringify(autoSeeds)}`);
|
|
114
|
-
this.jobs.updateJobAutoSeeds(nextJob.jobId, autoSeeds);
|
|
115
|
-
// Update the workflow json with the new seeds before sending
|
|
116
|
-
const nodeIds = Object.keys(autoSeeds);
|
|
117
|
-
for (const nodeId of nodeIds) {
|
|
118
|
-
workflowJson[nodeId].inputs.seed = autoSeeds[nodeId];
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
this.logger.queue(this.workflowHash, `Starting job ${nextJob.jobId} on client ${preferredClient.nodeName}`);
|
|
122
|
-
const result = await api.ext.queue.queuePrompt(null, workflowJson);
|
|
123
|
-
// at this point we have the prompt_id assigned by comfyui, we can mark the job as running
|
|
124
|
-
if (result.prompt_id) {
|
|
125
|
-
this.jobs.setPromptId(nextJob.jobId, result.prompt_id);
|
|
126
|
-
this.jobs.setJobStatus(nextJob.jobId, "running");
|
|
127
|
-
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} is now queued on client ${preferredClient.nodeName} with prompt ID ${result.prompt_id}`);
|
|
128
|
-
// we also mark the client as busy, to prevent new jobs being assigned until we detect completion
|
|
129
|
-
preferredClient.state = "busy";
|
|
130
|
-
this.logger.debug(Array.from(this.clientRegistry.clients.values()).map((c) => `${c.nodeName}: ${c.state}`).join(", "));
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
this.logger.error(`Failed to enqueue job ${nextJob.jobId} on client ${preferredClient.nodeName}: No prompt_id returned.`);
|
|
134
|
-
this.jobs.setJobStatus(nextJob.jobId, "failed");
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
catch (e) {
|
|
138
|
-
this.logger.error(`Failed to run job ${nextJob.jobId} on client ${preferredClient.nodeName}`);
|
|
139
|
-
this.handleFailure(preferredClient, nextJob, e);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
dequeueJob(jobId) {
|
|
143
|
-
this.queue = this.queue.filter(job => job.jobId !== jobId);
|
|
144
|
-
}
|
|
145
|
-
handleFailure(preferredClient, nextJob, e) {
|
|
146
|
-
const { type, message } = classifyFailure(e);
|
|
147
|
-
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} failed on ${preferredClient.nodeName}. Failure type: ${type}. Reason: ${message}`);
|
|
148
|
-
switch (type) {
|
|
149
|
-
case "connection":
|
|
150
|
-
preferredClient.state = "offline"; // Mark as offline to be re-checked later
|
|
151
|
-
this.logger.queue(this.workflowHash, `Re-queuing job ${nextJob.jobId} due to connection error.`);
|
|
152
|
-
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
153
|
-
this.queue.unshift(nextJob); // Re-queue without incrementing attempts
|
|
154
|
-
break;
|
|
155
|
-
case "workflow_incompatibility":
|
|
156
|
-
preferredClient.state = "idle";
|
|
157
|
-
this.logger.queue(this.workflowHash, `Marking client ${preferredClient.nodeName} as incompatible with workflow ${nextJob.workflow.structureHash}.`);
|
|
158
|
-
this.clientRegistry.markClientIncompatibleWithWorkflow(preferredClient.url, nextJob.workflow.structureHash);
|
|
159
|
-
this.retryOrMarkFailed(nextJob, e);
|
|
160
|
-
break;
|
|
161
|
-
case "transient":
|
|
162
|
-
preferredClient.state = "idle";
|
|
163
|
-
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} failed with a transient error. It will not be retried.`);
|
|
164
|
-
this.jobs.setJobFailure(nextJob.jobId, { error: message, details: e.bodyJSON });
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
// Trigger processing for the next job in the queue
|
|
168
|
-
this.processQueue().catch(reason => {
|
|
169
|
-
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, reason);
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
retryOrMarkFailed(nextJob, originalError) {
|
|
173
|
-
// Check if the job has exceeded its max attempts
|
|
174
|
-
if (nextJob.attempts >= this.maxAttempts) {
|
|
175
|
-
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} has reached max attempts (${this.maxAttempts}). Marking as failed.`);
|
|
176
|
-
this.jobs.setJobFailure(nextJob.jobId, originalError.bodyJSON);
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// Confirm if we should re-queue or fail the job
|
|
180
|
-
const eligibleClients = this.clientRegistry.getAllEligibleClientsForWorkflow(nextJob.workflow);
|
|
181
|
-
if (eligibleClients.length > 0) {
|
|
182
|
-
this.logger.queue(this.workflowHash, `Re-queuing job ${nextJob.jobId} (attempt ${nextJob.attempts + 1}) as there are other eligible clients available.`);
|
|
183
|
-
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
184
|
-
// Increment attempts and re-add to the front of the queue
|
|
185
|
-
nextJob.attempts++;
|
|
186
|
-
this.queue.unshift(nextJob);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
this.logger.queue(this.workflowHash, `No other eligible clients for job ${nextJob.jobId}, marking as failed.`);
|
|
190
|
-
this.jobs.setJobFailure(nextJob.jobId, originalError.bodyJSON);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
async processAttachedMedia(workflow, api) {
|
|
194
|
-
await workflow.uploadAssets(api);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
1
|
+
import { classifyFailure } from "./helpers.js";
|
|
2
|
+
export class JobQueueProcessor {
|
|
3
|
+
jobs;
|
|
4
|
+
clientRegistry;
|
|
5
|
+
logger;
|
|
6
|
+
queue = [];
|
|
7
|
+
workflowHash = "";
|
|
8
|
+
isProcessing = false;
|
|
9
|
+
maxAttempts = 3;
|
|
10
|
+
constructor(stateRegistry, clientRegistry, workflowHash, logger) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.logger.debug(`Creating JobQueueProcessor for workflow hash: '${workflowHash}'`);
|
|
13
|
+
this.clientRegistry = clientRegistry;
|
|
14
|
+
this.jobs = stateRegistry;
|
|
15
|
+
this.workflowHash = workflowHash;
|
|
16
|
+
}
|
|
17
|
+
async enqueueJob(newJobId, workflow) {
|
|
18
|
+
// validate job state on registry
|
|
19
|
+
const jobStatus = this.jobs.getJobStatus(newJobId);
|
|
20
|
+
if (jobStatus !== "pending") {
|
|
21
|
+
throw new Error(`Cannot enqueue job ${newJobId} with status ${jobStatus}`);
|
|
22
|
+
}
|
|
23
|
+
this.queue.push({ jobId: newJobId, workflow, attempts: 1 });
|
|
24
|
+
this.processQueue().catch(reason => {
|
|
25
|
+
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, reason);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async processQueue() {
|
|
29
|
+
if (this.isProcessing) {
|
|
30
|
+
this.logger.debug(`Job queue for workflow hash ${this.workflowHash} is already being processed, skipping.`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.isProcessing = true;
|
|
34
|
+
// Get the next job in the queue
|
|
35
|
+
const nextJob = this.queue.shift();
|
|
36
|
+
if (nextJob) {
|
|
37
|
+
this.logger.debug(`Processing job ${nextJob.jobId}`);
|
|
38
|
+
let preferredClient;
|
|
39
|
+
// If this processor is for the general queue, try to find a preferred client
|
|
40
|
+
if (this.workflowHash === "general") {
|
|
41
|
+
preferredClient = await this.clientRegistry.getOptimalIdleClient(nextJob.workflow);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
preferredClient = this.clientRegistry.getOptimalClient(nextJob.workflow);
|
|
45
|
+
}
|
|
46
|
+
if (!preferredClient) {
|
|
47
|
+
this.logger.debug(`No idle clients available for job ${nextJob.jobId}.`);
|
|
48
|
+
// Mark as pending again
|
|
49
|
+
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
50
|
+
// Re-add the job to the front of the queue for later processing
|
|
51
|
+
this.queue.unshift(nextJob);
|
|
52
|
+
this.isProcessing = false;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.logger.info(`Assigning job ${nextJob.jobId} to client ${preferredClient.nodeName}`);
|
|
57
|
+
this.jobs.setJobStatus(nextJob.jobId, "assigned", preferredClient.url);
|
|
58
|
+
await this.runJobOnClient(nextJob, preferredClient);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
this.isProcessing = false;
|
|
62
|
+
// Recursively process the next job if we have idle clients to handle them
|
|
63
|
+
if (this.queue.length > 0) {
|
|
64
|
+
let idleCount = 0;
|
|
65
|
+
for (const client of this.clientRegistry.clients.values()) {
|
|
66
|
+
this.logger.debug(`Client ${client.nodeName} state: ${client.state}`);
|
|
67
|
+
if (client.state === "idle") {
|
|
68
|
+
idleCount++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (idleCount > 0) {
|
|
72
|
+
this.logger.debug(`Continuing to process next job in queue for workflow hash ${this.workflowHash}.`);
|
|
73
|
+
try {
|
|
74
|
+
await this.processQueue();
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
applyAutoSeed(workflow) {
|
|
83
|
+
const autoSeeds = {};
|
|
84
|
+
for (const [nodeId, nodeValue] of Object.entries(workflow)) {
|
|
85
|
+
if (!nodeValue || typeof nodeValue !== "object")
|
|
86
|
+
continue;
|
|
87
|
+
const inputs = nodeValue.inputs;
|
|
88
|
+
if (!inputs || typeof inputs !== "object")
|
|
89
|
+
continue;
|
|
90
|
+
if (typeof inputs.seed === "number" && inputs.seed === -1) {
|
|
91
|
+
const val = Math.floor(Math.random() * 2_147_483_647);
|
|
92
|
+
inputs.seed = val;
|
|
93
|
+
autoSeeds[nodeId] = val;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return autoSeeds;
|
|
97
|
+
}
|
|
98
|
+
async runJobOnClient(nextJob, preferredClient) {
|
|
99
|
+
try {
|
|
100
|
+
const api = preferredClient.api;
|
|
101
|
+
// Check if client is idle before sending job
|
|
102
|
+
const queueStatus = await api.getQueue();
|
|
103
|
+
if (queueStatus.queue_running.length !== 0 || queueStatus.queue_pending.length !== 0) {
|
|
104
|
+
this.logger.debug(`Client ${preferredClient.nodeName} is busy, re-adding job ${nextJob.jobId} to queue.`);
|
|
105
|
+
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
106
|
+
this.queue.unshift(nextJob);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
await this.processAttachedMedia(nextJob.workflow, api);
|
|
110
|
+
const workflowJson = nextJob.workflow.toJSON();
|
|
111
|
+
const autoSeeds = this.applyAutoSeed(workflowJson);
|
|
112
|
+
if (Object.keys(autoSeeds).length > 0) {
|
|
113
|
+
this.logger.queue(this.workflowHash, `Applied auto seeds for job ${nextJob.jobId}: ${JSON.stringify(autoSeeds)}`);
|
|
114
|
+
this.jobs.updateJobAutoSeeds(nextJob.jobId, autoSeeds);
|
|
115
|
+
// Update the workflow json with the new seeds before sending
|
|
116
|
+
const nodeIds = Object.keys(autoSeeds);
|
|
117
|
+
for (const nodeId of nodeIds) {
|
|
118
|
+
workflowJson[nodeId].inputs.seed = autoSeeds[nodeId];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this.logger.queue(this.workflowHash, `Starting job ${nextJob.jobId} on client ${preferredClient.nodeName}`);
|
|
122
|
+
const result = await api.ext.queue.queuePrompt(null, workflowJson);
|
|
123
|
+
// at this point we have the prompt_id assigned by comfyui, we can mark the job as running
|
|
124
|
+
if (result.prompt_id) {
|
|
125
|
+
this.jobs.setPromptId(nextJob.jobId, result.prompt_id);
|
|
126
|
+
this.jobs.setJobStatus(nextJob.jobId, "running");
|
|
127
|
+
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} is now queued on client ${preferredClient.nodeName} with prompt ID ${result.prompt_id}`);
|
|
128
|
+
// we also mark the client as busy, to prevent new jobs being assigned until we detect completion
|
|
129
|
+
preferredClient.state = "busy";
|
|
130
|
+
this.logger.debug(Array.from(this.clientRegistry.clients.values()).map((c) => `${c.nodeName}: ${c.state}`).join(", "));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.logger.error(`Failed to enqueue job ${nextJob.jobId} on client ${preferredClient.nodeName}: No prompt_id returned.`);
|
|
134
|
+
this.jobs.setJobStatus(nextJob.jobId, "failed");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
this.logger.error(`Failed to run job ${nextJob.jobId} on client ${preferredClient.nodeName}`);
|
|
139
|
+
this.handleFailure(preferredClient, nextJob, e);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
dequeueJob(jobId) {
|
|
143
|
+
this.queue = this.queue.filter(job => job.jobId !== jobId);
|
|
144
|
+
}
|
|
145
|
+
handleFailure(preferredClient, nextJob, e) {
|
|
146
|
+
const { type, message } = classifyFailure(e);
|
|
147
|
+
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} failed on ${preferredClient.nodeName}. Failure type: ${type}. Reason: ${message}`);
|
|
148
|
+
switch (type) {
|
|
149
|
+
case "connection":
|
|
150
|
+
preferredClient.state = "offline"; // Mark as offline to be re-checked later
|
|
151
|
+
this.logger.queue(this.workflowHash, `Re-queuing job ${nextJob.jobId} due to connection error.`);
|
|
152
|
+
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
153
|
+
this.queue.unshift(nextJob); // Re-queue without incrementing attempts
|
|
154
|
+
break;
|
|
155
|
+
case "workflow_incompatibility":
|
|
156
|
+
preferredClient.state = "idle";
|
|
157
|
+
this.logger.queue(this.workflowHash, `Marking client ${preferredClient.nodeName} as incompatible with workflow ${nextJob.workflow.structureHash}.`);
|
|
158
|
+
this.clientRegistry.markClientIncompatibleWithWorkflow(preferredClient.url, nextJob.workflow.structureHash);
|
|
159
|
+
this.retryOrMarkFailed(nextJob, e);
|
|
160
|
+
break;
|
|
161
|
+
case "transient":
|
|
162
|
+
preferredClient.state = "idle";
|
|
163
|
+
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} failed with a transient error. It will not be retried.`);
|
|
164
|
+
this.jobs.setJobFailure(nextJob.jobId, { error: message, details: e.bodyJSON });
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
// Trigger processing for the next job in the queue
|
|
168
|
+
this.processQueue().catch(reason => {
|
|
169
|
+
this.logger.error(`Error processing job queue for workflow hash ${this.workflowHash}:`, reason);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
retryOrMarkFailed(nextJob, originalError) {
|
|
173
|
+
// Check if the job has exceeded its max attempts
|
|
174
|
+
if (nextJob.attempts >= this.maxAttempts) {
|
|
175
|
+
this.logger.queue(this.workflowHash, `Job ${nextJob.jobId} has reached max attempts (${this.maxAttempts}). Marking as failed.`);
|
|
176
|
+
this.jobs.setJobFailure(nextJob.jobId, originalError.bodyJSON);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Confirm if we should re-queue or fail the job
|
|
180
|
+
const eligibleClients = this.clientRegistry.getAllEligibleClientsForWorkflow(nextJob.workflow);
|
|
181
|
+
if (eligibleClients.length > 0) {
|
|
182
|
+
this.logger.queue(this.workflowHash, `Re-queuing job ${nextJob.jobId} (attempt ${nextJob.attempts + 1}) as there are other eligible clients available.`);
|
|
183
|
+
this.jobs.setJobStatus(nextJob.jobId, "pending");
|
|
184
|
+
// Increment attempts and re-add to the front of the queue
|
|
185
|
+
nextJob.attempts++;
|
|
186
|
+
this.queue.unshift(nextJob);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
this.logger.queue(this.workflowHash, `No other eligible clients for job ${nextJob.jobId}, marking as failed.`);
|
|
190
|
+
this.jobs.setJobFailure(nextJob.jobId, originalError.bodyJSON);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async processAttachedMedia(workflow, api) {
|
|
194
|
+
await workflow.uploadAssets(api);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
197
|
//# sourceMappingURL=job-queue-processor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-queue-processor.js","sourceRoot":"","sources":["../../src/multipool/job-queue-processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"job-queue-processor.js","sourceRoot":"","sources":["../../src/multipool/job-queue-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
workflow: Workflow;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
private processQueue;
|
|
44
|
-
waitForResults(jobId: string): Promise<JobResults>;
|
|
45
|
-
addJobImages(prompt_id: string, images: ImageInfo[]): void;
|
|
46
|
-
private removeJobFromQueue;
|
|
47
|
-
attachJobProgressListener(jobId: string, progressListener: (progress: {
|
|
48
|
-
value: number;
|
|
49
|
-
max: number;
|
|
50
|
-
}) => void): void;
|
|
51
|
-
attachJobPreviewListener(jobId: string, previewListener: (preview: {
|
|
52
|
-
metadata: any;
|
|
53
|
-
blob: Blob;
|
|
54
|
-
}) => void): void;
|
|
55
|
-
updateJobProgress(prompt_id: string, value: number, max: number, nodeId?: string | number): void;
|
|
56
|
-
updateJobPreviewMetadata(prompt_id: any, metadata: any, blob: Blob): void;
|
|
57
|
-
setJobFailure(jobId: string, bodyJSON: any): void;
|
|
58
|
-
/**
|
|
59
|
-
* Track node execution start for profiling
|
|
60
|
-
*/
|
|
61
|
-
onNodeExecuting(prompt_id: string, nodeId: string): void;
|
|
62
|
-
/**
|
|
63
|
-
* Track cached nodes for profiling
|
|
64
|
-
*/
|
|
65
|
-
onCachedNodes(prompt_id: string, nodeIds: string[]): void;
|
|
66
|
-
}
|
|
1
|
+
import { JobResults, JobState, JobStatus } from "./interfaces.js";
|
|
2
|
+
import { MultiWorkflowPool } from "./multi-workflow-pool.js";
|
|
3
|
+
import { ClientRegistry } from "./client-registry.js";
|
|
4
|
+
import { Workflow } from "./workflow.js";
|
|
5
|
+
import { ImageInfo } from "../types/api.js";
|
|
6
|
+
export declare class JobStateRegistry {
|
|
7
|
+
pool: MultiWorkflowPool;
|
|
8
|
+
clients: ClientRegistry;
|
|
9
|
+
jobs: Map<string, JobState>;
|
|
10
|
+
promptIdToJobId: Map<string, string>;
|
|
11
|
+
constructor(pool: MultiWorkflowPool, clients: ClientRegistry);
|
|
12
|
+
addJob(workflow: Workflow): string;
|
|
13
|
+
getJobStatus(jobId: string): JobStatus;
|
|
14
|
+
cancelJob(jobId: string): Promise<void>;
|
|
15
|
+
setJobStatus(jobId: string, newStatus: JobStatus, assignedClientUrl?: string): void;
|
|
16
|
+
updateJobAutoSeeds(jobId: string, autoSeeds: Record<string, number>): void;
|
|
17
|
+
setPromptId(jobId: string, prompt_id: string): void;
|
|
18
|
+
completeJob(prompt_id: string): void;
|
|
19
|
+
private processQueue;
|
|
20
|
+
waitForResults(jobId: string): Promise<JobResults>;
|
|
21
|
+
addJobImages(prompt_id: string, images: ImageInfo[]): void;
|
|
22
|
+
private removeJobFromQueue;
|
|
23
|
+
attachJobProgressListener(jobId: string, progressListener: (progress: {
|
|
24
|
+
value: number;
|
|
25
|
+
max: number;
|
|
26
|
+
}) => void): void;
|
|
27
|
+
attachJobPreviewListener(jobId: string, previewListener: (preview: {
|
|
28
|
+
metadata: any;
|
|
29
|
+
blob: Blob;
|
|
30
|
+
}) => void): void;
|
|
31
|
+
updateJobProgress(prompt_id: string, value: number, max: number, nodeId?: string | number): void;
|
|
32
|
+
updateJobPreviewMetadata(prompt_id: any, metadata: any, blob: Blob): void;
|
|
33
|
+
setJobFailure(jobId: string, bodyJSON: any): void;
|
|
34
|
+
/**
|
|
35
|
+
* Track node execution start for profiling
|
|
36
|
+
*/
|
|
37
|
+
onNodeExecuting(prompt_id: string, nodeId: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Track cached nodes for profiling
|
|
40
|
+
*/
|
|
41
|
+
onCachedNodes(prompt_id: string, nodeIds: string[]): void;
|
|
42
|
+
}
|
|
67
43
|
//# sourceMappingURL=job-state-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-state-registry.d.ts","sourceRoot":"","sources":["../../src/multipool/job-state-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-state-registry.d.ts","sourceRoot":"","sources":["../../src/multipool/job-state-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,gBAAgB;IAE3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IAGxB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;IAGxC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;gBAErC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc;IAK5D,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAwBlC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAQhC,SAAS,CAAC,KAAK,EAAE,MAAM;IAiE7B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM;IAW5E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQnE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAc5C,WAAW,CAAC,SAAS,EAAE,MAAM;IA4C7B,OAAO,CAAC,YAAY;IASd,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWxD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;IAWnD,OAAO,CAAC,kBAAkB;IAO1B,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE;QACpE,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,KAAK,IAAI;IAQV,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,OAAO,EAAE;QACjE,QAAQ,EAAE,GAAG,CAAC;QACd,IAAI,EAAE,IAAI,CAAC;KACZ,KAAK,IAAI;IAQV,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBzF,wBAAwB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;IAWlE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;IA+B1C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOjD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;CAMnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-state-registry.js","sourceRoot":"","sources":["../../src/multipool/job-state-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-state-registry.js","sourceRoot":"","sources":["../../src/multipool/job-state-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { JobResults } from "./job-state-registry.js";
|
|
2
1
|
import { JobQueueProcessor } from "./job-queue-processor.js";
|
|
3
2
|
import { Workflow } from "./workflow.js";
|
|
4
|
-
import { MultiWorkflowPoolOptions, PoolEvent } from "./interfaces.js";
|
|
3
|
+
import { MultiWorkflowPoolOptions, PoolEvent, JobResults } from "./interfaces.js";
|
|
5
4
|
/**
|
|
6
5
|
* MultiWorkflowPool class to manage heterogeneous clusters of ComfyUI workers with different workflow capabilities.
|
|
7
6
|
* Using a fully event driven architecture to handle client connections, job submissions, and failover strategies.
|
|
@@ -24,7 +23,7 @@ export declare class MultiWorkflowPool {
|
|
|
24
23
|
}): void;
|
|
25
24
|
removeClient(clientUrl: string): void;
|
|
26
25
|
submitJob(workflow: Workflow<any>): Promise<string>;
|
|
27
|
-
getJobStatus(jobId: string): import("./
|
|
26
|
+
getJobStatus(jobId: string): import("./interfaces.js").JobStatus;
|
|
28
27
|
cancelJob(jobId: string): Promise<void>;
|
|
29
28
|
attachEventHook(event: string, listener: (e: PoolEvent) => void): void;
|
|
30
29
|
private assertQueue;
|