@kapeta/local-cluster-service 0.70.11 → 0.70.12

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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.70.12](https://github.com/kapetacom/local-cluster-service/compare/v0.70.11...v0.70.12) (2024-09-13)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * wait for image resources on disk [CORE-3467] ([#249](https://github.com/kapetacom/local-cluster-service/issues/249)) ([934d9f4](https://github.com/kapetacom/local-cluster-service/commit/934d9f400ae917559a4ede08d3f3e5644b3b5053))
7
+
1
8
  ## [0.70.11](https://github.com/kapetacom/local-cluster-service/compare/v0.70.10...v0.70.11) (2024-09-12)
2
9
 
3
10
 
@@ -242,13 +242,18 @@ class PageQueue extends node_events_1.EventEmitter {
242
242
  }
243
243
  this.images.set(prompt.url, prompt.description);
244
244
  const result = await stormClient_1.stormClient.createImage(`Create an image for the url "${prompt.url}" with this description: ${prompt.description}`.trim());
245
- //console.log('Adding image prompt', prompt);
245
+ let imageEvent = null;
246
246
  result.on('data', (event) => {
247
247
  if (event.type === 'IMAGE') {
248
- this.emit('image', event, prompt);
248
+ imageEvent = event;
249
249
  }
250
250
  });
251
251
  await result.waitForDone();
252
+ if (!imageEvent) {
253
+ throw new Error('No image was generated');
254
+ }
255
+ await (0, page_utils_1.writeImageToDisk)(this.systemId, imageEvent, prompt);
256
+ this.emit('image', imageEvent, prompt);
252
257
  }
