@ai-stack/payloadcms 3.2.24 → 3.68.0-beta.1
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/{LICENSE.md → LICENSE} +1 -1
- package/README.md +218 -229
- package/dist/access/checkAccess.d.ts +4 -0
- package/dist/access/checkAccess.js +20 -0
- package/dist/access/checkAccess.js.map +1 -0
- package/dist/ai/core/generateObject.d.ts +7 -0
- package/dist/ai/core/generateObject.js +35 -0
- package/dist/ai/core/generateObject.js.map +1 -0
- package/dist/ai/core/generateText.d.ts +7 -0
- package/dist/ai/core/generateText.js +31 -0
- package/dist/ai/core/generateText.js.map +1 -0
- package/dist/ai/core/index.d.ts +11 -0
- package/dist/ai/core/index.js +10 -0
- package/dist/ai/core/index.js.map +1 -0
- package/dist/ai/core/media/generateMedia.d.ts +7 -0
- package/dist/ai/core/media/generateMedia.js +50 -0
- package/dist/ai/core/media/generateMedia.js.map +1 -0
- package/dist/ai/core/media/image/generateImage.d.ts +6 -0
- package/dist/ai/core/media/image/generateImage.js +41 -0
- package/dist/ai/core/media/image/generateImage.js.map +1 -0
- package/dist/ai/core/media/image/handlers/multimodal.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/multimodal.js +95 -0
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -0
- package/dist/ai/core/media/image/handlers/standard.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/standard.js +28 -0
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -0
- package/dist/ai/core/media/image/index.d.ts +2 -0
- package/dist/ai/core/media/image/index.js +3 -0
- package/dist/ai/core/media/image/index.js.map +1 -0
- package/dist/ai/core/media/index.d.ts +2 -0
- package/dist/ai/core/media/index.js +3 -0
- package/dist/ai/core/media/index.js.map +1 -0
- package/dist/ai/core/media/speech/generateSpeech.d.ts +5 -0
- package/dist/ai/core/media/speech/generateSpeech.js +55 -0
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -0
- package/dist/ai/core/media/speech/index.d.ts +2 -0
- package/dist/ai/core/media/speech/index.js +3 -0
- package/dist/ai/core/media/speech/index.js.map +1 -0
- package/dist/ai/core/media/types.d.ts +74 -0
- package/dist/ai/core/media/types.js +5 -0
- package/dist/ai/core/media/types.js.map +1 -0
- package/dist/ai/core/media/utils.d.ts +11 -0
- package/dist/ai/core/media/utils.js +34 -0
- package/dist/ai/core/media/utils.js.map +1 -0
- package/dist/ai/core/media/video/generateVideo.d.ts +6 -0
- package/dist/ai/core/media/video/generateVideo.js +32 -0
- package/dist/ai/core/media/video/generateVideo.js.map +1 -0
- package/dist/ai/core/media/video/index.d.ts +2 -0
- package/dist/ai/core/media/video/index.js +3 -0
- package/dist/ai/core/media/video/index.js.map +1 -0
- package/dist/ai/core/streamObject.d.ts +7 -0
- package/dist/ai/core/streamObject.js +57 -0
- package/dist/ai/core/streamObject.js.map +1 -0
- package/dist/ai/core/streamText.d.ts +7 -0
- package/dist/ai/core/streamText.js +30 -0
- package/dist/ai/core/streamText.js.map +1 -0
- package/dist/ai/core/types.d.ts +85 -0
- package/dist/ai/core/types.js +5 -0
- package/dist/ai/core/types.js.map +1 -0
- package/dist/ai/index.d.ts +11 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/providers/blocks/anthropic.d.ts +2 -0
- package/dist/ai/providers/blocks/anthropic.js +222 -0
- package/dist/ai/providers/blocks/anthropic.js.map +1 -0
- package/dist/ai/providers/blocks/elevenlabs.d.ts +2 -0
- package/dist/ai/providers/blocks/elevenlabs.js +448 -0
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -0
- package/dist/ai/providers/blocks/fal.d.ts +2 -0
- package/dist/ai/providers/blocks/fal.js +311 -0
- package/dist/ai/providers/blocks/fal.js.map +1 -0
- package/dist/ai/providers/blocks/google.d.ts +2 -0
- package/dist/ai/providers/blocks/google.js +622 -0
- package/dist/ai/providers/blocks/google.js.map +1 -0
- package/dist/ai/providers/blocks/index.d.ts +2 -0
- package/dist/ai/providers/blocks/index.js +18 -0
- package/dist/ai/providers/blocks/index.js.map +1 -0
- package/dist/ai/providers/blocks/openai-compatible.d.ts +2 -0
- package/dist/ai/providers/blocks/openai-compatible.js +307 -0
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -0
- package/dist/ai/providers/blocks/openai.d.ts +2 -0
- package/dist/ai/providers/blocks/openai.js +599 -0
- package/dist/ai/providers/blocks/openai.js.map +1 -0
- package/dist/ai/providers/blocks/xai.d.ts +2 -0
- package/dist/ai/providers/blocks/xai.js +246 -0
- package/dist/ai/providers/blocks/xai.js.map +1 -0
- package/dist/ai/providers/index.d.ts +2 -0
- package/dist/ai/providers/index.js +6 -0
- package/dist/ai/providers/index.js.map +1 -0
- package/dist/ai/providers/registry.d.ts +40 -0
- package/dist/ai/providers/registry.js +256 -0
- package/dist/ai/providers/registry.js.map +1 -0
- package/dist/ai/providers/types.d.ts +115 -0
- package/dist/ai/providers/types.js +4 -0
- package/dist/ai/providers/types.js.map +1 -0
- package/dist/ai/utils/systemGenerate.d.ts +1 -1
- package/dist/ai/utils/systemGenerate.js +19 -19
- package/dist/ai/utils/systemGenerate.js.map +1 -1
- package/dist/collections/AIJobs.d.ts +2 -0
- package/dist/collections/AIJobs.js +81 -0
- package/dist/collections/AIJobs.js.map +1 -0
- package/dist/collections/AISettings.d.ts +2 -0
- package/dist/collections/AISettings.js +279 -0
- package/dist/collections/AISettings.js.map +1 -0
- package/dist/collections/Instructions.js +185 -37
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/buildPromptUtils.d.ts +19 -0
- package/dist/endpoints/buildPromptUtils.js +114 -0
- package/dist/endpoints/buildPromptUtils.js.map +1 -0
- package/dist/endpoints/chat.d.js +3 -0
- package/dist/endpoints/chat.d.js.map +1 -0
- package/dist/endpoints/fetchVoices.d.ts +2 -0
- package/dist/endpoints/fetchVoices.js +79 -0
- package/dist/endpoints/fetchVoices.js.map +1 -0
- package/dist/endpoints/index.js +253 -214
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/client.d.ts +9 -0
- package/dist/exports/client.js +9 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.js +2 -2
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +2 -2
- package/dist/fields/PromptEditorField/PromptEditorField.js +155 -14
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +118 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +35 -13
- package/dist/init.js.map +1 -1
- package/dist/payload-ai.d.js +3 -0
- package/dist/payload-ai.d.js.map +1 -0
- package/dist/plugin.js +80 -9
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +35 -7
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +27 -4
- package/dist/providers/InstructionsProvider/context.d.ts +1 -0
- package/dist/providers/InstructionsProvider/context.js +1 -0
- package/dist/providers/InstructionsProvider/context.js.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +13 -6
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/types.d.ts +7 -7
- package/dist/types.js.map +1 -1
- package/dist/ui/AIConfigDashboard/index.d.ts +2 -0
- package/dist/ui/AIConfigDashboard/index.js +46 -0
- package/dist/ui/AIConfigDashboard/index.js.map +1 -0
- package/dist/ui/AIConfigDashboard/index.jsx +24 -0
- package/dist/ui/ApiKeyStatusIndicator/index.d.ts +6 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js +39 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js.map +1 -0
- package/dist/ui/ApiKeyStatusIndicator/index.jsx +29 -0
- package/dist/ui/Compose/Compose.d.ts +1 -2
- package/dist/ui/Compose/Compose.js +116 -90
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +111 -101
- package/dist/ui/Compose/ComposePlaceholder.d.ts +7 -0
- package/dist/ui/Compose/ComposePlaceholder.js +78 -0
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -0
- package/dist/ui/Compose/ComposePlaceholder.jsx +66 -0
- package/dist/ui/Compose/UndoRedoActions.js +3 -1
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.jsx +2 -1
- package/dist/ui/Compose/compose.module.css +1 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js +1 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/useMenu.js +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +2 -2
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js +69 -10
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts +3 -0
- package/dist/ui/Compose/hooks/useGenerate.js +71 -11
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.js +52 -5
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.d.ts +7 -0
- package/dist/ui/DynamicModelSelect/index.js +231 -0
- package/dist/ui/DynamicModelSelect/index.js.map +1 -0
- package/dist/ui/DynamicModelSelect/index.jsx +207 -0
- package/dist/ui/DynamicProviderSelect/index.d.ts +7 -0
- package/dist/ui/DynamicProviderSelect/index.js +101 -0
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -0
- package/dist/ui/DynamicProviderSelect/index.jsx +90 -0
- package/dist/ui/DynamicVoiceSelect/index.d.ts +7 -0
- package/dist/ui/DynamicVoiceSelect/index.js +104 -0
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
- package/dist/ui/DynamicVoiceSelect/index.jsx +69 -0
- package/dist/ui/EncryptedTextField/index.d.ts +8 -0
- package/dist/ui/EncryptedTextField/index.js +74 -0
- package/dist/ui/EncryptedTextField/index.js.map +1 -0
- package/dist/ui/EncryptedTextField/index.jsx +35 -0
- package/dist/ui/Icons/LottieAnimation.js +3 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +2 -1
- package/dist/ui/ModelRowLabel/index.d.ts +6 -0
- package/dist/ui/ModelRowLabel/index.js +41 -0
- package/dist/ui/ModelRowLabel/index.js.map +1 -0
- package/dist/ui/ModelRowLabel/index.jsx +26 -0
- package/dist/ui/ProviderOptionsEditor/index.d.ts +7 -0
- package/dist/ui/ProviderOptionsEditor/index.js +291 -0
- package/dist/ui/ProviderOptionsEditor/index.js.map +1 -0
- package/dist/ui/ProviderOptionsEditor/index.jsx +210 -0
- package/dist/ui/VoicesFetcher/index.d.ts +7 -0
- package/dist/ui/VoicesFetcher/index.js +72 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -0
- package/dist/ui/VoicesFetcher/index.jsx +56 -0
- package/dist/utilities/encryption.d.ts +2 -0
- package/dist/utilities/encryption.js +47 -0
- package/dist/utilities/encryption.js.map +1 -0
- package/dist/utilities/extractImageData.d.ts +9 -0
- package/dist/utilities/extractImageData.js +12 -2
- package/dist/utilities/extractImageData.js.map +1 -1
- package/dist/utilities/fetchImages.d.ts +14 -0
- package/dist/utilities/fetchImages.js +38 -0
- package/dist/utilities/fetchImages.js.map +1 -0
- package/dist/utilities/fieldToJsonSchema.d.ts +2 -1
- package/dist/utilities/fieldToJsonSchema.js +66 -3
- package/dist/utilities/fieldToJsonSchema.js.map +1 -1
- package/dist/utilities/getFieldBySchemaPath.js +15 -0
- package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +16 -0
- package/dist/utilities/getProviderOptionsFields.js +80 -0
- package/dist/utilities/getProviderOptionsFields.js.map +1 -0
- package/dist/utilities/isPluginActivated.js +1 -2
- package/dist/utilities/isPluginActivated.js.map +1 -1
- package/dist/utilities/lexicalToHTML.js.map +1 -1
- package/dist/utilities/resolveImageReferences.d.ts +28 -0
- package/dist/utilities/resolveImageReferences.js +148 -0
- package/dist/utilities/resolveImageReferences.js.map +1 -0
- package/dist/utilities/schemaConverter.d.ts +3 -0
- package/dist/utilities/schemaConverter.js +93 -0
- package/dist/utilities/schemaConverter.js.map +1 -0
- package/dist/utilities/setSafeLexicalState.d.ts +1 -3
- package/dist/utilities/setSafeLexicalState.js +1 -1
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/package.json +38 -39
- package/dist/ai/models/anthropic/index.d.ts +0 -2
- package/dist/ai/models/anthropic/index.js +0 -129
- package/dist/ai/models/anthropic/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +0 -8
- package/dist/ai/models/elevenLabs/generateVoice.js +0 -20
- package/dist/ai/models/elevenLabs/generateVoice.js.map +0 -1
- package/dist/ai/models/elevenLabs/index.d.ts +0 -2
- package/dist/ai/models/elevenLabs/index.js +0 -133
- package/dist/ai/models/elevenLabs/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/voices.d.ts +0 -8
- package/dist/ai/models/elevenLabs/voices.js +0 -24
- package/dist/ai/models/elevenLabs/voices.js.map +0 -1
- package/dist/ai/models/generateObject.d.ts +0 -11
- package/dist/ai/models/generateObject.js +0 -22
- package/dist/ai/models/generateObject.js.map +0 -1
- package/dist/ai/models/google/generateImage.d.ts +0 -9
- package/dist/ai/models/google/generateImage.js +0 -27
- package/dist/ai/models/google/generateImage.js.map +0 -1
- package/dist/ai/models/google/index.d.ts +0 -2
- package/dist/ai/models/google/index.js +0 -201
- package/dist/ai/models/google/index.js.map +0 -1
- package/dist/ai/models/index.d.ts +0 -2
- package/dist/ai/models/index.js +0 -13
- package/dist/ai/models/index.js.map +0 -1
- package/dist/ai/models/openai/generateImage.d.ts +0 -5
- package/dist/ai/models/openai/generateImage.js +0 -31
- package/dist/ai/models/openai/generateImage.js.map +0 -1
- package/dist/ai/models/openai/generateVoice.d.ts +0 -6
- package/dist/ai/models/openai/generateVoice.js +0 -19
- package/dist/ai/models/openai/generateVoice.js.map +0 -1
- package/dist/ai/models/openai/index.d.ts +0 -2
- package/dist/ai/models/openai/index.js +0 -428
- package/dist/ai/models/openai/index.js.map +0 -1
- package/dist/ai/models/openai/openai.d.ts +0 -1
- package/dist/ai/models/openai/openai.js +0 -8
- package/dist/ai/models/openai/openai.js.map +0 -1
- package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -10
- package/dist/ai/utils/editImagesWithOpenAI.js +0 -37
- package/dist/ai/utils/editImagesWithOpenAI.js.map +0 -1
- package/dist/types.d.js +0 -3
- package/dist/types.d.js.map +0 -1
- package/dist/utilities/getGenerationModels.d.ts +0 -2
- package/dist/utilities/getGenerationModels.js +0 -10
- package/dist/utilities/getGenerationModels.js.map +0 -1
|
@@ -1,18 +1,37 @@
|
|
|
1
1
|
import { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
// Defined capabilities replacing src/ai/models/
|
|
3
|
+
// Defined capabilities replacing src/ai/models/
|
|
4
|
+
const CAPABILITIES = [
|
|
5
|
+
{
|
|
6
|
+
id: 'text',
|
|
7
|
+
name: 'Text Generation',
|
|
8
|
+
fields: [
|
|
9
|
+
'text',
|
|
10
|
+
'textarea'
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: 'richtext',
|
|
15
|
+
name: 'Rich Text Generation',
|
|
16
|
+
fields: [
|
|
17
|
+
'richText'
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'image',
|
|
22
|
+
name: 'Image Generation',
|
|
23
|
+
fields: [
|
|
24
|
+
'upload'
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'tts',
|
|
29
|
+
name: 'Text to Speech',
|
|
30
|
+
fields: [
|
|
31
|
+
'upload'
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
];
|
|
16
35
|
const defaultAccessConfig = {
|
|
17
36
|
create: ({ req })=>{
|
|
18
37
|
if (!req.user) {
|
|
@@ -43,6 +62,65 @@ const defaultAdminConfig = {
|
|
|
43
62
|
group: 'Plugins',
|
|
44
63
|
hidden: true
|
|
45
64
|
};
|
|
65
|
+
const providerSelect = {
|
|
66
|
+
name: 'provider',
|
|
67
|
+
type: 'text',
|
|
68
|
+
admin: {
|
|
69
|
+
components: {
|
|
70
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
label: 'Provider'
|
|
74
|
+
};
|
|
75
|
+
const modelSelect = {
|
|
76
|
+
name: 'model',
|
|
77
|
+
type: 'text',
|
|
78
|
+
admin: {
|
|
79
|
+
components: {
|
|
80
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
label: 'Model'
|
|
84
|
+
};
|
|
85
|
+
const providerOptionsJson = {
|
|
86
|
+
name: 'providerOptions',
|
|
87
|
+
type: 'json',
|
|
88
|
+
admin: {
|
|
89
|
+
components: {
|
|
90
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
91
|
+
},
|
|
92
|
+
description: 'Provider-specific options. Defaults are inherited from AI Settings.'
|
|
93
|
+
},
|
|
94
|
+
label: 'Provider Options'
|
|
95
|
+
};
|
|
96
|
+
const commonTextParams = [
|
|
97
|
+
{
|
|
98
|
+
type: 'row',
|
|
99
|
+
fields: [
|
|
100
|
+
{
|
|
101
|
+
name: 'maxTokens',
|
|
102
|
+
type: 'number',
|
|
103
|
+
admin: {
|
|
104
|
+
placeholder: 'Model Default'
|
|
105
|
+
},
|
|
106
|
+
label: 'Max Tokens'
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'temperature',
|
|
110
|
+
type: 'number',
|
|
111
|
+
defaultValue: 0.7,
|
|
112
|
+
label: 'Temperature',
|
|
113
|
+
max: 1,
|
|
114
|
+
min: 0
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'extractAttachments',
|
|
120
|
+
type: 'checkbox',
|
|
121
|
+
label: 'Extract Attachments'
|
|
122
|
+
}
|
|
123
|
+
];
|
|
46
124
|
export const instructionsCollection = (pluginConfig)=>({
|
|
47
125
|
labels: {
|
|
48
126
|
plural: 'Compose Settings',
|
|
@@ -56,7 +134,12 @@ export const instructionsCollection = (pluginConfig)=>({
|
|
|
56
134
|
},
|
|
57
135
|
admin: {
|
|
58
136
|
...defaultAdminConfig,
|
|
59
|
-
...pluginConfig.overrideInstructions?.admin
|
|
137
|
+
...pluginConfig.overrideInstructions?.admin,
|
|
138
|
+
components: {
|
|
139
|
+
beforeList: [
|
|
140
|
+
'@ai-stack/payloadcms/client#AIConfigDashboard'
|
|
141
|
+
]
|
|
142
|
+
}
|
|
60
143
|
},
|
|
61
144
|
fields: [
|
|
62
145
|
{
|
|
@@ -112,19 +195,21 @@ export const instructionsCollection = (pluginConfig)=>({
|
|
|
112
195
|
Field: {
|
|
113
196
|
clientProps: {
|
|
114
197
|
filterByField: 'field-type',
|
|
115
|
-
options:
|
|
198
|
+
options: CAPABILITIES.map((c)=>({
|
|
199
|
+
fields: c.fields,
|
|
200
|
+
label: c.name,
|
|
201
|
+
value: c.id
|
|
202
|
+
}))
|
|
116
203
|
},
|
|
117
204
|
path: '@ai-stack/payloadcms/fields#SelectField'
|
|
118
205
|
}
|
|
119
206
|
}
|
|
120
207
|
},
|
|
121
|
-
label: '
|
|
122
|
-
options:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
};
|
|
127
|
-
})
|
|
208
|
+
label: 'Capability',
|
|
209
|
+
options: CAPABILITIES.map((c)=>({
|
|
210
|
+
label: c.name,
|
|
211
|
+
value: c.id
|
|
212
|
+
}))
|
|
128
213
|
},
|
|
129
214
|
{
|
|
130
215
|
name: 'disabled',
|
|
@@ -159,10 +244,10 @@ export const instructionsCollection = (pluginConfig)=>({
|
|
|
159
244
|
{
|
|
160
245
|
admin: {
|
|
161
246
|
condition: (_, current)=>{
|
|
162
|
-
return current['field-type'] === 'upload' && current['model-id'] === '
|
|
247
|
+
return current['field-type'] === 'upload' && current['model-id'] === 'image';
|
|
163
248
|
}
|
|
164
249
|
},
|
|
165
|
-
description: 'These images will be used to generate new visuals in a similar style, layout, or content.
|
|
250
|
+
description: 'These images will be used to generate new visuals in a similar style, layout, or content.',
|
|
166
251
|
fields: [
|
|
167
252
|
{
|
|
168
253
|
name: 'images',
|
|
@@ -211,17 +296,7 @@ informative and accurate but also captivating and beautifully structured.`,
|
|
|
211
296
|
description: '',
|
|
212
297
|
fields: [
|
|
213
298
|
{
|
|
214
|
-
|
|
215
|
-
* - Layouts can be saved in as an array
|
|
216
|
-
* - User can add their own layout to collections and use it later for generate specific rich text
|
|
217
|
-
* - User can select previously added layout
|
|
218
|
-
* - IMP: Remove layout from default, this seem to affect other functions like rephrase etc.
|
|
219
|
-
*/ /** TODO:
|
|
220
|
-
* - Layouts can be saved in as an array
|
|
221
|
-
* - User can add their own layout to collections and use it later for generate specific rich text
|
|
222
|
-
* - User can select previously added layout
|
|
223
|
-
* - IMP: Remove layout from default, this seem to affect other functions like rephrase etc.
|
|
224
|
-
*/ name: 'layout',
|
|
299
|
+
name: 'layout',
|
|
225
300
|
type: 'textarea',
|
|
226
301
|
admin: {
|
|
227
302
|
condition: (_, current)=>{
|
|
@@ -243,7 +318,80 @@ informative and accurate but also captivating and beautifully structured.`,
|
|
|
243
318
|
}
|
|
244
319
|
]
|
|
245
320
|
},
|
|
246
|
-
|
|
321
|
+
// Inline Settings Groups by Capability
|
|
322
|
+
// Text Settings
|
|
323
|
+
// Inline Settings Groups by Capability
|
|
324
|
+
// Text Settings
|
|
325
|
+
{
|
|
326
|
+
name: 'text-settings',
|
|
327
|
+
type: 'group',
|
|
328
|
+
admin: {
|
|
329
|
+
condition: (data)=>data['model-id'] === 'text'
|
|
330
|
+
},
|
|
331
|
+
fields: [
|
|
332
|
+
providerSelect,
|
|
333
|
+
modelSelect,
|
|
334
|
+
...commonTextParams,
|
|
335
|
+
providerOptionsJson
|
|
336
|
+
],
|
|
337
|
+
label: 'Text Settings'
|
|
338
|
+
},
|
|
339
|
+
// Rich Text Settings
|
|
340
|
+
// Rich Text Settings
|
|
341
|
+
{
|
|
342
|
+
name: 'richtext-settings',
|
|
343
|
+
type: 'group',
|
|
344
|
+
admin: {
|
|
345
|
+
condition: (data)=>data['model-id'] === 'richtext'
|
|
346
|
+
},
|
|
347
|
+
fields: [
|
|
348
|
+
providerSelect,
|
|
349
|
+
modelSelect,
|
|
350
|
+
...commonTextParams,
|
|
351
|
+
providerOptionsJson
|
|
352
|
+
],
|
|
353
|
+
label: 'Rich Text Settings'
|
|
354
|
+
},
|
|
355
|
+
// Image Settings
|
|
356
|
+
// Image Settings
|
|
357
|
+
{
|
|
358
|
+
name: 'image-settings',
|
|
359
|
+
type: 'group',
|
|
360
|
+
admin: {
|
|
361
|
+
condition: (data)=>data['model-id'] === 'image'
|
|
362
|
+
},
|
|
363
|
+
fields: [
|
|
364
|
+
providerSelect,
|
|
365
|
+
modelSelect,
|
|
366
|
+
providerOptionsJson
|
|
367
|
+
],
|
|
368
|
+
label: 'Image Settings'
|
|
369
|
+
},
|
|
370
|
+
// TTS Settings
|
|
371
|
+
// TTS Settings
|
|
372
|
+
{
|
|
373
|
+
name: 'tts-settings',
|
|
374
|
+
type: 'group',
|
|
375
|
+
admin: {
|
|
376
|
+
condition: (data)=>data['model-id'] === 'tts'
|
|
377
|
+
},
|
|
378
|
+
fields: [
|
|
379
|
+
providerSelect,
|
|
380
|
+
modelSelect,
|
|
381
|
+
{
|
|
382
|
+
name: 'voice',
|
|
383
|
+
type: 'text',
|
|
384
|
+
admin: {
|
|
385
|
+
components: {
|
|
386
|
+
Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect'
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
label: 'Voice'
|
|
390
|
+
},
|
|
391
|
+
providerOptionsJson
|
|
392
|
+
],
|
|
393
|
+
label: 'TTS Settings'
|
|
394
|
+
}
|
|
247
395
|
]
|
|
248
396
|
});
|
|
249
397
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig, GroupField } from 'payload'\nimport type { PluginConfig } from 'src/types.js'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\nimport { getGenerationModels } from '../utilities/getGenerationModels.js'\n\nconst groupSettings = (pluginConfig: PluginConfig) =>\n (getGenerationModels(pluginConfig) ?? []).reduce((fields, model) => {\n if (model.settings) {\n fields.push(model.settings)\n }\n return fields\n }, [] as GroupField[])\n\nconst modelOptions = (pluginConfig: PluginConfig) =>\n (getGenerationModels(pluginConfig) ?? []).map((model) => {\n return {\n fields: model.fields,\n label: model.name,\n value: model.id,\n }\n })\n\nconst defaultAccessConfig = {\n create: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n delete: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n read: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n update: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n}\n\nconst defaultAdminConfig = {\n group: 'Plugins',\n hidden: true,\n}\n\nexport const instructionsCollection = (pluginConfig: PluginConfig) =>\n <CollectionConfig>{\n labels: {\n plural: 'Compose Settings',\n singular: 'Compose Setting',\n },\n ...pluginConfig.overrideInstructions,\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n access: {\n ...defaultAccessConfig,\n ...pluginConfig.overrideInstructions?.access,\n },\n admin: {\n ...defaultAdminConfig,\n ...pluginConfig.overrideInstructions?.admin,\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n ],\n },\n {\n name: 'relation-to',\n type: 'text',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload'\n },\n },\n label: 'Relation to',\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: {\n clientProps: {\n filterByField: 'field-type',\n options: modelOptions(pluginConfig),\n },\n path: '@ai-stack/payloadcms/fields#SelectField',\n },\n },\n },\n label: 'Model',\n options: modelOptions(pluginConfig).map((option) => {\n return {\n label: option.label,\n value: option.value,\n }\n }),\n },\n {\n name: 'disabled',\n type: 'checkbox',\n admin: {\n description: 'Please reload your collection after applying the changes',\n },\n defaultValue: false,\n label: 'Hide Compose button for this field',\n },\n {\n id: 'ai-prompts-tabs',\n type: 'tabs',\n tabs: [\n {\n description:\n 'Define dynamic templates using {{ fieldName }}. Type { to see available field suggestions.',\n fields: [\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/fields#PromptEditorField',\n },\n description: \"Click 'Compose' to run this custom prompt and generate content\",\n },\n label: '',\n },\n ],\n label: 'Prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload' && current['model-id'] === 'gpt-image-1'\n },\n },\n description:\n 'These images will be used to generate new visuals in a similar style, layout, or content. You can combine multiple references for more controlled results.',\n fields: [\n {\n name: 'images',\n type: 'array',\n fields: [\n {\n name: 'image',\n type: 'upload',\n admin: {\n description: 'Please make sure the image is publicly accessible.',\n },\n relationTo: pluginConfig.uploadCollectionSlug\n ? pluginConfig.uploadCollectionSlug\n : 'media',\n },\n ],\n },\n ],\n label: 'Sample Images',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'system',\n type: 'textarea',\n defaultValue: `INSTRUCTIONS:\nYou are a highly skilled and professional blog writer,\nrenowned for crafting engaging and well-organized articles.\nWhen given a title, you meticulously create blogs that are not only\ninformative and accurate but also captivating and beautifully structured.`,\n label: '',\n },\n ],\n label: 'System prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n /** TODO:\n * - Layouts can be saved in as an array\n * - User can add their own layout to collections and use it later for generate specific rich text\n * - User can select previously added layout\n * - IMP: Remove layout from default, this seem to affect other functions like rephrase etc.\n */\n name: 'layout',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.\n[horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.\n[list] - Create a list with 3-5 items. Each list item should contain:\n a. [heading] - A brief, descriptive heading (up to 5 words)\n b. [paragraph] - A short explanation or elaboration (1-2 sentences)\n[horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.\n[paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.\n[quote] - Include a relevant quote from a famous person, directly related to the topic. Format: \"Quote text.\" - Author Name`,\n label: '',\n },\n ],\n label: 'Layout',\n },\n ],\n },\n ...groupSettings(pluginConfig),\n ],\n }\n"],"names":["PLUGIN_INSTRUCTIONS_TABLE","getGenerationModels","groupSettings","pluginConfig","reduce","fields","model","settings","push","modelOptions","map","label","name","value","id","defaultAccessConfig","create","req","user","delete","read","update","defaultAdminConfig","group","hidden","instructionsCollection","labels","plural","singular","overrideInstructions","slug","access","admin","type","description","unique","defaultValue","options","condition","_","current","components","Field","clientProps","filterByField","path","option","tabs","relationTo","uploadCollectionSlug"],"mappings":"AAGA,SAASA,yBAAyB,QAAQ,iBAAgB;AAC1D,SAASC,mBAAmB,QAAQ,sCAAqC;AAEzE,MAAMC,gBAAgB,CAACC,eACrB,AAACF,CAAAA,oBAAoBE,iBAAiB,EAAE,AAAD,EAAGC,MAAM,CAAC,CAACC,QAAQC;QACxD,IAAIA,MAAMC,QAAQ,EAAE;YAClBF,OAAOG,IAAI,CAACF,MAAMC,QAAQ;QAC5B;QACA,OAAOF;IACT,GAAG,EAAE;AAEP,MAAMI,eAAe,CAACN,eACpB,AAACF,CAAAA,oBAAoBE,iBAAiB,EAAE,AAAD,EAAGO,GAAG,CAAC,CAACJ;QAC7C,OAAO;YACLD,QAAQC,MAAMD,MAAM;YACpBM,OAAOL,MAAMM,IAAI;YACjBC,OAAOP,MAAMQ,EAAE;QACjB;IACF;AAEF,MAAMC,sBAAsB;IAC1BC,QAAQ,CAAC,EAAEC,GAAG,EAA2B;QACvC,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAO;QACT;QACA,OAAO;IACT;IACAC,QAAQ,CAAC,EAAEF,GAAG,EAA2B;QACvC,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAO;QACT;QACA,OAAO;IACT;IACAE,MAAM,CAAC,EAAEH,GAAG,EAA2B;QACrC,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAO;QACT;QACA,OAAO;IACT;IACAG,QAAQ,CAAC,EAAEJ,GAAG,EAA2B;QACvC,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAO;QACT;QACA,OAAO;IACT;AACF;AAEA,MAAMI,qBAAqB;IACzBC,OAAO;IACPC,QAAQ;AACV;AAEA,OAAO,MAAMC,yBAAyB,CAACtB,eACnB,CAAA;QAChBuB,QAAQ;YACNC,QAAQ;YACRC,UAAU;QACZ;QACA,GAAGzB,aAAa0B,oBAAoB;QACpCC,MAAM9B;QACN+B,QAAQ;YACN,GAAGhB,mBAAmB;YACtB,GAAGZ,aAAa0B,oBAAoB,EAAEE,MAAM;QAC9C;QACAC,OAAO;YACL,GAAGV,kBAAkB;YACrB,GAAGnB,aAAa0B,oBAAoB,EAAEG,KAAK;QAC7C;QACA3B,QAAQ;YACN;gBACEO,MAAM;gBACNqB,MAAM;gBACND,OAAO;oBACLE,aAAa;gBACf;gBACAC,QAAQ;YACV;YACA;gBACEvB,MAAM;gBACNqB,MAAM;gBACND,OAAO;oBACLE,aAAa;gBACf;gBACAE,cAAc;gBACdzB,OAAO;gBACP0B,SAAS;oBACP;wBACE1B,OAAO;wBACPE,OAAO;oBACT;oBACA;wBACEF,OAAO;wBACPE,OAAO;oBACT;oBACA;wBACEF,OAAO;wBACPE,OAAO;oBACT;oBACA;wBACEF,OAAO;wBACPE,OAAO;oBACT;iBACD;YACH;YACA;gBACED,MAAM;gBACNqB,MAAM;gBACND,OAAO;oBACLM,WAAW,CAACC,GAAGC;wBACb,OAAOA,OAAO,CAAC,aAAa,KAAK;oBACnC;gBACF;gBACA7B,OAAO;YACT;YACA;gBACEC,MAAM;gBACNqB,MAAM;gBACND,OAAO;oBACLS,YAAY;wBACVC,OAAO;4BACLC,aAAa;gCACXC,eAAe;gCACfP,SAAS5B,aAAaN;4BACxB;4BACA0C,MAAM;wBACR;oBACF;gBACF;gBACAlC,OAAO;gBACP0B,SAAS5B,aAAaN,cAAcO,GAAG,CAAC,CAACoC;oBACvC,OAAO;wBACLnC,OAAOmC,OAAOnC,KAAK;wBACnBE,OAAOiC,OAAOjC,KAAK;oBACrB;gBACF;YACF;YACA;gBACED,MAAM;gBACNqB,MAAM;gBACND,OAAO;oBACLE,aAAa;gBACf;gBACAE,cAAc;gBACdzB,OAAO;YACT;YACA;gBACEG,IAAI;gBACJmB,MAAM;gBACNc,MAAM;oBACJ;wBACEb,aACE;wBACF7B,QAAQ;4BACN;gCACEO,MAAM;gCACNqB,MAAM;gCACND,OAAO;oCACLS,YAAY;wCACVC,OAAO;oCACT;oCACAR,aAAa;gCACf;gCACAvB,OAAO;4BACT;yBACD;wBACDA,OAAO;oBACT;oBACA;wBACEqB,OAAO;4BACLM,WAAW,CAACC,GAAGC;gCACb,OAAOA,OAAO,CAAC,aAAa,KAAK,YAAYA,OAAO,CAAC,WAAW,KAAK;4BACvE;wBACF;wBACAN,aACE;wBACF7B,QAAQ;4BACN;gCACEO,MAAM;gCACNqB,MAAM;gCACN5B,QAAQ;oCACN;wCACEO,MAAM;wCACNqB,MAAM;wCACND,OAAO;4CACLE,aAAa;wCACf;wCACAc,YAAY7C,aAAa8C,oBAAoB,GACzC9C,aAAa8C,oBAAoB,GACjC;oCACN;iCACD;4BACH;yBACD;wBACDtC,OAAO;oBACT;oBACA;wBACEqB,OAAO;4BACLM,WAAW,CAACC,GAAGC;gCACb,OAAOA,OAAO,CAAC,aAAa,KAAK;4BACnC;wBACF;wBACAN,aAAa;wBACb7B,QAAQ;4BACN;gCACEO,MAAM;gCACNqB,MAAM;gCACNG,cAAc,CAAC;;;;yEAI0C,CAAC;gCAC1DzB,OAAO;4BACT;yBACD;wBACDA,OAAO;oBACT;oBACA;wBACEqB,OAAO;4BACLM,WAAW,CAACC,GAAGC;gCACb,OAAOA,OAAO,CAAC,aAAa,KAAK;4BACnC;wBACF;wBACAN,aAAa;wBACb7B,QAAQ;4BACN;gCACE;;;;;iBAKC,GALD;;;;;iBAKC,GACDO,MAAM;gCACNqB,MAAM;gCACND,OAAO;oCACLM,WAAW,CAACC,GAAGC;wCACb,OAAOA,OAAO,CAAC,aAAa,KAAK;oCACnC;gCACF;gCACAJ,cAAc,CAAC;;;;;;;2HAO4F,CAAC;gCAC5GzB,OAAO;4BACT;yBACD;wBACDA,OAAO;oBACT;iBACD;YACH;eACGT,cAAcC;SAClB;IACH,CAAA,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\nimport type { PluginConfig } from 'src/types.js'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\n// Defined capabilities replacing src/ai/models/\nconst CAPABILITIES = [\n {\n id: 'text',\n name: 'Text Generation',\n fields: ['text', 'textarea'],\n },\n {\n id: 'richtext',\n name: 'Rich Text Generation',\n fields: ['richText'],\n },\n {\n id: 'image',\n name: 'Image Generation',\n fields: ['upload'],\n },\n {\n id: 'tts',\n name: 'Text to Speech',\n fields: ['upload'],\n },\n]\n\nconst defaultAccessConfig = {\n create: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n delete: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n read: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n update: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n}\n\nconst defaultAdminConfig = {\n group: 'Plugins',\n hidden: true,\n}\n\nconst providerSelect = {\n name: 'provider',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Provider',\n}\n\nconst modelSelect = {\n name: 'model',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Model',\n}\n\nconst providerOptionsJson = {\n name: 'providerOptions',\n type: 'json' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Provider-specific options. Defaults are inherited from AI Settings.',\n },\n label: 'Provider Options',\n}\n\nconst commonTextParams = [\n {\n type: 'row' as const,\n fields: [\n {\n name: 'maxTokens',\n type: 'number' as const,\n admin: {\n placeholder: 'Model Default',\n },\n label: 'Max Tokens',\n },\n {\n name: 'temperature',\n type: 'number' as const,\n defaultValue: 0.7,\n label: 'Temperature',\n max: 1,\n min: 0,\n },\n ],\n },\n {\n name: 'extractAttachments',\n type: 'checkbox' as const,\n label: 'Extract Attachments',\n },\n]\n\nexport const instructionsCollection = (pluginConfig: PluginConfig) =>\n <CollectionConfig>{\n labels: {\n plural: 'Compose Settings',\n singular: 'Compose Setting',\n },\n ...pluginConfig.overrideInstructions,\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n access: {\n ...defaultAccessConfig,\n ...pluginConfig.overrideInstructions?.access,\n },\n admin: {\n ...defaultAdminConfig,\n ...pluginConfig.overrideInstructions?.admin,\n components: {\n beforeList: ['@ai-stack/payloadcms/client#AIConfigDashboard'],\n },\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n ],\n },\n {\n name: 'relation-to',\n type: 'text',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload'\n },\n },\n label: 'Relation to',\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: {\n clientProps: {\n filterByField: 'field-type',\n options: CAPABILITIES.map((c) => ({\n fields: c.fields,\n label: c.name,\n value: c.id,\n })),\n },\n path: '@ai-stack/payloadcms/fields#SelectField',\n },\n },\n },\n label: 'Capability',\n options: CAPABILITIES.map((c) => ({\n label: c.name,\n value: c.id,\n })),\n },\n {\n name: 'disabled',\n type: 'checkbox',\n admin: {\n description: 'Please reload your collection after applying the changes',\n },\n defaultValue: false,\n label: 'Hide Compose button for this field',\n },\n {\n id: 'ai-prompts-tabs',\n type: 'tabs',\n tabs: [\n {\n description:\n 'Define dynamic templates using {{ fieldName }}. Type { to see available field suggestions.',\n fields: [\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/fields#PromptEditorField',\n },\n description: \"Click 'Compose' to run this custom prompt and generate content\",\n },\n label: '',\n },\n ],\n label: 'Prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload' && current['model-id'] === 'image'\n },\n },\n description:\n 'These images will be used to generate new visuals in a similar style, layout, or content.',\n fields: [\n {\n name: 'images',\n type: 'array',\n fields: [\n {\n name: 'image',\n type: 'upload',\n admin: {\n description: 'Please make sure the image is publicly accessible.',\n },\n relationTo: pluginConfig.uploadCollectionSlug\n ? pluginConfig.uploadCollectionSlug\n : 'media',\n },\n ],\n },\n ],\n label: 'Sample Images',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'system',\n type: 'textarea',\n defaultValue: `INSTRUCTIONS:\nYou are a highly skilled and professional blog writer,\nrenowned for crafting engaging and well-organized articles.\nWhen given a title, you meticulously create blogs that are not only\ninformative and accurate but also captivating and beautifully structured.`,\n label: '',\n },\n ],\n label: 'System prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'layout',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.\n[horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.\n[list] - Create a list with 3-5 items. Each list item should contain:\n a. [heading] - A brief, descriptive heading (up to 5 words)\n b. [paragraph] - A short explanation or elaboration (1-2 sentences)\n[horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.\n[paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.\n[quote] - Include a relevant quote from a famous person, directly related to the topic. Format: \"Quote text.\" - Author Name`,\n label: '',\n },\n ],\n label: 'Layout',\n },\n ],\n },\n \n // Inline Settings Groups by Capability\n \n // Text Settings\n {\n name: 'text-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'text',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsJson,\n ],\n label: 'Text Settings',\n },\n \n // Rich Text Settings\n {\n name: 'richtext-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'richtext',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsJson,\n ],\n label: 'Rich Text Settings',\n },\n \n // Image Settings\n {\n name: 'image-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'image',\n },\n fields: [\n providerSelect,\n modelSelect,\n providerOptionsJson,\n ],\n label: 'Image Settings',\n },\n \n // TTS Settings\n {\n name: 'tts-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'tts',\n },\n fields: [\n providerSelect,\n modelSelect,\n {\n name: 'voice',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect',\n },\n },\n label: 'Voice',\n },\n providerOptionsJson,\n ],\n label: 'TTS Settings',\n },\n ],\n }\n"],"names":["PLUGIN_INSTRUCTIONS_TABLE","CAPABILITIES","id","name","fields","defaultAccessConfig","create","req","user","delete","read","update","defaultAdminConfig","group","hidden","providerSelect","type","admin","components","Field","label","modelSelect","providerOptionsJson","description","commonTextParams","placeholder","defaultValue","max","min","instructionsCollection","pluginConfig","labels","plural","singular","overrideInstructions","slug","access","beforeList","unique","options","value","condition","_","current","clientProps","filterByField","map","c","path","tabs","relationTo","uploadCollectionSlug","data"],"mappings":"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"}
|
package/dist/defaults.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export declare const PLUGIN_NAME = "plugin-ai";
|
|
2
2
|
export declare const PLUGIN_INSTRUCTIONS_TABLE = "plugin-ai-instructions";
|
|
3
|
+
export declare const PLUGIN_AI_JOBS_TABLE = "plugin-ai-ai-jobs";
|
|
3
4
|
export declare const PLUGIN_LEXICAL_EDITOR_FEATURE = "plugin-ai-actions-feature";
|
|
4
5
|
export declare const PLUGIN_API_ENDPOINT_BASE = "/plugin-ai";
|
|
5
6
|
export declare const PLUGIN_API_ENDPOINT_GENERATE = "/plugin-ai/generate";
|
|
6
7
|
export declare const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = "/plugin-ai/generate/upload";
|
|
7
8
|
export declare const PLUGIN_FETCH_FIELDS_ENDPOINT = "/plugin-ai/fetch-fields";
|
|
9
|
+
export declare const PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK = "/plugin-ai/videogen/webhook";
|
|
10
|
+
export declare const PLUGIN_API_ENDPOINT_FETCH_VOICES = "/plugin-ai/elevenlabs/fetch-voices";
|
|
8
11
|
export declare const PLUGIN_DEFAULT_OPENAI_MODEL = "gpt-4o-mini";
|
|
9
12
|
export declare const PLUGIN_DEFAULT_ANTHROPIC_MODEL = "claude-3-5-sonnet-latest";
|
package/dist/defaults.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export const PLUGIN_NAME = 'plugin-ai';
|
|
2
2
|
export const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`;
|
|
3
|
+
export const PLUGIN_AI_JOBS_TABLE = `${PLUGIN_NAME}-ai-jobs`;
|
|
3
4
|
export const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`;
|
|
4
5
|
// Endpoint defaults
|
|
5
6
|
export const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`;
|
|
6
7
|
export const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`;
|
|
7
8
|
export const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`;
|
|
8
9
|
export const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`;
|
|
10
|
+
export const PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK = `${PLUGIN_API_ENDPOINT_BASE}/videogen/webhook`;
|
|
11
|
+
export const PLUGIN_API_ENDPOINT_FETCH_VOICES = `${PLUGIN_API_ENDPOINT_BASE}/elevenlabs/fetch-voices`;
|
|
9
12
|
// LLM Settings
|
|
10
13
|
export const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`;
|
|
11
14
|
export const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-5-sonnet-latest`;
|
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\nexport const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-5-sonnet-latest`\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,CAAC,EAAED,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,
|
|
1
|
+
{"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_AI_JOBS_TABLE = `${PLUGIN_NAME}-ai-jobs`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\nexport const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`\nexport const PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK = `${PLUGIN_API_ENDPOINT_BASE}/videogen/webhook`\nexport const PLUGIN_API_ENDPOINT_FETCH_VOICES = `${PLUGIN_API_ENDPOINT_BASE}/elevenlabs/fetch-voices`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-5-sonnet-latest`\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_AI_JOBS_TABLE","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK","PLUGIN_API_ENDPOINT_FETCH_VOICES","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,CAAC,EAAED,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,uBAAuB,CAAC,EAAEF,YAAY,QAAQ,CAAC,CAAA;AAC5D,OAAO,MAAMG,gCAAgC,CAAC,EAAEH,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMI,2BAA2B,CAAC,CAAC,EAAEJ,YAAY,CAAC,CAAA;AACzD,OAAO,MAAMK,+BAA+B,CAAC,EAAED,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,CAAC,EAAED,6BAA6B,OAAO,CAAC,CAAA;AAC3F,OAAO,MAAME,+BAA+B,CAAC,EAAEH,yBAAyB,aAAa,CAAC,CAAA;AACtF,OAAO,MAAMI,uCAAuC,CAAC,EAAEJ,yBAAyB,iBAAiB,CAAC,CAAA;AAClG,OAAO,MAAMK,mCAAmC,CAAC,EAAEL,yBAAyB,wBAAwB,CAAC,CAAA;AAErG,eAAe;AACf,OAAO,MAAMM,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CollectionSlug } from 'payload';
|
|
2
|
+
import type { ActionMenuItems, PluginConfig, PromptFieldGetterContext } from '../types.js';
|
|
3
|
+
export declare const assignPrompt: (action: ActionMenuItems, { type, actionParams, collection, context, field, layout, locale, pluginConfig, systemPrompt, template, }: {
|
|
4
|
+
actionParams: Record<any, any>;
|
|
5
|
+
collection: CollectionSlug;
|
|
6
|
+
context: object;
|
|
7
|
+
field: string;
|
|
8
|
+
layout: string;
|
|
9
|
+
locale: string;
|
|
10
|
+
pluginConfig: PluginConfig;
|
|
11
|
+
systemPrompt: string;
|
|
12
|
+
template: string;
|
|
13
|
+
type: string;
|
|
14
|
+
}) => Promise<{
|
|
15
|
+
layout: string | undefined;
|
|
16
|
+
prompt: string;
|
|
17
|
+
system: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const extendContextWithPromptFields: (data: object, ctx: PromptFieldGetterContext, pluginConfig: PluginConfig) => object;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { defaultPrompts } from '../ai/prompts.js';
|
|
2
|
+
import { asyncHandlebars } from '../libraries/handlebars/asyncHandlebars.js';
|
|
3
|
+
import { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js';
|
|
4
|
+
import { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js';
|
|
5
|
+
const buildRichTextSystem = (baseSystem, layout)=>{
|
|
6
|
+
return `${baseSystem}
|
|
7
|
+
|
|
8
|
+
RULES:
|
|
9
|
+
- Generate original and unique content based on the given topic.
|
|
10
|
+
- Strictly adhere to the specified layout and formatting instructions.
|
|
11
|
+
- Utilize the provided rich text editor tools for appropriate formatting.
|
|
12
|
+
- Ensure the output follows the structure of the sample output object.
|
|
13
|
+
- Produce valid JSON with no undefined or null values.
|
|
14
|
+
---
|
|
15
|
+
LAYOUT INSTRUCTIONS:
|
|
16
|
+
${layout}
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
ADDITIONAL GUIDELINES:
|
|
20
|
+
- Ensure coherence and logical flow between all sections.
|
|
21
|
+
- Maintain a consistent tone and style throughout the content.
|
|
22
|
+
- Use clear and concise language appropriate for the target audience.
|
|
23
|
+
`;
|
|
24
|
+
};
|
|
25
|
+
export const assignPrompt = async (action, { type, actionParams, collection, context, field, layout, locale, pluginConfig, systemPrompt = '', template })=>{
|
|
26
|
+
const extendedContext = extendContextWithPromptFields(context, {
|
|
27
|
+
type,
|
|
28
|
+
collection
|
|
29
|
+
}, pluginConfig);
|
|
30
|
+
const prompt = await replacePlaceholders(template, extendedContext);
|
|
31
|
+
const toLexicalHTML = type === 'richText' ? handlebarsHelpersMap.toHTML.name : '';
|
|
32
|
+
const assignedPrompts = {
|
|
33
|
+
layout: type === 'richText' ? layout : undefined,
|
|
34
|
+
prompt,
|
|
35
|
+
//TODO: Define only once on a collection level
|
|
36
|
+
system: type === 'richText' ? buildRichTextSystem(systemPrompt, layout) : undefined
|
|
37
|
+
};
|
|
38
|
+
if (action === 'Compose') {
|
|
39
|
+
if (locale && locale !== 'en') {
|
|
40
|
+
/**
|
|
41
|
+
* NOTE: Avoid using the "system prompt" for setting the output language,
|
|
42
|
+
* as it causes quotation marks to appear in the output (Currently only tested with openai models).
|
|
43
|
+
* Appending the language instruction directly to the prompt resolves this issue. - revalidate
|
|
44
|
+
**/ assignedPrompts.prompt += `
|
|
45
|
+
---
|
|
46
|
+
OUTPUT LANGUAGE: ${locale}
|
|
47
|
+
`;
|
|
48
|
+
}
|
|
49
|
+
return assignedPrompts;
|
|
50
|
+
}
|
|
51
|
+
const prompts = [
|
|
52
|
+
...pluginConfig.prompts || [],
|
|
53
|
+
...defaultPrompts
|
|
54
|
+
];
|
|
55
|
+
const foundPrompt = prompts.find((p)=>p.name === action);
|
|
56
|
+
const getLayout = foundPrompt?.layout;
|
|
57
|
+
const getSystemPrompt = foundPrompt?.system;
|
|
58
|
+
let updatedLayout = layout;
|
|
59
|
+
if (getLayout) {
|
|
60
|
+
updatedLayout = getLayout();
|
|
61
|
+
}
|
|
62
|
+
const system = getSystemPrompt ? getSystemPrompt({
|
|
63
|
+
...actionParams || {},
|
|
64
|
+
prompt,
|
|
65
|
+
systemPrompt
|
|
66
|
+
}) : '';
|
|
67
|
+
return {
|
|
68
|
+
layout: updatedLayout,
|
|
69
|
+
// TODO: revisit this toLexicalHTML
|
|
70
|
+
prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, extendedContext),
|
|
71
|
+
system: type === 'richText' ? buildRichTextSystem(system, updatedLayout) : system
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
export const extendContextWithPromptFields = (data, ctx, pluginConfig)=>{
|
|
75
|
+
const { promptFields = [] } = pluginConfig;
|
|
76
|
+
const fieldsMap = new Map(promptFields.filter((f)=>!f.collections || f.collections.includes(ctx.collection)).map((f)=>[
|
|
77
|
+
f.name,
|
|
78
|
+
f
|
|
79
|
+
]));
|
|
80
|
+
return new Proxy(data, {
|
|
81
|
+
get: (target, prop)=>{
|
|
82
|
+
const field = fieldsMap.get(prop);
|
|
83
|
+
if (field?.getter) {
|
|
84
|
+
const value = field.getter(data, ctx);
|
|
85
|
+
return Promise.resolve(value).then((v)=>new asyncHandlebars.SafeString(v));
|
|
86
|
+
}
|
|
87
|
+
// {{prop}} escapes content by default. Here we make sure it won't be escaped.
|
|
88
|
+
const value = typeof target === 'object' ? target[prop] : undefined;
|
|
89
|
+
return typeof value === 'string' ? new asyncHandlebars.SafeString(value) : value;
|
|
90
|
+
},
|
|
91
|
+
// It's used by the handlebars library to determine if the property is enumerable
|
|
92
|
+
getOwnPropertyDescriptor: (target, prop)=>{
|
|
93
|
+
const field = fieldsMap.get(prop);
|
|
94
|
+
if (field) {
|
|
95
|
+
return {
|
|
96
|
+
configurable: true,
|
|
97
|
+
enumerable: true
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return Object.getOwnPropertyDescriptor(target, prop);
|
|
101
|
+
},
|
|
102
|
+
has: (target, prop)=>{
|
|
103
|
+
return fieldsMap.has(prop) || target && prop in target;
|
|
104
|
+
},
|
|
105
|
+
ownKeys: (target)=>{
|
|
106
|
+
return [
|
|
107
|
+
...fieldsMap.keys(),
|
|
108
|
+
...Object.keys(target || {})
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=buildPromptUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/buildPromptUtils.ts"],"sourcesContent":["import type { CollectionSlug } from 'payload'\n\nimport type {\n ActionMenuItems,\n PluginConfig,\n PromptFieldGetterContext,\n} from '../types.js'\n\nimport { defaultPrompts } from '../ai/prompts.js'\nimport { asyncHandlebars } from '../libraries/handlebars/asyncHandlebars.js'\nimport { handlebarsHelpersMap } from '../libraries/handlebars/helpersMap.js'\nimport { replacePlaceholders } from '../libraries/handlebars/replacePlaceholders.js'\n\nconst buildRichTextSystem = (baseSystem: string, layout: string) => {\n return `${baseSystem}\n\nRULES:\n- Generate original and unique content based on the given topic.\n- Strictly adhere to the specified layout and formatting instructions.\n- Utilize the provided rich text editor tools for appropriate formatting.\n- Ensure the output follows the structure of the sample output object.\n- Produce valid JSON with no undefined or null values.\n---\nLAYOUT INSTRUCTIONS:\n${layout}\n\n---\nADDITIONAL GUIDELINES:\n- Ensure coherence and logical flow between all sections.\n- Maintain a consistent tone and style throughout the content.\n- Use clear and concise language appropriate for the target audience.\n`\n}\n\nexport const assignPrompt = async (\n action: ActionMenuItems,\n {\n type,\n actionParams,\n collection,\n context,\n field,\n layout,\n locale,\n pluginConfig,\n systemPrompt = '',\n template,\n }: {\n actionParams: Record<any, any>\n collection: CollectionSlug\n context: object\n field: string\n layout: string\n locale: string\n pluginConfig: PluginConfig\n systemPrompt: string\n template: string\n type: string\n },\n) => {\n const extendedContext = extendContextWithPromptFields(context, { type, collection }, pluginConfig)\n const prompt = await replacePlaceholders(template, extendedContext)\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' ? buildRichTextSystem(systemPrompt, layout) : undefined,\n }\n\n if (action === 'Compose') {\n if (locale && locale !== 'en') {\n /**\n * NOTE: Avoid using the \"system prompt\" for setting the output language,\n * as it causes quotation marks to appear in the output (Currently only tested with openai models).\n * Appending the language instruction directly to the prompt resolves this issue. - revalidate\n **/\n assignedPrompts.prompt += `\n --- \n OUTPUT LANGUAGE: ${locale}\n `\n }\n\n return assignedPrompts\n }\n\n const prompts = [...(pluginConfig.prompts || []), ...defaultPrompts]\n const foundPrompt = prompts.find((p) => p.name === action)\n const getLayout = foundPrompt?.layout\n const getSystemPrompt = foundPrompt?.system\n\n let updatedLayout = layout\n if (getLayout) {\n updatedLayout = getLayout()\n }\n\n const system = getSystemPrompt\n ? getSystemPrompt({\n ...(actionParams || {}),\n prompt,\n systemPrompt,\n })\n : ''\n\n return {\n layout: updatedLayout,\n // TODO: revisit this toLexicalHTML\n prompt: await replacePlaceholders(`{{${toLexicalHTML} ${field}}}`, extendedContext),\n system: type === 'richText' ? buildRichTextSystem(system, updatedLayout) : system,\n }\n}\n\nexport const extendContextWithPromptFields = (\n data: object,\n ctx: PromptFieldGetterContext,\n pluginConfig: PluginConfig,\n) => {\n const { promptFields = [] } = pluginConfig\n const fieldsMap = new Map(\n promptFields\n .filter((f) => !f.collections || f.collections.includes(ctx.collection))\n .map((f) => [f.name, f]),\n )\n return new Proxy(data, {\n get: (target, prop: string) => {\n const field = fieldsMap.get(prop)\n if (field?.getter) {\n const value = field.getter(data, ctx)\n return Promise.resolve(value).then((v) => new asyncHandlebars.SafeString(v))\n }\n // {{prop}} escapes content by default. Here we make sure it won't be escaped.\n const value = typeof target === 'object' ? (target as any)[prop] : undefined\n return typeof value === 'string' ? new asyncHandlebars.SafeString(value) : value\n },\n // It's used by the handlebars library to determine if the property is enumerable\n getOwnPropertyDescriptor: (target, prop) => {\n const field = fieldsMap.get(prop as string)\n if (field) {\n return {\n configurable: true,\n enumerable: true,\n }\n }\n return Object.getOwnPropertyDescriptor(target, prop)\n },\n has: (target, prop) => {\n return fieldsMap.has(prop as string) || (target && prop in target)\n },\n ownKeys: (target) => {\n return [...fieldsMap.keys(), ...Object.keys(target || {})]\n },\n })\n}\n"],"names":["defaultPrompts","asyncHandlebars","handlebarsHelpersMap","replacePlaceholders","buildRichTextSystem","baseSystem","layout","assignPrompt","action","type","actionParams","collection","context","field","locale","pluginConfig","systemPrompt","template","extendedContext","extendContextWithPromptFields","prompt","toLexicalHTML","toHTML","name","assignedPrompts","undefined","system","prompts","foundPrompt","find","p","getLayout","getSystemPrompt","updatedLayout","data","ctx","promptFields","fieldsMap","Map","filter","f","collections","includes","map","Proxy","get","target","prop","getter","value","Promise","resolve","then","v","SafeString","getOwnPropertyDescriptor","configurable","enumerable","Object","has","ownKeys","keys"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/chat.d.ts"],"sourcesContent":["import type { Endpoint } from 'payload';\n\nimport type { PluginConfig } from '../types.js';\nexport declare const Chat: (pluginConfig: PluginConfig) => Endpoint;\n"],"names":[],"mappings":"AAGA,WAAoE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { PLUGIN_API_ENDPOINT_FETCH_VOICES } from '../defaults.js';
|
|
2
|
+
export const fetchVoices = {
|
|
3
|
+
handler: async (req)=>{
|
|
4
|
+
try {
|
|
5
|
+
// Check authentication
|
|
6
|
+
if (!req.user) {
|
|
7
|
+
return Response.json({
|
|
8
|
+
message: 'Authentication required'
|
|
9
|
+
}, {
|
|
10
|
+
status: 401
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
// Fetch AI Settings global to get the encrypted API key
|
|
14
|
+
const aiSettings = await req.payload.findGlobal({
|
|
15
|
+
slug: 'ai-settings',
|
|
16
|
+
context: {
|
|
17
|
+
unsafe: true
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
// Find the ElevenLabs provider block
|
|
21
|
+
const elevenlabsProvider = aiSettings?.providers?.find((provider)=>provider.blockType === 'elevenlabs' && provider.enabled);
|
|
22
|
+
if (!elevenlabsProvider) {
|
|
23
|
+
return Response.json({
|
|
24
|
+
message: 'ElevenLabs provider not found or not enabled in AI Settings'
|
|
25
|
+
}, {
|
|
26
|
+
status: 400
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// Get the API key (already decrypted by afterRead hook due to unsafe context)
|
|
30
|
+
const apiKey = elevenlabsProvider.apiKey;
|
|
31
|
+
if (!apiKey) {
|
|
32
|
+
return Response.json({
|
|
33
|
+
message: 'API key not found. Please configure your ElevenLabs API key in AI Settings.'
|
|
34
|
+
}, {
|
|
35
|
+
status: 400
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Call ElevenLabs API to fetch voices
|
|
39
|
+
const response = await fetch('https://api.elevenlabs.io/v1/voices', {
|
|
40
|
+
headers: {
|
|
41
|
+
'xi-api-key': apiKey
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
const errorText = await response.text();
|
|
46
|
+
return Response.json({
|
|
47
|
+
message: `ElevenLabs API error: ${errorText}`
|
|
48
|
+
}, {
|
|
49
|
+
status: response.status
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const data = await response.json();
|
|
53
|
+
// Transform voices to match our schema
|
|
54
|
+
const voices = (data.voices || []).map((voice)=>({
|
|
55
|
+
id: voice.voice_id,
|
|
56
|
+
name: voice.name,
|
|
57
|
+
category: voice.category || 'premade',
|
|
58
|
+
enabled: true,
|
|
59
|
+
labels: voice.labels || {},
|
|
60
|
+
preview_url: voice.preview_url || ''
|
|
61
|
+
}));
|
|
62
|
+
return Response.json({
|
|
63
|
+
success: true,
|
|
64
|
+
voices
|
|
65
|
+
});
|
|
66
|
+
} catch (error) {
|
|
67
|
+
req.payload.logger.error(error, 'Error fetching ElevenLabs voices');
|
|
68
|
+
return Response.json({
|
|
69
|
+
message: error instanceof Error ? error.message : 'Internal server error'
|
|
70
|
+
}, {
|
|
71
|
+
status: 500
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
method: 'post',
|
|
76
|
+
path: PLUGIN_API_ENDPOINT_FETCH_VOICES
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=fetchVoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/fetchVoices.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport { PLUGIN_API_ENDPOINT_FETCH_VOICES } from '../defaults.js'\n\ninterface ElevenLabsVoice {\n category?: string\n labels?: Record<string, string>\n name: string\n preview_url?: string\n voice_id: string\n}\n\nexport const fetchVoices: Endpoint = {\n handler: async (req: PayloadRequest) => {\n try {\n // Check authentication\n if (!req.user) {\n return Response.json({ message: 'Authentication required' }, { status: 401 })\n }\n\n // Fetch AI Settings global to get the encrypted API key\n const aiSettings = await req.payload.findGlobal({\n slug: 'ai-settings',\n context: { unsafe: true },\n })\n\n // Find the ElevenLabs provider block\n const elevenlabsProvider = aiSettings?.providers?.find(\n (provider: any) => provider.blockType === 'elevenlabs' && provider.enabled,\n )\n\n if (!elevenlabsProvider) {\n return Response.json(\n { message: 'ElevenLabs provider not found or not enabled in AI Settings' },\n { status: 400 },\n )\n }\n\n // Get the API key (already decrypted by afterRead hook due to unsafe context)\n const apiKey = elevenlabsProvider.apiKey\n\n if (!apiKey) {\n return Response.json(\n {\n message: 'API key not found. Please configure your ElevenLabs API key in AI Settings.',\n },\n { status: 400 },\n )\n }\n\n // Call ElevenLabs API to fetch voices\n const response = await fetch('https://api.elevenlabs.io/v1/voices', {\n headers: {\n 'xi-api-key': apiKey,\n },\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n return Response.json(\n { message: `ElevenLabs API error: ${errorText}` },\n { status: response.status },\n )\n }\n\n const data = await response.json()\n\n // Transform voices to match our schema\n const voices = (data.voices || []).map((voice: ElevenLabsVoice) => ({\n id: voice.voice_id,\n name: voice.name,\n category: voice.category || 'premade',\n enabled: true,\n labels: voice.labels || {},\n preview_url: voice.preview_url || '',\n }))\n\n return Response.json({\n success: true,\n voices,\n })\n } catch (error) {\n req.payload.logger.error(error, 'Error fetching ElevenLabs voices')\n return Response.json(\n { message: error instanceof Error ? error.message : 'Internal server error' },\n { status: 500 },\n )\n }\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_FETCH_VOICES,\n}\n"],"names":["PLUGIN_API_ENDPOINT_FETCH_VOICES","fetchVoices","handler","req","user","Response","json","message","status","aiSettings","payload","findGlobal","slug","context","unsafe","elevenlabsProvider","providers","find","provider","blockType","enabled","apiKey","response","fetch","headers","ok","errorText","text","data","voices","map","voice","id","voice_id","name","category","labels","preview_url","success","error","logger","Error","method","path"],"mappings":"AAEA,SAASA,gCAAgC,QAAQ,iBAAgB;AAUjE,OAAO,MAAMC,cAAwB;IACnCC,SAAS,OAAOC;QACd,IAAI;YACF,uBAAuB;YACvB,IAAI,CAACA,IAAIC,IAAI,EAAE;gBACb,OAAOC,SAASC,IAAI,CAAC;oBAAEC,SAAS;gBAA0B,GAAG;oBAAEC,QAAQ;gBAAI;YAC7E;YAEA,wDAAwD;YACxD,MAAMC,aAAa,MAAMN,IAAIO,OAAO,CAACC,UAAU,CAAC;gBAC9CC,MAAM;gBACNC,SAAS;oBAAEC,QAAQ;gBAAK;YAC1B;YAEA,qCAAqC;YACrC,MAAMC,qBAAqBN,YAAYO,WAAWC,KAChD,CAACC,WAAkBA,SAASC,SAAS,KAAK,gBAAgBD,SAASE,OAAO;YAG5E,IAAI,CAACL,oBAAoB;gBACvB,OAAOV,SAASC,IAAI,CAClB;oBAAEC,SAAS;gBAA8D,GACzE;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,8EAA8E;YAC9E,MAAMa,SAASN,mBAAmBM,MAAM;YAExC,IAAI,CAACA,QAAQ;gBACX,OAAOhB,SAASC,IAAI,CAClB;oBACEC,SAAS;gBACX,GACA;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,sCAAsC;YACtC,MAAMc,WAAW,MAAMC,MAAM,uCAAuC;gBAClEC,SAAS;oBACP,cAAcH;gBAChB;YACF;YAEA,IAAI,CAACC,SAASG,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMJ,SAASK,IAAI;gBACrC,OAAOtB,SAASC,IAAI,CAClB;oBAAEC,SAAS,CAAC,sBAAsB,EAAEmB,UAAU,CAAC;gBAAC,GAChD;oBAAElB,QAAQc,SAASd,MAAM;gBAAC;YAE9B;YAEA,MAAMoB,OAAO,MAAMN,SAAShB,IAAI;YAEhC,uCAAuC;YACvC,MAAMuB,SAAS,AAACD,CAAAA,KAAKC,MAAM,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,QAA4B,CAAA;oBAClEC,IAAID,MAAME,QAAQ;oBAClBC,MAAMH,MAAMG,IAAI;oBAChBC,UAAUJ,MAAMI,QAAQ,IAAI;oBAC5Bf,SAAS;oBACTgB,QAAQL,MAAMK,MAAM,IAAI,CAAC;oBACzBC,aAAaN,MAAMM,WAAW,IAAI;gBACpC,CAAA;YAEA,OAAOhC,SAASC,IAAI,CAAC;gBACnBgC,SAAS;gBACTT;YACF;QACF,EAAE,OAAOU,OAAO;YACdpC,IAAIO,OAAO,CAAC8B,MAAM,CAACD,KAAK,CAACA,OAAO;YAChC,OAAOlC,SAASC,IAAI,CAClB;gBAAEC,SAASgC,iBAAiBE,QAAQF,MAAMhC,OAAO,GAAG;YAAwB,GAC5E;gBAAEC,QAAQ;YAAI;QAElB;IACF;IACAkC,QAAQ;IACRC,MAAM3C;AACR,EAAC"}
|