comfyui-node 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/call-wrapper.js +856 -856
  3. package/dist/index.d.ts +13 -13
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +7 -7
  6. package/dist/index.js.map +1 -1
  7. package/dist/multipool/client-registry.d.ts +32 -11
  8. package/dist/multipool/client-registry.d.ts.map +1 -1
  9. package/dist/multipool/client-registry.js +152 -25
  10. package/dist/multipool/client-registry.js.map +1 -1
  11. package/dist/multipool/helpers.d.ts +5 -0
  12. package/dist/multipool/helpers.d.ts.map +1 -0
  13. package/dist/multipool/helpers.js +53 -0
  14. package/dist/multipool/helpers.js.map +1 -0
  15. package/dist/multipool/index.d.ts +2 -1
  16. package/dist/multipool/index.d.ts.map +1 -1
  17. package/dist/multipool/index.js +2 -1
  18. package/dist/multipool/index.js.map +1 -1
  19. package/dist/multipool/interfaces.d.ts +12 -4
  20. package/dist/multipool/interfaces.d.ts.map +1 -1
  21. package/dist/multipool/interfaces.js +1 -1
  22. package/dist/multipool/job-profiler.d.ts +128 -0
  23. package/dist/multipool/job-profiler.d.ts.map +1 -0
  24. package/dist/multipool/job-profiler.js +222 -0
  25. package/dist/multipool/job-profiler.js.map +1 -0
  26. package/dist/multipool/job-queue-processor.d.ts +27 -11
  27. package/dist/multipool/job-queue-processor.d.ts.map +1 -1
  28. package/dist/multipool/job-queue-processor.js +196 -9
  29. package/dist/multipool/job-queue-processor.js.map +1 -1
  30. package/dist/multipool/job-state-registry.d.ts +67 -0
  31. package/dist/multipool/job-state-registry.d.ts.map +1 -0
  32. package/dist/multipool/job-state-registry.js +283 -0
  33. package/dist/multipool/job-state-registry.js.map +1 -0
  34. package/dist/multipool/logger.d.ts +30 -0
  35. package/dist/multipool/logger.d.ts.map +1 -0
  36. package/dist/multipool/logger.js +75 -0
  37. package/dist/multipool/logger.js.map +1 -0
  38. package/dist/multipool/multi-workflow-pool.d.ts +42 -23
  39. package/dist/multipool/multi-workflow-pool.d.ts.map +1 -1
  40. package/dist/multipool/multi-workflow-pool.js +313 -72
  41. package/dist/multipool/multi-workflow-pool.js.map +1 -1
  42. package/dist/multipool/pool-event-manager.d.ts +10 -10
  43. package/dist/multipool/pool-event-manager.js +27 -27
  44. package/dist/multipool/tests/error-classification-tests.d.ts +2 -0
  45. package/dist/multipool/tests/error-classification-tests.d.ts.map +1 -0
  46. package/dist/multipool/tests/error-classification-tests.js +374 -0
  47. package/dist/multipool/tests/error-classification-tests.js.map +1 -0
  48. package/dist/multipool/tests/job-state-registry.d.ts +16 -16
  49. package/dist/multipool/tests/job-state-registry.js +23 -23
  50. package/dist/multipool/tests/multipool-basic.d.ts +11 -1
  51. package/dist/multipool/tests/multipool-basic.d.ts.map +1 -1
  52. package/dist/multipool/tests/multipool-basic.js +141 -3
  53. package/dist/multipool/tests/multipool-basic.js.map +1 -1
  54. package/dist/multipool/tests/profiling-demo.d.ts +7 -0
  55. package/dist/multipool/tests/profiling-demo.d.ts.map +1 -0
  56. package/dist/multipool/tests/profiling-demo.js +88 -0
  57. package/dist/multipool/tests/profiling-demo.js.map +1 -0
  58. package/dist/multipool/tests/prompt-generator.d.ts +10 -0
  59. package/dist/multipool/tests/prompt-generator.d.ts.map +1 -0
  60. package/dist/multipool/tests/prompt-generator.js +26 -0
  61. package/dist/multipool/tests/prompt-generator.js.map +1 -0
  62. package/dist/multipool/tests/test-helpers.d.ts +4 -0
  63. package/dist/multipool/tests/test-helpers.d.ts.map +1 -0
  64. package/dist/multipool/tests/test-helpers.js +10 -0
  65. package/dist/multipool/tests/test-helpers.js.map +1 -0
  66. package/dist/multipool/tests/two-stage-edit-simulation.d.ts +32 -0
  67. package/dist/multipool/tests/two-stage-edit-simulation.d.ts.map +1 -0
  68. package/dist/multipool/tests/two-stage-edit-simulation.js +299 -0
  69. package/dist/multipool/tests/two-stage-edit-simulation.js.map +1 -0
  70. package/dist/multipool/workflow.d.ts +178 -173
  71. package/dist/multipool/workflow.d.ts.map +1 -1
  72. package/dist/multipool/workflow.js +333 -271
  73. package/dist/multipool/workflow.js.map +1 -1
  74. package/dist/pool/SmartPool.d.ts +143 -143
  75. package/dist/pool/SmartPool.js +676 -676
  76. package/dist/pool/SmartPoolV2.d.ts +119 -119
  77. package/dist/pool/SmartPoolV2.js +586 -586
  78. package/dist/pool/WorkflowPool.d.ts +202 -202
  79. package/dist/pool/WorkflowPool.d.ts.map +1 -1
  80. package/dist/pool/WorkflowPool.js +845 -840
  81. package/dist/pool/WorkflowPool.js.map +1 -1
  82. package/dist/pool/client/ClientManager.d.ts +86 -86
  83. package/dist/pool/client/ClientManager.js +215 -215
  84. package/dist/pool/index.d.ts +9 -11
  85. package/dist/pool/index.d.ts.map +1 -1
  86. package/dist/pool/index.js +3 -5
  87. package/dist/pool/index.js.map +1 -1
  88. package/package.json +1 -1
