comfyui-node 1.6.1 β 1.6.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/.tsbuildinfo +1 -1
- package/dist/call-wrapper.js +856 -856
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/multipool/client-registry.d.ts +32 -11
- package/dist/multipool/client-registry.d.ts.map +1 -1
- package/dist/multipool/client-registry.js +135 -8
- package/dist/multipool/client-registry.js.map +1 -1
- package/dist/multipool/helpers.d.ts +5 -0
- package/dist/multipool/helpers.d.ts.map +1 -0
- package/dist/multipool/helpers.js +53 -0
- package/dist/multipool/helpers.js.map +1 -0
- package/dist/multipool/index.d.ts +2 -1
- package/dist/multipool/index.d.ts.map +1 -1
- package/dist/multipool/index.js +2 -1
- package/dist/multipool/index.js.map +1 -1
- package/dist/multipool/interfaces.d.ts +25 -0
- package/dist/multipool/interfaces.d.ts.map +1 -1
- package/dist/multipool/job-profiler.d.ts +128 -0
- package/dist/multipool/job-profiler.d.ts.map +1 -0
- package/dist/multipool/job-profiler.js +222 -0
- package/dist/multipool/job-profiler.js.map +1 -0
- package/dist/multipool/job-queue-processor.d.ts +27 -11
- package/dist/multipool/job-queue-processor.d.ts.map +1 -1
- package/dist/multipool/job-queue-processor.js +196 -9
- package/dist/multipool/job-queue-processor.js.map +1 -1
- package/dist/multipool/job-state-registry.d.ts +67 -0
- package/dist/multipool/job-state-registry.d.ts.map +1 -0
- package/dist/multipool/job-state-registry.js +283 -0
- package/dist/multipool/job-state-registry.js.map +1 -0
- package/dist/multipool/logger.d.ts +30 -0
- package/dist/multipool/logger.d.ts.map +1 -0
- package/dist/multipool/logger.js +75 -0
- package/dist/multipool/logger.js.map +1 -0
- package/dist/multipool/multi-workflow-pool.d.ts +86 -7
- package/dist/multipool/multi-workflow-pool.d.ts.map +1 -1
- package/dist/multipool/multi-workflow-pool.js +365 -13
- package/dist/multipool/multi-workflow-pool.js.map +1 -1
- package/dist/multipool/pool-event-manager.d.ts +10 -10
- package/dist/multipool/tests/client-registry-api-demo.d.ts +7 -0
- package/dist/multipool/tests/client-registry-api-demo.d.ts.map +1 -0
- package/dist/multipool/tests/client-registry-api-demo.js +136 -0
- package/dist/multipool/tests/client-registry-api-demo.js.map +1 -0
- package/dist/multipool/tests/client-registry.spec.d.ts +2 -0
- package/dist/multipool/tests/client-registry.spec.d.ts.map +1 -0
- package/dist/multipool/tests/client-registry.spec.js +191 -0
- package/dist/multipool/tests/client-registry.spec.js.map +1 -0
- package/dist/multipool/tests/error-classification-tests.d.ts +2 -0
- package/dist/multipool/tests/error-classification-tests.d.ts.map +1 -0
- package/dist/multipool/tests/error-classification-tests.js +374 -0
- package/dist/multipool/tests/error-classification-tests.js.map +1 -0
- package/dist/multipool/tests/event-forwarding-demo.d.ts +7 -0
- package/dist/multipool/tests/event-forwarding-demo.d.ts.map +1 -0
- package/dist/multipool/tests/event-forwarding-demo.js +88 -0
- package/dist/multipool/tests/event-forwarding-demo.js.map +1 -0
- package/dist/multipool/tests/helpers.spec.d.ts +2 -0
- package/dist/multipool/tests/helpers.spec.d.ts.map +1 -0
- package/dist/multipool/tests/helpers.spec.js +100 -0
- package/dist/multipool/tests/helpers.spec.js.map +1 -0
- package/dist/multipool/tests/job-queue-processor.spec.d.ts +2 -0
- package/dist/multipool/tests/job-queue-processor.spec.d.ts.map +1 -0
- package/dist/multipool/tests/job-queue-processor.spec.js +89 -0
- package/dist/multipool/tests/job-queue-processor.spec.js.map +1 -0
- package/dist/multipool/tests/job-state-registry.d.ts +16 -16
- package/dist/multipool/tests/job-state-registry.js +23 -23
- package/dist/multipool/tests/job-state-registry.spec.d.ts +2 -0
- package/dist/multipool/tests/job-state-registry.spec.d.ts.map +1 -0
- package/dist/multipool/tests/job-state-registry.spec.js +143 -0
- package/dist/multipool/tests/job-state-registry.spec.js.map +1 -0
- package/dist/multipool/tests/multipool-basic.d.ts +11 -1
- package/dist/multipool/tests/multipool-basic.d.ts.map +1 -1
- package/dist/multipool/tests/multipool-basic.js +140 -2
- package/dist/multipool/tests/multipool-basic.js.map +1 -1
- package/dist/multipool/tests/profiling-demo.d.ts +7 -0
- package/dist/multipool/tests/profiling-demo.d.ts.map +1 -0
- package/dist/multipool/tests/profiling-demo.js +88 -0
- package/dist/multipool/tests/profiling-demo.js.map +1 -0
- package/dist/multipool/tests/prompt-generator.d.ts +10 -0
- package/dist/multipool/tests/prompt-generator.d.ts.map +1 -0
- package/dist/multipool/tests/prompt-generator.js +26 -0
- package/dist/multipool/tests/prompt-generator.js.map +1 -0
- package/dist/multipool/tests/test-helpers.d.ts +4 -0
- package/dist/multipool/tests/test-helpers.d.ts.map +1 -0
- package/dist/multipool/tests/test-helpers.js +10 -0
- package/dist/multipool/tests/test-helpers.js.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts +32 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js +299 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js.map +1 -0
- package/dist/multipool/workflow.d.ts +178 -173
- package/dist/multipool/workflow.d.ts.map +1 -1
- package/dist/multipool/workflow.js +333 -271
- package/dist/multipool/workflow.js.map +1 -1
- package/dist/pool/SmartPool.d.ts +143 -143
- package/dist/pool/SmartPool.js +676 -676
- package/dist/pool/SmartPoolV2.d.ts +119 -119
- package/dist/pool/SmartPoolV2.js +586 -586
- package/dist/pool/WorkflowPool.d.ts +202 -202
- package/dist/pool/WorkflowPool.d.ts.map +1 -1
- package/dist/pool/WorkflowPool.js +845 -840
- package/dist/pool/WorkflowPool.js.map +1 -1
- package/dist/pool/client/ClientManager.d.ts +86 -86
- package/dist/pool/client/ClientManager.js +215 -215
- package/dist/pool/index.d.ts +9 -11
- package/dist/pool/index.d.ts.map +1 -1
- package/dist/pool/index.js +3 -5
- package/dist/pool/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ClientRegistry } from "
|
|
2
|
-
import { PoolEventManager } from "
|
|
3
|
-
import { JobStateRegistry } from "
|
|
4
|
-
import { JobQueueProcessor } from "
|
|
1
|
+
import { ClientRegistry } from "./client-registry.js";
|
|
2
|
+
import { PoolEventManager } from "./pool-event-manager.js";
|
|
3
|
+
import { JobStateRegistry } from "./job-state-registry.js";
|
|
4
|
+
import { JobQueueProcessor } from "./job-queue-processor.js";
|
|
5
|
+
import { createLogger } from "./logger.js";
|
|
5
6
|
/**
|
|
6
7
|
* MultiWorkflowPool class to manage heterogeneous clusters of ComfyUI workers with different workflow capabilities.
|
|
7
8
|
* Using a fully event driven architecture to handle client connections, job submissions, and failover strategies.
|
|
@@ -16,18 +17,113 @@ export class MultiWorkflowPool {
|
|
|
16
17
|
jobRegistry;
|
|
17
18
|
// Multi queue map, one per workflow based on the workflow hash
|
|
18
19
|
queues = new Map();
|
|
19
|
-
|
|
20
|
+
// Pool configuration
|
|
21
|
+
options;
|
|
22
|
+
// Logger instance
|
|
23
|
+
logger;
|
|
24
|
+
monitoringInterval;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.options = {
|
|
27
|
+
connectionTimeoutMs: options?.connectionTimeoutMs ?? 10000,
|
|
28
|
+
enableMonitoring: options?.enableMonitoring ?? false,
|
|
29
|
+
monitoringIntervalMs: options?.monitoringIntervalMs ?? 60000,
|
|
30
|
+
logLevel: options?.logLevel ?? "warn",
|
|
31
|
+
enableProfiling: options?.enableProfiling ?? false
|
|
32
|
+
};
|
|
33
|
+
this.logger = createLogger("MultiWorkflowPool", this.options.logLevel);
|
|
20
34
|
this.events = new PoolEventManager(this);
|
|
21
|
-
this.clientRegistry = new ClientRegistry(this);
|
|
22
|
-
this.jobRegistry = new JobStateRegistry(this);
|
|
35
|
+
this.clientRegistry = new ClientRegistry(this, this.logger);
|
|
36
|
+
this.jobRegistry = new JobStateRegistry(this, this.clientRegistry);
|
|
37
|
+
// Create general queue for workflows without specific hashes
|
|
38
|
+
this.queues.set("general", new JobQueueProcessor(this.jobRegistry, this.clientRegistry, "general", this.logger));
|
|
39
|
+
// Monitoring
|
|
40
|
+
if (this.options.enableMonitoring) {
|
|
41
|
+
this.monitoringInterval = setInterval(() => {
|
|
42
|
+
this.printStatusSummary();
|
|
43
|
+
}, this.options.monitoringIntervalMs);
|
|
44
|
+
}
|
|
23
45
|
}
|
|
24
46
|
// PUBLIC API
|
|
25
47
|
async init() {
|
|
48
|
+
if (this.clientRegistry.clients.size === 0) {
|
|
49
|
+
throw new Error("No clients registered in the pool. Please add clients before initializing the pool.");
|
|
50
|
+
}
|
|
51
|
+
const connectionPromises = [];
|
|
52
|
+
for (const client of this.clientRegistry.clients.values()) {
|
|
53
|
+
connectionPromises.push(new Promise(async (resolve, reject) => {
|
|
54
|
+
let timeout = setTimeout(() => {
|
|
55
|
+
client.api.abortReconnect();
|
|
56
|
+
reject(new Error(`Connection to client ${client.url} timed out`));
|
|
57
|
+
}, this.options.connectionTimeoutMs);
|
|
58
|
+
try {
|
|
59
|
+
const readyApi = await client.api.init(1);
|
|
60
|
+
clearTimeout(timeout);
|
|
61
|
+
timeout = null;
|
|
62
|
+
this.logger.info(`Connected to ${client.url}`);
|
|
63
|
+
client.api = readyApi;
|
|
64
|
+
this.attachHandlersToClient(client);
|
|
65
|
+
const queueStatus = await client.api.getQueue();
|
|
66
|
+
if (queueStatus.queue_running.length === 0 && queueStatus.queue_pending.length === 0) {
|
|
67
|
+
this.logger.debug(`Client ${client.url} is idle.`);
|
|
68
|
+
client.state = "idle";
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
client.state = "busy";
|
|
72
|
+
}
|
|
73
|
+
resolve();
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
client.state = "offline";
|
|
77
|
+
reject(e);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
if (timeout) {
|
|
81
|
+
clearTimeout(timeout);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
const promiseResults = await Promise.allSettled(connectionPromises);
|
|
87
|
+
const failedConnections = promiseResults.filter(result => result.status === "rejected");
|
|
88
|
+
if (failedConnections.length > 0) {
|
|
89
|
+
this.logger.warn(`Warning: ${failedConnections.length} client(s) failed to connect.`);
|
|
90
|
+
failedConnections.forEach((result) => {
|
|
91
|
+
if (result.status === "rejected") {
|
|
92
|
+
this.logger.error("Connection failed:", result.reason);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Throw error if all connections failed
|
|
97
|
+
if (failedConnections.length === this.clientRegistry.clients.size) {
|
|
98
|
+
throw new Error("All clients failed to connect. Pool initialization failed.");
|
|
99
|
+
}
|
|
100
|
+
this.logger.info(`Initialization complete. ${this.clientRegistry.clients.size - failedConnections.length} client(s) connected successfully.`);
|
|
26
101
|
}
|
|
27
102
|
async shutdown() {
|
|
103
|
+
this.logger.info("Shutting down MultiWorkflowPool...");
|
|
104
|
+
if (this.monitoringInterval) {
|
|
105
|
+
clearInterval(this.monitoringInterval);
|
|
106
|
+
}
|
|
107
|
+
// Disconnect all clients
|
|
108
|
+
const disconnectPromises = [];
|
|
109
|
+
for (const client of this.clientRegistry.clients.values()) {
|
|
110
|
+
disconnectPromises.push(new Promise(async (resolve) => {
|
|
111
|
+
try {
|
|
112
|
+
client.api.destroy();
|
|
113
|
+
this.logger.debug(`Disconnected from client ${client.url}`);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
this.logger.error(`Error disconnecting from client ${client.url}:`, e);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
resolve();
|
|
120
|
+
}
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
await Promise.allSettled(disconnectPromises);
|
|
28
124
|
}
|
|
29
|
-
addClient(clientUrl) {
|
|
30
|
-
this.clientRegistry.addClient(clientUrl);
|
|
125
|
+
addClient(clientUrl, options) {
|
|
126
|
+
this.clientRegistry.addClient(clientUrl, options);
|
|
31
127
|
}
|
|
32
128
|
removeClient(clientUrl) {
|
|
33
129
|
this.clientRegistry.removeClient(clientUrl);
|
|
@@ -38,19 +134,27 @@ export class MultiWorkflowPool {
|
|
|
38
134
|
workflow.updateHash();
|
|
39
135
|
workflowHash = workflow.structureHash;
|
|
40
136
|
}
|
|
41
|
-
|
|
137
|
+
// check if there are clients with affinity for this workflow
|
|
138
|
+
let queue;
|
|
139
|
+
if (workflowHash && this.clientRegistry.hasClientsForWorkflow(workflowHash)) {
|
|
140
|
+
queue = this.assertQueue(workflowHash);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
queue = this.queues.get("general");
|
|
144
|
+
this.logger.debug(`No clients with affinity for workflow hash ${workflowHash}, using general queue.`);
|
|
145
|
+
}
|
|
42
146
|
if (!queue) {
|
|
43
147
|
throw new Error("Failed to create or retrieve job queue for workflow.");
|
|
44
148
|
}
|
|
45
149
|
const newJobId = this.jobRegistry.addJob(workflow);
|
|
46
|
-
queue.enqueueJob(newJobId, workflow);
|
|
150
|
+
await queue.enqueueJob(newJobId, workflow);
|
|
47
151
|
return newJobId;
|
|
48
152
|
}
|
|
49
153
|
getJobStatus(jobId) {
|
|
50
154
|
return this.jobRegistry.getJobStatus(jobId);
|
|
51
155
|
}
|
|
52
156
|
async cancelJob(jobId) {
|
|
53
|
-
this.jobRegistry.cancelJob(jobId);
|
|
157
|
+
return this.jobRegistry.cancelJob(jobId);
|
|
54
158
|
}
|
|
55
159
|
attachEventHook(event, listener) {
|
|
56
160
|
if (event && listener) {
|
|
@@ -64,10 +168,258 @@ export class MultiWorkflowPool {
|
|
|
64
168
|
}
|
|
65
169
|
let queue = this.queues.get(workflowHash);
|
|
66
170
|
if (!queue) {
|
|
67
|
-
queue = new JobQueueProcessor(this);
|
|
171
|
+
queue = new JobQueueProcessor(this.jobRegistry, this.clientRegistry, workflowHash, this.logger);
|
|
68
172
|
this.queues.set(workflowHash, queue);
|
|
69
173
|
}
|
|
70
174
|
return queue;
|
|
71
175
|
}
|
|
176
|
+
attachHandlersToClient(client) {
|
|
177
|
+
// Forward all client events through the pool event manager
|
|
178
|
+
client.api.on("all", event => {
|
|
179
|
+
const payload = {
|
|
180
|
+
clientUrl: client.url,
|
|
181
|
+
clientName: client.nodeName,
|
|
182
|
+
eventType: event.detail.type,
|
|
183
|
+
eventData: event.detail.data
|
|
184
|
+
};
|
|
185
|
+
this.events.emitEvent({
|
|
186
|
+
type: `client:${event.detail.type}`,
|
|
187
|
+
payload
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
client.api.on("status", event => {
|
|
191
|
+
this.logger.client(client.nodeName, event.type, `Queue Remaining: ${event.detail.status.exec_info.queue_remaining}`);
|
|
192
|
+
// Update client state based on status
|
|
193
|
+
if (event.detail.status.exec_info.queue_remaining === 0) {
|
|
194
|
+
client.state = "idle";
|
|
195
|
+
// Trigger queue processing
|
|
196
|
+
client.workflowAffinity?.forEach(value => {
|
|
197
|
+
this.logger.debug(`Triggering queue processing for workflow hash ${value} due to client ${client.nodeName} becoming idle.`);
|
|
198
|
+
const queue = this.queues.get(value);
|
|
199
|
+
if (queue) {
|
|
200
|
+
queue.processQueue().catch(reason => {
|
|
201
|
+
this.logger.error(`Error processing job queue for workflow hash ${value}:`, reason);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
client.state = "busy";
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
client.api.on("b_preview_meta", event => {
|
|
211
|
+
const prompt_id = event.detail.metadata.prompt_id;
|
|
212
|
+
if (prompt_id) {
|
|
213
|
+
this.jobRegistry.updateJobPreviewMetadata(prompt_id, event.detail.metadata, event.detail.blob);
|
|
214
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] Preview metadata for prompt ID: ${prompt_id} | blob size: ${event.detail.blob.size} (${event.detail.metadata.image_type})`);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
this.logger.warn(`[${event.type}@${client.nodeName}] Preview metadata received without prompt ID.`);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
// Handle finished nodes, extract image for prompt_id
|
|
221
|
+
client.api.on("executed", event => {
|
|
222
|
+
const prompt_id = event.detail.prompt_id;
|
|
223
|
+
if (prompt_id) {
|
|
224
|
+
const output = event.detail.output;
|
|
225
|
+
if (output && output.images) {
|
|
226
|
+
this.jobRegistry.addJobImages(prompt_id, output.images);
|
|
227
|
+
}
|
|
228
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] Node executed for prompt ID: ${prompt_id}`, event.detail.output);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
this.logger.warn(`[${event.type}@${client.nodeName}] Executed event received without prompt ID.`);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
client.api.on("progress", event => {
|
|
235
|
+
const prompt_id = event.detail.prompt_id;
|
|
236
|
+
if (prompt_id) {
|
|
237
|
+
const nodeId = event.detail.node;
|
|
238
|
+
this.jobRegistry.updateJobProgress(prompt_id, event.detail.value, event.detail.max, nodeId !== null ? nodeId : undefined);
|
|
239
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] Progress for prompt ID: ${prompt_id} | ${Math.round(event.detail.value / event.detail.max * 100)}%`);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
this.logger.warn(`[${event.type}@${client.nodeName}] Progress event received without prompt ID.`);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
// Track node execution for profiling
|
|
246
|
+
client.api.on("executing", event => {
|
|
247
|
+
const prompt_id = event.detail.prompt_id;
|
|
248
|
+
const nodeId = event.detail.node;
|
|
249
|
+
if (prompt_id) {
|
|
250
|
+
if (nodeId === null) {
|
|
251
|
+
// Execution completed (node: null event)
|
|
252
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] Execution complete for prompt ID: ${prompt_id}`);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Node started executing
|
|
256
|
+
this.jobRegistry.onNodeExecuting(prompt_id, String(nodeId));
|
|
257
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] Node ${nodeId} executing for prompt ID: ${prompt_id}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
// Track cached nodes for profiling
|
|
262
|
+
client.api.on("execution_cached", event => {
|
|
263
|
+
const prompt_id = event.detail.prompt_id;
|
|
264
|
+
const nodeIds = event.detail.nodes;
|
|
265
|
+
if (prompt_id && nodeIds && Array.isArray(nodeIds)) {
|
|
266
|
+
this.jobRegistry.onCachedNodes(prompt_id, nodeIds.map(String));
|
|
267
|
+
this.logger.debug(`[${event.type}@${client.nodeName}] ${nodeIds.length} nodes cached for prompt ID: ${prompt_id}`);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
client.api.on("execution_success", event => {
|
|
271
|
+
const prompt_id = event.detail.prompt_id;
|
|
272
|
+
if (prompt_id) {
|
|
273
|
+
this.logger.client(client.nodeName, event.type, `Execution success for prompt ID: ${prompt_id}`);
|
|
274
|
+
// Mark client as idle first
|
|
275
|
+
client.state = "idle";
|
|
276
|
+
// Mark job as completed, it will trigger queue processing
|
|
277
|
+
this.jobRegistry.completeJob(prompt_id);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
printStatusSummary() {
|
|
282
|
+
console.log("\n" + "=".repeat(80));
|
|
283
|
+
console.log("MULTI-WORKFLOW POOL STATUS SUMMARY");
|
|
284
|
+
console.log("=".repeat(80));
|
|
285
|
+
// Print client states using console.table
|
|
286
|
+
if (this.clientRegistry.clients.size > 0) {
|
|
287
|
+
console.log("\nπ CLIENT STATES:");
|
|
288
|
+
const clientData = Array.from(this.clientRegistry.clients.values()).map(client => ({
|
|
289
|
+
"URL": client.url,
|
|
290
|
+
"Node Name": client.nodeName,
|
|
291
|
+
"State": client.state,
|
|
292
|
+
"Priority": client.priority !== undefined ? client.priority : "N/A"
|
|
293
|
+
}));
|
|
294
|
+
console.table(clientData);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
console.log("\nπ CLIENT STATES: No clients registered");
|
|
298
|
+
}
|
|
299
|
+
// Print queue states using console.table
|
|
300
|
+
if (this.queues.size > 0) {
|
|
301
|
+
console.log("\n㪠QUEUE STATES:");
|
|
302
|
+
const queueData = Array.from(this.queues.entries()).map(([workflowHash, queue]) => ({
|
|
303
|
+
"Workflow Hash": workflowHash.length > 50 ? workflowHash.substring(0, 47) + "..." : workflowHash,
|
|
304
|
+
"Jobs Pending": queue.queue.length,
|
|
305
|
+
"Type": workflowHash === "general" ? "General" : "Specific"
|
|
306
|
+
}));
|
|
307
|
+
console.table(queueData);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
console.log("\n㪠QUEUE STATES: No queues found");
|
|
311
|
+
}
|
|
312
|
+
console.log("");
|
|
313
|
+
}
|
|
314
|
+
async waitForJobCompletion(jobId) {
|
|
315
|
+
return await this.jobRegistry.waitForResults(jobId);
|
|
316
|
+
}
|
|
317
|
+
attachJobProgressListener(jobId, progressListener) {
|
|
318
|
+
this.jobRegistry.attachJobProgressListener(jobId, progressListener);
|
|
319
|
+
}
|
|
320
|
+
attachJobPreviewListener(jobId, previewListener) {
|
|
321
|
+
this.jobRegistry.attachJobPreviewListener(jobId, previewListener);
|
|
322
|
+
}
|
|
323
|
+
// CLIENT REGISTRY ACCESS METHODS
|
|
324
|
+
/**
|
|
325
|
+
* Get a list of all registered clients with their current state
|
|
326
|
+
* @returns Array of client information objects
|
|
327
|
+
*/
|
|
328
|
+
getClients() {
|
|
329
|
+
return Array.from(this.clientRegistry.clients.values()).map(client => ({
|
|
330
|
+
url: client.url,
|
|
331
|
+
nodeName: client.nodeName,
|
|
332
|
+
state: client.state,
|
|
333
|
+
priority: client.priority,
|
|
334
|
+
workflowAffinityHashes: client.workflowAffinity
|
|
335
|
+
? Array.from(client.workflowAffinity)
|
|
336
|
+
: undefined
|
|
337
|
+
}));
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Get information about a specific client by URL
|
|
341
|
+
* @param clientUrl - The URL of the client to query
|
|
342
|
+
* @returns Client information or null if not found
|
|
343
|
+
*/
|
|
344
|
+
getClient(clientUrl) {
|
|
345
|
+
const client = this.clientRegistry.clients.get(clientUrl);
|
|
346
|
+
if (!client) {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
url: client.url,
|
|
351
|
+
nodeName: client.nodeName,
|
|
352
|
+
state: client.state,
|
|
353
|
+
priority: client.priority,
|
|
354
|
+
workflowAffinityHashes: client.workflowAffinity
|
|
355
|
+
? Array.from(client.workflowAffinity)
|
|
356
|
+
: undefined
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Get all clients that have affinity for a specific workflow
|
|
361
|
+
* @param workflow - The workflow to check affinity for
|
|
362
|
+
* @returns Array of client URLs that can handle this workflow
|
|
363
|
+
*/
|
|
364
|
+
getClientsForWorkflow(workflow) {
|
|
365
|
+
let workflowHash = workflow.structureHash;
|
|
366
|
+
if (!workflowHash) {
|
|
367
|
+
workflow.updateHash();
|
|
368
|
+
workflowHash = workflow.structureHash;
|
|
369
|
+
}
|
|
370
|
+
if (!workflowHash) {
|
|
371
|
+
return [];
|
|
372
|
+
}
|
|
373
|
+
const clientSet = this.clientRegistry.workflowAffinityMap.get(workflowHash);
|
|
374
|
+
return clientSet ? Array.from(clientSet) : [];
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Get all idle clients currently available for work
|
|
378
|
+
* @returns Array of idle client information
|
|
379
|
+
*/
|
|
380
|
+
getIdleClients() {
|
|
381
|
+
return Array.from(this.clientRegistry.clients.values())
|
|
382
|
+
.filter(client => client.state === "idle")
|
|
383
|
+
.map(client => ({
|
|
384
|
+
url: client.url,
|
|
385
|
+
nodeName: client.nodeName,
|
|
386
|
+
priority: client.priority
|
|
387
|
+
}));
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Check if there are any clients available for a specific workflow
|
|
391
|
+
* @param workflow - The workflow to check
|
|
392
|
+
* @returns True if at least one client has affinity for this workflow
|
|
393
|
+
*/
|
|
394
|
+
hasClientsForWorkflow(workflow) {
|
|
395
|
+
let workflowHash = workflow.structureHash;
|
|
396
|
+
if (!workflowHash) {
|
|
397
|
+
workflow.updateHash();
|
|
398
|
+
workflowHash = workflow.structureHash;
|
|
399
|
+
}
|
|
400
|
+
if (!workflowHash) {
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
return this.clientRegistry.hasClientsForWorkflow(workflowHash);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Get statistics about the pool's current state
|
|
407
|
+
* @returns Pool statistics including client counts and queue depths
|
|
408
|
+
*/
|
|
409
|
+
getPoolStats() {
|
|
410
|
+
const clients = Array.from(this.clientRegistry.clients.values());
|
|
411
|
+
return {
|
|
412
|
+
totalClients: clients.length,
|
|
413
|
+
idleClients: clients.filter(c => c.state === "idle").length,
|
|
414
|
+
busyClients: clients.filter(c => c.state === "busy").length,
|
|
415
|
+
offlineClients: clients.filter(c => c.state === "offline").length,
|
|
416
|
+
totalQueues: this.queues.size,
|
|
417
|
+
queues: Array.from(this.queues.entries()).map(([hash, queue]) => ({
|
|
418
|
+
workflowHash: hash,
|
|
419
|
+
pendingJobs: queue.queue.length,
|
|
420
|
+
type: hash === "general" ? "general" : "specific"
|
|
421
|
+
}))
|
|
422
|
+
};
|
|
423
|
+
}
|
|
72
424
|
}
|
|
73
425
|
//# sourceMappingURL=multi-workflow-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-workflow-pool.js","sourceRoot":"","sources":["../../src/multipool/multi-workflow-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAIzE;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAE5B,yCAAyC;IACjC,MAAM,CAAmB;IAEjC,4CAA4C;IACpC,cAAc,CAAiB;IAEvC,kCAAkC;IAC1B,WAAW,CAAmB;IAEtC,+DAA+D;IACvD,MAAM,GAAmC,IAAI,GAAG,EAAE,CAAC;IAE3D;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,aAAa;IACb,KAAK,CAAC,IAAI;IACV,CAAC;IAED,KAAK,CAAC,QAAQ;IACd,CAAC;IAED,SAAS,CAAC,SAAiB;QACzB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAkB;QAChC,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC;QACxC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,QAAgC;QAC7D,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,kBAAkB;IACV,WAAW,CAAC,YAAgC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"multi-workflow-pool.js","sourceRoot":"","sources":["../../src/multipool/multi-workflow-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
|
|
2
|
-
import { PoolEvent } from "src/multipool/interfaces.js";
|
|
3
|
-
export declare class PoolEventManager {
|
|
4
|
-
pool: MultiWorkflowPool;
|
|
5
|
-
hooks: Map<string, Array<Function>>;
|
|
6
|
-
constructor(pool: MultiWorkflowPool);
|
|
7
|
-
attachHook(event: string, listener: (e: PoolEvent) => void): void;
|
|
8
|
-
emitEvent(event: PoolEvent): void;
|
|
9
|
-
detachHook(event: string, listener: (e: PoolEvent) => void): void;
|
|
10
|
-
}
|
|
1
|
+
import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
|
|
2
|
+
import { PoolEvent } from "src/multipool/interfaces.js";
|
|
3
|
+
export declare class PoolEventManager {
|
|
4
|
+
pool: MultiWorkflowPool;
|
|
5
|
+
hooks: Map<string, Array<Function>>;
|
|
6
|
+
constructor(pool: MultiWorkflowPool);
|
|
7
|
+
attachHook(event: string, listener: (e: PoolEvent) => void): void;
|
|
8
|
+
emitEvent(event: PoolEvent): void;
|
|
9
|
+
detachHook(event: string, listener: (e: PoolEvent) => void): void;
|
|
10
|
+
}
|
|
11
11
|
//# sourceMappingURL=pool-event-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-registry-api-demo.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/client-registry-api-demo.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Registry API Demo for MultiWorkflowPool
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates the public API methods for safely accessing client registry information
|
|
5
|
+
*/
|
|
6
|
+
import { MultiWorkflowPool } from "../multi-workflow-pool.js";
|
|
7
|
+
import { Workflow } from "../workflow.js";
|
|
8
|
+
import GenerationGraph from "../../../scripts/workflows/T2I-one-obsession.json" with { type: "json" };
|
|
9
|
+
const GEN_HOST = "http://localhost:8188";
|
|
10
|
+
// Create pool
|
|
11
|
+
const pool = new MultiWorkflowPool({
|
|
12
|
+
logLevel: "warn"
|
|
13
|
+
});
|
|
14
|
+
const genWorkflow = Workflow.fromAugmented(GenerationGraph);
|
|
15
|
+
pool.addClient(GEN_HOST, {
|
|
16
|
+
workflowAffinity: [genWorkflow],
|
|
17
|
+
priority: 10
|
|
18
|
+
});
|
|
19
|
+
console.log("\n" + "=".repeat(80));
|
|
20
|
+
console.log("CLIENT REGISTRY API DEMO - MultiWorkflowPool");
|
|
21
|
+
console.log("=".repeat(80));
|
|
22
|
+
console.log("Testing: Public API methods for accessing client registry");
|
|
23
|
+
console.log("=".repeat(80) + "\n");
|
|
24
|
+
// Test getClients() before initialization
|
|
25
|
+
console.log("π getAllClients() - Before Initialization:");
|
|
26
|
+
const clientsBeforeInit = pool.getClients();
|
|
27
|
+
console.log(` Total clients registered: ${clientsBeforeInit.length}`);
|
|
28
|
+
clientsBeforeInit.forEach(client => {
|
|
29
|
+
console.log(` - ${client.nodeName} (${client.url})`);
|
|
30
|
+
console.log(` State: ${client.state}`);
|
|
31
|
+
console.log(` Priority: ${client.priority ?? "N/A"}`);
|
|
32
|
+
console.log(` Workflow Affinities: ${client.workflowAffinityHashes?.length ?? 0}`);
|
|
33
|
+
});
|
|
34
|
+
// Test getClient() for specific client
|
|
35
|
+
console.log("\nπ getClient(url) - Specific Client Lookup:");
|
|
36
|
+
const specificClient = pool.getClient(GEN_HOST);
|
|
37
|
+
if (specificClient) {
|
|
38
|
+
console.log(` Found: ${specificClient.nodeName}`);
|
|
39
|
+
console.log(` State: ${specificClient.state}`);
|
|
40
|
+
console.log(` Priority: ${specificClient.priority}`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(" Client not found");
|
|
44
|
+
}
|
|
45
|
+
// Test getClientsForWorkflow()
|
|
46
|
+
console.log("\nπ― getClientsForWorkflow() - Affinity Matching:");
|
|
47
|
+
const affinityClients = pool.getClientsForWorkflow(genWorkflow);
|
|
48
|
+
console.log(` Clients with affinity for generation workflow: ${affinityClients.length}`);
|
|
49
|
+
affinityClients.forEach(url => {
|
|
50
|
+
console.log(` - ${url}`);
|
|
51
|
+
});
|
|
52
|
+
// Test hasClientsForWorkflow()
|
|
53
|
+
console.log("\nβ
hasClientsForWorkflow() - Availability Check:");
|
|
54
|
+
const hasClients = pool.hasClientsForWorkflow(genWorkflow);
|
|
55
|
+
console.log(` Has clients for workflow: ${hasClients}`);
|
|
56
|
+
// Initialize the pool
|
|
57
|
+
console.log("\nπ Initializing pool...\n");
|
|
58
|
+
await pool.init();
|
|
59
|
+
// Test getClients() after initialization
|
|
60
|
+
console.log("\nπ getClients() - After Initialization:");
|
|
61
|
+
const clientsAfterInit = pool.getClients();
|
|
62
|
+
clientsAfterInit.forEach(client => {
|
|
63
|
+
console.log(` - ${client.nodeName} (${client.url})`);
|
|
64
|
+
console.log(` State: ${client.state}`);
|
|
65
|
+
console.log(` Priority: ${client.priority ?? "N/A"}`);
|
|
66
|
+
});
|
|
67
|
+
// Test getIdleClients()
|
|
68
|
+
console.log("\nβΈοΈ getIdleClients() - Available Workers:");
|
|
69
|
+
const idleClients = pool.getIdleClients();
|
|
70
|
+
console.log(` Idle clients: ${idleClients.length}`);
|
|
71
|
+
idleClients.forEach(client => {
|
|
72
|
+
console.log(` - ${client.nodeName} (priority: ${client.priority ?? "N/A"})`);
|
|
73
|
+
});
|
|
74
|
+
// Test getPoolStats() before submitting jobs
|
|
75
|
+
console.log("\nπ getPoolStats() - Before Job Submission:");
|
|
76
|
+
const statsBeforeJob = pool.getPoolStats();
|
|
77
|
+
console.log(` Total Clients: ${statsBeforeJob.totalClients}`);
|
|
78
|
+
console.log(` Idle: ${statsBeforeJob.idleClients}`);
|
|
79
|
+
console.log(` Busy: ${statsBeforeJob.busyClients}`);
|
|
80
|
+
console.log(` Offline: ${statsBeforeJob.offlineClients}`);
|
|
81
|
+
console.log(` Total Queues: ${statsBeforeJob.totalQueues}`);
|
|
82
|
+
statsBeforeJob.queues.forEach(q => {
|
|
83
|
+
const hashDisplay = q.workflowHash === "general"
|
|
84
|
+
? "general"
|
|
85
|
+
: q.workflowHash.substring(0, 12) + "...";
|
|
86
|
+
console.log(` Queue [${hashDisplay}] (${q.type}): ${q.pendingJobs} pending jobs`);
|
|
87
|
+
});
|
|
88
|
+
// Submit a job to see state changes
|
|
89
|
+
console.log("\nπ€ Submitting job to observe state changes...\n");
|
|
90
|
+
const workflow = Workflow.fromAugmented(GenerationGraph)
|
|
91
|
+
.input("1", "value", "test image")
|
|
92
|
+
.input("10", "steps", 5)
|
|
93
|
+
.input("10", "seed", 42);
|
|
94
|
+
const jobId = await pool.submitJob(workflow);
|
|
95
|
+
// Check stats during job execution
|
|
96
|
+
console.log("π getPoolStats() - During Job Execution:");
|
|
97
|
+
const statsDuringJob = pool.getPoolStats();
|
|
98
|
+
console.log(` Total Clients: ${statsDuringJob.totalClients}`);
|
|
99
|
+
console.log(` Idle: ${statsDuringJob.idleClients}`);
|
|
100
|
+
console.log(` Busy: ${statsDuringJob.busyClients}`);
|
|
101
|
+
console.log(` Offline: ${statsDuringJob.offlineClients}`);
|
|
102
|
+
statsDuringJob.queues.forEach(q => {
|
|
103
|
+
const hashDisplay = q.workflowHash === "general"
|
|
104
|
+
? "general"
|
|
105
|
+
: q.workflowHash.substring(0, 12) + "...";
|
|
106
|
+
console.log(` Queue [${hashDisplay}] (${q.type}): ${q.pendingJobs} pending jobs`);
|
|
107
|
+
});
|
|
108
|
+
// Wait for completion
|
|
109
|
+
await pool.waitForJobCompletion(jobId);
|
|
110
|
+
// Check stats after job completion
|
|
111
|
+
console.log("\nπ getPoolStats() - After Job Completion:");
|
|
112
|
+
const statsAfterJob = pool.getPoolStats();
|
|
113
|
+
console.log(` Total Clients: ${statsAfterJob.totalClients}`);
|
|
114
|
+
console.log(` Idle: ${statsAfterJob.idleClients}`);
|
|
115
|
+
console.log(` Busy: ${statsAfterJob.busyClients}`);
|
|
116
|
+
console.log(` Offline: ${statsAfterJob.offlineClients}`);
|
|
117
|
+
statsAfterJob.queues.forEach(q => {
|
|
118
|
+
const hashDisplay = q.workflowHash === "general"
|
|
119
|
+
? "general"
|
|
120
|
+
: q.workflowHash.substring(0, 12) + "...";
|
|
121
|
+
console.log(` Queue [${hashDisplay}] (${q.type}): ${q.pendingJobs} pending jobs`);
|
|
122
|
+
});
|
|
123
|
+
console.log("\n" + "=".repeat(80));
|
|
124
|
+
console.log("API METHODS SUMMARY");
|
|
125
|
+
console.log("=".repeat(80));
|
|
126
|
+
console.log("β
getClients() - Get all registered clients with their state");
|
|
127
|
+
console.log("β
getClient(url) - Get specific client information");
|
|
128
|
+
console.log("β
getClientsForWorkflow(workflow) - Get clients with workflow affinity");
|
|
129
|
+
console.log("β
getIdleClients() - Get all currently idle clients");
|
|
130
|
+
console.log("β
hasClientsForWorkflow(workflow) - Check workflow availability");
|
|
131
|
+
console.log("β
getPoolStats() - Get comprehensive pool statistics");
|
|
132
|
+
console.log("=".repeat(80));
|
|
133
|
+
await pool.shutdown();
|
|
134
|
+
console.log("\nβ
Client registry API demo completed, exiting...");
|
|
135
|
+
process.exit(0);
|
|
136
|
+
//# sourceMappingURL=client-registry-api-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-registry-api-demo.js","sourceRoot":"","sources":["../../../src/multipool/tests/client-registry-api-demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-registry.spec.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/client-registry.spec.ts"],"names":[],"mappings":""}
|