@ai-stack/payloadcms 3.2.26 → 3.68.0-beta.2
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 +100 -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 +54 -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 +223 -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 +449 -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 +312 -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 +623 -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 +308 -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 +600 -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 +247 -0
- package/dist/ai/providers/blocks/xai.js.map +1 -0
- package/dist/ai/providers/icons.d.ts +7 -0
- package/dist/ai/providers/icons.js +9 -0
- package/dist/ai/providers/icons.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 +267 -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 +224 -50
- 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.ts +4 -0
- package/dist/endpoints/fetchFields.js +0 -7
- package/dist/endpoints/fetchFields.js.map +1 -1
- 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 +339 -232
- 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/exports/fields.d.ts +1 -0
- package/dist/exports/fields.js +1 -0
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.d.ts +15 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.js +87 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -0
- package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +73 -0
- 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 +162 -16
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +123 -5
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +63 -65
- package/dist/init.js.map +1 -1
- package/dist/payload-ai.d.ts +149 -0
- package/dist/plugin.js +94 -46
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +38 -7
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +30 -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 +30 -10
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/styles.d.ts +11 -0
- package/dist/types/handlebars-async-helpers.d.ts +1 -0
- package/dist/types/handlebars-dist-handlebars.d.ts +1 -0
- package/dist/types/react-mentions.d.ts +1 -0
- package/dist/types.d.ts +6 -16
- 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 +2 -2
- package/dist/ui/Compose/Compose.js +118 -92
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +113 -103
- 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.d.ts +2 -2
- package/dist/ui/Compose/UndoRedoActions.js +11 -6
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.jsx +8 -6
- package/dist/ui/Compose/compose.module.css +57 -17
- package/dist/ui/Compose/hooks/menu/itemsMap.js +13 -7
- 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 +28 -17
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +27 -14
- 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.d.ts +0 -1
- package/dist/ui/Compose/hooks/useHistory.js +113 -26
- 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 +156 -0
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
- package/dist/ui/DynamicVoiceSelect/index.jsx +102 -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 +118 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -0
- package/dist/ui/VoicesFetcher/index.jsx +79 -0
- package/dist/utilities/buildSmartPrompt.d.ts +22 -0
- package/dist/utilities/buildSmartPrompt.js +143 -0
- package/dist/utilities/buildSmartPrompt.js.map +1 -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.d.ts +2 -2
- 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 +30 -0
- package/dist/utilities/resolveImageReferences.js +167 -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/dist/utilities/updateFieldsConfig.js +27 -43
- package/dist/utilities/updateFieldsConfig.js.map +1 -1
- package/package.json +23 -24
- 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/styles.d.js +0 -2
- package/dist/styles.d.js.map +0 -1
- package/dist/types/handlebars-async-helpers.d.js +0 -2
- package/dist/types/handlebars-async-helpers.d.js.map +0 -1
- package/dist/types/handlebars-dist-handlebars.d.js +0 -2
- package/dist/types/handlebars-dist-handlebars.d.js.map +0 -1
- package/dist/types/react-mentions.d.js +0 -2
- package/dist/types/react-mentions.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
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { allProviderBlocks } from '../ai/providers/blocks/index.js';
|
|
2
|
+
export const aiSettingsGlobal = {
|
|
3
|
+
slug: 'ai-settings',
|
|
4
|
+
access: {
|
|
5
|
+
read: ({ req })=>!!req.user,
|
|
6
|
+
update: ({ req })=>!!req.user
|
|
7
|
+
},
|
|
8
|
+
// admin: {
|
|
9
|
+
// description: 'Configure AI providers, models, and default settings',
|
|
10
|
+
// },
|
|
11
|
+
fields: [
|
|
12
|
+
{
|
|
13
|
+
name: 'providers',
|
|
14
|
+
type: 'blocks',
|
|
15
|
+
admin: {
|
|
16
|
+
description: 'Configure which AI providers to use and their settings',
|
|
17
|
+
initCollapsed: true
|
|
18
|
+
},
|
|
19
|
+
blocks: allProviderBlocks,
|
|
20
|
+
label: 'AI Providers',
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'defaults',
|
|
25
|
+
type: 'group',
|
|
26
|
+
admin: {
|
|
27
|
+
description: 'Default provider/model behavior for each use case'
|
|
28
|
+
},
|
|
29
|
+
fields: [
|
|
30
|
+
{
|
|
31
|
+
type: 'tabs',
|
|
32
|
+
tabs: [
|
|
33
|
+
{
|
|
34
|
+
fields: [
|
|
35
|
+
{
|
|
36
|
+
name: 'text',
|
|
37
|
+
type: 'group',
|
|
38
|
+
fields: [
|
|
39
|
+
{
|
|
40
|
+
name: 'provider',
|
|
41
|
+
type: 'text',
|
|
42
|
+
admin: {
|
|
43
|
+
components: {
|
|
44
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
label: 'Default Provider'
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'model',
|
|
51
|
+
type: 'text',
|
|
52
|
+
admin: {
|
|
53
|
+
components: {
|
|
54
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
label: 'Default Model'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'options',
|
|
61
|
+
type: 'json',
|
|
62
|
+
admin: {
|
|
63
|
+
components: {
|
|
64
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
65
|
+
},
|
|
66
|
+
description: 'Default options for this model (global)'
|
|
67
|
+
},
|
|
68
|
+
label: 'Global Model Options'
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
label: ''
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
label: 'Text Generation'
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
fields: [
|
|
78
|
+
{
|
|
79
|
+
name: 'image',
|
|
80
|
+
type: 'group',
|
|
81
|
+
fields: [
|
|
82
|
+
{
|
|
83
|
+
name: 'provider',
|
|
84
|
+
type: 'text',
|
|
85
|
+
admin: {
|
|
86
|
+
components: {
|
|
87
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
label: 'Default Provider'
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'model',
|
|
94
|
+
type: 'text',
|
|
95
|
+
admin: {
|
|
96
|
+
components: {
|
|
97
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
label: 'Default Model'
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'options',
|
|
104
|
+
type: 'json',
|
|
105
|
+
admin: {
|
|
106
|
+
components: {
|
|
107
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
108
|
+
},
|
|
109
|
+
description: 'Default options for this model (global)'
|
|
110
|
+
},
|
|
111
|
+
label: 'Global Model Options'
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
label: ''
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
label: 'Image Generation'
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
fields: [
|
|
121
|
+
{
|
|
122
|
+
name: 'video',
|
|
123
|
+
type: 'group',
|
|
124
|
+
fields: [
|
|
125
|
+
{
|
|
126
|
+
name: 'provider',
|
|
127
|
+
type: 'text',
|
|
128
|
+
admin: {
|
|
129
|
+
components: {
|
|
130
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
label: 'Default Provider'
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'model',
|
|
137
|
+
type: 'text',
|
|
138
|
+
admin: {
|
|
139
|
+
components: {
|
|
140
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
label: 'Default Model'
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'options',
|
|
147
|
+
type: 'json',
|
|
148
|
+
admin: {
|
|
149
|
+
components: {
|
|
150
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
151
|
+
},
|
|
152
|
+
description: 'Default options for this model (global)'
|
|
153
|
+
},
|
|
154
|
+
label: 'Global Model Options'
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
label: ''
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
label: 'Video Generation'
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
fields: [
|
|
164
|
+
{
|
|
165
|
+
name: 'tts',
|
|
166
|
+
type: 'group',
|
|
167
|
+
fields: [
|
|
168
|
+
{
|
|
169
|
+
name: 'provider',
|
|
170
|
+
type: 'text',
|
|
171
|
+
admin: {
|
|
172
|
+
components: {
|
|
173
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
label: 'Default Provider'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'model',
|
|
180
|
+
type: 'text',
|
|
181
|
+
admin: {
|
|
182
|
+
components: {
|
|
183
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
label: 'Default Model'
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: 'voice',
|
|
190
|
+
type: 'text',
|
|
191
|
+
admin: {
|
|
192
|
+
components: {
|
|
193
|
+
Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect'
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
label: 'Default Voice'
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'options',
|
|
200
|
+
type: 'json',
|
|
201
|
+
admin: {
|
|
202
|
+
components: {
|
|
203
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
204
|
+
},
|
|
205
|
+
description: 'Default options for this model (global)'
|
|
206
|
+
},
|
|
207
|
+
label: 'Global Model Options'
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
label: ''
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
label: 'Text-to-Speech'
|
|
214
|
+
}
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
label: 'Default Models'
|
|
219
|
+
}
|
|
220
|
+
],
|
|
221
|
+
hooks: {
|
|
222
|
+
afterRead: [
|
|
223
|
+
async ({ context, doc, req })=>{
|
|
224
|
+
if (!req.payload.secret) {
|
|
225
|
+
return doc;
|
|
226
|
+
}
|
|
227
|
+
const { decrypt } = await import('../utilities/encryption.js');
|
|
228
|
+
if (doc.providers) {
|
|
229
|
+
doc.providers = doc.providers.map((provider)=>{
|
|
230
|
+
if (provider.apiKey) {
|
|
231
|
+
if (context.unsafe) {
|
|
232
|
+
// Internal use: decrypt
|
|
233
|
+
provider.apiKey = decrypt(provider.apiKey, req.payload.secret);
|
|
234
|
+
} else {
|
|
235
|
+
// Admin UI: mask
|
|
236
|
+
// We can't easily check if it's valid without decrypting, but for UI we just show mask
|
|
237
|
+
// If we want to show "present", we can return a mask
|
|
238
|
+
provider.apiKey = 'sk-****' + provider.apiKey.slice(-4);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return provider;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
return doc;
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
beforeChange: [
|
|
248
|
+
async ({ data, originalDoc, req })=>{
|
|
249
|
+
if (!req.payload.secret) {
|
|
250
|
+
return data;
|
|
251
|
+
}
|
|
252
|
+
const { encrypt } = await import('../utilities/encryption.js');
|
|
253
|
+
// Iterate over providers and encrypt API keys
|
|
254
|
+
if (data.providers) {
|
|
255
|
+
data.providers = data.providers.map((provider)=>{
|
|
256
|
+
if (provider.apiKey) {
|
|
257
|
+
// If it looks like a masked key, don't re-encrypt (it means it wasn't changed)
|
|
258
|
+
if (provider.apiKey.startsWith('sk-') && provider.apiKey.includes('****')) {
|
|
259
|
+
// Restore the original encrypted key from originalDoc
|
|
260
|
+
const originalProvider = originalDoc?.providers?.find((p)=>p.id === provider.id);
|
|
261
|
+
if (originalProvider?.apiKey) {
|
|
262
|
+
provider.apiKey = originalProvider.apiKey;
|
|
263
|
+
}
|
|
264
|
+
} else {
|
|
265
|
+
// Encrypt new key
|
|
266
|
+
provider.apiKey = encrypt(provider.apiKey, req.payload.secret);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return provider;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return data;
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
label: 'AI Configuration'
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
//# sourceMappingURL=AISettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/collections/AISettings.ts"],"sourcesContent":["import type { GlobalConfig } from 'payload'\n\nimport { allProviderBlocks } from '../ai/providers/blocks/index.js'\n\nexport const aiSettingsGlobal: GlobalConfig = {\n slug: 'ai-settings',\n access: {\n read: ({ req }) => !!req.user,\n update: ({ req }) => !!req.user,\n },\n // admin: {\n // description: 'Configure AI providers, models, and default settings',\n // },\n fields: [\n {\n name: 'providers',\n type: 'blocks',\n admin: {\n description: 'Configure which AI providers to use and their settings',\n initCollapsed: true,\n },\n blocks: allProviderBlocks,\n label: 'AI Providers',\n required: true,\n },\n {\n name: 'defaults',\n type: 'group',\n admin: {\n description: 'Default provider/model behavior for each use case',\n },\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n {\n name: 'text',\n type: 'group',\n fields: [\n {\n name: 'provider',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Default Provider',\n },\n {\n name: 'model',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Default Model',\n },\n {\n name: 'options',\n type: 'json',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Default options for this model (global)',\n },\n label: 'Global Model Options',\n },\n ],\n label: '',\n },\n ],\n label: 'Text Generation',\n },\n {\n fields: [\n {\n name: 'image',\n type: 'group',\n fields: [\n {\n name: 'provider',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Default Provider',\n },\n {\n name: 'model',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Default Model',\n },\n {\n name: 'options',\n type: 'json',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Default options for this model (global)',\n },\n label: 'Global Model Options',\n },\n ],\n label: '',\n },\n ],\n label: 'Image Generation',\n },\n {\n fields: [\n {\n name: 'video',\n type: 'group',\n fields: [\n {\n name: 'provider',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Default Provider',\n },\n {\n name: 'model',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Default Model',\n },\n {\n name: 'options',\n type: 'json',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Default options for this model (global)',\n },\n label: 'Global Model Options',\n },\n ],\n label: '',\n },\n ],\n label: 'Video Generation',\n },\n {\n fields: [\n {\n name: 'tts',\n type: 'group',\n fields: [\n {\n name: 'provider',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Default Provider',\n },\n {\n name: 'model',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Default Model',\n },\n {\n name: 'voice',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect',\n },\n },\n label: 'Default Voice',\n },\n {\n name: 'options',\n type: 'json',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Default options for this model (global)',\n },\n label: 'Global Model Options',\n },\n ],\n label: '',\n },\n ],\n label: 'Text-to-Speech',\n },\n ],\n },\n ],\n label: 'Default Models',\n },\n ],\n hooks: {\n afterRead: [\n async ({ context, doc, req }) => {\n if (!req.payload.secret) {\n return doc\n }\n\n const { decrypt } = await import('../utilities/encryption.js')\n\n if (doc.providers) {\n doc.providers = doc.providers.map((provider: any) => {\n if (provider.apiKey) {\n if (context.unsafe) {\n // Internal use: decrypt\n provider.apiKey = decrypt(provider.apiKey, req.payload.secret)\n } else {\n // Admin UI: mask\n // We can't easily check if it's valid without decrypting, but for UI we just show mask\n // If we want to show \"present\", we can return a mask\n provider.apiKey = 'sk-****' + provider.apiKey.slice(-4)\n }\n }\n return provider\n })\n }\n return doc\n },\n ],\n beforeChange: [\n async ({ data, originalDoc, req }) => {\n if (!req.payload.secret) {\n return data\n }\n\n const { encrypt } = await import('../utilities/encryption.js')\n\n // Iterate over providers and encrypt API keys\n if (data.providers) {\n data.providers = data.providers.map((provider: any) => {\n if (provider.apiKey) {\n // If it looks like a masked key, don't re-encrypt (it means it wasn't changed)\n if (provider.apiKey.startsWith('sk-') && provider.apiKey.includes('****')) {\n // Restore the original encrypted key from originalDoc\n const originalProvider = originalDoc?.providers?.find(\n (p: any) => p.id === provider.id,\n )\n if (originalProvider?.apiKey) {\n provider.apiKey = originalProvider.apiKey\n }\n } else {\n // Encrypt new key\n provider.apiKey = encrypt(provider.apiKey, req.payload.secret)\n }\n }\n return provider\n })\n }\n return data\n },\n ],\n },\n label: 'AI Configuration',\n}\n"],"names":["allProviderBlocks","aiSettingsGlobal","slug","access","read","req","user","update","fields","name","type","admin","description","initCollapsed","blocks","label","required","tabs","components","Field","hooks","afterRead","context","doc","payload","secret","decrypt","providers","map","provider","apiKey","unsafe","slice","beforeChange","data","originalDoc","encrypt","startsWith","includes","originalProvider","find","p","id"],"mappings":"AAEA,SAASA,iBAAiB,QAAQ,kCAAiC;AAEnE,OAAO,MAAMC,mBAAiC;IAC5CC,MAAM;IACNC,QAAQ;QACNC,MAAM,CAAC,EAAEC,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI;QAC7BC,QAAQ,CAAC,EAAEF,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI;IACjC;IACA,WAAW;IACX,yEAAyE;IACzE,KAAK;IACLE,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,aAAa;gBACbC,eAAe;YACjB;YACAC,QAAQd;YACRe,OAAO;YACPC,UAAU;QACZ;QACA;YACEP,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,aAAa;YACf;YACAJ,QAAQ;gBACN;oBACEE,MAAM;oBACNO,MAAM;wBACJ;4BACET,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNF,QAAQ;wCACN;4CACEC,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;gDACAP,aAAa;4CACf;4CACAG,OAAO;wCACT;qCACD;oCACDA,OAAO;gCACT;6BACD;4BACDA,OAAO;wBACT;wBACA;4BACEP,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNF,QAAQ;wCACN;4CACEC,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;gDACAP,aAAa;4CACf;4CACAG,OAAO;wCACT;qCACD;oCACDA,OAAO;gCACT;6BACD;4BACDA,OAAO;wBACT;wBACA;4BACEP,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNF,QAAQ;wCACN;4CACEC,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;gDACAP,aAAa;4CACf;4CACAG,OAAO;wCACT;qCACD;oCACDA,OAAO;gCACT;6BACD;4BACDA,OAAO;wBACT;wBACA;4BACEP,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNF,QAAQ;wCACN;4CACEC,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;4CACF;4CACAJ,OAAO;wCACT;wCACA;4CACEN,MAAM;4CACNC,MAAM;4CACNC,OAAO;gDACLO,YAAY;oDACVC,OAAO;gDACT;gDACAP,aAAa;4CACf;4CACAG,OAAO;wCACT;qCACD;oCACDA,OAAO;gCACT;6BACD;4BACDA,OAAO;wBACT;qBACD;gBACH;aACD;YACDA,OAAO;QACT;KACD;IACDK,OAAO;QACLC,WAAW;YACT,OAAO,EAAEC,OAAO,EAAEC,GAAG,EAAElB,GAAG,EAAE;gBAC1B,IAAI,CAACA,IAAImB,OAAO,CAACC,MAAM,EAAE;oBACvB,OAAOF;gBACT;gBAEA,MAAM,EAAEG,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC;gBAEjC,IAAIH,IAAII,SAAS,EAAE;oBACjBJ,IAAII,SAAS,GAAGJ,IAAII,SAAS,CAACC,GAAG,CAAC,CAACC;wBACjC,IAAIA,SAASC,MAAM,EAAE;4BACnB,IAAIR,QAAQS,MAAM,EAAE;gCAClB,wBAAwB;gCACxBF,SAASC,MAAM,GAAGJ,QAAQG,SAASC,MAAM,EAAEzB,IAAImB,OAAO,CAACC,MAAM;4BAC/D,OAAO;gCACL,iBAAiB;gCACjB,uFAAuF;gCACvF,qDAAqD;gCACrDI,SAASC,MAAM,GAAG,YAAYD,SAASC,MAAM,CAACE,KAAK,CAAC,CAAC;4BACvD;wBACF;wBACA,OAAOH;oBACT;gBACF;gBACA,OAAON;YACT;SACD;QACDU,cAAc;YACZ,OAAO,EAAEC,IAAI,EAAEC,WAAW,EAAE9B,GAAG,EAAE;gBAC/B,IAAI,CAACA,IAAImB,OAAO,CAACC,MAAM,EAAE;oBACvB,OAAOS;gBACT;gBAEA,MAAM,EAAEE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC;gBAEjC,8CAA8C;gBAC9C,IAAIF,KAAKP,SAAS,EAAE;oBAClBO,KAAKP,SAAS,GAAGO,KAAKP,SAAS,CAACC,GAAG,CAAC,CAACC;wBACnC,IAAIA,SAASC,MAAM,EAAE;4BACnB,+EAA+E;4BAC/E,IAAID,SAASC,MAAM,CAACO,UAAU,CAAC,UAAUR,SAASC,MAAM,CAACQ,QAAQ,CAAC,SAAS;gCACzE,sDAAsD;gCACtD,MAAMC,mBAAmBJ,aAAaR,WAAWa,KAC/C,CAACC,IAAWA,EAAEC,EAAE,KAAKb,SAASa,EAAE;gCAElC,IAAIH,kBAAkBT,QAAQ;oCAC5BD,SAASC,MAAM,GAAGS,iBAAiBT,MAAM;gCAC3C;4BACF,OAAO;gCACL,kBAAkB;gCAClBD,SAASC,MAAM,GAAGM,QAAQP,SAASC,MAAM,EAAEzB,IAAImB,OAAO,CAACC,MAAM;4BAC/D;wBACF;wBACA,OAAOI;oBACT;gBACF;gBACA,OAAOK;YACT;SACD;IACH;IACAnB,OAAO;AACT,EAAC"}
|
|
@@ -1,18 +1,44 @@
|
|
|
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
|
+
{
|
|
35
|
+
id: 'array',
|
|
36
|
+
name: 'Array Generation',
|
|
37
|
+
fields: [
|
|
38
|
+
'array'
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
];
|
|
16
42
|
const defaultAccessConfig = {
|
|
17
43
|
create: ({ req })=>{
|
|
18
44
|
if (!req.user) {
|
|
@@ -43,9 +69,66 @@ const defaultAdminConfig = {
|
|
|
43
69
|
group: 'Plugins',
|
|
44
70
|
hidden: true
|
|
45
71
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
72
|
+
const providerSelect = {
|
|
73
|
+
name: 'provider',
|
|
74
|
+
type: 'text',
|
|
75
|
+
admin: {
|
|
76
|
+
components: {
|
|
77
|
+
Field: '@ai-stack/payloadcms/client#DynamicProviderSelect'
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
label: 'Provider'
|
|
81
|
+
};
|
|
82
|
+
const modelSelect = {
|
|
83
|
+
name: 'model',
|
|
84
|
+
type: 'text',
|
|
85
|
+
admin: {
|
|
86
|
+
components: {
|
|
87
|
+
Field: '@ai-stack/payloadcms/client#DynamicModelSelect'
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
label: 'Model'
|
|
91
|
+
};
|
|
92
|
+
const providerOptionsJson = {
|
|
93
|
+
name: 'providerOptions',
|
|
94
|
+
type: 'json',
|
|
95
|
+
admin: {
|
|
96
|
+
components: {
|
|
97
|
+
Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
|
|
98
|
+
},
|
|
99
|
+
description: 'Provider-specific options. Defaults are inherited from AI Settings.'
|
|
100
|
+
},
|
|
101
|
+
label: 'Provider Options'
|
|
102
|
+
};
|
|
103
|
+
const commonTextParams = [
|
|
104
|
+
{
|
|
105
|
+
type: 'row',
|
|
106
|
+
fields: [
|
|
107
|
+
{
|
|
108
|
+
name: 'maxTokens',
|
|
109
|
+
type: 'number',
|
|
110
|
+
admin: {
|
|
111
|
+
placeholder: 'Model Default'
|
|
112
|
+
},
|
|
113
|
+
label: 'Max Tokens'
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'temperature',
|
|
117
|
+
type: 'number',
|
|
118
|
+
defaultValue: 0.7,
|
|
119
|
+
label: 'Temperature',
|
|
120
|
+
max: 1,
|
|
121
|
+
min: 0
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'extractAttachments',
|
|
127
|
+
type: 'checkbox',
|
|
128
|
+
label: 'Extract Attachments'
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
export const instructionsCollection = (pluginConfig)=>({
|
|
49
132
|
labels: {
|
|
50
133
|
plural: 'Compose Settings',
|
|
51
134
|
singular: 'Compose Setting'
|
|
@@ -58,11 +141,13 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
58
141
|
},
|
|
59
142
|
admin: {
|
|
60
143
|
...defaultAdminConfig,
|
|
61
|
-
...pluginConfig.overrideInstructions?.admin
|
|
144
|
+
...pluginConfig.overrideInstructions?.admin,
|
|
145
|
+
components: {
|
|
146
|
+
beforeList: [
|
|
147
|
+
'@ai-stack/payloadcms/client#AIConfigDashboard'
|
|
148
|
+
]
|
|
149
|
+
}
|
|
62
150
|
},
|
|
63
|
-
...isLocalized ? {
|
|
64
|
-
localization: true
|
|
65
|
-
} : {},
|
|
66
151
|
fields: [
|
|
67
152
|
{
|
|
68
153
|
name: 'schema-path',
|
|
@@ -96,6 +181,10 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
96
181
|
{
|
|
97
182
|
label: 'richText',
|
|
98
183
|
value: 'richText'
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
label: 'array',
|
|
187
|
+
value: 'array'
|
|
99
188
|
}
|
|
100
189
|
]
|
|
101
190
|
},
|
|
@@ -117,19 +206,21 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
117
206
|
Field: {
|
|
118
207
|
clientProps: {
|
|
119
208
|
filterByField: 'field-type',
|
|
120
|
-
options:
|
|
209
|
+
options: CAPABILITIES.map((c)=>({
|
|
210
|
+
fields: c.fields,
|
|
211
|
+
label: c.name,
|
|
212
|
+
value: c.id
|
|
213
|
+
}))
|
|
121
214
|
},
|
|
122
215
|
path: '@ai-stack/payloadcms/fields#SelectField'
|
|
123
216
|
}
|
|
124
217
|
}
|
|
125
218
|
},
|
|
126
|
-
label: '
|
|
127
|
-
options:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
};
|
|
132
|
-
})
|
|
219
|
+
label: 'Capability',
|
|
220
|
+
options: CAPABILITIES.map((c)=>({
|
|
221
|
+
label: c.name,
|
|
222
|
+
value: c.id
|
|
223
|
+
}))
|
|
133
224
|
},
|
|
134
225
|
{
|
|
135
226
|
name: 'disabled',
|
|
@@ -150,10 +241,6 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
150
241
|
{
|
|
151
242
|
name: 'prompt',
|
|
152
243
|
type: 'textarea',
|
|
153
|
-
// Make prompt localized if localization is enabled
|
|
154
|
-
...isLocalized ? {
|
|
155
|
-
localized: true
|
|
156
|
-
} : {},
|
|
157
244
|
admin: {
|
|
158
245
|
components: {
|
|
159
246
|
Field: '@ai-stack/payloadcms/fields#PromptEditorField'
|
|
@@ -168,10 +255,10 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
168
255
|
{
|
|
169
256
|
admin: {
|
|
170
257
|
condition: (_, current)=>{
|
|
171
|
-
return current['field-type'] === 'upload' && current['model-id'] === '
|
|
258
|
+
return current['field-type'] === 'upload' && current['model-id'] === 'image';
|
|
172
259
|
}
|
|
173
260
|
},
|
|
174
|
-
description: 'These images will be used to generate new visuals in a similar style, layout, or content.
|
|
261
|
+
description: 'These images will be used to generate new visuals in a similar style, layout, or content.',
|
|
175
262
|
fields: [
|
|
176
263
|
{
|
|
177
264
|
name: 'images',
|
|
@@ -201,9 +288,6 @@ export const instructionsCollection = (pluginConfig)=>{
|
|
|
201
288
|
{
|
|
202
289
|
name: 'system',
|
|
203
290
|
type: 'textarea',
|
|
204
|
-
...isLocalized ? {
|
|
205
|
-
localized: true
|
|
206
|
-
} : {},
|
|
207
291
|
defaultValue: `INSTRUCTIONS:
|
|
208
292
|
You are a highly skilled and professional blog writer,
|
|
209
293
|
renowned for crafting engaging and well-organized articles.
|
|
@@ -223,16 +307,8 @@ informative and accurate but also captivating and beautifully structured.`,
|
|
|
223
307
|
description: '',
|
|
224
308
|
fields: [
|
|
225
309
|
{
|
|
226
|
-
|
|
227
|
-
* - Layouts can be saved in as an array
|
|
228
|
-
* - User can add their own layout to collections and use it later for generate specific rich text
|
|
229
|
-
* - User can select previously added layout
|
|
230
|
-
* - IMP: Remove layout from default, this seem to affect other functions like rephrase etc.
|
|
231
|
-
*/ name: 'layout',
|
|
310
|
+
name: 'layout',
|
|
232
311
|
type: 'textarea',
|
|
233
|
-
...isLocalized ? {
|
|
234
|
-
localized: true
|
|
235
|
-
} : {},
|
|
236
312
|
admin: {
|
|
237
313
|
condition: (_, current)=>{
|
|
238
314
|
return current['field-type'] === 'richText';
|
|
@@ -253,9 +329,107 @@ informative and accurate but also captivating and beautifully structured.`,
|
|
|
253
329
|
}
|
|
254
330
|
]
|
|
255
331
|
},
|
|
256
|
-
|
|
332
|
+
// Inline Settings Groups by Capability
|
|
333
|
+
// Text Settings
|
|
334
|
+
// Inline Settings Groups by Capability
|
|
335
|
+
// Text Settings
|
|
336
|
+
{
|
|
337
|
+
name: 'text-settings',
|
|
338
|
+
type: 'group',
|
|
339
|
+
admin: {
|
|
340
|
+
condition: (data)=>data['model-id'] === 'text'
|
|
341
|
+
},
|
|
342
|
+
fields: [
|
|
343
|
+
providerSelect,
|
|
344
|
+
modelSelect,
|
|
345
|
+
...commonTextParams,
|
|
346
|
+
providerOptionsJson
|
|
347
|
+
],
|
|
348
|
+
label: 'Text Settings'
|
|
349
|
+
},
|
|
350
|
+
// Rich Text Settings
|
|
351
|
+
// Rich Text Settings
|
|
352
|
+
{
|
|
353
|
+
name: 'richtext-settings',
|
|
354
|
+
type: 'group',
|
|
355
|
+
admin: {
|
|
356
|
+
condition: (data)=>data['model-id'] === 'richtext'
|
|
357
|
+
},
|
|
358
|
+
fields: [
|
|
359
|
+
providerSelect,
|
|
360
|
+
modelSelect,
|
|
361
|
+
...commonTextParams,
|
|
362
|
+
providerOptionsJson
|
|
363
|
+
],
|
|
364
|
+
label: 'Rich Text Settings'
|
|
365
|
+
},
|
|
366
|
+
// Image Settings
|
|
367
|
+
// Image Settings
|
|
368
|
+
{
|
|
369
|
+
name: 'image-settings',
|
|
370
|
+
type: 'group',
|
|
371
|
+
admin: {
|
|
372
|
+
condition: (data)=>data['model-id'] === 'image'
|
|
373
|
+
},
|
|
374
|
+
fields: [
|
|
375
|
+
providerSelect,
|
|
376
|
+
modelSelect,
|
|
377
|
+
providerOptionsJson
|
|
378
|
+
],
|
|
379
|
+
label: 'Image Settings'
|
|
380
|
+
},
|
|
381
|
+
// TTS Settings
|
|
382
|
+
// TTS Settings
|
|
383
|
+
{
|
|
384
|
+
name: 'tts-settings',
|
|
385
|
+
type: 'group',
|
|
386
|
+
admin: {
|
|
387
|
+
condition: (data)=>data['model-id'] === 'tts'
|
|
388
|
+
},
|
|
389
|
+
fields: [
|
|
390
|
+
providerSelect,
|
|
391
|
+
modelSelect,
|
|
392
|
+
{
|
|
393
|
+
name: 'voice',
|
|
394
|
+
type: 'text',
|
|
395
|
+
admin: {
|
|
396
|
+
components: {
|
|
397
|
+
Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect'
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
label: 'Voice'
|
|
401
|
+
},
|
|
402
|
+
providerOptionsJson
|
|
403
|
+
],
|
|
404
|
+
label: 'TTS Settings'
|
|
405
|
+
},
|
|
406
|
+
// Array Settings
|
|
407
|
+
// Array Settings
|
|
408
|
+
{
|
|
409
|
+
name: 'array-settings',
|
|
410
|
+
type: 'group',
|
|
411
|
+
admin: {
|
|
412
|
+
condition: (data)=>data['model-id'] === 'array'
|
|
413
|
+
},
|
|
414
|
+
fields: [
|
|
415
|
+
providerSelect,
|
|
416
|
+
modelSelect,
|
|
417
|
+
{
|
|
418
|
+
name: 'count',
|
|
419
|
+
type: 'number',
|
|
420
|
+
admin: {
|
|
421
|
+
description: 'Number of items to generate'
|
|
422
|
+
},
|
|
423
|
+
defaultValue: 3,
|
|
424
|
+
label: 'Items to Generate',
|
|
425
|
+
max: 20,
|
|
426
|
+
min: 1
|
|
427
|
+
},
|
|
428
|
+
providerOptionsJson
|
|
429
|
+
],
|
|
430
|
+
label: 'Array Settings'
|
|
431
|
+
}
|
|
257
432
|
]
|
|
258
|
-
};
|
|
259
|
-
};
|
|
433
|
+
});
|
|
260
434
|
|
|
261
435
|
//# sourceMappingURL=Instructions.js.map
|