@@ -0,0 +1,374 @@
1
+ import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
2
+ import { Workflow } from "src/multipool/workflow.js";
3
+ /**
4
+ * Error Classification Validation Tests
5
+ *
6
+ * This script validates the error classification logic by intentionally triggering
7
+ * different types of errors from real ComfyUI servers.
8
+ *
9
+ * Test Cases:
10
+ * 1. Missing Model Error (workflow_incompatibility)
11
+ * 2. Missing Custom Node Error (workflow_incompatibility)
12
+ * 3. Invalid Input Error (transient)
13
+ * 4. Connection Error (connection)
14
+ */
15
+ const pool = new MultiWorkflowPool();
16
+ // Add your real ComfyUI servers here
17
+ pool.addClient("http://server1:8188", {
18
+ workflowAffinity: [],
19
+ priority: 1
20
+ });
21
+ pool.addClient("http://server2:8188", {
22
+ workflowAffinity: [],
23
+ priority: 1
24
+ });
25
+ pool.addClient("http://server3:8188", {
26
+ workflowAffinity: [],
27
+ priority: 1
28
+ });
29
+ await pool.init();
30
+ console.log("\n" + "=".repeat(80));
31
+ console.log("ERROR CLASSIFICATION VALIDATION TESTS");
32
+ console.log("=".repeat(80) + "\n");
33
+ // ============================================================================
34
+ // TEST 1: Missing Model Error (should be classified as workflow_incompatibility)
35
+ // ============================================================================
36
+ async function testMissingModel() {
37
+ console.log("\n📋 TEST 1: Missing Model Error");
38
+ console.log("-".repeat(80));
39
+ const workflow = new Workflow({
40
+ "1": {
41
+ "inputs": {
42
+ "text": "beautiful landscape"
43
+ },
44
+ "class_type": "CLIPTextEncode",
45
+ "_meta": {
46
+ "title": "CLIP Text Encode (Prompt)"
47
+ }
48
+ },
49
+ "2": {
50
+ "inputs": {
51
+ "ckpt_name": "this_model_definitely_does_not_exist_anywhere_12345.safetensors"
52
+ },
53
+ "class_type": "CheckpointLoaderSimple",
54
+ "_meta": {
55
+ "title": "Load Checkpoint"
56
+ }
57
+ },
58
+ "3": {
59
+ "inputs": {
60
+ "seed": 12345,
61
+ "steps": 20,
62
+ "cfg": 7.0,
63
+ "sampler_name": "euler",
64
+ "scheduler": "normal",
65
+ "denoise": 1.0,
66
+ "model": ["2", 0],
67
+ "positive": ["1", 0],
68
+ "negative": ["1", 0],
69
+ "latent_image": ["4", 0]
70
+ },
71
+ "class_type": "KSampler",
72
+ "_meta": {
73
+ "title": "KSampler"
74
+ }
75
+ },
76
+ "4": {
77
+ "inputs": {
78
+ "width": 512,
79
+ "height": 512,
80
+ "batch_size": 1
81
+ },
82
+ "class_type": "EmptyLatentImage",
83
+ "_meta": {
84
+ "title": "Empty Latent Image"
85
+ }
86
+ },
87
+ "5": {
88
+ "inputs": {
89
+ "samples": ["3", 0],
90
+ "vae": ["2", 2]
91
+ },
92
+ "class_type": "VAEDecode",
93
+ "_meta": {
94
+ "title": "VAE Decode"
95
+ }
96
+ },
97
+ "6": {
98
+ "inputs": {
99
+ "filename_prefix": "ComfyUI",
100
+ "images": ["5", 0]
101
+ },
102
+ "class_type": "SaveImage",
103
+ "_meta": {
104
+ "title": "Save Image"
105
+ }
106
+ }
107
+ });
108
+ try {
109
+ const jobId = await pool.submitJob(workflow);
110
+ console.log(`Submitted job: ${jobId}`);
111
+ const result = await pool.waitForJobCompletion(jobId);
112
+ if (result.status === "failed") {
113
+ console.log("✅ Test PASSED: Job failed as expected");
114
+ console.log(`Error classification should be: workflow_incompatibility`);
115
+ console.log(`Actual error:`, result.error);
116
+ }
117
+ else {
118
+ console.log("❌ Test FAILED: Job should have failed but didn't");
119
+ }
120
+ }
121
+ catch (error) {
122
+ console.log("❌ Test ERROR:", error);
123
+ }
124
+ }
125
+ // ============================================================================
126
+ // TEST 2: Missing Custom Node Error (should be classified as workflow_incompatibility)
127
+ // ============================================================================
128
+ async function testMissingCustomNode() {
129
+ console.log("\n📋 TEST 2: Missing Custom Node Error");
130
+ console.log("-".repeat(80));
131
+ const workflow = new Workflow({
132
+ "1": {
133
+ "inputs": {
134
+ "some_input": "test"
135
+ },
136
+ "class_type": "NonExistentCustomNode_XYZ_12345",
137
+ "_meta": {
138
+ "title": "This Node Does Not Exist"
139
+ }
140
+ },
141
+ "2": {
142
+ "inputs": {
143
+ "filename_prefix": "test",
144
+ "images": ["1", 0]
145
+ },
146
+ "class_type": "SaveImage",
147
+ "_meta": {
148
+ "title": "Save Image"
149
+ }
150
+ }
151
+ });
152
+ try {
153
+ const jobId = await pool.submitJob(workflow);
154
+ console.log(`Submitted job: ${jobId}`);
155
+ const result = await pool.waitForJobCompletion(jobId);
156
+ if (result.status === "failed") {
157
+ console.log("✅ Test PASSED: Job failed as expected");
158
+ console.log(`Error classification should be: workflow_incompatibility`);
159
+ console.log(`Actual error:`, result.error);
160
+ }
161
+ else {
162
+ console.log("❌ Test FAILED: Job should have failed but didn't");
163
+ }
164
+ }
165
+ catch (error) {
166
+ console.log("❌ Test ERROR:", error);
167
+ }
168
+ }
169
+ // ============================================================================
170
+ // TEST 3: Invalid Input Error (should be classified as transient)
171
+ // ============================================================================
172
+ async function testInvalidInput() {
173
+ console.log("\n📋 TEST 3: Invalid Input Error");
174
+ console.log("-".repeat(80));
175
+ const workflow = new Workflow({
176
+ "1": {
177
+ "inputs": {
178
+ "width": -999999, // Negative width should cause validation error
179
+ "height": -999999, // Negative height should cause validation error
180
+ "batch_size": 1
181
+ },
182
+ "class_type": "EmptyLatentImage",
183
+ "_meta": {
184
+ "title": "Empty Latent Image"
185
+ }
186
+ },
187
+ "2": {
188
+ "inputs": {
189
+ "filename_prefix": "test",
190
+ "images": ["1", 0]
191
+ },
192
+ "class_type": "SaveImage",
193
+ "_meta": {
194
+ "title": "Save Image"
195
+ }
196
+ }
197
+ });
198
+ try {
199
+ const jobId = await pool.submitJob(workflow);
200
+ console.log(`Submitted job: ${jobId}`);
201
+ const result = await pool.waitForJobCompletion(jobId);
202
+ if (result.status === "failed") {
203
+ console.log("✅ Test PASSED: Job failed as expected");
204
+ console.log(`Error classification should be: transient`);
205
+ console.log(`Actual error:`, result.error);
206
+ }
207
+ else {
208
+ console.log("❌ Test FAILED: Job should have failed but didn't");
209
+ }
210
+ }
211
+ catch (error) {
212
+ console.log("❌ Test ERROR:", error);
213
+ }
214
+ }
215
+ // ============================================================================
216
+ // TEST 4: Connection Error (should be classified as connection)
217
+ // ============================================================================
218
+ async function testConnectionError() {
219
+ console.log("\n📋 TEST 4: Connection Error");
220
+ console.log("-".repeat(80));
221
+ const isolatedPool = new MultiWorkflowPool();
222
+ // Add a client that definitely doesn't exist
223
+ isolatedPool.addClient("http://this-server-does-not-exist-12345:8188", {
224
+ workflowAffinity: [],
225
+ priority: 1
226
+ });
227
+ try {
228
+ console.log("Attempting to connect to non-existent server...");
229
+ await isolatedPool.init();
230
+ console.log("❌ Test FAILED: Should have failed to connect");
231
+ }
232
+ catch (error) {
233
+ console.log("✅ Test PASSED: Connection failed as expected");
234
+ console.log(`Error classification should be: connection`);
235
+ console.log(`Actual error:`, error);
236
+ }
237
+ finally {
238
+ await isolatedPool.shutdown();
239
+ }
240
+ }
241
+ // ============================================================================
242
+ // TEST 5: Missing LoRA Error (should be classified as workflow_incompatibility)
243
+ // ============================================================================
244
+ async function testMissingLoRA() {
245
+ console.log("\n📋 TEST 5: Missing LoRA Error");
246
+ console.log("-".repeat(80));
247
+ const workflow = new Workflow({
248
+ "1": {
249
+ "inputs": {
250
+ "text": "beautiful landscape"
251
+ },
252
+ "class_type": "CLIPTextEncode",
253
+ "_meta": {
254
+ "title": "CLIP Text Encode"
255
+ }
256
+ },
257
+ "2": {
258
+ "inputs": {
259
+ "ckpt_name": "novaAnimeXL_ilV125.safetensors" // Use a model that exists on the servers
260
+ },
261
+ "class_type": "CheckpointLoaderSimple",
262
+ "_meta": {
263
+ "title": "Load Checkpoint"
264
+ }
265
+ },
266
+ "3": {
267
+ "inputs": {
268
+ "lora_name": "this_lora_does_not_exist_12345.safetensors",
269
+ "strength_model": 1.0,
270
+ "strength_clip": 1.0,
271
+ "model": ["2", 0],
272
+ "clip": ["2", 1]
273
+ },
274
+ "class_type": "LoraLoader",
275
+ "_meta": {
276
+ "title": "Load LoRA"
277
+ }
278
+ },
279
+ "4": {
280
+ "inputs": {
281
+ "width": 512,
282
+ "height": 512,
283
+ "batch_size": 1
284
+ },
285
+ "class_type": "EmptyLatentImage",
286
+ "_meta": {
287
+ "title": "Empty Latent Image"
288
+ }
289
+ },
290
+ "5": {
291
+ "inputs": {
292
+ "seed": 12345,
293
+ "steps": 20,
294
+ "cfg": 7.0,
295
+ "sampler_name": "euler",
296
+ "scheduler": "normal",
297
+ "denoise": 1.0,
298
+ "model": ["3", 0],
299
+ "positive": ["1", 0],
300
+ "negative": ["1", 0],
301
+ "latent_image": ["4", 0]
302
+ },
303
+ "class_type": "KSampler",
304
+ "_meta": {
305
+ "title": "KSampler"
306
+ }
307
+ },
308
+ "6": {
309
+ "inputs": {
310
+ "samples": ["5", 0],
311
+ "vae": ["2", 2]
312
+ },
313
+ "class_type": "VAEDecode",
314
+ "_meta": {
315
+ "title": "VAE Decode"
316
+ }
317
+ },
318
+ "7": {
319
+ "inputs": {
320
+ "filename_prefix": "ComfyUI",
321
+ "images": ["6", 0]
322
+ },
323
+ "class_type": "SaveImage",
324
+ "_meta": {
325
+ "title": "Save Image"
326
+ }
327
+ }
328
+ });
329
+ try {
330
+ const jobId = await pool.submitJob(workflow);
331
+ console.log(`Submitted job: ${jobId}`);
332
+ const result = await pool.waitForJobCompletion(jobId);
333
+ if (result.status === "failed") {
334
+ console.log("✅ Test PASSED: Job failed as expected");
335
+ console.log(`Error classification should be: workflow_incompatibility`);
336
+ console.log(`Actual error:`, result.error);
337
+ }
338
+ else {
339
+ console.log("❌ Test FAILED: Job should have failed but didn't");
340
+ }
341
+ }
342
+ catch (error) {
343
+ console.log("❌ Test ERROR:", error);
344
+ }
345
+ }
346
+ // ============================================================================
347
+ // Run all tests
348
+ // ============================================================================
349
+ async function runAllTests() {
350
+ try {
351
+ await testMissingModel();
352
+ await new Promise(resolve => setTimeout(resolve, 2000));
353
+ await testMissingCustomNode();
354
+ await new Promise(resolve => setTimeout(resolve, 2000));
355
+ await testInvalidInput();
356
+ await new Promise(resolve => setTimeout(resolve, 2000));
357
+ await testMissingLoRA();
358
+ await new Promise(resolve => setTimeout(resolve, 2000));
359
+ await testConnectionError();
360
+ console.log("\n" + "=".repeat(80));
361
+ console.log("ALL TESTS COMPLETED");
362
+ console.log("=".repeat(80) + "\n");
363
+ }
364
+ catch (error) {
365
+ console.error("Fatal error during tests:", error);
366
+ }
367
+ finally {
368
+ await pool.shutdown();
369
+ process.exit(0);
370
+ }
371
+ }
372
+ // Run the tests
373
+ runAllTests();
374
+ //# sourceMappingURL=error-classification-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-classification-tests.js","sourceRoot":"","sources":["../../../src/multipool/tests/error-classification-tests.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
2
- import { Workflow } from "src/multipool/workflow.js";
3
- interface JobState {
4
- jobId: string;
5
- workflow: Workflow;
6
- status: 'pending' | 'running' | 'completed' | 'failed' | 'canceled';
7
- }
8
- export declare class JobStateRegistry {
9
- pool: MultiWorkflowPool;
10
- jobs: Map<string, JobState>;
11
- constructor(pool: MultiWorkflowPool);
12
- addJob(workflow: Workflow): `${string}-${string}-${string}-${string}-${string}`;
13
- getJobStatus(jobId: string): void;
14
- cancelJob(jobId: string): void;
15
- }
16
- export {};
1
+ import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
2
+ import { Workflow } from "src/multipool/workflow.js";
3
+ interface JobState {
4
+ jobId: string;
5
+ workflow: Workflow;
6
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'canceled';
7
+ }
8
+ export declare class JobStateRegistry {
9
+ pool: MultiWorkflowPool;
10
+ jobs: Map<string, JobState>;
11
+ constructor(pool: MultiWorkflowPool);
12
+ addJob(workflow: Workflow): `${string}-${string}-${string}-${string}-${string}`;
13
+ getJobStatus(jobId: string): void;
14
+ cancelJob(jobId: string): void;
15
+ }
16
+ export {};
17
17
  //# sourceMappingURL=job-state-registry.d.ts.map
