@ai-stack/payloadcms 3.76.0-beta.1 → 3.76.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/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 +8 -25
- 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 +0 -42
- package/dist/ai/providers/blocks/anthropic.js.map +1 -1
- package/dist/ai/providers/blocks/elevenlabs.js +1 -106
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
- package/dist/ai/providers/blocks/fal.js +0 -118
- package/dist/ai/providers/blocks/fal.js.map +1 -1
- package/dist/ai/providers/blocks/google.js +2 -237
- package/dist/ai/providers/blocks/google.js.map +1 -1
- package/dist/ai/providers/blocks/openai-compatible.js +0 -144
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
- package/dist/ai/providers/blocks/openai.js +0 -200
- package/dist/ai/providers/blocks/openai.js.map +1 -1
- package/dist/ai/providers/blocks/xai.js +0 -53
- 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/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 +47 -20
- package/dist/collections/AIProviders.js.map +1 -1
- package/dist/collections/Instructions.js +86 -54
- 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/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 +17 -20
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.js +10 -19
- package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.jsx +7 -17
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +4 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +3 -0
- 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 +54 -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 +3 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +3 -1
- 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/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} +7 -2
- 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 +37 -22
- package/dist/utilities/seedProperties.js.map +1 -1
- package/package.json +5 -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/{utils → utilities}/nodeToSchemaMap.js +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
|
@@ -29,59 +29,6 @@ export const xaiBlock = {
|
|
|
29
29
|
],
|
|
30
30
|
label: 'Setup'
|
|
31
31
|
},
|
|
32
|
-
// 2. Provider Options tab
|
|
33
|
-
{
|
|
34
|
-
fields: [
|
|
35
|
-
{
|
|
36
|
-
name: 'textProviderOptions',
|
|
37
|
-
type: 'group',
|
|
38
|
-
admin: {
|
|
39
|
-
description: 'Default provider options for text generation models.'
|
|
40
|
-
},
|
|
41
|
-
fields: [
|
|
42
|
-
{
|
|
43
|
-
name: 'temperature',
|
|
44
|
-
type: 'number',
|
|
45
|
-
defaultValue: 1.0,
|
|
46
|
-
label: 'Default Temperature',
|
|
47
|
-
max: 2.0,
|
|
48
|
-
min: 0.0
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: 'max_tokens',
|
|
52
|
-
type: 'number',
|
|
53
|
-
label: 'Max Tokens'
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: 'top_p',
|
|
57
|
-
type: 'number',
|
|
58
|
-
defaultValue: 1.0,
|
|
59
|
-
label: 'Top P',
|
|
60
|
-
max: 1.0,
|
|
61
|
-
min: 0.0
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
name: 'frequency_penalty',
|
|
65
|
-
type: 'number',
|
|
66
|
-
defaultValue: 0,
|
|
67
|
-
label: 'Frequency Penalty',
|
|
68
|
-
max: 2,
|
|
69
|
-
min: -2
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
name: 'presence_penalty',
|
|
73
|
-
type: 'number',
|
|
74
|
-
defaultValue: 0,
|
|
75
|
-
label: 'Presence Penalty',
|
|
76
|
-
max: 2,
|
|
77
|
-
min: -2
|
|
78
|
-
}
|
|
79
|
-
],
|
|
80
|
-
label: 'Text Provider Options'
|
|
81
|
-
}
|
|
82
|
-
],
|
|
83
|
-
label: 'Provider Options'
|
|
84
|
-
},
|
|
85
32
|
// 3. Models tab
|
|
86
33
|
{
|
|
87
34
|
fields: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/ai/providers/blocks/xai.ts"],"sourcesContent":["import type { Block } from 'payload'\n\nimport { XAIIcon } from '../icons.js'\n\nexport const xaiBlock: Block = {\n slug: 'xai',\n fields: [\n {\n type: 'tabs',\n tabs: [\n // 1. Setup tab\n {\n fields: [\n {\n name: 'enabled',\n type: 'checkbox',\n defaultValue: true,\n label: 'Enabled',\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#EncryptedTextField',\n },\n description: 'Your xAI API key. Will be encrypted in the database.',\n },\n label: 'API Key',\n required: true,\n },\n ],\n label: 'Setup',\n },\n\n //
|
|
1
|
+
{"version":3,"sources":["../../../../src/ai/providers/blocks/xai.ts"],"sourcesContent":["import type { Block } from 'payload'\n\nimport { XAIIcon } from '../icons.js'\n\nexport const xaiBlock: Block = {\n slug: 'xai',\n fields: [\n {\n type: 'tabs',\n tabs: [\n // 1. Setup tab\n {\n fields: [\n {\n name: 'enabled',\n type: 'checkbox',\n defaultValue: true,\n label: 'Enabled',\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#EncryptedTextField',\n },\n description: 'Your xAI API key. Will be encrypted in the database.',\n },\n label: 'API Key',\n required: true,\n },\n ],\n label: 'Setup',\n },\n\n // 3. Models tab\n {\n fields: [\n {\n name: 'models',\n type: 'array',\n admin: {\n components: {\n RowLabel: '@ai-stack/payloadcms/client#ModelRowLabel',\n },\n initCollapsed: true,\n },\n defaultValue: [\n { id: 'grok-4', name: 'Grok 4', enabled: true, responseModalities: ['TEXT'], useCase: 'text' },\n { id: 'grok-3', name: 'Grok 3', enabled: true, responseModalities: ['TEXT'], useCase: 'text' },\n { id: 'grok-3-fast', name: 'Grok 3 Fast', enabled: true, responseModalities: ['TEXT'], useCase: 'text' },\n { id: 'grok-2-1212', name: 'Grok 2', enabled: true, responseModalities: ['TEXT'], useCase: 'text' },\n { id: 'grok-2-vision-1212', name: 'Grok 2 Vision', enabled: true, responseModalities: ['TEXT'], useCase: 'image' },\n { id: 'grok-vision-beta', name: 'Grok Vision Beta', enabled: true, responseModalities: ['TEXT'], useCase: 'image' },\n ],\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'id',\n type: 'text',\n admin: { width: '33%' },\n label: 'Model ID',\n required: true,\n },\n {\n name: 'name',\n type: 'text',\n admin: { width: '33%' },\n label: 'Display Name',\n required: true,\n },\n {\n name: 'useCase',\n type: 'select',\n admin: { width: '33%' },\n dbName: 'xai-model-useCase',\n label: 'Use Case',\n options: [\n { label: 'Text Generation', value: 'text' },\n { label: 'Image Generation', value: 'image' },\n ],\n required: true,\n },\n ],\n },\n {\n name: 'responseModalities',\n type: 'select',\n admin: {\n description: 'Output capabilities of this model',\n width: '50%',\n },\n dbName: 'xai-model-modalities',\n hasMany: true,\n label: 'Response Modalities',\n options: [\n { label: 'Text', value: 'TEXT' },\n { label: 'Image', value: 'IMAGE' },\n { label: 'Audio', value: 'AUDIO' },\n ],\n },\n {\n name: 'enabled',\n type: 'checkbox',\n admin: {\n width: '50%',\n },\n defaultValue: true,\n label: 'Enabled',\n },\n ],\n label: 'Available Models',\n },\n ],\n label: 'Models',\n },\n ],\n },\n ],\n imageURL: XAIIcon,\n labels: {\n plural: 'xAI Providers',\n singular: 'xAI Grok',\n },\n}\n"],"names":["XAIIcon","xaiBlock","slug","fields","type","tabs","name","defaultValue","label","admin","components","Field","description","required","RowLabel","initCollapsed","id","enabled","responseModalities","useCase","width","dbName","options","value","hasMany","imageURL","labels","plural","singular"],"mappings":"AAEA,SAASA,OAAO,QAAQ,cAAa;AAErC,OAAO,MAAMC,WAAkB;IAC7BC,MAAM;IACNC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;gBACJ,eAAe;gBACf;oBACEF,QAAQ;wBACN;4BACEG,MAAM;4BACNF,MAAM;4BACNG,cAAc;4BACdC,OAAO;wBACT;wBACA;4BACEF,MAAM;4BACNF,MAAM;4BACNK,OAAO;gCACLC,YAAY;oCACVC,OAAO;gCACT;gCACAC,aAAa;4BACf;4BACAJ,OAAO;4BACPK,UAAU;wBACZ;qBACD;oBACDL,OAAO;gBACT;gBAEA,gBAAgB;gBAChB;oBACEL,QAAQ;wBACN;4BACEG,MAAM;4BACNF,MAAM;4BACNK,OAAO;gCACLC,YAAY;oCACVI,UAAU;gCACZ;gCACAC,eAAe;4BACjB;4BACAR,cAAc;gCACZ;oCAAES,IAAI;oCAAUV,MAAM;oCAAUW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAO;gCAC7F;oCAAEH,IAAI;oCAAUV,MAAM;oCAAUW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAO;gCAC7F;oCAAEH,IAAI;oCAAeV,MAAM;oCAAeW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAO;gCACvG;oCAAEH,IAAI;oCAAeV,MAAM;oCAAUW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAO;gCAClG;oCAAEH,IAAI;oCAAsBV,MAAM;oCAAiBW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAQ;gCACjH;oCAAEH,IAAI;oCAAoBV,MAAM;oCAAoBW,SAAS;oCAAMC,oBAAoB;wCAAC;qCAAO;oCAAEC,SAAS;gCAAQ;6BACnH;4BACDhB,QAAQ;gCACN;oCACEC,MAAM;oCACND,QAAQ;wCACN;4CACEG,MAAM;4CACNF,MAAM;4CACNK,OAAO;gDAAEW,OAAO;4CAAM;4CACtBZ,OAAO;4CACPK,UAAU;wCACZ;wCACA;4CACEP,MAAM;4CACNF,MAAM;4CACNK,OAAO;gDAAEW,OAAO;4CAAM;4CACtBZ,OAAO;4CACPK,UAAU;wCACZ;wCACA;4CACEP,MAAM;4CACNF,MAAM;4CACNK,OAAO;gDAAEW,OAAO;4CAAM;4CACtBC,QAAQ;4CACRb,OAAO;4CACPc,SAAS;gDACP;oDAAEd,OAAO;oDAAmBe,OAAO;gDAAO;gDAC1C;oDAAEf,OAAO;oDAAoBe,OAAO;gDAAQ;6CAC7C;4CACDV,UAAU;wCACZ;qCACD;gCACH;gCACA;oCACEP,MAAM;oCACNF,MAAM;oCACNK,OAAO;wCACLG,aAAa;wCACbQ,OAAO;oCACT;oCACAC,QAAQ;oCACRG,SAAS;oCACThB,OAAO;oCACPc,SAAS;wCACP;4CAAEd,OAAO;4CAAQe,OAAO;wCAAO;wCAC/B;4CAAEf,OAAO;4CAASe,OAAO;wCAAQ;wCACjC;4CAAEf,OAAO;4CAASe,OAAO;wCAAQ;qCAClC;gCACH;gCACA;oCACEjB,MAAM;oCACNF,MAAM;oCACNK,OAAO;wCACLW,OAAO;oCACT;oCACAb,cAAc;oCACdC,OAAO;gCACT;6BACD;4BACDA,OAAO;wBACT;qBACD;oBACDA,OAAO;gBACT;aACD;QACH;KACD;IACDiB,UAAUzB;IACV0B,QAAQ;QACNC,QAAQ;QACRC,UAAU;IACZ;AACF,EAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './registry.js';
|
|
2
|
-
export type { ProviderId } from './
|
|
2
|
+
export type { ProviderId } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ai/providers/index.ts"],"sourcesContent":["// Re-export everything from registry\nexport * from './registry.js'\n\n// Export types\nexport type { ProviderId } from './
|
|
1
|
+
{"version":3,"sources":["../../../src/ai/providers/index.ts"],"sourcesContent":["// Re-export everything from registry\nexport * from './registry.js'\n\n// Export types\nexport type { ProviderId } from './types.js'\n"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,cAAc,gBAAe"}
|
|
@@ -1,40 +1,36 @@
|
|
|
1
1
|
import type { LanguageModel } from 'ai';
|
|
2
2
|
import type { Payload } from 'payload';
|
|
3
|
-
export type { ProviderId } from './types.js';
|
|
4
3
|
import type { ProviderRegistry } from './types.js';
|
|
4
|
+
export declare function toAISDKProviderOptions({ defaultsForUseCase, providerId, settingsOverride, }: {
|
|
5
|
+
defaultsForUseCase?: {
|
|
6
|
+
provider?: string;
|
|
7
|
+
};
|
|
8
|
+
providerId?: string;
|
|
9
|
+
settingsOverride?: Record<string, unknown>;
|
|
10
|
+
}): Record<string, Record<string, any>> | undefined;
|
|
11
|
+
export declare function invalidateProviderCache(): void;
|
|
5
12
|
/**
|
|
6
|
-
* Load provider registry from AI Settings (
|
|
13
|
+
* Load provider registry from AI Settings (cached with TTL).
|
|
7
14
|
*/
|
|
8
15
|
export declare function getProviderRegistry(payload: Payload): Promise<ProviderRegistry>;
|
|
9
16
|
/**
|
|
10
|
-
* Get global defaults from AI Settings
|
|
17
|
+
* Get global defaults from AI Settings (cached with TTL).
|
|
11
18
|
*/
|
|
12
19
|
export declare function getGlobalDefaults(payload: Payload): Promise<{
|
|
13
|
-
image?:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
text?: {
|
|
19
|
-
model: string;
|
|
20
|
-
options?: Record<string, any>;
|
|
21
|
-
provider: string;
|
|
22
|
-
};
|
|
23
|
-
tts?: {
|
|
24
|
-
model: string;
|
|
25
|
-
options?: Record<string, any>;
|
|
26
|
-
provider: string;
|
|
27
|
-
voice?: string;
|
|
28
|
-
};
|
|
29
|
-
video?: {
|
|
30
|
-
model: string;
|
|
31
|
-
options?: Record<string, any>;
|
|
32
|
-
provider: string;
|
|
33
|
-
};
|
|
20
|
+
image?: import("./types.js").UseCaseDefaults;
|
|
21
|
+
text?: import("./types.js").UseCaseDefaults;
|
|
22
|
+
tts?: import("./types.js").UseCaseDefaults;
|
|
23
|
+
video?: import("./types.js").UseCaseDefaults;
|
|
34
24
|
}>;
|
|
35
25
|
/**
|
|
36
|
-
* Get language model (
|
|
26
|
+
* Get language model (cached registry + single defaults call).
|
|
27
|
+
*/
|
|
28
|
+
export declare function getLanguageModel(payload: Payload, providerId?: string, modelId?: string, settingsOverride?: Record<string, unknown>): Promise<LanguageModel>;
|
|
29
|
+
/**
|
|
30
|
+
* Get image model (cached registry + single defaults call).
|
|
31
|
+
*/
|
|
32
|
+
export declare function getImageModel(payload: Payload, providerId?: string, modelId?: string, isMultimodalText?: boolean, settingsOverride?: Record<string, unknown>): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* Get TTS model (cached registry + single defaults call).
|
|
37
35
|
*/
|
|
38
|
-
export declare function
|
|
39
|
-
export declare function getImageModel(payload: Payload, providerId?: string, modelId?: string, options?: Record<string, any>, isMultimodalText?: boolean): Promise<any>;
|
|
40
|
-
export declare function getTTSModel(payload: Payload, providerId?: string, modelId?: string, options?: Record<string, any>): Promise<any>;
|
|
36
|
+
export declare function getTTSModel(payload: Payload, providerId?: string, modelId?: string, settingsOverride?: Record<string, unknown>): Promise<any>;
|
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
import * as process from 'node:process';
|
|
2
|
-
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function resolveProviderOptions(settingsForUseCase) {
|
|
6
|
+
if (!settingsForUseCase) {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
const provider = settingsForUseCase.provider;
|
|
10
|
+
if (provider) {
|
|
11
|
+
const allOptions = settingsForUseCase.providerOptions;
|
|
12
|
+
return allOptions?.[provider] || {};
|
|
13
|
+
}
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
function deepMergeOptions(base, override) {
|
|
17
|
+
const merged = {
|
|
18
|
+
...base
|
|
19
|
+
};
|
|
20
|
+
for (const [key, value] of Object.entries(override)){
|
|
21
|
+
const current = merged[key];
|
|
22
|
+
if (current && value && typeof current === 'object' && typeof value === 'object' && !Array.isArray(current) && !Array.isArray(value)) {
|
|
23
|
+
merged[key] = deepMergeOptions(current, value);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
merged[key] = value;
|
|
27
|
+
}
|
|
28
|
+
return merged;
|
|
29
|
+
}
|
|
30
|
+
function resolveEffectiveProviderOptions({ defaultsForUseCase, providerId, settingsOverride }) {
|
|
31
|
+
const preNormalizedOptions = providerId && isRecord(settingsOverride) && isRecord(settingsOverride[providerId]) ? settingsOverride[providerId] : {};
|
|
32
|
+
const globalDefaultOptions = defaultsForUseCase?.provider === providerId ? resolveProviderOptions(defaultsForUseCase) : {};
|
|
33
|
+
const overrideOptions = Object.keys(preNormalizedOptions).length > 0 ? preNormalizedOptions : settingsOverride?.provider === providerId ? resolveProviderOptions(settingsOverride) : {};
|
|
34
|
+
return deepMergeOptions(globalDefaultOptions, overrideOptions);
|
|
35
|
+
}
|
|
36
|
+
export function toAISDKProviderOptions({ defaultsForUseCase, providerId, settingsOverride }) {
|
|
37
|
+
if (!providerId) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const resolved = resolveEffectiveProviderOptions({
|
|
41
|
+
defaultsForUseCase,
|
|
42
|
+
providerId,
|
|
43
|
+
settingsOverride
|
|
44
|
+
});
|
|
45
|
+
if (Object.keys(resolved).length === 0) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
[providerId]: resolved
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// ─── Cache layer ────────────────────────────────────────────────
|
|
53
|
+
// Module-level caches with TTL to avoid redundant DB queries.
|
|
54
|
+
// A single text-generation request previously triggered 3 findGlobal
|
|
55
|
+
// calls; with this cache the DB is hit at most once per TTL window.
|
|
56
|
+
const CACHE_TTL = 60_000 // 60 seconds
|
|
57
|
+
;
|
|
58
|
+
let registryCache = null;
|
|
59
|
+
let defaultsCache = null;
|
|
60
|
+
// Allow external invalidation (e.g. after saving AISettings)
|
|
61
|
+
export function invalidateProviderCache() {
|
|
62
|
+
registryCache = null;
|
|
63
|
+
defaultsCache = null;
|
|
64
|
+
}
|
|
65
|
+
// ─── Provider factory functions ─────────────────────────────────
|
|
3
66
|
const providerFactories = {
|
|
4
67
|
anthropic: async (block)=>{
|
|
5
68
|
const { createAnthropic } = await import('@ai-sdk/anthropic');
|
|
@@ -15,7 +78,6 @@ const providerFactories = {
|
|
|
15
78
|
},
|
|
16
79
|
fal: async (block)=>{
|
|
17
80
|
const { fal } = await import('@ai-sdk/fal');
|
|
18
|
-
// Fal uses global instance, configure with apiKey
|
|
19
81
|
process.env.FAL_KEY = block.apiKey;
|
|
20
82
|
if (block.webhookSecret) {
|
|
21
83
|
process.env.FAL_WEBHOOK_SECRET = block.webhookSecret;
|
|
@@ -37,7 +99,6 @@ const providerFactories = {
|
|
|
37
99
|
});
|
|
38
100
|
},
|
|
39
101
|
'openai-compatible': async (block)=>{
|
|
40
|
-
console.log('OpenAI compatible, ', block);
|
|
41
102
|
const { createOpenAICompatible } = await import('@ai-sdk/openai-compatible');
|
|
42
103
|
return createOpenAICompatible({
|
|
43
104
|
name: block.providerName,
|
|
@@ -52,14 +113,54 @@ const providerFactories = {
|
|
|
52
113
|
});
|
|
53
114
|
}
|
|
54
115
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
*/ function isProviderBlock(block, blockType) {
|
|
116
|
+
// ─── Helpers ────────────────────────────────────────────────────
|
|
117
|
+
function isProviderBlock(block, blockType) {
|
|
58
118
|
return block.blockType === blockType;
|
|
59
119
|
}
|
|
120
|
+
function getFactoryForBlock(providerBlock) {
|
|
121
|
+
if (isProviderBlock(providerBlock, 'openai')) {
|
|
122
|
+
return ()=>providerFactories.openai(providerBlock);
|
|
123
|
+
}
|
|
124
|
+
if (isProviderBlock(providerBlock, 'anthropic')) {
|
|
125
|
+
return ()=>providerFactories.anthropic(providerBlock);
|
|
126
|
+
}
|
|
127
|
+
if (isProviderBlock(providerBlock, 'google')) {
|
|
128
|
+
return ()=>providerFactories.google(providerBlock);
|
|
129
|
+
}
|
|
130
|
+
if (isProviderBlock(providerBlock, 'xai')) {
|
|
131
|
+
return ()=>providerFactories.xai(providerBlock);
|
|
132
|
+
}
|
|
133
|
+
if (isProviderBlock(providerBlock, 'fal')) {
|
|
134
|
+
return ()=>providerFactories.fal(providerBlock);
|
|
135
|
+
}
|
|
136
|
+
if (isProviderBlock(providerBlock, 'elevenlabs')) {
|
|
137
|
+
return ()=>providerFactories.elevenlabs(providerBlock);
|
|
138
|
+
}
|
|
139
|
+
if (isProviderBlock(providerBlock, 'openai-compatible')) {
|
|
140
|
+
return ()=>providerFactories['openai-compatible'](providerBlock);
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
60
144
|
/**
|
|
61
|
-
*
|
|
145
|
+
* Resolve the provider SDK instance, caching after first call.
|
|
146
|
+
*/ async function resolveProviderInstance(provider) {
|
|
147
|
+
if (provider.instance) {
|
|
148
|
+
return provider.instance;
|
|
149
|
+
}
|
|
150
|
+
if (!provider.factory) {
|
|
151
|
+
throw new Error(`Provider ${provider.id} has no factory or instance`);
|
|
152
|
+
}
|
|
153
|
+
const instance = await provider.factory();
|
|
154
|
+
provider.instance = instance;
|
|
155
|
+
return instance;
|
|
156
|
+
}
|
|
157
|
+
// ─── Public API ─────────────────────────────────────────────────
|
|
158
|
+
/**
|
|
159
|
+
* Load provider registry from AI Settings (cached with TTL).
|
|
62
160
|
*/ export async function getProviderRegistry(payload) {
|
|
161
|
+
if (registryCache && Date.now() - registryCache.timestamp < CACHE_TTL) {
|
|
162
|
+
return registryCache.data;
|
|
163
|
+
}
|
|
63
164
|
const settings = await payload.findGlobal({
|
|
64
165
|
slug: 'ai-providers',
|
|
65
166
|
context: {
|
|
@@ -67,41 +168,17 @@ const providerFactories = {
|
|
|
67
168
|
}
|
|
68
169
|
});
|
|
69
170
|
const registry = {};
|
|
70
|
-
// console.log('settings - >', JSON.stringify(settings, null, 2))
|
|
71
171
|
for (const providerBlock of settings.providers || []){
|
|
72
172
|
if (!providerBlock.enabled) {
|
|
73
173
|
continue;
|
|
74
174
|
}
|
|
75
175
|
const { blockType } = providerBlock;
|
|
76
|
-
|
|
77
|
-
let factory;
|
|
78
|
-
if (isProviderBlock(providerBlock, 'openai')) {
|
|
79
|
-
factory = ()=>providerFactories.openai(providerBlock);
|
|
80
|
-
} else if (isProviderBlock(providerBlock, 'anthropic')) {
|
|
81
|
-
factory = ()=>providerFactories.anthropic(providerBlock);
|
|
82
|
-
} else if (isProviderBlock(providerBlock, 'google')) {
|
|
83
|
-
factory = ()=>providerFactories.google(providerBlock);
|
|
84
|
-
} else if (isProviderBlock(providerBlock, 'xai')) {
|
|
85
|
-
factory = ()=>providerFactories.xai(providerBlock);
|
|
86
|
-
} else if (isProviderBlock(providerBlock, 'fal')) {
|
|
87
|
-
factory = ()=>providerFactories.fal(providerBlock);
|
|
88
|
-
} else if (isProviderBlock(providerBlock, 'elevenlabs')) {
|
|
89
|
-
factory = ()=>providerFactories.elevenlabs(providerBlock);
|
|
90
|
-
} else if (isProviderBlock(providerBlock, 'openai-compatible')) {
|
|
91
|
-
factory = ()=>providerFactories['openai-compatible'](providerBlock);
|
|
92
|
-
}
|
|
176
|
+
const factory = getFactoryForBlock(providerBlock);
|
|
93
177
|
if (!factory) {
|
|
94
|
-
|
|
178
|
+
payload.logger.warn(`— AI Plugin: No factory for provider: ${blockType}`);
|
|
95
179
|
continue;
|
|
96
180
|
}
|
|
97
|
-
// Filter enabled models only
|
|
98
181
|
const enabledModels = providerBlock.models.filter((m)=>m.enabled);
|
|
99
|
-
// Extract provider options
|
|
100
|
-
const options = {
|
|
101
|
-
image: 'imageProviderOptions' in providerBlock ? providerBlock.imageProviderOptions : undefined,
|
|
102
|
-
text: 'textProviderOptions' in providerBlock ? providerBlock.textProviderOptions : undefined,
|
|
103
|
-
tts: 'ttsProviderOptions' in providerBlock ? providerBlock.ttsProviderOptions : undefined
|
|
104
|
-
};
|
|
105
182
|
registry[blockType] = {
|
|
106
183
|
id: blockType,
|
|
107
184
|
name: 'providerName' in providerBlock ? providerBlock.providerName : blockType,
|
|
@@ -109,44 +186,49 @@ const providerFactories = {
|
|
|
109
186
|
enabled: true,
|
|
110
187
|
factory,
|
|
111
188
|
instance: undefined,
|
|
112
|
-
models: enabledModels
|
|
113
|
-
options
|
|
189
|
+
models: enabledModels
|
|
114
190
|
};
|
|
115
191
|
}
|
|
192
|
+
// Also cache defaults from the same settings fetch to save a second query
|
|
193
|
+
defaultsCache = {
|
|
194
|
+
data: settings.defaults,
|
|
195
|
+
timestamp: Date.now()
|
|
196
|
+
};
|
|
197
|
+
registryCache = {
|
|
198
|
+
data: registry,
|
|
199
|
+
timestamp: Date.now()
|
|
200
|
+
};
|
|
116
201
|
return registry;
|
|
117
202
|
}
|
|
118
203
|
/**
|
|
119
|
-
* Get global defaults from AI Settings
|
|
204
|
+
* Get global defaults from AI Settings (cached with TTL).
|
|
120
205
|
*/ export async function getGlobalDefaults(payload) {
|
|
206
|
+
if (defaultsCache && Date.now() - defaultsCache.timestamp < CACHE_TTL) {
|
|
207
|
+
return defaultsCache.data;
|
|
208
|
+
}
|
|
121
209
|
const settings = await payload.findGlobal({
|
|
122
210
|
slug: 'ai-providers'
|
|
123
211
|
});
|
|
212
|
+
defaultsCache = {
|
|
213
|
+
data: settings.defaults,
|
|
214
|
+
timestamp: Date.now()
|
|
215
|
+
};
|
|
124
216
|
return settings.defaults;
|
|
125
217
|
}
|
|
126
218
|
/**
|
|
127
|
-
* Get language model (
|
|
128
|
-
*/ export async function getLanguageModel(payload, providerId, modelId,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
if (!modelId) {
|
|
135
|
-
modelId = defaults?.text?.model;
|
|
136
|
-
}
|
|
219
|
+
* Get language model (cached registry + single defaults call).
|
|
220
|
+
*/ export async function getLanguageModel(payload, providerId, modelId, settingsOverride) {
|
|
221
|
+
const registry = await getProviderRegistry(payload);
|
|
222
|
+
const defaults = await getGlobalDefaults(payload);
|
|
223
|
+
if (!providerId) {
|
|
224
|
+
providerId = defaults?.text?.provider;
|
|
137
225
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (providerId) {
|
|
141
|
-
const defaults = await getGlobalDefaults(payload);
|
|
142
|
-
if (defaults?.text?.provider === providerId) {
|
|
143
|
-
globalDefaultOptions = defaults?.text?.options || {};
|
|
144
|
-
}
|
|
226
|
+
if (!modelId) {
|
|
227
|
+
modelId = defaults?.text?.model;
|
|
145
228
|
}
|
|
146
229
|
if (!providerId || !modelId) {
|
|
147
230
|
throw new Error('Provider and model must be specified or configured in defaults');
|
|
148
231
|
}
|
|
149
|
-
const registry = await getProviderRegistry(payload);
|
|
150
232
|
const provider = registry[providerId];
|
|
151
233
|
if (!provider) {
|
|
152
234
|
throw new Error(`Provider ${providerId} not found in registry`);
|
|
@@ -154,113 +236,77 @@ const providerFactories = {
|
|
|
154
236
|
if (!provider.enabled) {
|
|
155
237
|
throw new Error(`Provider ${providerId} is not enabled`);
|
|
156
238
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
throw new Error(`Provider ${providerId} has no factory or instance`);
|
|
165
|
-
}
|
|
166
|
-
// Merge default settings with override options
|
|
167
|
-
const finalOptions = {
|
|
168
|
-
...provider.options?.text || {},
|
|
169
|
-
...globalDefaultOptions,
|
|
170
|
-
...options || {}
|
|
171
|
-
};
|
|
172
|
-
return providerInstance(modelId, finalOptions);
|
|
239
|
+
const options = resolveEffectiveProviderOptions({
|
|
240
|
+
defaultsForUseCase: defaults?.text,
|
|
241
|
+
providerId,
|
|
242
|
+
settingsOverride
|
|
243
|
+
});
|
|
244
|
+
const providerInstance = await resolveProviderInstance(provider);
|
|
245
|
+
return providerInstance(modelId, options);
|
|
173
246
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
modelId = defaults?.image?.model;
|
|
182
|
-
}
|
|
247
|
+
/**
|
|
248
|
+
* Get image model (cached registry + single defaults call).
|
|
249
|
+
*/ export async function getImageModel(payload, providerId, modelId, isMultimodalText, settingsOverride) {
|
|
250
|
+
const registry = await getProviderRegistry(payload);
|
|
251
|
+
const defaults = await getGlobalDefaults(payload);
|
|
252
|
+
if (!providerId) {
|
|
253
|
+
providerId = defaults?.image?.provider;
|
|
183
254
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (providerId) {
|
|
187
|
-
const defaults = await getGlobalDefaults(payload);
|
|
188
|
-
if (defaults?.image?.provider === providerId) {
|
|
189
|
-
globalDefaultOptions = defaults?.image?.options || {};
|
|
190
|
-
}
|
|
255
|
+
if (!modelId) {
|
|
256
|
+
modelId = defaults?.image?.model;
|
|
191
257
|
}
|
|
192
258
|
if (!providerId || !modelId) {
|
|
193
259
|
throw new Error('Provider and model must be specified or configured in defaults');
|
|
194
260
|
}
|
|
195
|
-
const registry = await getProviderRegistry(payload);
|
|
196
261
|
const provider = registry[providerId];
|
|
197
262
|
if (!provider) {
|
|
198
263
|
throw new Error(`Provider ${providerId} not found`);
|
|
199
264
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
265
|
+
const options = resolveEffectiveProviderOptions({
|
|
266
|
+
defaultsForUseCase: defaults?.image,
|
|
267
|
+
providerId,
|
|
268
|
+
settingsOverride
|
|
269
|
+
});
|
|
270
|
+
const instance = await resolveProviderInstance(provider);
|
|
271
|
+
// Type-safe check for image support
|
|
272
|
+
if (!isMultimodalText && typeof instance === 'function' && 'image' in instance && typeof instance.image === 'function') {
|
|
273
|
+
return instance.image(modelId, options);
|
|
208
274
|
}
|
|
209
|
-
if
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (!isMultimodalText && typeof instance === 'function' && 'image' in instance && typeof instance.image === 'function') {
|
|
213
|
-
return instance.image(modelId, finalOptions);
|
|
214
|
-
}
|
|
215
|
-
// Also check if instance is an object with image method
|
|
216
|
-
if (typeof instance === 'object' && instance !== null && 'image' in instance && !isMultimodalText) {
|
|
217
|
-
return instance.image?.(modelId, finalOptions);
|
|
218
|
-
}
|
|
219
|
-
// Fallback for providers that might return the model directly or use the default factory
|
|
220
|
-
return typeof instance === 'function' ? instance(modelId, finalOptions) : instance;
|
|
275
|
+
// Also check if instance is an object with image method
|
|
276
|
+
if (typeof instance === 'object' && instance !== null && 'image' in instance && !isMultimodalText) {
|
|
277
|
+
return instance.image?.(modelId, options);
|
|
221
278
|
}
|
|
222
|
-
|
|
279
|
+
// Fallback for providers that might return the model directly
|
|
280
|
+
return typeof instance === 'function' ? instance(modelId, options) : instance;
|
|
223
281
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
modelId = defaults?.tts?.model;
|
|
232
|
-
}
|
|
282
|
+
/**
|
|
283
|
+
* Get TTS model (cached registry + single defaults call).
|
|
284
|
+
*/ export async function getTTSModel(payload, providerId, modelId, settingsOverride) {
|
|
285
|
+
const registry = await getProviderRegistry(payload);
|
|
286
|
+
const defaults = await getGlobalDefaults(payload);
|
|
287
|
+
if (!providerId) {
|
|
288
|
+
providerId = defaults?.tts?.provider;
|
|
233
289
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (providerId) {
|
|
237
|
-
const defaults = await getGlobalDefaults(payload);
|
|
238
|
-
if (defaults?.tts?.provider === providerId) {
|
|
239
|
-
globalDefaultOptions = defaults?.tts?.options || {};
|
|
240
|
-
}
|
|
290
|
+
if (!modelId) {
|
|
291
|
+
modelId = defaults?.tts?.model;
|
|
241
292
|
}
|
|
242
293
|
if (!providerId || !modelId) {
|
|
243
294
|
throw new Error('Provider and model must be specified or configured in defaults');
|
|
244
295
|
}
|
|
245
|
-
const registry = await getProviderRegistry(payload);
|
|
246
296
|
const provider = registry[providerId];
|
|
247
297
|
if (!provider) {
|
|
248
298
|
throw new Error(`Provider ${providerId} not found`);
|
|
249
299
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
|
|
258
|
-
if (instance?.speech) {
|
|
259
|
-
return instance.speech(modelId, finalOptions);
|
|
260
|
-
}
|
|
261
|
-
return typeof instance === 'function' ? instance(modelId, finalOptions) : instance;
|
|
300
|
+
const options = resolveEffectiveProviderOptions({
|
|
301
|
+
defaultsForUseCase: defaults?.tts,
|
|
302
|
+
providerId,
|
|
303
|
+
settingsOverride
|
|
304
|
+
});
|
|
305
|
+
const instance = await resolveProviderInstance(provider);
|
|
306
|
+
if (instance?.speech) {
|
|
307
|
+
return instance.speech(modelId, options);
|
|
262
308
|
}
|
|
263
|
-
|
|
309
|
+
return typeof instance === 'function' ? instance(modelId, options) : instance;
|
|
264
310
|
}
|
|
265
311
|
|
|
266
312
|
//# sourceMappingURL=registry.js.map
|