From 412b462340d85e46fa850326fcd1919e86e13728 Mon Sep 17 00:00:00 2001 From: Nicolas Bonamy Date: Sat, 25 May 2024 22:12:26 +0200 Subject: [PATCH] dalle fixes --- src/components/MessageItem.vue | 2 +- src/components/MessageItemBody.vue | 9 ++-- src/components/MessageItemImage.vue | 10 ++-- src/plugins/dalle.ts | 73 ++++++++++++++++++++--------- 4 files changed, 62 insertions(+), 32 deletions(-) diff --git a/src/components/MessageItem.vue b/src/components/MessageItem.vue index 23c9ff8..b23bff2 100644 --- a/src/components/MessageItem.vue +++ b/src/components/MessageItem.vue @@ -13,7 +13,7 @@ - +
diff --git a/src/components/MessageItemBody.vue b/src/components/MessageItemBody.vue index 76ad865..d92d3e7 100644 --- a/src/components/MessageItemBody.vue +++ b/src/components/MessageItemBody.vue @@ -2,7 +2,7 @@
- +
@@ -37,16 +37,19 @@ const blocks = computed(() => { if (!imageUrl.startsWith('http') && !imageUrl.startsWith('file://')) { imageUrl = `file://${imageUrl}` } - blocks.push({ type: 'image', content: imageUrl }) + blocks.push({ type: 'image', url: imageUrl, desc: match[1]}) // continue lastIndex = regex.lastIndex } // add last block - blocks.push({ type: 'text', content: props.message.content.substring(lastIndex) }) + if (lastIndex != props.message.content.length) { + blocks.push({ type: 'text', content: props.message.content.substring(lastIndex) }) + } // done + //console.log(blocks) return blocks }) diff --git a/src/components/MessageItemImage.vue b/src/components/MessageItemImage.vue index e7ad1a4..c4a2589 100644 --- a/src/components/MessageItemImage.vue +++ b/src/components/MessageItemImage.vue @@ -1,6 +1,6 @@ @@ -13,7 +13,8 @@ import useEventBus from '../composables/useEventBus' const { emitEvent } = useEventBus() const props = defineProps({ - imageUrl: String, + url: String, + desc: String }) const emits = defineEmits(['image-loaded']) @@ -23,13 +24,12 @@ const onImageLoaded = () => { } const onFullscreen = (url) => { - emitEvent('fullScreen', url) + emitEvent('fullScreen', props.url) } const onDownload = () => { - console.log('download', props.imageUrl) window.api.file.download({ - url: props.imageUrl, + url: props.url, properties: { filename: 'image.png', } diff --git a/src/plugins/dalle.ts b/src/plugins/dalle.ts index 603e712..46d286a 100644 --- a/src/plugins/dalle.ts +++ b/src/plugins/dalle.ts @@ -21,7 +21,7 @@ export default class extends Plugin { } getDescription(): string { - return 'Generate an image based on a prompt. Returns the path of the image saved on disk.' + return 'Generate an image based on a prompt. Returns the path of the image saved on disk and a description of the image.' } getPreparationDescription(): string { @@ -33,32 +33,58 @@ export default class extends Plugin { } getParameters(): PluginParameter[] { - return [ + + const parameters: PluginParameter[] = [ { name: 'prompt', type: 'string', description: 'The description of the image', required: true - }, - // { - // name: 'size', - // type: 'string', - // description: 'The size of the image', - // required: false - // }, - // { - // name: 'style', - // type: 'string', - // description: 'The style of the image', - // required: false - // }, - // { - // name: 'n', - // type: 'number', - // description: 'Number of images to generate', - // required: false - // }, + } ] + + // rest depends on model + if (store.config.engines.openai.model.image === 'dall-e-2') { + + parameters.push({ + name: 'size', + type: 'string', + enum: [ '256x256', '512x512', '1024x1024' ], + description: 'The size of the image', + required: false + }) + + } else if (store.config.engines.openai.model.image === 'dall-e-3') { + + parameters.push({ + name: 'quality', + type: 'string', + enum: [ 'standard', 'hd' ], + description: 'The quality of the image', + required: false + }) + + parameters.push({ + name: 'size', + type: 'string', + enum: [ '1024x1024', '1792x1024', '1024x1792' ], + description: 'The size of the image', + required: false + }) + + parameters.push({ + name: 'style', + type: 'string', + enum: ['vivid', 'natural'], + description: 'The style of the image', + required: false + }) + + } + + // done + return parameters + } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -79,16 +105,17 @@ export default class extends Plugin { response_format: 'b64_json', size: parameters?.size, style: parameters?.style, + quality: parameters?.quality, n: parameters?.n || 1, }) // save the content on disk const filename = saveFileContents('png', response.data[0].b64_json) - // return an object return { - path: `file://${filename}` + path: `file://${filename}`, + description: parameters?.prompt } }