@@ -1,24 +1,24 @@
1
- import { randomUUID } from "node:crypto";
2
- export class JobStateRegistry {
3
- pool;
4
- jobs = new Map();
5
- constructor(pool) {
6
- this.pool = pool;
7
- }
8
- addJob(workflow) {
9
- // Create new job id
10
- const jobId = randomUUID();
11
- const jobState = {
12
- jobId,
13
- workflow,
14
- status: 'pending',
15
- };
16
- this.jobs.set(jobId, jobState);
17
- return jobId;
18
- }
19
- getJobStatus(jobId) {
20
- }
21
- cancelJob(jobId) {
22
- }
23
- }
1
+ import { randomUUID } from "node:crypto";
2
+ export class JobStateRegistry {
3
+ pool;
4
+ jobs = new Map();
5
+ constructor(pool) {
6
+ this.pool = pool;
7
+ }
8
+ addJob(workflow) {
9
+ // Create new job id
10
+ const jobId = randomUUID();
11
+ const jobState = {
12
+ jobId,
13
+ workflow,
14
+ status: 'pending',
15
+ };
16
+ this.jobs.set(jobId, jobState);
17
+ return jobId;
18
+ }
19
+ getJobStatus(jobId) {
20
+ }
21
+ cancelJob(jobId) {
22
+ }
23
+ }
24
24
  //# sourceMappingURL=job-state-registry.js.map
