diff --git a/src/apps/chat/editors/image-generate.ts b/src/apps/chat/editors/image-generate.ts index 85225b1ba..9d22d09db 100644 --- a/src/apps/chat/editors/image-generate.ts +++ b/src/apps/chat/editors/image-generate.ts @@ -39,27 +39,26 @@ export async function runImageGenerationUpdatingState(cHandler: ConversationHand try { const images = await t2iGenerateImagesOrThrow(t2iProvider, imageText, repeat); - for (let image of images) { - - const { mimeType, base64Data, generatorName, width, height, altText, parameters, generatedAt } = image; + for (const _i of images) { // Create DBlob image item const dblobImageItem = createDBlobImageItem( - 'Image: ' + altText, + 'Image: ' + _i.altText, { - mimeType: mimeType as any, /* we assume the mime is supported */ - base64: base64Data, + mimeType: _i.mimeType as any, /* we assume the mime is supported */ + base64: _i.base64Data, }, { - origin: 'generated', source: 'ai-text-to-image', - generatorName, - prompt: altText, - parameters: parameters, - generatedAt, + origin: 'generated', + source: 'ai-text-to-image', + generatorName: _i.generatorName, + prompt: _i.altText, + parameters: _i.parameters, + generatedAt: _i.generatedAt, }, { - width: width || 0, - height: height || 0, + width: _i.width || 0, + height: _i.height || 0, // description: '', }, ); @@ -68,10 +67,10 @@ export async function runImageGenerationUpdatingState(cHandler: ConversationHand const dblobId = await addDBlobItem(dblobImageItem, 'global', 'app-chat'); // Create a data reference for the image from the message - const imagePartDataRef = createDMessageDataRefDBlob(dblobId, mimeType, base64Data.length); + const imagePartDataRef = createDMessageDataRefDBlob(dblobId, _i.mimeType, _i.base64Data.length); // Append the image to the chat - cHandler.messageAppendImageContentFragment(assistantMessageId, imagePartDataRef, altText, width, height, true, true); + cHandler.messageAppendImageContentFragment(assistantMessageId, imagePartDataRef, _i.altText, _i.width, _i.height, true, true); } return true; } catch (error: any) { diff --git a/src/apps/draw/TextToImage.tsx b/src/apps/draw/TextToImage.tsx index f1ba122af..1d3e1904b 100644 --- a/src/apps/draw/TextToImage.tsx +++ b/src/apps/draw/TextToImage.tsx @@ -6,11 +6,12 @@ import { Box, Card, Skeleton } from '@mui/joy'; import type { ImageBlock } from '~/modules/blocks/blocks'; import { addDBlobItem } from '~/modules/dblobs/dblobs.db'; -import { createDBlobImageItem, DBlobMimeType } from '~/modules/dblobs/dblobs.types'; +import { createDBlobImageItem } from '~/modules/dblobs/dblobs.types'; import { getActiveTextToImageProviderOrThrow, t2iGenerateImagesOrThrow } from '~/modules/t2i/t2i.client'; import type { TextToImageProvider } from '~/common/components/useCapabilities'; import { InlineError } from '~/common/components/InlineError'; +import { createDMessageDataRefDBlob } from '~/common/stores/chat/chat.message'; import { themeBgAppChatComposer } from '~/common/app.theme'; import { DesignerPrompt, PromptDesigner } from './components/PromptDesigner'; @@ -26,40 +27,47 @@ const STILL_LAYOUTING = false; async function queryActiveGenerateImageVector(singlePrompt: string, vectorSize: number = 1) { const t2iProvider = getActiveTextToImageProviderOrThrow(); - const imageVector = await t2iGenerateImagesOrThrow(t2iProvider, singlePrompt, vectorSize); - if (!imageVector?.length) + const images = await t2iGenerateImagesOrThrow(t2iProvider, singlePrompt, vectorSize); + if (!images?.length) throw new Error('No image generated'); // save the generated images - for (const image of imageVector) { - const { base64ImageDataUrl, altText } = image; - const base64Data = base64ImageDataUrl.split(',')[1]; - const dBlobImageItem = createDBlobImageItem( + for (const _i of images) { + + // Create DBlob image item + const dblobImageItem = createDBlobImageItem( singlePrompt, { - mimeType: DBlobMimeType.IMG_PNG, - base64: base64Data, - size: base64Data.length, + mimeType: _i.mimeType as any, /* we assume the mime is supported */ + base64: _i.base64Data, }, { origin: 'generated', - dir: 'in', source: 'ai-text-to-image', - generatorName: t2iProvider.painter, - generatedAt: image.generatedAt, - parameters: image.parameters, + // generatorName: t2iProvider.painter, + generatorName: _i.generatorName, + prompt: _i.altText, + parameters: _i.parameters, + generatedAt: _i.generatedAt, }, { - width: image.width, - height: image.height, + width: _i.width || 0, + height: _i.height || 0, + // description: '', }, ); - await addDBlobItem(dBlobImageItem); + + // Add to DBlobs database + const dblobId = await addDBlobItem(dblobImageItem, 'global', 'app-draw'); + + // Create a data reference for the image from the message + const imagePartDataRef = createDMessageDataRefDBlob(dblobId, _i.mimeType, _i.base64Data.length); + + // TODO: move to DMessageImagePart? + console.log('TODO: notImplemented: imagePartDataRef: CRUD and View of blobs as ImageBlocks', imagePartDataRef); } - console.log('notImplemented(): Generated images:', imageVector); - - // const block = heuristicMarkdownImageReferenceBlocks(imageVector.join('\n')); + // const block = heuristicMarkdownImageReferenceBlocks(images.join('\n')); // if (!block?.length) // throw new Error('No URLs in the generated images'); diff --git a/src/modules/dblobs/dblobs.types.ts b/src/modules/dblobs/dblobs.types.ts index b344799df..d2716e5ad 100644 --- a/src/modules/dblobs/dblobs.types.ts +++ b/src/modules/dblobs/dblobs.types.ts @@ -185,5 +185,5 @@ export type DBlobDBItem = DBlobItem & { uId: '1'; wId: '1'; cId: 'global'; - sId: 'app-chat' | 'attachment-drafts'; // scope ID + sId: 'app-chat' | 'app-draw' | 'attachment-drafts'; // scope ID }