253
258
  async generate(prompt, conversationId) {
254
259
  const screenStream = await stormClient_1.stormClient.createUIPage(prompt, conversationId);
@@ -118,18 +118,6 @@ router.post('/ui/screen', async (req, res) => {
118
118
  });
119
119
  const promises = [];
120
120
  queue.on('page', (data) => (systemId ? sendPageEvent(systemId, data, res) : undefined));
121
- queue.on('image', async (screenData, prompt) => {
122
- if (!systemId) {
123
- return;
124
- }
125
- try {
126
- await handleImageEvent(systemId, screenData, prompt);
127
- }
128
- catch (e) {
129
- console.error('Failed to handle image event', e);
130
- throw e;
131
- }
132
- });
133
121
  queue.on('error', (err) => {
134
122
  console.error('Failed to process page', err);
135
123
  sendError(err, res);
@@ -212,15 +200,6 @@ router.post('/:handle/ui/iterative', async (req, res) => {
212
200
  pageQueue.cancel();
213
201
  });
214
202
  pageQueue.on('page', (screenData) => sendPageEvent(landingPagesStream.getConversationId(), screenData, res));
215
- pageQueue.on('image', async (screenData, prompt) => {
216
- try {
217
- await handleImageEvent(landingPagesStream.getConversationId(), screenData, prompt);
218
- }
219
- catch (e) {
220
- console.error('Failed to handle image event', e);
221
- throw e;
222
- }
223
- });
224
203
  pageQueue.on('event', (screenData) => {
225
204
  sendEvent(res, screenData);
226
205
  });
@@ -374,15 +353,6 @@ router.post('/:handle/ui', async (req, res) => {
374
353
  queue.cancel();
375
354
  });
376
355
  queue.on('page', (screenData) => sendPageEvent(outerConversationId, screenData, res));
377
- queue.on('image', async (screenData, prompt) => {
378
- try {
379
- await handleImageEvent(outerConversationId, screenData, prompt);
380
- }
381
- catch (e) {
382
- console.error('Failed to handle image event', e);
383
- throw e;
384
- }
385
- });
386
356
  queue.on('event', (screenData) => {
387
357
  sendEvent(res, screenData);
388
358
  });
@@ -722,12 +692,4 @@ async function sendPageEvent(mainConversationId, data, res) {
722
692
  }
723
693
  sendEvent(res, convertPageEvent(data, data.payload.conversationId, mainConversationId));
724
694
  }
725
- async function handleImageEvent(mainConversationId, data, prompt) {
726
- try {
727
- await (0, page_utils_1.writeImageToDisk)(mainConversationId, data, prompt);
728
- }
729
- catch (err) {
730
- console.error('Failed to write image to disk', err);
731
- }
732
- }
733
695
  exports.default = router;
@@ -242,13 +242,18 @@ class PageQueue extends node_events_1.EventEmitter {
242
242
  }
243
243
  this.images.set(prompt.url, prompt.description);
244
244
  const result = await stormClient_1.stormClient.createImage(`Create an image for the url "${prompt.url}" with this description: ${prompt.description}`.trim());
245
- //console.log('Adding image prompt', prompt);
245
+ let imageEvent = null;
246
246
  result.on('data', (event) => {
247
247
  if (event.type === 'IMAGE') {
248
- this.emit('image', event, prompt);
248
+ imageEvent = event;
249
249
  }
250
250
  });
251
251
  await result.waitForDone();
252
+ if (!imageEvent) {
253
+ throw new Error('No image was generated');
254
+ }
255
+ await (0, page_utils_1.writeImageToDisk)(this.systemId, imageEvent, prompt);
256
+ this.emit('image', imageEvent, prompt);
252
257
  }
253
258
  async generate(prompt, conversationId) {
254
259
  const screenStream = await stormClient_1.stormClient.createUIPage(prompt, conversationId);
@@ -118,18 +118,6 @@ router.post('/ui/screen', async (req, res) => {
118
118
  });
119
119
  const promises = [];
120
120
  queue.on('page', (data) => (systemId ? sendPageEvent(systemId, data, res) : undefined));
121
- queue.on('image', async (screenData, prompt) => {
122
- if (!systemId) {
123
- return;
124
- }
125
- try {
126
- await handleImageEvent(systemId, screenData, prompt);
127
- }
128
- catch (e) {
129
- console.error('Failed to handle image event', e);
130
- throw e;
131
- }
132
- });
133
121
  queue.on('error', (err) => {
134
122
  console.error('Failed to process page', err);
135
123
  sendError(err, res);
@@ -212,15 +200,6 @@ router.post('/:handle/ui/iterative', async (req, res) => {
212
200
  pageQueue.cancel();
213
201
  });
214
202
  pageQueue.on('page', (screenData) => sendPageEvent(landingPagesStream.getConversationId(), screenData, res));
215
- pageQueue.on('image', async (screenData, prompt) => {
216
- try {
217
- await handleImageEvent(landingPagesStream.getConversationId(), screenData, prompt);
218
- }
219
- catch (e) {
220
- console.error('Failed to handle image event', e);
221
- throw e;
222
- }
223
- });
224
203
  pageQueue.on('event', (screenData) => {
225
204
  sendEvent(res, screenData);
226
205
  });
@@ -374,15 +353,6 @@ router.post('/:handle/ui', async (req, res) => {
374
353
  queue.cancel();
375
354
  });
376
355
  queue.on('page', (screenData) => sendPageEvent(outerConversationId, screenData, res));
377
- queue.on('image', async (screenData, prompt) => {
378
- try {
379
- await handleImageEvent(outerConversationId, screenData, prompt);
380
- }
381
- catch (e) {
382
- console.error('Failed to handle image event', e);
383
- throw e;
384
- }
385
- });
386
356
  queue.on('event', (screenData) => {
387
357
  sendEvent(res, screenData);
388
358
  });
@@ -722,12 +692,4 @@ async function sendPageEvent(mainConversationId, data, res) {
722
692
  }
723
693
  sendEvent(res, convertPageEvent(data, data.payload.conversationId, mainConversationId));
724
694
  }
725
- async function handleImageEvent(mainConversationId, data, prompt) {
726
- try {
727
- await (0, page_utils_1.writeImageToDisk)(mainConversationId, data, prompt);
728
- }
729
- catch (err) {
730
- console.error('Failed to write image to disk', err);
731
- }
732
- }
733
695
  exports.default = router;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapeta/local-cluster-service",
3
- "version": "0.70.11",
3
+ "version": "0.70.12",
4
4
  "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
5
  "type": "commonjs",
6
6
  "exports": {
@@ -9,7 +9,7 @@ import { ReferenceClassification, StormEvent, StormEventPage, StormImage, UIShel
9
9
  import { EventEmitter } from 'node:events';
10
10
  import PQueue from 'p-queue';
11
11
 
12
- import { hasPageOnDisk, normalizePath } from './page-utils';
12
+ import { hasPageOnDisk, normalizePath, writeImageToDisk } from './page-utils';
13
13
  import * as mimetypes from 'mime-types';
14
14
 
15
15
  export interface ImagePrompt {
@@ -270,14 +270,20 @@ export class PageQueue extends EventEmitter {
270
270
  `Create an image for the url "${prompt.url}" with this description: ${prompt.description}`.trim()
271
271
  );
272
272
 
273
- //console.log('Adding image prompt', prompt);
273
+ let imageEvent: StormImage | null = null;
274
274
  result.on('data', (event: StormEvent) => {
275
275
  if (event.type === 'IMAGE') {
276
- this.emit('image', event, prompt);
276
+ imageEvent = event;
277
277
  }
278
278
  });
279
279
 
280
280
  await result.waitForDone();
281
+ if (!imageEvent) {
282
+ throw new Error('No image was generated');
283
+ }
284
+
285
+ await writeImageToDisk(this.systemId, imageEvent, prompt);
286
+ this.emit('image', imageEvent, prompt);
281
287
  }
282
288
 
283
289
  public async generate(prompt: UIPagePrompt, conversationId: string) {
@@ -41,7 +41,6 @@ import {
41
41
  resolveReadPath,
42
42
  SystemIdHeader,
43
43
  writeAssetToDisk,
44
- writeImageToDisk,
45
44
  writePageToDisk,
46
45
  } from './page-utils';
47
46
  import { UIServer } from './UIServer';
@@ -165,18 +164,6 @@ router.post('/ui/screen', async (req: KapetaBodyRequest, res: Response) => {
165
164
 
166
165
  queue.on('page', (data) => (systemId ? sendPageEvent(systemId, data, res) : undefined));
167
166
 
168
- queue.on('image', async (screenData, prompt) => {
169
- if (!systemId) {
170
- return;
171
- }
172
- try {
173
- await handleImageEvent(systemId, screenData, prompt);
174
- } catch (e) {
175
- console.error('Failed to handle image event', e);
176
- throw e;
177
- }
178
- });
179
-
180
167
  queue.on('error', (err) => {
181
168
  console.error('Failed to process page', err);
182
169
  sendError(err as any, res);
@@ -275,15 +262,6 @@ router.post('/:handle/ui/iterative', async (req: KapetaBodyRequest, res: Respons
275
262
  sendPageEvent(landingPagesStream.getConversationId(), screenData, res)
276
263
  );
277
264
 
278
- pageQueue.on('image', async (screenData, prompt) => {
279
- try {
280
- await handleImageEvent(landingPagesStream.getConversationId(), screenData, prompt);
281
- } catch (e) {
282
- console.error('Failed to handle image event', e);
283
- throw e;
284
- }
285
- });
286
-
287
265
  pageQueue.on('event', (screenData: StormEvent) => {
288
266
  sendEvent(res, screenData);
289
267
  });
@@ -470,15 +448,6 @@ router.post('/:handle/ui', async (req: KapetaBodyRequest, res: Response) => {
470
448
 
471
449
  queue.on('page', (screenData: StormEventPage) => sendPageEvent(outerConversationId, screenData, res));
472
450
 
473
- queue.on('image', async (screenData, prompt) => {
474
- try {
475
- await handleImageEvent(outerConversationId, screenData, prompt);
476
- } catch (e) {
477
- console.error('Failed to handle image event', e);
478
- throw e;
479
- }
480
- });
481
-
482
451
  queue.on('event', (screenData: StormEvent) => {
483
452
  sendEvent(res, screenData);
484
453
  });
@@ -883,12 +852,4 @@ async function sendPageEvent(mainConversationId: string, data: StormEventPage, r
883
852
  sendEvent(res, convertPageEvent(data, data.payload.conversationId, mainConversationId));
884
853
  }
885
854
 
886
- async function handleImageEvent(mainConversationId: string, data: StormImage, prompt: ImagePrompt) {
887
- try {
888
- await writeImageToDisk(mainConversationId, data, prompt);
889
- } catch (err) {
890
- console.error('Failed to write image to disk', err);
891
- }
892
- }
893
-
894
855
  export default router;