@favdevs/payload-ai
Version:
<p align="center"> <img alt="Payload AI Plugin" src="assets/payload-ai-intro.gif" width="100%" /> </p>
201 lines (200 loc) • 6.78 kB
JavaScript
import { google } from '@ai-sdk/google';
import { defaultSystemPrompt } from '../../prompts.js';
import { generateFileNameByPrompt } from '../../utils/generateFileNameByPrompt.js';
import { generateObject } from '../generateObject.js';
import { generateImage } from './generateImage.js';
const MODEL_KEY = 'GEMINI';
const MODELS = [
'gemini-3-pro-preview',
'gemini-2.5-pro',
'gemini-2.5-flash',
'gemini-2.5-flash-lite',
'gemini-2.0-flash',
'gemini-2.0-flash-lite',
'gemini-flash-latest'
];
const IMAGEN_MODELS = [
'imagen-4.0-fast-generate-001',
'imagen-4.0-generate-001',
'imagen-4.0-ultra-generate-001',
'imagen-3.0-generate-002'
];
export const GoogleConfig = {
models: [
{
id: `${MODEL_KEY}-text`,
name: 'Google Gemini',
fields: [
'text',
'textarea'
],
handler: (prompt, options)=>{
return generateObject(prompt, {
...options,
system: options.system || defaultSystemPrompt
}, google(options.model));
},
output: 'text',
settings: {
name: `${MODEL_KEY}-text-settings`,
type: 'group',
admin: {
condition (data) {
return data['model-id'] === `${MODEL_KEY}-text`;
}
},
fields: [
{
name: 'model',
type: 'select',
defaultValue: 'gemini-flash-latest',
label: 'Model',
options: MODELS
},
{
type: 'row',
fields: [
{
name: 'maxTokens',
type: 'number',
defaultValue: 5000
},
{
name: 'temperature',
type: 'number',
defaultValue: 0.7,
max: 1,
min: 0
}
]
},
{
name: 'extractAttachments',
type: 'checkbox'
}
],
label: 'Google Gemini Settings'
}
},
{
id: `${MODEL_KEY}-object`,
name: 'Google Gemini',
fields: [
'richText'
],
handler: (text, options)=>{
return generateObject(text, {
...options,
system: options.system || defaultSystemPrompt
}, google(options.model));
},
output: 'text',
settings: {
name: `${MODEL_KEY}-object-settings`,
type: 'group',
admin: {
condition (data) {
return data['model-id'] === `${MODEL_KEY}-object`;
}
},
fields: [
{
name: 'model',
type: 'select',
defaultValue: 'gemini-flash-latest',
label: 'Model',
options: MODELS
},
{
type: 'row',
fields: [
{
name: 'maxTokens',
type: 'number',
defaultValue: 5000
},
{
name: 'temperature',
type: 'number',
defaultValue: 0.7,
max: 1,
min: 0
}
]
},
{
name: 'extractAttachments',
type: 'checkbox'
}
],
label: 'Google Gemini Settings'
}
},
{
id: 'imagen',
name: 'Google Imagen',
fields: [
'upload'
],
handler: async (prompt, options)=>{
const imageData = await generateImage(prompt, options);
return {
data: {
alt: imageData.alt
},
file: {
name: `image_${generateFileNameByPrompt(imageData.alt || prompt)}.png`,
data: imageData.buffer,
mimetype: 'image/png',
size: imageData.buffer.byteLength
}
};
},
output: 'image',
settings: {
name: 'imagen-settings',
type: 'group',
admin: {
condition (data) {
return data['model-id'] === 'imagen';
}
},
fields: [
{
name: 'model',
type: 'select',
defaultValue: 'imagen-4.0-fast-generate-001',
label: 'Model',
options: IMAGEN_MODELS
},
{
name: 'aspectRatio',
type: 'select',
defaultValue: '1:1',
label: 'Aspect Ratio',
options: [
'1:1',
'3:4',
'4:3',
'9:16',
'16:9'
]
},
{
name: 'outputMimeType',
type: 'select',
defaultValue: 'image/png',
label: 'Output Format',
options: [
'image/png',
'image/jpeg'
]
}
],
label: 'Google Imagen Settings'
}
}
],
provider: 'Google'
};
//# sourceMappingURL=index.js.map