@@ -1,2 +1,12 @@
1
- export {};
1
+ export declare class SimulatedUser {
2
+ promptGenerator: (() => string) | null;
3
+ modelFunction: (prompt: string) => Promise<string[]>;
4
+ shouldGenerate: boolean;
5
+ totalImages: number;
6
+ collectedImages: number;
7
+ constructor(generator?: (() => string) | null, modelFunction?: (prompt: string) => Promise<string[]>, totalImages?: number);
8
+ stop(): void;
9
+ start(): void;
10
+ generateImages(count: number): Promise<void>;
11
+ }
2
12
  //# sourceMappingURL=multipool-basic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multipool-basic.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"multipool-basic.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":"AA8GA,qBAAa,aAAa;IAExB,eAAe,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAkB;IACtE,cAAc,EAAE,OAAO,CAAQ;IAC/B,WAAW,EAAE,MAAM,CAAM;IACzB,eAAe,EAAE,MAAM,CAAK;gBAG1B,SAAS,GAAE,CAAC,MAAM,MAAM,CAAC,GAAG,IAAW,EACvC,aAAa,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAkB,EACrE,WAAW,GAAE,MAAW;IAO1B,IAAI;IAIJ,KAAK;IAOC,cAAc,CAAC,KAAK,EAAE,MAAM;CAkBnC"}
