Translate content to different languages using OpenAI's GPT.
Install via npm:
npm install payload-ai
Or yarn:
yarn add payload-ai
To install the plugin, simply add it to your payload.config() in the Plugin array.
import payloadAi from 'payload-ai';
export const config = buildConfig({
plugins: [
// You can pass options to the plugin
payloadAi({
enabled: true,
}),
]
});
Add the collections
where you want to enable the translation and the fields
. It will translate each field (also nested fields) on every update of the default language.
plugins: [
aiTranslatorPlugin({
enabled: true,
collections: {
examples: { // Name of the collection you want to add translations
fields: [
'stringText', // Keys of fields you want to translate (wil also translate nested fields)
'richText',
],
},
},
}),
],
Use promptFunc
for each field to customize the prompt.
plugins: [
aiTranslatorPlugin({
enabled: true,
collections: {
examples: {
settings: {
model: 'gpt-4',
promptFunc: ({ messages, namespace }) => {
return [
{
role: 'system',
content:
'Important: Add a smily face at the end of the message to make the AI more friendly. 😊',
},
...messages,
]
},
},
},
}
}
]
The function will allow you to use the following
req
: Request
doc
Document in languages
previousDoc
Old document (only available on Update)
targetDoc
The old target document
collectionOptions
language
translatorConfig language: string, sourceLanguage?: string,
targetField
sourceField
import {generateTitle, generateDescription } from "payload-ai";
seo({
collections: ['examples'],
// uploadsCollection: 'media',
generateTitle: generateTitle,
generateDescription: ({ doc }) => generateDescription,
});
Use this to provide a backend for i18next string translations.
plugins: [
aiTranslatorPlugin({
enabled: true,
stringTranslation: {
enabled: true
}
}),
],
To update the model you can change the collection settings in the same way as with other collections.
plugins: [
aiTranslatorPlugin({
enabled: true,
stringTranslation: {
enabled: true
}
collections: {
translations: {
settings: {
model: 'gpt-4',
},
}
}
}),
],
By default the plugin will use the update access control of the collection.
To overwrite that behaviour you can add access
to the collections configuration.
plugins: [
aiTranslatorPlugin({
enabled: true,
stringTranslation: {
enabled: true
}
collections: {
examples: {
access: () => true,
}
}
}),
],
TODO: add documentation
myCollectionPrompt = ({source}) => {
source()
return }