@ai-stack/payloadcms 3.76.0-beta.1 → 3.76.0-beta.3
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/dist/ai/core/generateObject.js +1 -4
- package/dist/ai/core/generateObject.js.map +1 -1
- package/dist/ai/core/generateText.js +1 -5
- package/dist/ai/core/generateText.js.map +1 -1
- package/dist/ai/core/media/generateMedia.js +1 -4
- package/dist/ai/core/media/generateMedia.js.map +1 -1
- package/dist/ai/core/media/image/generateImage.js +4 -14
- package/dist/ai/core/media/image/generateImage.js.map +1 -1
- package/dist/ai/core/media/image/handlers/multimodal.js +7 -24
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
- package/dist/ai/core/media/image/handlers/standard.js +7 -2
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
- package/dist/ai/core/media/speech/generateSpeech.js +2 -3
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
- package/dist/ai/core/media/types.d.ts +2 -3
- package/dist/ai/core/media/types.js.map +1 -1
- package/dist/ai/core/streamObject.js +0 -3
- package/dist/ai/core/streamObject.js.map +1 -1
- package/dist/ai/core/streamText.js +1 -4
- package/dist/ai/core/streamText.js.map +1 -1
- package/dist/ai/core/types.d.ts +2 -2
- package/dist/ai/core/types.js.map +1 -1
- package/dist/ai/providers/blocks/anthropic.js +2 -44
- package/dist/ai/providers/blocks/anthropic.js.map +1 -1
- package/dist/ai/providers/blocks/elevenlabs.js +4 -109
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
- package/dist/ai/providers/blocks/fal.js +2 -120
- package/dist/ai/providers/blocks/fal.js.map +1 -1
- package/dist/ai/providers/blocks/google.js +6 -240
- package/dist/ai/providers/blocks/google.js.map +1 -1
- package/dist/ai/providers/blocks/openai-compatible.js +2 -146
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
- package/dist/ai/providers/blocks/openai.js +2 -202
- package/dist/ai/providers/blocks/openai.js.map +1 -1
- package/dist/ai/providers/blocks/xai.js +2 -55
- package/dist/ai/providers/blocks/xai.js.map +1 -1
- package/dist/ai/providers/index.d.ts +1 -1
- package/dist/ai/providers/index.js +0 -2
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/providers/registry.d.ts +24 -28
- package/dist/ai/providers/registry.js +184 -138
- package/dist/ai/providers/registry.js.map +1 -1
- package/dist/ai/providers/types.d.ts +12 -33
- package/dist/ai/providers/types.js +0 -1
- package/dist/ai/providers/types.js.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
- package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
- package/dist/ai/utilities/isObjectSchema.js.map +1 -0
- package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +6 -6
- package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
- package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
- package/dist/ai/utilities/prompts.js.map +1 -0
- package/dist/ai/utilities/systemGenerate.js.map +1 -0
- package/dist/collections/AIJobs.js +3 -12
- package/dist/collections/AIJobs.js.map +1 -1
- package/dist/collections/AIProviders.js +56 -29
- package/dist/collections/AIProviders.js.map +1 -1
- package/dist/collections/Instructions.js +91 -59
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/collections/shared.d.ts +30 -0
- package/dist/collections/shared.js +15 -0
- package/dist/collections/shared.js.map +1 -0
- package/dist/endpoints/fetchFields.js +14 -6
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/fetchVoices.js +1 -1
- package/dist/endpoints/fetchVoices.js.map +1 -1
- package/dist/endpoints/generate.d.ts +7 -0
- package/dist/endpoints/generate.js +268 -0
- package/dist/endpoints/generate.js.map +1 -0
- package/dist/endpoints/index.js +9 -639
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/promptMentions.d.ts +2 -0
- package/dist/endpoints/promptMentions.js +166 -0
- package/dist/endpoints/promptMentions.js.map +1 -0
- package/dist/endpoints/upload.d.ts +7 -0
- package/dist/endpoints/upload.js +294 -0
- package/dist/endpoints/upload.js.map +1 -0
- package/dist/endpoints/videogenWebhook.d.ts +7 -0
- package/dist/endpoints/videogenWebhook.js +132 -0
- package/dist/endpoints/videogenWebhook.js.map +1 -0
- package/dist/exports/client.d.ts +2 -1
- package/dist/exports/client.js +2 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fields.d.ts +2 -1
- package/dist/exports/fields.js +2 -1
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
- package/dist/fields/ComposeField/ComposeField.js +18 -8
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +12 -7
- package/dist/fields/LexicalEditor/feature.server.js +1 -1
- package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
- package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.client.js +173 -0
- package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
- package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
- package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.server.js +30 -0
- package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
- package/dist/fields/PromptField.d.ts +4 -0
- package/dist/fields/PromptField.js +18 -0
- package/dist/fields/PromptField.js.map +1 -0
- package/dist/fields/SelectField/SelectField.js +0 -1
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/fields/SelectField/SelectField.jsx +0 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/handlebars/helpers.js +2 -2
- package/dist/libraries/handlebars/helpers.js.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
- package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
- package/dist/payload-ai.d.ts +5 -19
- package/dist/plugin.js +18 -21
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.js +11 -20
- package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.jsx +8 -18
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +5 -2
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +5 -2
- package/dist/translations/de.json +47 -0
- package/dist/translations/en.json +45 -2
- package/dist/translations/es.json +45 -2
- package/dist/translations/fa.json +45 -2
- package/dist/translations/fr.json +46 -3
- package/dist/translations/hi.json +47 -0
- package/dist/translations/index.d.ts +88 -26
- package/dist/translations/index.js +18 -32
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/ja.json +47 -0
- package/dist/translations/nb.json +47 -0
- package/dist/translations/nl.json +47 -0
- package/dist/translations/pl.json +45 -2
- package/dist/translations/pt.json +47 -0
- package/dist/translations/ru.json +45 -2
- package/dist/translations/th.json +47 -0
- package/dist/translations/translation-schema.json +184 -11
- package/dist/translations/uk.json +45 -2
- package/dist/translations/zh.json +47 -0
- package/dist/types.d.ts +64 -28
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.js +42 -79
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +32 -86
- package/dist/ui/Compose/ComposePlaceholder.js +1 -1
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
- package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
- package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
- package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
- package/dist/ui/Compose/hooks/menu/Item.js +7 -3
- package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js +15 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +11 -5
- package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
- package/dist/ui/Compose/hooks/menu/types.js +3 -0
- package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
- package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
- package/dist/ui/Compose/hooks/useGenerate.js +37 -12
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerateUpload.js +66 -24
- package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.js +1 -1
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
- package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
- package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
- package/dist/ui/ConfigDashboard/index.js +27 -92
- package/dist/ui/ConfigDashboard/index.js.map +1 -1
- package/dist/ui/ConfigDashboard/index.jsx +24 -77
- package/dist/ui/DynamicModelSelect/index.js +6 -27
- package/dist/ui/DynamicModelSelect/index.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.jsx +6 -29
- package/dist/ui/DynamicProviderSelect/index.js +6 -27
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
- package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
- package/dist/ui/DynamicVoiceSelect/index.js +34 -83
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
- package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
- package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
- package/dist/ui/GlobalProviderOptions/index.js +118 -0
- package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
- package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
- package/dist/ui/Icons/Icons.js +1 -1
- package/dist/ui/Icons/Icons.js.map +1 -1
- package/dist/ui/Icons/Icons.jsx +1 -1
- package/dist/ui/Icons/LottieAnimation.js +1 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +1 -1
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
- package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
- package/dist/ui/InstructionProviderOptions/index.js +157 -0
- package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -1
- package/dist/ui/hooks/useAISettings.d.ts +26 -0
- package/dist/ui/hooks/useAISettings.js +73 -0
- package/dist/ui/hooks/useAISettings.js.map +1 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
- package/dist/ui/shared/handleSelectChange.d.ts +5 -0
- package/dist/ui/shared/handleSelectChange.js +12 -0
- package/dist/ui/shared/handleSelectChange.js.map +1 -0
- package/dist/ui/shared/types.d.ts +11 -0
- package/dist/ui/shared/types.js +5 -0
- package/dist/ui/shared/types.js.map +1 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
- package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
- package/dist/utilities/buildPromptUtils.js.map +1 -0
- package/dist/utilities/buildSmartPrompt.js +3 -3
- package/dist/utilities/buildSmartPrompt.js.map +1 -1
- package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
- package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
- package/dist/utilities/fields/getFieldInfo.js.map +1 -0
- package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +8 -3
- package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
- package/dist/utilities/images/extractImageData.js.map +1 -0
- package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
- package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
- package/dist/utilities/images/fetchImages.js +49 -0
- package/dist/utilities/images/fetchImages.js.map +1 -0
- package/dist/utilities/images/resolveImageReferences.js +183 -0
- package/dist/utilities/images/resolveImageReferences.js.map +1 -0
- package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
- package/dist/utilities/init/autoSetupProviders.js +216 -0
- package/dist/utilities/init/autoSetupProviders.js.map +1 -0
- package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
- package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
- package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
- package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
- package/dist/utilities/sanitizeLog.d.ts +1 -0
- package/dist/utilities/sanitizeLog.js +39 -0
- package/dist/utilities/sanitizeLog.js.map +1 -0
- package/dist/utilities/seedProperties.js +54 -22
- package/dist/utilities/seedProperties.js.map +1 -1
- package/package.json +36 -2
- package/dist/ai/analyse.d.ts +0 -1
- package/dist/ai/analyse.js +0 -3
- package/dist/ai/analyse.js.map +0 -1
- package/dist/ai/index.d.ts +0 -11
- package/dist/ai/index.js +0 -25
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
- package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
- package/dist/ai/utils/isObjectSchema.js.map +0 -1
- package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
- package/dist/ai/utils/systemGenerate.js.map +0 -1
- package/dist/endpoints/buildPromptUtils.js.map +0 -1
- package/dist/endpoints/chat.d.ts +0 -4
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
- package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
- package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
- package/dist/ui/AIConfigDashboard/index.js +0 -224
- package/dist/ui/AIConfigDashboard/index.js.map +0 -1
- package/dist/ui/AIConfigDashboard/index.jsx +0 -175
- package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
- package/dist/ui/ProviderOptionsEditor/index.js +0 -291
- package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
- package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
- package/dist/utilities/editorSchemaValidator.js.map +0 -1
- package/dist/utilities/extractImageData.js.map +0 -1
- package/dist/utilities/extractPromptAttachments.js.map +0 -1
- package/dist/utilities/fetchImages.js +0 -38
- package/dist/utilities/fetchImages.js.map +0 -1
- package/dist/utilities/fieldToJsonSchema.js.map +0 -1
- package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
- package/dist/utilities/getFieldInfo.js.map +0 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
- package/dist/utilities/getProviderOptionsFields.js +0 -80
- package/dist/utilities/getProviderOptionsFields.js.map +0 -1
- package/dist/utilities/isPluginActivated.d.ts +0 -2
- package/dist/utilities/isPluginActivated.js +0 -5
- package/dist/utilities/isPluginActivated.js.map +0 -1
- package/dist/utilities/lexicalToHTML.js.map +0 -1
- package/dist/utilities/resolveImageReferences.js +0 -167
- package/dist/utilities/resolveImageReferences.js.map +0 -1
- package/dist/utilities/schemaConverter.d.ts +0 -3
- package/dist/utilities/schemaConverter.js +0 -93
- package/dist/utilities/schemaConverter.js.map +0 -1
- package/dist/utilities/setSafeLexicalState.js.map +0 -1
- package/dist/utilities/updateFieldsConfig.js.map +0 -1
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
- /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
- /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
- /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
- /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
- /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
- /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
- /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
- /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
- /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
- /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
- /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
- /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
- /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
- /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
- /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
- /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { checkAccess } from '../access/checkAccess.js';
|
|
2
|
+
import { filterEditorSchemaByNodes } from '../ai/utilities/filterEditorSchemaByNodes.js';
|
|
3
|
+
import { PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../defaults.js';
|
|
4
|
+
import { registerEditorHelper } from '../libraries/handlebars/helpers.js';
|
|
5
|
+
import { resolveEffectiveInstructionSettings } from '../utilities/ai/resolveEffectiveInstructionSettings.js';
|
|
6
|
+
import { assignPrompt } from '../utilities/buildPromptUtils.js';
|
|
7
|
+
import { buildSmartPrompt, isGenericPrompt } from '../utilities/buildSmartPrompt.js';
|
|
8
|
+
import { fieldToJsonSchema } from '../utilities/fields/fieldToJsonSchema.js';
|
|
9
|
+
import { getFieldBySchemaPath } from '../utilities/fields/getFieldBySchemaPath.js';
|
|
10
|
+
import { extractImageData } from '../utilities/images/extractImageData.js';
|
|
11
|
+
import { fetchImages } from '../utilities/images/fetchImages.js';
|
|
12
|
+
import { resolveImageReferences } from '../utilities/images/resolveImageReferences.js';
|
|
13
|
+
import { lexicalToPromptTemplate } from '../utilities/lexical/lexicalToPromptTemplate.js';
|
|
14
|
+
import { sanitizeLog } from '../utilities/sanitizeLog.js';
|
|
15
|
+
/**
|
|
16
|
+
* Text/rich-text generation endpoint handler.
|
|
17
|
+
* Uses payload.ai.streamObject for structured text generation.
|
|
18
|
+
*/ export const generateHandler = (pluginConfig)=>async (req)=>{
|
|
19
|
+
try {
|
|
20
|
+
// Check authentication and authorization first
|
|
21
|
+
await checkAccess(req, pluginConfig);
|
|
22
|
+
const data = await req.json?.();
|
|
23
|
+
const { allowedEditorNodes = [], locale = 'en', options } = data;
|
|
24
|
+
const { action, actionParams, instructionId } = options;
|
|
25
|
+
let contextData = data.doc;
|
|
26
|
+
if (!instructionId) {
|
|
27
|
+
throw new Error(`Instruction ID is required for "${PLUGIN_NAME}" to work, please check your configuration, or try again`);
|
|
28
|
+
}
|
|
29
|
+
// Verify user has access to the specific instruction
|
|
30
|
+
const instructions = await req.payload.findByID({
|
|
31
|
+
id: instructionId,
|
|
32
|
+
collection: PLUGIN_INSTRUCTIONS_TABLE,
|
|
33
|
+
req
|
|
34
|
+
});
|
|
35
|
+
const { collections } = req.payload.config;
|
|
36
|
+
const collection = collections.find((collection)=>collection.slug === PLUGIN_INSTRUCTIONS_TABLE);
|
|
37
|
+
if (!collection) {
|
|
38
|
+
throw new Error('Collection not found');
|
|
39
|
+
}
|
|
40
|
+
const { defaultLocale, locales = [] } = req.payload.config.localization || {};
|
|
41
|
+
// If translating from default locale, we need to fetch the original content
|
|
42
|
+
if (action === 'Translate' && actionParams?.translateFromDefault && contextData?.id) {
|
|
43
|
+
try {
|
|
44
|
+
const schemaPath = String(instructions['schema-path']);
|
|
45
|
+
const parts = (schemaPath || '').split('.') || [];
|
|
46
|
+
const collectionName = parts[0];
|
|
47
|
+
if (collectionName && defaultLocale) {
|
|
48
|
+
const originalDoc = await req.payload.findByID({
|
|
49
|
+
id: contextData.id,
|
|
50
|
+
collection: collectionName,
|
|
51
|
+
locale: defaultLocale,
|
|
52
|
+
req
|
|
53
|
+
});
|
|
54
|
+
if (originalDoc) {
|
|
55
|
+
contextData = {
|
|
56
|
+
...contextData,
|
|
57
|
+
...originalDoc
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
} catch (e) {
|
|
62
|
+
req.payload.logger.error(e, '— AI Plugin: Error fetching default locale document for translation');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin;
|
|
66
|
+
const { schema: editorSchema = {} } = editorConfig;
|
|
67
|
+
let { prompt: promptTemplate = '' } = instructions;
|
|
68
|
+
// Convert Lexical JSON to string template if needed
|
|
69
|
+
if (promptTemplate && typeof promptTemplate === 'object') {
|
|
70
|
+
promptTemplate = lexicalToPromptTemplate(promptTemplate);
|
|
71
|
+
}
|
|
72
|
+
// Smart fallback: if prompt is generic, build a contextual prompt from field metadata
|
|
73
|
+
if (isGenericPrompt(promptTemplate)) {
|
|
74
|
+
const schemaPath = String(instructions['schema-path']);
|
|
75
|
+
promptTemplate = buildSmartPrompt({
|
|
76
|
+
documentData: contextData,
|
|
77
|
+
payload: req.payload,
|
|
78
|
+
schemaPath
|
|
79
|
+
});
|
|
80
|
+
if (pluginConfig.debugging) {
|
|
81
|
+
req.payload.logger.info(sanitizeLog({
|
|
82
|
+
smartPrompt: promptTemplate
|
|
83
|
+
}), `— AI Plugin: Using smart fallback prompt for ${schemaPath}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
let allowedEditorSchema = editorSchema;
|
|
87
|
+
if (allowedEditorNodes.length) {
|
|
88
|
+
allowedEditorSchema = filterEditorSchemaByNodes(editorSchema, allowedEditorNodes);
|
|
89
|
+
// Debug: Log what nodes were received and what definitions remain
|
|
90
|
+
if (pluginConfig.debugging) {
|
|
91
|
+
req.payload.logger.info(sanitizeLog({
|
|
92
|
+
receivedNodes: allowedEditorNodes,
|
|
93
|
+
remainingDefinitions: Object.keys(allowedEditorSchema.definitions || {})
|
|
94
|
+
}), '— AI Plugin: Schema filtering debug');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const schemaPath = String(instructions['schema-path']);
|
|
98
|
+
const parts = (schemaPath || '').split('.') || [];
|
|
99
|
+
const collectionName = parts[0];
|
|
100
|
+
const fieldName = parts.length > 1 ? parts[parts.length - 1] : '';
|
|
101
|
+
registerEditorHelper(req.payload, schemaPath);
|
|
102
|
+
const localeData = locales.find((l)=>{
|
|
103
|
+
return l.code === locale;
|
|
104
|
+
});
|
|
105
|
+
let localeInfo = locale;
|
|
106
|
+
if (localeData && defaultLocale && localeData.label && typeof localeData.label === 'object' && defaultLocale in localeData.label) {
|
|
107
|
+
localeInfo = localeData.label[defaultLocale];
|
|
108
|
+
}
|
|
109
|
+
const prompts = await assignPrompt(action, {
|
|
110
|
+
type: String(instructions['field-type']),
|
|
111
|
+
actionParams,
|
|
112
|
+
collection: collectionName,
|
|
113
|
+
context: contextData,
|
|
114
|
+
field: fieldName || '',
|
|
115
|
+
layout: instructions.layout,
|
|
116
|
+
locale: localeInfo,
|
|
117
|
+
pluginConfig,
|
|
118
|
+
systemPrompt: instructions.system,
|
|
119
|
+
template: String(promptTemplate)
|
|
120
|
+
});
|
|
121
|
+
if (pluginConfig.debugging) {
|
|
122
|
+
req.payload.logger.info(sanitizeLog({
|
|
123
|
+
prompts
|
|
124
|
+
}), `— AI Plugin: Executing text prompt on ${schemaPath}`);
|
|
125
|
+
}
|
|
126
|
+
const aiSettings = await req.payload.findGlobal({
|
|
127
|
+
slug: 'ai-providers'
|
|
128
|
+
});
|
|
129
|
+
const { effectiveSettings: modelSettings, settingsName } = resolveEffectiveInstructionSettings({
|
|
130
|
+
defaults: aiSettings?.defaults,
|
|
131
|
+
instructions: instructions
|
|
132
|
+
});
|
|
133
|
+
if (!settingsName) {
|
|
134
|
+
throw new Error(`Unsupported model-id: ${instructions['model-id']}`);
|
|
135
|
+
}
|
|
136
|
+
// Build per-field JSON schema for structured generation when applicable
|
|
137
|
+
let jsonSchema = allowedEditorSchema;
|
|
138
|
+
let targetField;
|
|
139
|
+
try {
|
|
140
|
+
const targetCollection = req.payload.config.collections.find((c)=>c.slug === collectionName);
|
|
141
|
+
if (targetCollection && fieldName) {
|
|
142
|
+
targetField = getFieldBySchemaPath(targetCollection, schemaPath);
|
|
143
|
+
const supported = [
|
|
144
|
+
'array',
|
|
145
|
+
'text',
|
|
146
|
+
'textarea',
|
|
147
|
+
'select',
|
|
148
|
+
'number',
|
|
149
|
+
'date',
|
|
150
|
+
'code',
|
|
151
|
+
'email',
|
|
152
|
+
'json'
|
|
153
|
+
];
|
|
154
|
+
const t = String(targetField?.type || '');
|
|
155
|
+
if (targetField && supported.includes(t)) {
|
|
156
|
+
// For array fields, use count from array-settings if available
|
|
157
|
+
if (t === 'array') {
|
|
158
|
+
const count = modelSettings.count || 3;
|
|
159
|
+
// Override the field's maxRows with the requested count
|
|
160
|
+
const modifiedField = {
|
|
161
|
+
...targetField,
|
|
162
|
+
maxRows: count,
|
|
163
|
+
minRows: count
|
|
164
|
+
};
|
|
165
|
+
jsonSchema = fieldToJsonSchema(modifiedField, {
|
|
166
|
+
nameOverride: fieldName
|
|
167
|
+
});
|
|
168
|
+
} else {
|
|
169
|
+
jsonSchema = fieldToJsonSchema(targetField, {
|
|
170
|
+
nameOverride: fieldName
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
} catch (e) {
|
|
176
|
+
req.payload.logger.error(e, '— AI Plugin: Error building field JSON schema');
|
|
177
|
+
}
|
|
178
|
+
// Resolve @field:filename references from the prompt
|
|
179
|
+
const { images: resolvedImages, processedPrompt } = await resolveImageReferences(prompts.prompt, contextData, req, collectionName);
|
|
180
|
+
// Extract hardcoded URLs from the processed prompt
|
|
181
|
+
const hardcodedImages = extractImageData(processedPrompt);
|
|
182
|
+
// Combine images
|
|
183
|
+
const allImages = [
|
|
184
|
+
...hardcodedImages,
|
|
185
|
+
...resolvedImages
|
|
186
|
+
];
|
|
187
|
+
let images;
|
|
188
|
+
if (allImages.length > 0) {
|
|
189
|
+
const imageParts = await fetchImages(req, allImages);
|
|
190
|
+
if (imageParts.length > 0) {
|
|
191
|
+
images = imageParts;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
let promptToUse = processedPrompt;
|
|
195
|
+
let systemToUse = prompts.system;
|
|
196
|
+
// Execute beforeGenerate hooks
|
|
197
|
+
if (targetField && targetField.custom?.ai?.beforeGenerate) {
|
|
198
|
+
const beforeHooks = targetField.custom.ai.beforeGenerate;
|
|
199
|
+
for (const hook of beforeHooks){
|
|
200
|
+
const result = await hook({
|
|
201
|
+
doc: contextData,
|
|
202
|
+
field: targetField,
|
|
203
|
+
headers: req.headers,
|
|
204
|
+
instructions,
|
|
205
|
+
payload: req.payload,
|
|
206
|
+
prompt: promptToUse,
|
|
207
|
+
req,
|
|
208
|
+
system: systemToUse
|
|
209
|
+
});
|
|
210
|
+
if (result) {
|
|
211
|
+
if (result.prompt) {
|
|
212
|
+
promptToUse = result.prompt;
|
|
213
|
+
}
|
|
214
|
+
if (result.system) {
|
|
215
|
+
systemToUse = result.system;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const generateParams = {
|
|
221
|
+
images,
|
|
222
|
+
maxTokens: modelSettings.maxTokens,
|
|
223
|
+
model: modelSettings.model,
|
|
224
|
+
prompt: promptToUse,
|
|
225
|
+
provider: modelSettings.provider,
|
|
226
|
+
providerOptions: modelSettings,
|
|
227
|
+
schema: jsonSchema,
|
|
228
|
+
system: systemToUse,
|
|
229
|
+
temperature: modelSettings.temperature
|
|
230
|
+
};
|
|
231
|
+
if (pluginConfig.debugging) {
|
|
232
|
+
req.payload.logger.info(sanitizeLog(generateParams), '— AI Plugin: Final generation parameters for text/rich-text');
|
|
233
|
+
}
|
|
234
|
+
const streamResult = await req.payload.ai.streamObject({
|
|
235
|
+
...generateParams,
|
|
236
|
+
onFinish: async ({ object })=>{
|
|
237
|
+
if (targetField && targetField.custom?.ai?.afterGenerate) {
|
|
238
|
+
const afterHooks = targetField.custom.ai.afterGenerate;
|
|
239
|
+
for (const hook of afterHooks){
|
|
240
|
+
await hook({
|
|
241
|
+
doc: contextData,
|
|
242
|
+
field: targetField,
|
|
243
|
+
headers: req.headers,
|
|
244
|
+
instructions,
|
|
245
|
+
payload: req.payload,
|
|
246
|
+
req,
|
|
247
|
+
result: object
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
return streamResult;
|
|
254
|
+
} catch (error) {
|
|
255
|
+
req.payload.logger.error(error, '— AI Plugin: Error generating text content:');
|
|
256
|
+
const message = error && typeof error === 'object' && 'message' in error ? error.message : String(error);
|
|
257
|
+
return new Response(JSON.stringify({
|
|
258
|
+
error: message
|
|
259
|
+
}), {
|
|
260
|
+
headers: {
|
|
261
|
+
'Content-Type': 'application/json'
|
|
262
|
+
},
|
|
263
|
+
status: message.includes('Authentication required') || message.includes('Insufficient permissions') ? 401 : 500
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/generate.ts"],"sourcesContent":["import type { ImagePart } from 'ai'\nimport type { Field, PayloadRequest } from 'payload'\n\nimport type { PluginConfig } from '../types.js'\n\nimport { checkAccess } from '../access/checkAccess.js'\nimport { filterEditorSchemaByNodes } from '../ai/utilities/filterEditorSchemaByNodes.js'\nimport { PLUGIN_INSTRUCTIONS_TABLE, PLUGIN_NAME } from '../defaults.js'\nimport { registerEditorHelper } from '../libraries/handlebars/helpers.js'\nimport { resolveEffectiveInstructionSettings } from '../utilities/ai/resolveEffectiveInstructionSettings.js'\nimport { assignPrompt } from '../utilities/buildPromptUtils.js'\nimport { buildSmartPrompt, isGenericPrompt } from '../utilities/buildSmartPrompt.js'\nimport { fieldToJsonSchema } from '../utilities/fields/fieldToJsonSchema.js'\nimport { getFieldBySchemaPath } from '../utilities/fields/getFieldBySchemaPath.js'\nimport { extractImageData } from '../utilities/images/extractImageData.js'\nimport { type FetchableImage, fetchImages } from '../utilities/images/fetchImages.js'\nimport { resolveImageReferences } from '../utilities/images/resolveImageReferences.js'\nimport { lexicalToPromptTemplate } from '../utilities/lexical/lexicalToPromptTemplate.js'\nimport { sanitizeLog } from '../utilities/sanitizeLog.js'\n\n/**\n * Text/rich-text generation endpoint handler.\n * Uses payload.ai.streamObject for structured text generation.\n */\nexport const generateHandler = (pluginConfig: PluginConfig) => async (req: PayloadRequest) => {\n try {\n // Check authentication and authorization first\n await checkAccess(req, pluginConfig)\n\n const data = await req.json?.()\n\n const { allowedEditorNodes = [], locale = 'en', options } = data\n const { action, actionParams, instructionId } = options\n let contextData = data.doc\n\n if (!instructionId) {\n throw new Error(\n `Instruction ID is required for \"${PLUGIN_NAME}\" to work, please check your configuration, or try again`,\n )\n }\n\n // Verify user has access to the specific instruction\n const instructions = await req.payload.findByID({\n id: instructionId,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n req, // Pass req to ensure access control is applied\n })\n\n const { collections } = req.payload.config\n const collection = collections.find(\n (collection) => collection.slug === PLUGIN_INSTRUCTIONS_TABLE,\n )\n\n if (!collection) {\n throw new Error('Collection not found')\n }\n\n const { defaultLocale, locales = [] } = req.payload.config.localization || {}\n\n // If translating from default locale, we need to fetch the original content\n if (action === 'Translate' && actionParams?.translateFromDefault && contextData?.id) {\n try {\n const schemaPath = String(instructions['schema-path'])\n const parts = (schemaPath || '').split('.') || []\n const collectionName = parts[0]\n\n if (collectionName && defaultLocale) {\n const originalDoc = await req.payload.findByID({\n id: contextData.id,\n collection: collectionName as any,\n locale: defaultLocale,\n req,\n })\n if (originalDoc) {\n contextData = { ...contextData, ...originalDoc }\n }\n }\n } catch (e) {\n req.payload.logger.error(\n e,\n '— AI Plugin: Error fetching default locale document for translation',\n )\n }\n }\n\n const { custom: { [PLUGIN_NAME]: { editorConfig = {} } = {} } = {} } = collection.admin\n const { schema: editorSchema = {} } = editorConfig\n let { prompt: promptTemplate = '' } = instructions\n\n // Convert Lexical JSON to string template if needed\n if (promptTemplate && typeof promptTemplate === 'object') {\n promptTemplate = lexicalToPromptTemplate(promptTemplate)\n }\n\n // Smart fallback: if prompt is generic, build a contextual prompt from field metadata\n if (isGenericPrompt(promptTemplate)) {\n const schemaPath = String(instructions['schema-path'])\n promptTemplate = buildSmartPrompt({\n documentData: contextData,\n payload: req.payload,\n schemaPath,\n })\n\n if (pluginConfig.debugging) {\n req.payload.logger.info(\n sanitizeLog({ smartPrompt: promptTemplate }),\n `— AI Plugin: Using smart fallback prompt for ${schemaPath}`,\n )\n }\n }\n\n let allowedEditorSchema = editorSchema\n if (allowedEditorNodes.length) {\n allowedEditorSchema = filterEditorSchemaByNodes(editorSchema, allowedEditorNodes)\n // Debug: Log what nodes were received and what definitions remain\n if (pluginConfig.debugging) {\n req.payload.logger.info(\n sanitizeLog({\n receivedNodes: allowedEditorNodes,\n remainingDefinitions: Object.keys(allowedEditorSchema.definitions || {}),\n }),\n '— AI Plugin: Schema filtering debug',\n )\n }\n }\n\n const schemaPath = String(instructions['schema-path'])\n const parts = (schemaPath || '').split('.') || []\n const collectionName = parts[0]\n const fieldName = parts.length > 1 ? parts[parts.length - 1] : ''\n\n registerEditorHelper(req.payload, schemaPath)\n\n const localeData = locales.find((l) => {\n return l.code === locale\n })\n\n let localeInfo = locale\n if (\n localeData &&\n defaultLocale &&\n localeData.label &&\n typeof localeData.label === 'object' &&\n defaultLocale in localeData.label\n ) {\n localeInfo = localeData.label[defaultLocale]\n }\n\n const prompts = await assignPrompt(action, {\n type: String(instructions['field-type']),\n actionParams,\n collection: collectionName,\n context: contextData,\n field: fieldName || '',\n layout: instructions.layout,\n locale: localeInfo,\n pluginConfig,\n systemPrompt: instructions.system,\n template: String(promptTemplate),\n })\n\n if (pluginConfig.debugging) {\n req.payload.logger.info(sanitizeLog({ prompts }), `— AI Plugin: Executing text prompt on ${schemaPath}`)\n }\n\n const aiSettings = await req.payload.findGlobal({\n slug: 'ai-providers',\n })\n const { effectiveSettings: modelSettings, settingsName } = resolveEffectiveInstructionSettings({\n defaults: aiSettings?.defaults as Record<string, unknown> | undefined,\n instructions: instructions as Record<string, unknown>,\n })\n\n if (!settingsName) {\n throw new Error(`Unsupported model-id: ${instructions['model-id']}`)\n }\n\n // Build per-field JSON schema for structured generation when applicable\n let jsonSchema = allowedEditorSchema\n let targetField: Field | null | undefined\n\n try {\n const targetCollection = req.payload.config.collections.find((c) => c.slug === collectionName)\n if (targetCollection && fieldName) {\n targetField = getFieldBySchemaPath(targetCollection, schemaPath)\n const supported = [\n 'array',\n 'text',\n 'textarea',\n 'select',\n 'number',\n 'date',\n 'code',\n 'email',\n 'json',\n ]\n const t = String(targetField?.type || '')\n if (targetField && supported.includes(t)) {\n // For array fields, use count from array-settings if available\n if (t === 'array') {\n const count = (modelSettings.count as number) || 3\n // Override the field's maxRows with the requested count\n const modifiedField = {\n ...targetField,\n maxRows: count,\n minRows: count,\n } as typeof targetField\n jsonSchema = fieldToJsonSchema(modifiedField, { nameOverride: fieldName })\n } else {\n jsonSchema = fieldToJsonSchema(targetField, { nameOverride: fieldName })\n }\n }\n }\n } catch (e) {\n req.payload.logger.error(e, '— AI Plugin: Error building field JSON schema')\n }\n\n // Resolve @field:filename references from the prompt\n const { images: resolvedImages, processedPrompt } = await resolveImageReferences(\n prompts.prompt,\n contextData,\n req,\n collectionName,\n )\n\n // Extract hardcoded URLs from the processed prompt\n const hardcodedImages = extractImageData(processedPrompt)\n\n // Combine images\n const allImages = [...hardcodedImages, ...resolvedImages] as FetchableImage[]\n\n let images: ImagePart[] | undefined\n\n if (allImages.length > 0) {\n const imageParts = await fetchImages(req, allImages)\n\n if (imageParts.length > 0) {\n images = imageParts\n }\n }\n\n let promptToUse = processedPrompt\n let systemToUse = prompts.system\n\n // Execute beforeGenerate hooks\n if (targetField && (targetField as any).custom?.ai?.beforeGenerate) {\n const beforeHooks = (targetField as any).custom.ai.beforeGenerate as Array<\n (args: any) => Promise<any>\n >\n for (const hook of beforeHooks) {\n const result = await hook({\n doc: contextData,\n field: targetField,\n headers: req.headers,\n instructions,\n payload: req.payload,\n prompt: promptToUse,\n req,\n system: systemToUse,\n })\n\n if (result) {\n if (result.prompt) {promptToUse = result.prompt}\n if (result.system) {systemToUse = result.system}\n }\n }\n }\n\n const generateParams = {\n images,\n maxTokens: modelSettings.maxTokens as number | undefined,\n model: modelSettings.model as string,\n prompt: promptToUse,\n provider: modelSettings.provider as string,\n providerOptions: modelSettings,\n\n schema: jsonSchema,\n system: systemToUse,\n temperature: modelSettings.temperature as number | undefined,\n }\n\n if (pluginConfig.debugging) {\n req.payload.logger.info(\n sanitizeLog(generateParams),\n '— AI Plugin: Final generation parameters for text/rich-text',\n )\n }\n\n const streamResult = await req.payload.ai.streamObject({\n ...generateParams,\n onFinish: async ({ object }) => {\n if (targetField && (targetField as any).custom?.ai?.afterGenerate) {\n const afterHooks = (targetField as any).custom.ai.afterGenerate as Array<\n (args: any) => Promise<any>\n >\n for (const hook of afterHooks) {\n await hook({\n doc: contextData,\n field: targetField,\n headers: req.headers,\n instructions,\n payload: req.payload,\n req,\n result: object,\n })\n }\n }\n },\n })\n\n return streamResult\n } catch (error) {\n req.payload.logger.error(error, '— AI Plugin: Error generating text content:')\n const message =\n error && typeof error === 'object' && 'message' in error\n ? (error as Error).message\n : String(error)\n return new Response(JSON.stringify({ error: message }), {\n headers: { 'Content-Type': 'application/json' },\n status:\n message.includes('Authentication required') || message.includes('Insufficient permissions')\n ? 401\n : 500,\n })\n }\n}\n"],"names":["checkAccess","filterEditorSchemaByNodes","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_NAME","registerEditorHelper","resolveEffectiveInstructionSettings","assignPrompt","buildSmartPrompt","isGenericPrompt","fieldToJsonSchema","getFieldBySchemaPath","extractImageData","fetchImages","resolveImageReferences","lexicalToPromptTemplate","sanitizeLog","generateHandler","pluginConfig","req","data","json","allowedEditorNodes","locale","options","action","actionParams","instructionId","contextData","doc","Error","instructions","payload","findByID","id","collection","collections","config","find","slug","defaultLocale","locales","localization","translateFromDefault","schemaPath","String","parts","split","collectionName","originalDoc","e","logger","error","custom","editorConfig","admin","schema","editorSchema","prompt","promptTemplate","documentData","debugging","info","smartPrompt","allowedEditorSchema","length","receivedNodes","remainingDefinitions","Object","keys","definitions","fieldName","localeData","l","code","localeInfo","label","prompts","type","context","field","layout","systemPrompt","system","template","aiSettings","findGlobal","effectiveSettings","modelSettings","settingsName","defaults","jsonSchema","targetField","targetCollection","c","supported","t","includes","count","modifiedField","maxRows","minRows","nameOverride","images","resolvedImages","processedPrompt","hardcodedImages","allImages","imageParts","promptToUse","systemToUse","ai","beforeGenerate","beforeHooks","hook","result","headers","generateParams","maxTokens","model","provider","providerOptions","temperature","streamResult","streamObject","onFinish","object","afterGenerate","afterHooks","message","Response","JSON","stringify","status"],"mappings":"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"}
|