T2I: port TextToImage (partial)

This commit is contained in:
Enrico Ros
2024-06-03 13:55:11 -07:00
parent dc2d226ddb
commit eaa2635b51
3 changed files with 43 additions and 36 deletions
+14 -15
View File
@@ -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) {
+28 -20
View File
@@ -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');
+1 -1
View File
@@ -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
}