@ai-stack/payloadcms 3.2.7-beta → 3.2.9-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/ai/models/index.d.ts +1 -1
- package/dist/ai/models/index.d.ts.map +1 -1
- package/dist/ai/models/index.js +1 -1
- package/dist/ai/models/index.js.map +1 -1
- package/dist/ai/models/openai/generateRichText.d.ts.map +1 -1
- package/dist/ai/models/openai/generateRichText.js +1 -1
- package/dist/ai/models/openai/generateRichText.js.map +1 -1
- package/dist/ai/models/openai/index.d.ts.map +1 -1
- package/dist/ai/models/openai/index.js +1 -1
- package/dist/ai/models/openai/index.js.map +1 -1
- package/dist/ai/models/openai/openai.d.ts +2 -0
- package/dist/ai/models/openai/openai.d.ts.map +1 -0
- package/dist/ai/models/openai/openai.js +9 -0
- package/dist/ai/models/openai/openai.js.map +1 -0
- package/dist/ai/schemas/lexicalJsonSchema.d.ts +373 -1
- package/dist/ai/schemas/lexicalJsonSchema.d.ts.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js +13 -9
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utils/systemGenerate.d.ts +1 -1
- package/dist/ai/utils/systemGenerate.d.ts.map +1 -1
- package/dist/ai/utils/systemGenerate.js +6 -2
- package/dist/ai/utils/systemGenerate.js.map +1 -1
- package/dist/collections/Instructions.d.ts +2 -1
- package/dist/collections/Instructions.d.ts.map +1 -1
- package/dist/collections/Instructions.js +36 -46
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/endpoints/fetchFields.d.ts +2 -1
- package/dist/endpoints/fetchFields.d.ts.map +1 -1
- package/dist/endpoints/fetchFields.js +33 -17
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/index.d.ts +2 -2
- package/dist/endpoints/index.d.ts.map +1 -1
- package/dist/endpoints/index.js +97 -96
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/types.d.ts +1 -1
- package/dist/exports/types.d.ts.map +1 -1
- package/dist/exports/types.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.js +3 -2
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.js +3 -2
- package/dist/fields/LexicalEditor/ComposeFeatureComponent.js.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.d.ts.map +1 -1
- package/dist/fields/LexicalEditor/feature.server.js +2 -3
- package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js +5 -1
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +10 -6
- package/dist/init.js.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.d.ts.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +11 -6
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts +1 -0
- package/dist/providers/InstructionsProvider/InstructionsProvider.d.ts.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +11 -4
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/types.d.ts +13 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.d.ts +2 -1
- package/dist/ui/Compose/Compose.d.ts.map +1 -1
- package/dist/ui/Compose/Compose.js +5 -4
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js +4 -0
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.js +8 -4
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/utilities/getGenerationModels.d.ts +3 -0
- package/dist/utilities/getGenerationModels.d.ts.map +1 -0
- package/dist/utilities/getGenerationModels.js +10 -0
- package/dist/utilities/getGenerationModels.js.map +1 -0
- package/dist/utilities/isPluginActivated.d.ts +2 -1
- package/dist/utilities/isPluginActivated.d.ts.map +1 -1
- package/dist/utilities/isPluginActivated.js +3 -2
- package/dist/utilities/isPluginActivated.js.map +1 -1
- package/package.json +6 -6
package/dist/endpoints/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { GenerationModels } from '../ai/models/index.js';
|
|
2
1
|
import { defaultPrompts } from '../ai/prompts.js';
|
|
3
2
|
import { PLUGIN_API_ENDPOINT_GENERATE, PLUGIN_API_ENDPOINT_GENERATE_UPLOAD, PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../defaults.js';
|
|
4
3
|
import { registerEditorHelper } from '../libraries/handlebars/helpers.js';
|
|
5
4
|
import { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js';
|
|
6
5
|
import { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js';
|
|
6
|
+
import { getGenerationModels } from '../utilities/getGenerationModels.js';
|
|
7
7
|
const assignPrompt = async (action, { type, actionParams, context, field, layout, systemPrompt = '', template })=>{
|
|
8
8
|
const prompt = await replacePlaceholders(template, context);
|
|
9
9
|
const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : '';
|
|
@@ -33,104 +33,105 @@ const assignPrompt = async (action, { type, actionParams, context, field, layout
|
|
|
33
33
|
system
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
|
-
export const endpoints = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
collection: PLUGIN_INSTRUCTIONS_TABLE
|
|
49
|
-
});
|
|
50
|
-
const { collections } = req.payload.config;
|
|
51
|
-
const collection = collections.find((collection)=>collection.slug === PLUGIN_INSTRUCTIONS_TABLE);
|
|
52
|
-
const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin;
|
|
53
|
-
const { schema: editorSchema = {} } = editorConfig;
|
|
54
|
-
const { prompt: promptTemplate = '' } = instructions;
|
|
55
|
-
const schemaPath = instructions['schema-path'];
|
|
56
|
-
const fieldName = schemaPath?.split('.').pop();
|
|
57
|
-
registerEditorHelper(req.payload, schemaPath);
|
|
58
|
-
const { defaultLocale, locales = [] } = req.payload.config.localization || {};
|
|
59
|
-
const localeData = locales.find((l)=>{
|
|
60
|
-
return l.code === locale;
|
|
61
|
-
});
|
|
62
|
-
const localeInfo = localeData?.label[defaultLocale] || locale;
|
|
63
|
-
const model = GenerationModels.find((model)=>model.id === instructions['model-id']);
|
|
64
|
-
const settingsName = model.settings?.name;
|
|
65
|
-
const modelOptions = instructions[settingsName] || {};
|
|
66
|
-
const prompts = await assignPrompt(action, {
|
|
67
|
-
type: instructions['field-type'],
|
|
68
|
-
actionParams,
|
|
69
|
-
context: contextData,
|
|
70
|
-
field: fieldName,
|
|
71
|
-
layout: instructions.layout,
|
|
72
|
-
systemPrompt: instructions.system,
|
|
73
|
-
template: promptTemplate
|
|
74
|
-
});
|
|
75
|
-
// console.log('Running handler with prompts:', prompts)
|
|
76
|
-
return model.handler?.(prompts.prompt, {
|
|
77
|
-
...modelOptions,
|
|
78
|
-
editorSchema,
|
|
79
|
-
layout: prompts.layout,
|
|
80
|
-
locale: localeInfo,
|
|
81
|
-
system: prompts.system
|
|
82
|
-
}).catch((error)=>{
|
|
83
|
-
console.error('Error: endpoint - generating text:', error);
|
|
84
|
-
return new Response(JSON.stringify(error.message), {
|
|
85
|
-
status: 500
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
},
|
|
89
|
-
method: 'post',
|
|
90
|
-
path: PLUGIN_API_ENDPOINT_GENERATE
|
|
91
|
-
},
|
|
92
|
-
upload: {
|
|
93
|
-
handler: async (req)=>{
|
|
94
|
-
const data = await req.json?.();
|
|
95
|
-
const { options } = data;
|
|
96
|
-
const { instructionId } = options;
|
|
97
|
-
const contextData = data.doc;
|
|
98
|
-
let instructions = {
|
|
99
|
-
'model-id': '',
|
|
100
|
-
prompt: ''
|
|
101
|
-
};
|
|
102
|
-
if (instructionId) {
|
|
103
|
-
// @ts-expect-error
|
|
104
|
-
instructions = await req.payload.findByID({
|
|
36
|
+
export const endpoints = (pluginConfig)=>({
|
|
37
|
+
textarea: {
|
|
38
|
+
//TODO: This is the main endpoint for generating content - its just needs to be renamed to 'generate' or something.
|
|
39
|
+
handler: async (req)=>{
|
|
40
|
+
const data = await req.json?.();
|
|
41
|
+
const { locale = 'en', options } = data;
|
|
42
|
+
const { action, actionParams, instructionId } = options;
|
|
43
|
+
const contextData = data.doc;
|
|
44
|
+
if (!instructionId) {
|
|
45
|
+
throw new Error(`Instruction ID is required for "${PLUGIN_NAME}" to work, please check your configuration`);
|
|
46
|
+
}
|
|
47
|
+
const instructions = await req.payload.findByID({
|
|
105
48
|
id: instructionId,
|
|
106
49
|
collection: PLUGIN_INSTRUCTIONS_TABLE
|
|
107
50
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
51
|
+
const { collections } = req.payload.config;
|
|
52
|
+
const collection = collections.find((collection)=>collection.slug === PLUGIN_INSTRUCTIONS_TABLE);
|
|
53
|
+
const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin;
|
|
54
|
+
const { schema: editorSchema = {} } = editorConfig;
|
|
55
|
+
const { prompt: promptTemplate = '' } = instructions;
|
|
56
|
+
const schemaPath = instructions['schema-path'];
|
|
57
|
+
const fieldName = schemaPath?.split('.').pop();
|
|
58
|
+
registerEditorHelper(req.payload, schemaPath);
|
|
59
|
+
const { defaultLocale, locales = [] } = req.payload.config.localization || {};
|
|
60
|
+
const localeData = locales.find((l)=>{
|
|
61
|
+
return l.code === locale;
|
|
62
|
+
});
|
|
63
|
+
const localeInfo = localeData?.label[defaultLocale] || locale;
|
|
64
|
+
const model = getGenerationModels(pluginConfig).find((model)=>model.id === instructions['model-id']);
|
|
65
|
+
const settingsName = model.settings?.name;
|
|
66
|
+
const modelOptions = instructions[settingsName] || {};
|
|
67
|
+
const prompts = await assignPrompt(action, {
|
|
68
|
+
type: instructions['field-type'],
|
|
69
|
+
actionParams,
|
|
70
|
+
context: contextData,
|
|
71
|
+
field: fieldName,
|
|
72
|
+
layout: instructions.layout,
|
|
73
|
+
systemPrompt: instructions.system,
|
|
74
|
+
template: promptTemplate
|
|
75
|
+
});
|
|
76
|
+
// console.log('Running handler with prompts:', prompts)
|
|
77
|
+
return model.handler?.(prompts.prompt, {
|
|
78
|
+
...modelOptions,
|
|
79
|
+
editorSchema,
|
|
80
|
+
layout: prompts.layout,
|
|
81
|
+
locale: localeInfo,
|
|
82
|
+
system: prompts.system
|
|
83
|
+
}).catch((error)=>{
|
|
84
|
+
console.error('Error: endpoint - generating text:', error);
|
|
85
|
+
return new Response(JSON.stringify(error.message), {
|
|
86
|
+
status: 500
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
method: 'post',
|
|
91
|
+
path: PLUGIN_API_ENDPOINT_GENERATE
|
|
130
92
|
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
};
|
|
93
|
+
upload: {
|
|
94
|
+
handler: async (req)=>{
|
|
95
|
+
const data = await req.json?.();
|
|
96
|
+
const { options } = data;
|
|
97
|
+
const { instructionId } = options;
|
|
98
|
+
const contextData = data.doc;
|
|
99
|
+
let instructions = {
|
|
100
|
+
'model-id': '',
|
|
101
|
+
prompt: ''
|
|
102
|
+
};
|
|
103
|
+
if (instructionId) {
|
|
104
|
+
// @ts-expect-error
|
|
105
|
+
instructions = await req.payload.findByID({
|
|
106
|
+
id: instructionId,
|
|
107
|
+
collection: PLUGIN_INSTRUCTIONS_TABLE
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const { prompt: promptTemplate = '' } = instructions;
|
|
111
|
+
const schemaPath = instructions['schema-path'];
|
|
112
|
+
registerEditorHelper(req.payload, schemaPath);
|
|
113
|
+
const text = await replacePlaceholders(promptTemplate, contextData);
|
|
114
|
+
const modelId = instructions['model-id'];
|
|
115
|
+
const uploadCollectionSlug = instructions['relation-to'];
|
|
116
|
+
const model = getGenerationModels(pluginConfig).find((model)=>model.id === modelId);
|
|
117
|
+
const settingsName = model.settings?.name;
|
|
118
|
+
const modelOptions = instructions[settingsName] || {};
|
|
119
|
+
const result = await model.handler?.(text, modelOptions);
|
|
120
|
+
const assetData = await req.payload.create({
|
|
121
|
+
collection: uploadCollectionSlug,
|
|
122
|
+
data: result.data,
|
|
123
|
+
file: result.file
|
|
124
|
+
});
|
|
125
|
+
return new Response(JSON.stringify({
|
|
126
|
+
result: {
|
|
127
|
+
id: assetData.id,
|
|
128
|
+
alt: assetData.alt
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
},
|
|
132
|
+
method: 'post',
|
|
133
|
+
path: PLUGIN_API_ENDPOINT_GENERATE_UPLOAD
|
|
134
|
+
}
|
|
135
|
+
});
|
|
135
136
|
|
|
136
137
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { ActionMenuItems, Endpoints } from '../types.js'\n\nimport { GenerationModels } from '../ai/models/index.js'\nimport { defaultPrompts } from '../ai/prompts.js'\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../defaults.js'\nimport { registerEditorHelper } from '../libraries/handlebars/helpers.js'\nimport { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js'\nimport { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js'\n\nconst assignPrompt = async (\n action: ActionMenuItems,\n {\n type,\n actionParams,\n context,\n field,\n layout,\n systemPrompt = '',\n template,\n }: {\n actionParams: Record<any, any>\n context: object\n field: string\n layout: string\n systemPrompt: string\n template: string\n type: string\n },\n) => {\n const prompt = await replacePlaceholders(template, context)\n const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : ''\n\n const assignedPrompts = {\n layout: type === 'richText' ? layout : undefined,\n prompt,\n //TODO: Define only once on a collection level\n system: type === 'richText' ? systemPrompt : undefined,\n }\n\n if (action === 'Compose') {\n return assignedPrompts\n }\n\n const { layout: getLayout, system: getSystemPrompt } = defaultPrompts.find(\n (p) => p.name === action,\n )\n\n let updatedLayout = layout\n if (getLayout) {\n updatedLayout = getLayout()\n }\n\n const system = getSystemPrompt({\n ...(actionParams || {}),\n prompt,\n systemPrompt,\n })\n\n return {\n layout: updatedLayout,\n // TODO: revisit this toLexicalHTML\n prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, context),\n system,\n }\n}\n\nexport const endpoints: Endpoints = {\n textarea: { //TODO: This is the main endpoint for generating content - its just needs to be renamed to 'generate' or something.\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { locale = 'en', options } = data\n const { action, actionParams, instructionId } = options\n const contextData = data.doc\n\n if (!instructionId) {\n throw new Error(\n `Instruction ID is required for \"${PLUGIN_NAME}\" to work, please check your configuration`,\n )\n }\n\n const instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { collections } = req.payload.config\n const collection = collections.find(\n (collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE,\n )\n\n const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\n const { prompt: promptTemplate = '' } = instructions\n\n const schemaPath = instructions['schema-path'] as string\n const fieldName = schemaPath?.split('.').pop()\n\n registerEditorHelper(req.payload, schemaPath)\n\n const { defaultLocale, locales = [] } = req.payload.config.localization || {}\n const localeData = locales.find((l) => {\n return l.code === locale\n })\n\n const localeInfo = localeData?.label[defaultLocale] || locale\n\n const model = GenerationModels.find((model) => model.id === instructions['model-id'])\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n\n const prompts = await assignPrompt(action, {\n type: instructions['field-type'] as string,\n actionParams,\n context: contextData,\n field: fieldName,\n layout: instructions.layout,\n systemPrompt: instructions.system,\n template: promptTemplate as string,\n })\n\n // console.log('Running handler with prompts:', prompts)\n return model\n .handler?.(prompts.prompt, {\n ...modelOptions,\n editorSchema,\n layout: prompts.layout,\n locale: localeInfo,\n system: prompts.system,\n })\n .catch((error) => {\n console.error('Error: endpoint - generating text:', error)\n return new Response(JSON.stringify(error.message), { status: 500 })\n })\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE,\n },\n upload: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { options } = data\n const { instructionId } = options\n const contextData = data.doc\n\n let instructions = { 'model-id': '', prompt: '' }\n\n if (instructionId) {\n // @ts-expect-error\n instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n }\n\n const { prompt: promptTemplate = '' } = instructions\n const schemaPath = instructions['schema-path']\n\n registerEditorHelper(req.payload, schemaPath)\n\n const text = await replacePlaceholders(promptTemplate, contextData)\n const modelId = instructions['model-id']\n const uploadCollectionSlug = instructions['relation-to']\n\n const model = GenerationModels.find((model) => model.id === modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n\n const result = await model.handler?.(text, modelOptions)\n\n const assetData = await req.payload.create({\n collection: uploadCollectionSlug,\n data: result.data,\n file: result.file,\n })\n\n return new Response(\n JSON.stringify({\n result: {\n id: assetData.id,\n alt: assetData.alt,\n },\n }),\n )\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n },\n}\n"],"names":["GenerationModels","defaultPrompts","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","registerEditorHelper","handlebarsHelpersMap","replacePlaceholders","assignPrompt","action","type","actionParams","context","field","layout","systemPrompt","template","prompt","toLexicalHTML","toHTML","name","assignedPrompts","undefined","system","getLayout","getSystemPrompt","find","p","updatedLayout","endpoints","textarea","handler","req","data","json","locale","options","instructionId","contextData","doc","Error","instructions","payload","findByID","id","collection","collections","config","slug","custom","editorConfig","admin","schema","editorSchema","promptTemplate","schemaPath","fieldName","split","pop","defaultLocale","locales","localization","localeData","l","code","localeInfo","label","model","settingsName","settings","modelOptions","prompts","catch","error","console","Response","JSON","stringify","message","status","method","path","upload","text","modelId","uploadCollectionSlug","result","assetData","create","file","alt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { ActionMenuItems, Endpoints, PluginConfig } from '../types.js'\n\nimport { defaultPrompts } from '../ai/prompts.js'\nimport {\n PLUGIN_API_ENDPOINT_GENERATE,\n PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_NAME,\n} from '../defaults.js'\nimport { registerEditorHelper } from '../libraries/handlebars/helpers.js'\nimport { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js'\nimport { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js'\nimport { getGenerationModels } from '../utilities/getGenerationModels.js'\n\nconst assignPrompt = async (\n action: ActionMenuItems,\n {\n type,\n actionParams,\n context,\n field,\n layout,\n systemPrompt = '',\n template,\n }: {\n actionParams: Record<any, any>\n context: object\n field: string\n layout: string\n systemPrompt: string\n template: string\n type: string\n },\n) => {\n const prompt = await replacePlaceholders(template, context)\n const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : ''\n\n const assignedPrompts = {\n layout: type === 'richText' ? layout : undefined,\n prompt,\n //TODO: Define only once on a collection level\n system: type === 'richText' ? systemPrompt : undefined,\n }\n\n if (action === 'Compose') {\n return assignedPrompts\n }\n\n const { layout: getLayout, system: getSystemPrompt } = defaultPrompts.find(\n (p) => p.name === action,\n )\n\n let updatedLayout = layout\n if (getLayout) {\n updatedLayout = getLayout()\n }\n\n const system = getSystemPrompt({\n ...(actionParams || {}),\n prompt,\n systemPrompt,\n })\n\n return {\n layout: updatedLayout,\n // TODO: revisit this toLexicalHTML\n prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, context),\n system,\n }\n}\n\nexport const endpoints: (pluginConfig: PluginConfig) => Endpoints = (pluginConfig) =>\n ({\n textarea: {\n //TODO: This is the main endpoint for generating content - its just needs to be renamed to 'generate' or something.\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { locale = 'en', options } = data\n const { action, actionParams, instructionId } = options\n const contextData = data.doc\n\n if (!instructionId) {\n throw new Error(\n `Instruction ID is required for \"${PLUGIN_NAME}\" to work, please check your configuration`,\n )\n }\n\n const instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n\n const { collections } = req.payload.config\n const collection = collections.find(\n (collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE,\n )\n\n const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\n const { prompt: promptTemplate = '' } = instructions\n\n const schemaPath = instructions['schema-path'] as string\n const fieldName = schemaPath?.split('.').pop()\n\n registerEditorHelper(req.payload, schemaPath)\n\n const { defaultLocale, locales = [] } = req.payload.config.localization || {}\n const localeData = locales.find((l) => {\n return l.code === locale\n })\n\n const localeInfo = localeData?.label[defaultLocale] || locale\n\n const model = getGenerationModels(pluginConfig)\n .find((model) => model.id === instructions['model-id'])\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n\n const prompts = await assignPrompt(action, {\n type: instructions['field-type'] as string,\n actionParams,\n context: contextData,\n field: fieldName,\n layout: instructions.layout,\n systemPrompt: instructions.system,\n template: promptTemplate as string,\n })\n\n // console.log('Running handler with prompts:', prompts)\n return model\n .handler?.(prompts.prompt, {\n ...modelOptions,\n editorSchema,\n layout: prompts.layout,\n locale: localeInfo,\n system: prompts.system,\n })\n .catch((error) => {\n console.error('Error: endpoint - generating text:', error)\n return new Response(JSON.stringify(error.message), { status: 500 })\n })\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE,\n },\n upload: {\n handler: async (req: PayloadRequest) => {\n const data = await req.json?.()\n\n const { options } = data\n const { instructionId } = options\n const contextData = data.doc\n\n let instructions = { 'model-id': '', prompt: '' }\n\n if (instructionId) {\n // @ts-expect-error\n instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n })\n }\n\n const { prompt: promptTemplate = '' } = instructions\n const schemaPath = instructions['schema-path']\n\n registerEditorHelper(req.payload, schemaPath)\n\n const text = await replacePlaceholders(promptTemplate, contextData)\n const modelId = instructions['model-id']\n const uploadCollectionSlug = instructions['relation-to']\n\n const model = getGenerationModels(pluginConfig)\n .find((model) => model.id === modelId)\n const settingsName = model.settings?.name\n const modelOptions = instructions[settingsName] || {}\n\n const result = await model.handler?.(text, modelOptions)\n\n const assetData = await req.payload.create({\n collection: uploadCollectionSlug,\n data: result.data,\n file: result.file,\n })\n\n return new Response(\n JSON.stringify({\n result: {\n id: assetData.id,\n alt: assetData.alt,\n },\n }),\n )\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_GENERATE_UPLOAD,\n },\n }) satisfies Endpoints\n"],"names":["defaultPrompts","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","registerEditorHelper","handlebarsHelpersMap","replacePlaceholders","getGenerationModels","assignPrompt","action","type","actionParams","context","field","layout","systemPrompt","template","prompt","toLexicalHTML","toHTML","name","assignedPrompts","undefined","system","getLayout","getSystemPrompt","find","p","updatedLayout","endpoints","pluginConfig","textarea","handler","req","data","json","locale","options","instructionId","contextData","doc","Error","instructions","payload","findByID","id","collection","collections","config","slug","custom","editorConfig","admin","schema","editorSchema","promptTemplate","schemaPath","fieldName","split","pop","defaultLocale","locales","localization","localeData","l","code","localeInfo","label","model","settingsName","settings","modelOptions","prompts","catch","error","console","Response","JSON","stringify","message","status","method","path","upload","text","modelId","uploadCollectionSlug","result","assetData","create","file","alt"],"mappings":"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"}
|
package/dist/exports/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/exports/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type { payloadAiPlugin } from '../plugin.ts'\nexport type { PluginConfig } from '../types.ts'
|
|
1
|
+
{"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type { payloadAiPlugin } from '../plugin.ts'\nexport type { PluginConfig, GenerationConfig, GenerationModel } from '../types.ts'"],"names":[],"mappings":"AACA,WAAkF"}
|
|
@@ -5,7 +5,7 @@ import { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js';
|
|
|
5
5
|
import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
|
|
6
6
|
import { Compose } from '../../ui/Compose/Compose.js';
|
|
7
7
|
export const ComposeField = (props)=>{
|
|
8
|
-
const { id: instructionId } = useInstructions({
|
|
8
|
+
const { id: instructionId, isConfigAllowed } = useInstructions({
|
|
9
9
|
schemaPath: props?.schemaPath
|
|
10
10
|
});
|
|
11
11
|
return /*#__PURE__*/ _jsx(FieldProvider, {
|
|
@@ -16,7 +16,8 @@ export const ComposeField = (props)=>{
|
|
|
16
16
|
},
|
|
17
17
|
children: /*#__PURE__*/ _jsx(Compose, {
|
|
18
18
|
descriptionProps: props,
|
|
19
|
-
instructionId: instructionId
|
|
19
|
+
instructionId: instructionId,
|
|
20
|
+
isConfigAllowed: isConfigAllowed
|
|
20
21
|
})
|
|
21
22
|
});
|
|
22
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeField = (props) => {\n\n const { id: instructionId } = useInstructions({\n schemaPath: props?.schemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: props?.field.type,\n path: props?.path,\n schemaPath: props?.schemaPath,\n }}\n >\n <Compose descriptionProps={props} instructionId={instructionId} />\n </FieldProvider>\n )\n}\n"],"names":["React","FieldProvider","useInstructions","Compose","ComposeField","props","id","instructionId","schemaPath","context","type","field","path","descriptionProps"],"mappings":"AAAA;;AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,eAAe,CAACC;IAE3B,MAAM,EAAEC,IAAIC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/ComposeField/ComposeField.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeField = (props) => {\n\n const { id: instructionId, isConfigAllowed } = useInstructions({\n schemaPath: props?.schemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: props?.field.type,\n path: props?.path,\n schemaPath: props?.schemaPath,\n }}\n >\n <Compose descriptionProps={props} instructionId={instructionId} isConfigAllowed={isConfigAllowed} />\n </FieldProvider>\n )\n}\n"],"names":["React","FieldProvider","useInstructions","Compose","ComposeField","props","id","instructionId","isConfigAllowed","schemaPath","context","type","field","path","descriptionProps"],"mappings":"AAAA;;AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,eAAe,CAACC;IAE3B,MAAM,EAAEC,IAAIC,aAAa,EAAEC,eAAe,EAAE,GAAGN,gBAAgB;QAC7DO,YAAYJ,OAAOI;IACrB;IAEA,qBACE,KAACR;QACCS,SAAS;YACPC,MAAMN,OAAOO,MAAMD;YACnBE,MAAMR,OAAOQ;YACbJ,YAAYJ,OAAOI;QACrB;kBAEA,cAAA,KAACN;YAAQW,kBAAkBT;YAAOE,eAAeA;YAAeC,iBAAiBA;;;AAGvF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposeFeatureComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,GAAI,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"ComposeFeatureComponent.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,GAAI,OAAO,GAAG,4CAyBjD,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js';
|
|
|
4
4
|
import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
|
|
5
5
|
import { Compose } from '../../ui/Compose/Compose.js';
|
|
6
6
|
export const ComposeFeatureComponent = (props)=>{
|
|
7
|
-
const { id: instructionId } = useInstructions({
|
|
7
|
+
const { id: instructionId, isConfigAllowed } = useInstructions({
|
|
8
8
|
schemaPath: props?.clientProps?.schemaPath
|
|
9
9
|
});
|
|
10
10
|
return /*#__PURE__*/ _jsx(FieldProvider, {
|
|
@@ -20,7 +20,8 @@ export const ComposeFeatureComponent = (props)=>{
|
|
|
20
20
|
schemaPath: props?.clientProps?.schemaPath,
|
|
21
21
|
...props?.clientProps
|
|
22
22
|
},
|
|
23
|
-
instructionId: instructionId
|
|
23
|
+
instructionId: instructionId,
|
|
24
|
+
isConfigAllowed: isConfigAllowed
|
|
24
25
|
})
|
|
25
26
|
});
|
|
26
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"sourcesContent":["import React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeFeatureComponent = (props: any) => {\n const { id: instructionId } = useInstructions({\n schemaPath: props?.clientProps?.schemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: props?.clientProps?.field?.type,\n path: props?.clientProps?.path,\n schemaPath: props?.clientProps?.schemaPath,\n }}\n >\n <Compose\n descriptionProps={{\n field: props?.clientProps?.field,\n path: props?.clientProps?.path,\n schemaPath: props?.clientProps?.schemaPath,\n ...props?.clientProps,\n }}\n instructionId={instructionId}\n />\n </FieldProvider>\n )\n}\n"],"names":["React","FieldProvider","useInstructions","Compose","ComposeFeatureComponent","props","id","instructionId","schemaPath","clientProps","context","type","field","path","descriptionProps"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,0BAA0B,CAACC;IACtC,MAAM,EAAEC,IAAIC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/LexicalEditor/ComposeFeatureComponent.tsx"],"sourcesContent":["import React from 'react'\n\nimport { FieldProvider } from '../../providers/FieldProvider/FieldProvider.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\nimport { Compose } from '../../ui/Compose/Compose.js'\n\nexport const ComposeFeatureComponent = (props: any) => {\n const { id: instructionId, isConfigAllowed } = useInstructions({\n schemaPath: props?.clientProps?.schemaPath,\n })\n\n return (\n <FieldProvider\n context={{\n type: props?.clientProps?.field?.type,\n path: props?.clientProps?.path,\n schemaPath: props?.clientProps?.schemaPath,\n }}\n >\n <Compose\n descriptionProps={{\n field: props?.clientProps?.field,\n path: props?.clientProps?.path,\n schemaPath: props?.clientProps?.schemaPath,\n ...props?.clientProps,\n }}\n instructionId={instructionId}\n isConfigAllowed={isConfigAllowed}\n />\n </FieldProvider>\n )\n}\n"],"names":["React","FieldProvider","useInstructions","Compose","ComposeFeatureComponent","props","id","instructionId","isConfigAllowed","schemaPath","clientProps","context","type","field","path","descriptionProps"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,aAAa,QAAQ,iDAAgD;AAC9E,SAASC,eAAe,QAAQ,0DAAyD;AACzF,SAASC,OAAO,QAAQ,8BAA6B;AAErD,OAAO,MAAMC,0BAA0B,CAACC;IACtC,MAAM,EAAEC,IAAIC,aAAa,EAAEC,eAAe,EAAE,GAAGN,gBAAgB;QAC7DO,YAAYJ,OAAOK,aAAaD;IAClC;IAEA,qBACE,KAACR;QACCU,SAAS;YACPC,MAAMP,OAAOK,aAAaG,OAAOD;YACjCE,MAAMT,OAAOK,aAAaI;YAC1BL,YAAYJ,OAAOK,aAAaD;QAClC;kBAEA,cAAA,KAACN;YACCY,kBAAkB;gBAChBF,OAAOR,OAAOK,aAAaG;gBAC3BC,MAAMT,OAAOK,aAAaI;gBAC1BL,YAAYJ,OAAOK,aAAaD;gBAChC,GAAGJ,OAAOK,WAAW;YACvB;YACAH,eAAeA;YACfC,iBAAiBA;;;AAIzB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mCAAmC,uGAK9C,CAAA"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { createServerFeature } from '@payloadcms/richtext-lexical';
|
|
2
2
|
import { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js';
|
|
3
|
-
|
|
4
|
-
const isActivated = isPluginActivated();
|
|
3
|
+
// TODO: Find a way to check if the plugin is activated
|
|
5
4
|
export const PayloadAiPluginLexicalEditorFeature = createServerFeature({
|
|
6
5
|
feature: {
|
|
7
|
-
ClientFeature:
|
|
6
|
+
ClientFeature: '@ai-stack/payloadcms/client#LexicalEditorFeatureClient'
|
|
8
7
|
},
|
|
9
8
|
key: PLUGIN_LEXICAL_EDITOR_FEATURE
|
|
10
9
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\n\n// TODO: Find a way to check if the plugin is activated\nexport const PayloadAiPluginLexicalEditorFeature = createServerFeature({\n feature: {\n ClientFeature: '@ai-stack/payloadcms/client#LexicalEditorFeatureClient',\n },\n key: PLUGIN_LEXICAL_EDITOR_FEATURE,\n})\n"],"names":["createServerFeature","PLUGIN_LEXICAL_EDITOR_FEATURE","PayloadAiPluginLexicalEditorFeature","feature","ClientFeature","key"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,+BAA8B;AAElE,SAASC,6BAA6B,QAAQ,oBAAmB;AAEjE,uDAAuD;AACvD,OAAO,MAAMC,sCAAsCF,oBAAoB;IACrEG,SAAS;QACPC,eAAe;IACjB;IACAC,KAAKJ;AACP,GAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptEditorField.d.ts","sourceRoot":"","sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAGvD,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"PromptEditorField.d.ts","sourceRoot":"","sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAGvD,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA0BhE,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { FieldLabel, useField } from '@payloadcms/ui';
|
|
3
|
+
import { FieldDescription, FieldLabel, useField } from '@payloadcms/ui';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { AutocompleteTextField } from '../../libraries/autocomplete/AutocompleteTextArea.js';
|
|
6
6
|
import { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js';
|
|
@@ -29,6 +29,10 @@ export const PromptEditorField = (props)=>{
|
|
|
29
29
|
'{{ '
|
|
30
30
|
],
|
|
31
31
|
value: value
|
|
32
|
+
}),
|
|
33
|
+
/*#__PURE__*/ _jsx(FieldDescription, {
|
|
34
|
+
description: field?.admin?.description,
|
|
35
|
+
path: ""
|
|
32
36
|
})
|
|
33
37
|
]
|
|
34
38
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldClientProps } from 'payload'\n\nimport { FieldLabel, useField } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { AutocompleteTextField } from '../../libraries/autocomplete/AutocompleteTextArea.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\n\n//NOTE: HMR does not work for plugin components anymore, I think it has to do with importMap/ string path\nexport const PromptEditorField: React.FC<TextareaFieldClientProps> = (props) => {\n const { field, path: pathFromContext } = props\n\n const { setValue, value } = useField<string>({\n path: pathFromContext,\n })\n\n const { promptEditorSuggestions } = useInstructions()\n\n return (\n <div className=\"field-type textarea\">\n <FieldLabel label={field.label} />\n <AutocompleteTextField\n changeOnSelect={(trigger, selected) => {\n return trigger + selected + ' }}'\n }}\n onChange={(val: string) => {\n setValue(val)\n }}\n options={promptEditorSuggestions}\n trigger={['{{ ']}\n value={value}\n />\n </div>\n )\n}\n"],"names":["FieldLabel","useField","React","AutocompleteTextField","useInstructions","PromptEditorField","props","field","path","pathFromContext","setValue","value","promptEditorSuggestions","div","className","label","changeOnSelect","trigger","selected","onChange","val","options"],"mappings":"AAAA;;AAIA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,iBAAgB;
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/PromptEditorField/PromptEditorField.tsx"],"sourcesContent":["'use client'\n\nimport type { TextareaFieldClientProps } from 'payload'\n\nimport { FieldDescription, FieldLabel, useField } from '@payloadcms/ui'\nimport React from 'react'\n\nimport { AutocompleteTextField } from '../../libraries/autocomplete/AutocompleteTextArea.js'\nimport { useInstructions } from '../../providers/InstructionsProvider/useInstructions.js'\n\n//NOTE: HMR does not work for plugin components anymore, I think it has to do with importMap/ string path\nexport const PromptEditorField: React.FC<TextareaFieldClientProps> = (props) => {\n const { field, path: pathFromContext } = props\n\n const { setValue, value } = useField<string>({\n path: pathFromContext,\n })\n\n const { promptEditorSuggestions } = useInstructions()\n\n return (\n <div className=\"field-type textarea\">\n <FieldLabel label={field.label} />\n <AutocompleteTextField\n changeOnSelect={(trigger, selected) => {\n return trigger + selected + ' }}'\n }}\n onChange={(val: string) => {\n setValue(val)\n }}\n options={promptEditorSuggestions}\n trigger={['{{ ']}\n value={value}\n />\n <FieldDescription description={field?.admin?.description} path=\"\" />\n </div>\n )\n}\n"],"names":["FieldDescription","FieldLabel","useField","React","AutocompleteTextField","useInstructions","PromptEditorField","props","field","path","pathFromContext","setValue","value","promptEditorSuggestions","div","className","label","changeOnSelect","trigger","selected","onChange","val","options","description","admin"],"mappings":"AAAA;;AAIA,SAASA,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,iBAAgB;AACvE,OAAOC,WAAW,QAAO;AAEzB,SAASC,qBAAqB,QAAQ,uDAAsD;AAC5F,SAASC,eAAe,QAAQ,0DAAyD;AAEzF,yGAAyG;AACzG,OAAO,MAAMC,oBAAwD,CAACC;IACpE,MAAM,EAAEC,KAAK,EAAEC,MAAMC,eAAe,EAAE,GAAGH;IAEzC,MAAM,EAAEI,QAAQ,EAAEC,KAAK,EAAE,GAAGV,SAAiB;QAC3CO,MAAMC;IACR;IAEA,MAAM,EAAEG,uBAAuB,EAAE,GAAGR;IAEpC,qBACE,MAACS;QAAIC,WAAU;;0BACb,KAACd;gBAAWe,OAAOR,MAAMQ,KAAK;;0BAC9B,KAACZ;gBACCa,gBAAgB,CAACC,SAASC;oBACxB,OAAOD,UAAUC,WAAW;gBAC9B;gBACAC,UAAU,CAACC;oBACTV,SAASU;gBACX;gBACAC,SAAST;gBACTK,SAAS;oBAAC;iBAAM;gBAChBN,OAAOA;;0BAET,KAACZ;gBAAiBuB,aAAaf,OAAOgB,OAAOD;gBAAad,MAAK;;;;AAGrE,EAAC"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,IAAI,GAAU,SAAS,OAAO,EAAE,qBAAgB,EAAE,cAAc,YAAY,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,IAAI,GAAU,SAAS,OAAO,EAAE,qBAAgB,EAAE,cAAc,YAAY,kBA8FxF,CAAA"}
|
package/dist/init.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { GenerationModels } from './ai/models/index.js';
|
|
2
1
|
import { seedPrompts } from './ai/prompts.js';
|
|
3
2
|
import { systemGenerate } from './ai/utils/systemGenerate.js';
|
|
4
3
|
import { PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js';
|
|
4
|
+
import { getGenerationModels } from './utilities/getGenerationModels.js';
|
|
5
5
|
export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
|
|
6
|
-
|
|
6
|
+
if (pluginConfig.debugging) {
|
|
7
|
+
payload.logger.info(`— AI Plugin: Initializing...`);
|
|
8
|
+
}
|
|
7
9
|
const paths = Object.keys(fieldSchemaPaths);
|
|
8
10
|
const fieldInstructionsMap = {};
|
|
9
11
|
for(let i = 0; i < paths.length; i++){
|
|
@@ -30,17 +32,19 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
|
|
|
30
32
|
});
|
|
31
33
|
let generatedPrompt = '{{ title }}';
|
|
32
34
|
if (pluginConfig.generatePromptOnInit) {
|
|
35
|
+
// find the model that has the generateText function
|
|
36
|
+
const model = getGenerationModels(pluginConfig).find((model)=>model.generateText);
|
|
33
37
|
generatedPrompt = await systemGenerate({
|
|
34
38
|
prompt,
|
|
35
39
|
system
|
|
36
|
-
});
|
|
40
|
+
}, model?.generateText);
|
|
37
41
|
payload.logger.info(`\nPrompt generated for "${fieldLabel}" field:\nprompt: ${generatedPrompt}\n\n`);
|
|
38
42
|
}
|
|
39
43
|
const instructions = await payload.create({
|
|
40
44
|
collection: PLUGIN_INSTRUCTIONS_TABLE,
|
|
41
45
|
data: {
|
|
42
46
|
'field-type': fieldType,
|
|
43
|
-
'model-id':
|
|
47
|
+
'model-id': getGenerationModels(pluginConfig).find((a)=>{
|
|
44
48
|
return a.fields.includes(fieldType);
|
|
45
49
|
})?.id,
|
|
46
50
|
prompt: generatedPrompt,
|
|
@@ -48,7 +52,7 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
|
|
|
48
52
|
'schema-path': path
|
|
49
53
|
}
|
|
50
54
|
}).then((a)=>a).catch((err)=>{
|
|
51
|
-
|
|
55
|
+
payload.logger.error('— AI Plugin: Error creating Compose settings-', err);
|
|
52
56
|
});
|
|
53
57
|
// @ts-expect-error
|
|
54
58
|
if (instructions?.id) {
|
|
@@ -67,8 +71,8 @@ export const init = async (payload, fieldSchemaPaths, pluginConfig)=>{
|
|
|
67
71
|
}
|
|
68
72
|
if (pluginConfig.debugging) {
|
|
69
73
|
payload.logger.info(`— AI Plugin: Enabled fields map: ${JSON.stringify(fieldInstructionsMap, null, 2)}`);
|
|
74
|
+
payload.logger.info(`— AI Plugin: Initialized!`);
|
|
70
75
|
}
|
|
71
|
-
payload.logger.info(`— AI Plugin: Initialized!`);
|
|
72
76
|
if (pluginConfig.generatePromptOnInit) {
|
|
73
77
|
payload.logger.info('\n\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\n\n');
|
|
74
78
|
}
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport type { PluginConfig } from './types.js'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/init.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport type { PluginConfig } from './types.js'\n\nimport { seedPrompts } from './ai/prompts.js'\nimport { systemGenerate } from './ai/utils/systemGenerate.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE } from './defaults.js'\nimport { getGenerationModels } from './utilities/getGenerationModels.js'\n\nexport const init = async (payload: Payload, fieldSchemaPaths, pluginConfig: PluginConfig) => {\n if (pluginConfig.debugging) {\n payload.logger.info(`— AI Plugin: Initializing...`)\n }\n\n const paths = Object.keys(fieldSchemaPaths)\n\n const fieldInstructionsMap = {}\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i]\n const { type: fieldType, label: fieldLabel, relationTo } = fieldSchemaPaths[path]\n const entry = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n where: {\n 'field-type': {\n equals: fieldType,\n },\n 'schema-path': {\n equals: path,\n },\n },\n })\n\n if (!entry?.docs?.length) {\n const { prompt, system } = seedPrompts({\n fieldLabel,\n fieldSchemaPaths,\n fieldType,\n path,\n })\n\n let generatedPrompt = '{{ title }}'\n if (pluginConfig.generatePromptOnInit) {\n // find the model that has the generateText function\n const model = getGenerationModels(pluginConfig).find((model) => model.generateText)\n generatedPrompt = await systemGenerate(\n {\n prompt,\n system,\n },\n model?.generateText,\n )\n payload.logger.info(\n `\\nPrompt generated for \"${fieldLabel}\" field:\\nprompt: ${generatedPrompt}\\n\\n`,\n )\n }\n\n const instructions = await payload\n .create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n 'field-type': fieldType,\n 'model-id': getGenerationModels(pluginConfig).find((a) => {\n return a.fields.includes(fieldType)\n })?.id,\n prompt: generatedPrompt,\n 'relation-to': relationTo,\n 'schema-path': path,\n },\n })\n .then((a) => a)\n .catch((err) => {\n payload.logger.error('— AI Plugin: Error creating Compose settings-', err)\n })\n\n // @ts-expect-error\n if (instructions?.id) {\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n } else {\n const [instructions] = entry.docs\n fieldInstructionsMap[path] = {\n id: instructions.id,\n fieldType,\n }\n }\n }\n\n if (pluginConfig.debugging) {\n payload.logger.info(\n `— AI Plugin: Enabled fields map: ${JSON.stringify(fieldInstructionsMap, null, 2)}`,\n )\n payload.logger.info(`— AI Plugin: Initialized!`)\n }\n\n if (pluginConfig.generatePromptOnInit) {\n payload.logger.info(\n '\\n\\n-AI Plugin: Example prompts are added to get you started, Now go break some code 🚀🚀🚀\\n\\n',\n )\n }\n}\n"],"names":["seedPrompts","systemGenerate","PLUGIN_INSTRUCTIONS_TABLE","getGenerationModels","init","payload","fieldSchemaPaths","pluginConfig","debugging","logger","info","paths","Object","keys","fieldInstructionsMap","i","length","path","type","fieldType","label","fieldLabel","relationTo","entry","find","collection","pagination","where","equals","docs","prompt","system","generatedPrompt","generatePromptOnInit","model","generateText","instructions","create","data","a","fields","includes","id","then","catch","err","error","JSON","stringify"],"mappings":"AAIA,SAASA,WAAW,QAAQ,kBAAiB;AAC7C,SAASC,cAAc,QAAQ,+BAA8B;AAC7D,SAASC,yBAAyB,QAAQ,gBAAe;AACzD,SAASC,mBAAmB,QAAQ,qCAAoC;AAExE,OAAO,MAAMC,OAAO,OAAOC,SAAkBC,kBAAkBC;IAC7D,IAAIA,aAAaC,SAAS,EAAE;QAC1BH,QAAQI,MAAM,CAACC,IAAI,CAAC,CAAC,4BAA4B,CAAC;IACpD;IAEA,MAAMC,QAAQC,OAAOC,IAAI,CAACP;IAE1B,MAAMQ,uBAAuB,CAAC;IAC9B,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,MAAMK,MAAM,EAAED,IAAK;QACrC,MAAME,OAAON,KAAK,CAACI,EAAE;QACrB,MAAM,EAAEG,MAAMC,SAAS,EAAEC,OAAOC,UAAU,EAAEC,UAAU,EAAE,GAAGhB,gBAAgB,CAACW,KAAK;QACjF,MAAMM,QAAQ,MAAMlB,QAAQmB,IAAI,CAAC;YAC/BC,YAAYvB;YACZwB,YAAY;YACZC,OAAO;gBACL,cAAc;oBACZC,QAAQT;gBACV;gBACA,eAAe;oBACbS,QAAQX;gBACV;YACF;QACF;QAEA,IAAI,CAACM,OAAOM,MAAMb,QAAQ;YACxB,MAAM,EAAEc,MAAM,EAAEC,MAAM,EAAE,GAAG/B,YAAY;gBACrCqB;gBACAf;gBACAa;gBACAF;YACF;YAEA,IAAIe,kBAAkB;YACtB,IAAIzB,aAAa0B,oBAAoB,EAAE;gBACrC,oDAAoD;gBACpD,MAAMC,QAAQ/B,oBAAoBI,cAAciB,IAAI,CAAC,CAACU,QAAUA,MAAMC,YAAY;gBAClFH,kBAAkB,MAAM/B,eACtB;oBACE6B;oBACAC;gBACF,GACAG,OAAOC;gBAET9B,QAAQI,MAAM,CAACC,IAAI,CACjB,CAAC,wBAAwB,EAAEW,WAAW,kBAAkB,EAAEW,gBAAgB,IAAI,CAAC;YAEnF;YAEA,MAAMI,eAAe,MAAM/B,QACxBgC,MAAM,CAAC;gBACNZ,YAAYvB;gBACZoC,MAAM;oBACJ,cAAcnB;oBACd,YAAYhB,oBAAoBI,cAAciB,IAAI,CAAC,CAACe;wBAClD,OAAOA,EAAEC,MAAM,CAACC,QAAQ,CAACtB;oBAC3B,IAAIuB;oBACJZ,QAAQE;oBACR,eAAeV;oBACf,eAAeL;gBACjB;YACF,GACC0B,IAAI,CAAC,CAACJ,IAAMA,GACZK,KAAK,CAAC,CAACC;gBACNxC,QAAQI,MAAM,CAACqC,KAAK,CAAC,iDAAiDD;YACxE;YAEF,mBAAmB;YACnB,IAAIT,cAAcM,IAAI;gBACpB5B,oBAAoB,CAACG,KAAK,GAAG;oBAC3ByB,IAAIN,aAAaM,EAAE;oBACnBvB;gBACF;YACF;QACF,OAAO;YACL,MAAM,CAACiB,aAAa,GAAGb,MAAMM,IAAI;YACjCf,oBAAoB,CAACG,KAAK,GAAG;gBAC3ByB,IAAIN,aAAaM,EAAE;gBACnBvB;YACF;QACF;IACF;IAEA,IAAIZ,aAAaC,SAAS,EAAE;QAC1BH,QAAQI,MAAM,CAACC,IAAI,CACjB,CAAC,iCAAiC,EAAEqC,KAAKC,SAAS,CAAClC,sBAAsB,MAAM,IAAI;QAErFT,QAAQI,MAAM,CAACC,IAAI,CAAC,CAAC,yBAAyB,CAAC;IACjD;IAEA,IAAIH,aAAa0B,oBAAoB,EAAE;QACrC5B,QAAQI,MAAM,CAACC,IAAI,CACjB;IAEJ;AACF,EAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const replacePlaceholders: (prompt: string, values: object) =>
|
|
1
|
+
export declare const replacePlaceholders: (prompt: string, values: object) => Promise<string>;
|
|
2
2
|
//# sourceMappingURL=replacePlaceholders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replacePlaceholders.d.ts","sourceRoot":"","sources":["../../../src/libraries/handlebars/replacePlaceholders.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"replacePlaceholders.d.ts","sourceRoot":"","sources":["../../../src/libraries/handlebars/replacePlaceholders.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KACM,OAAO,CAAC,MAAM,CACrF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/libraries/handlebars/replacePlaceholders.ts"],"sourcesContent":["import { asyncHandlebars } from './asyncHandlebars.js'\n\nexport const replacePlaceholders = (prompt: string, values: object) => {\n return asyncHandlebars.compile(prompt, { trackIds: true })(values)
|
|
1
|
+
{"version":3,"sources":["../../../src/libraries/handlebars/replacePlaceholders.ts"],"sourcesContent":["import { asyncHandlebars } from './asyncHandlebars.js'\n\nexport const replacePlaceholders = (prompt: string, values: object) => {\n return asyncHandlebars.compile(prompt, { trackIds: true })(values) as Promise<string>\n}\n"],"names":["asyncHandlebars","replacePlaceholders","prompt","values","compile","trackIds"],"mappings":"AAAA,SAASA,eAAe,QAAQ,uBAAsB;AAEtD,OAAO,MAAMC,sBAAsB,CAACC,QAAgBC;IAClD,OAAOH,gBAAgBI,OAAO,CAACF,QAAQ;QAAEG,UAAU;IAAK,GAAGF;AAC7D,EAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAyC9C,QAAA,MAAM,eAAe,GAClB,cAAc,YAAY,MAC1B,gBAAgB,MAAM,KAAG,MAiGzB,CAAA;AAEH,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { deepMerge } from 'payload/shared';
|
|
2
|
+
import { defaultGenerationModels } from './ai/models/index.js';
|
|
2
3
|
import { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js';
|
|
3
4
|
import { instructionsCollection } from './collections/Instructions.js';
|
|
4
5
|
import { PLUGIN_NAME } from './defaults.js';
|
|
@@ -6,12 +7,14 @@ import { fetchFields } from './endpoints/fetchFields.js';
|
|
|
6
7
|
import { endpoints } from './endpoints/index.js';
|
|
7
8
|
import { init } from './init.js';
|
|
8
9
|
import { translations } from './translations/index.js';
|
|
10
|
+
import { getGenerationModels } from './utilities/getGenerationModels.js';
|
|
9
11
|
import { isPluginActivated } from './utilities/isPluginActivated.js';
|
|
10
12
|
import { updateFieldsConfig } from './utilities/updateFieldsConfig.js';
|
|
11
13
|
const defaultPluginConfig = {
|
|
12
14
|
collections: {},
|
|
13
15
|
disableSponsorMessage: false,
|
|
14
|
-
generatePromptOnInit: true
|
|
16
|
+
generatePromptOnInit: true,
|
|
17
|
+
generationModels: defaultGenerationModels
|
|
15
18
|
};
|
|
16
19
|
const sponsorMessage = `
|
|
17
20
|
╔═══════════════════════════════════════════════════════════════╗
|
|
@@ -37,13 +40,14 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
37
40
|
...defaultPluginConfig,
|
|
38
41
|
...pluginConfig
|
|
39
42
|
};
|
|
40
|
-
|
|
43
|
+
pluginConfig.generationModels = getGenerationModels(pluginConfig);
|
|
44
|
+
const isActivated = isPluginActivated(pluginConfig);
|
|
41
45
|
let updatedConfig = {
|
|
42
46
|
...incomingConfig
|
|
43
47
|
};
|
|
44
48
|
let collectionsFieldPathMap = {};
|
|
45
49
|
if (isActivated) {
|
|
46
|
-
const Instructions = instructionsCollection();
|
|
50
|
+
const Instructions = instructionsCollection(pluginConfig);
|
|
47
51
|
// Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit
|
|
48
52
|
const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes);
|
|
49
53
|
if (pluginConfig.debugging) {
|
|
@@ -77,6 +81,7 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
77
81
|
providers: updatedProviders
|
|
78
82
|
}
|
|
79
83
|
};
|
|
84
|
+
const pluginEndpoints = endpoints(pluginConfig);
|
|
80
85
|
updatedConfig = {
|
|
81
86
|
...incomingConfig,
|
|
82
87
|
collections: collections.map((collection)=>{
|
|
@@ -92,9 +97,9 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
|
|
|
92
97
|
}),
|
|
93
98
|
endpoints: [
|
|
94
99
|
...incomingConfig.endpoints ?? [],
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
fetchFields
|
|
100
|
+
pluginEndpoints.textarea,
|
|
101
|
+
pluginEndpoints.upload,
|
|
102
|
+
fetchFields(pluginConfig.access)
|
|
98
103
|
],
|
|
99
104
|
i18n: {
|
|
100
105
|
...incomingConfig.i18n || {},
|