@@ -1,4 +1,142 @@
1
- import { MultiWorkflowPool } from "src/multipool/multi-workflow-pool.js";
2
- const pool = new MultiWorkflowPool();
3
- console.log(pool);
1
+ import { MultiWorkflowPool } from "../multi-workflow-pool.js";
2
+ import GenerationGraph from "../../../scripts/workflows/T2I-anime-nova-xl.json" with { type: "json" };
3
+ import GenerationGraph2 from "../../../scripts/workflows/T2I-one-obsession.json" with { type: "json" };
4
+ import { Workflow } from "../workflow.js";
5
+ import { animeXLPromptGenerator, NEGATIVE_PROMPT, promptGenerator } from "./prompt-generator.js";
6
+ const pool = new MultiWorkflowPool();
7
+ const w1 = Workflow.fromAugmented(GenerationGraph);
8
+ console.log(`Workflow 1 Hash: ${w1.structureHash}`);
9
+ const w2 = Workflow.fromAugmented(GenerationGraph2);
10
+ console.log(`Workflow 2 Hash: ${w2.structureHash}`);
11
+ // Set affinity mapping
12
+ pool.addClient("http://server1:8188", {
13
+ workflowAffinity: [w1, w2],
14
+ priority: 1
15
+ });
16
+ pool.addClient("http://server2:8188", {
17
+ workflowAffinity: [w1],
18
+ priority: 1
19
+ });
20
+ pool.addClient("http://server3:8188", {
21
+ workflowAffinity: [w1],
22
+ priority: 1
23
+ });
24
+ await pool.init();
25
+ async function generateImage1(prompt) {
26
+ const workflow = Workflow.fromAugmented(GenerationGraph)
27
+ .input("1", "value", prompt)
28
+ .input("2", "value", NEGATIVE_PROMPT)
29
+ .input("10", "steps", 30)
30
+ .input("10", "seed", -1);
31
+ const jobId = await pool.submitJob(workflow);
32
+ if (!jobId) {
33
+ throw new Error("Failed to submit job to pool.");
34
+ }
35
+ console.log(`[T2I-anime-nova-xl.json] Submitted job ${jobId} for prompt: "${prompt.substring(0, 30)}..."`);
36
+ pool.attachJobProgressListener(jobId, (progress) => {
37
+ console.log(`[T2I-anime-nova-xl.json] Job ${jobId} Progress: ${JSON.stringify(progress)}`);
38
+ });
39
+ pool.attachJobPreviewListener(jobId, (preview) => {
40
+ console.log(`[T2I-anime-nova-xl.json] Job ${jobId} Preview Image Available: ${preview.blob.size}`);
41
+ });
42
+ // // 25% chance to simulate a user cancelling the job
43
+ // if (Math.random() < 0.25) {
44
+ // await delay(2000); // wait a bit before cancelling
45
+ // console.log(`[T2I-anime-nova-xl.json] Simulating cancellation of job ${jobId}`);
46
+ // await pool.cancelJob(jobId);
47
+ // return [];
48
+ // }
49
+ const results = await pool.waitForJobCompletion(jobId);
50
+ switch (results.status) {
51
+ case "completed": {
52
+ console.log(`[T2I-anime-nova-xl.json] Job ${jobId} completed successfully.`);
53
+ return results.images;
54
+ }
55
+ case "canceled": {
56
+ console.log(`[T2I-anime-nova-xl.json] Job ${jobId} was cancelled.`);
57
+ return [];
58
+ }
59
+ case "failed": {
60
+ console.log(`[T2I-anime-nova-xl.json] Job ${jobId} failed with error: ${results.error.error.message}`);
61
+ console.dir(results.error, { depth: Infinity, colors: true });
62
+ return [];
63
+ }
64
+ }
65
+ }
66
+ async function generateImage2(prompt) {
67
+ const workflow = Workflow.fromAugmented(GenerationGraph2)
68
+ .input("1", "value", prompt)
69
+ .input("2", "value", NEGATIVE_PROMPT)
70
+ .input("10", "steps", 20)
71
+ .input("10", "seed", -1);
72
+ const jobId = await pool.submitJob(workflow);
73
+ if (!jobId) {
74
+ throw new Error("Failed to submit job to pool.");
75
+ }
76
+ console.log(`[T2I-one-obsession.json] Submitted job ${jobId} for prompt: "${prompt.substring(0, 30)}..."`);
77
+ const results = await pool.waitForJobCompletion(jobId);
78
+ switch (results.status) {
79
+ case "completed": {
80
+ console.log(`[T2I-one-obsession.json] Job ${jobId} completed successfully.`);
81
+ return results.images;
82
+ }
83
+ case "canceled": {
84
+ console.log(`[T2I-one-obsession.json] Job ${jobId} was cancelled.`);
85
+ return [];
86
+ }
87
+ case "failed": {
88
+ console.log(`[T2I-one-obsession.json] Job ${jobId} failed with error: ${results.error.error.message}`);
89
+ console.dir(results.error, { depth: Infinity, colors: true });
90
+ return [];
91
+ }
92
+ }
93
+ }
94
+ export class SimulatedUser {
95
+ promptGenerator;
96
+ modelFunction = generateImage1;
97
+ shouldGenerate = true;
98
+ totalImages = 10;
99
+ collectedImages = 0;
100
+ constructor(generator = null, modelFunction = generateImage1, totalImages = 10) {
101
+ this.modelFunction = modelFunction;
102
+ this.promptGenerator = generator;
103
+ this.totalImages = totalImages;
104
+ }
105
+ stop() {
106
+ this.shouldGenerate = false;
107
+ }
108
+ start() {
109
+ this.shouldGenerate = true;
110
+ this.generateImages(this.totalImages).catch(reason => {
111
+ console.error("Error generating images:", reason);
112
+ });
113
+ }
114
+ async generateImages(count) {
115
+ for (let i = 0; i < count; i++) {
116
+ const prompt = this.promptGenerator ? this.promptGenerator() : `default prompt ${i}`;
117
+ const images = await this.modelFunction(prompt);
118
+ this.collectedImages += images.length;
119
+ console.log(`Simulated user generated ${images.length} images for prompt: "${prompt.substring(0, 30)}..." Total collected: ${this.collectedImages}`);
120
+ if (!this.shouldGenerate) {
121
+ break;
122
+ }
123
+ await new Promise(resolve => {
124
+ const randomDelay = Math.floor(Math.random() * 3000) + 1000;
125
+ setTimeout(() => {
126
+ resolve(null);
127
+ }, randomDelay);
128
+ });
129
+ }
130
+ console.log(`Simulated user finished generating images ${this.collectedImages} total.`);
131
+ }
132
+ }
133
+ // const user1 = new SimulatedUser(animeXLPromptGenerator, generateImage1, 3);
134
+ // user1.start();
135
+ //
136
+ const user2 = new SimulatedUser(promptGenerator, generateImage1, 1);
137
+ user2.start();
138
+ const user3 = new SimulatedUser(animeXLPromptGenerator, generateImage1, 1);
139
+ user3.start();
140
+ const user4 = new SimulatedUser(animeXLPromptGenerator, generateImage2, 1);
141
+ user4.start();
4
142
  //# sourceMappingURL=multipool-basic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multipool-basic.js","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,MAAM,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAErC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"multipool-basic.js","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Profiling Demo for MultiWorkflowPool
3
+ *
4
+ * Demonstrates the integrated JobProfiler functionality
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=profiling-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiling-demo.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/profiling-demo.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}