mirror of
https://github.com/enricoros/big-AGI.git
synced 2026-05-10 21:50:14 -07:00
T2I: port TextToImage (partial)
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user