@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.
Files changed (313) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +218 -229
  3. package/dist/access/checkAccess.d.ts +4 -0
  4. package/dist/access/checkAccess.js +20 -0
  5. package/dist/access/checkAccess.js.map +1 -0
  6. package/dist/ai/core/generateObject.d.ts +7 -0
  7. package/dist/ai/core/generateObject.js +35 -0
  8. package/dist/ai/core/generateObject.js.map +1 -0
  9. package/dist/ai/core/generateText.d.ts +7 -0
  10. package/dist/ai/core/generateText.js +31 -0
  11. package/dist/ai/core/generateText.js.map +1 -0
  12. package/dist/ai/core/index.d.ts +11 -0
  13. package/dist/ai/core/index.js +10 -0
  14. package/dist/ai/core/index.js.map +1 -0
  15. package/dist/ai/core/media/generateMedia.d.ts +7 -0
  16. package/dist/ai/core/media/generateMedia.js +50 -0
  17. package/dist/ai/core/media/generateMedia.js.map +1 -0
  18. package/dist/ai/core/media/image/generateImage.d.ts +6 -0
  19. package/dist/ai/core/media/image/generateImage.js +41 -0
  20. package/dist/ai/core/media/image/generateImage.js.map +1 -0
  21. package/dist/ai/core/media/image/handlers/multimodal.d.ts +7 -0
  22. package/dist/ai/core/media/image/handlers/multimodal.js +100 -0
  23. package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -0
  24. package/dist/ai/core/media/image/handlers/standard.d.ts +7 -0
  25. package/dist/ai/core/media/image/handlers/standard.js +28 -0
  26. package/dist/ai/core/media/image/handlers/standard.js.map +1 -0
  27. package/dist/ai/core/media/image/index.d.ts +2 -0
  28. package/dist/ai/core/media/image/index.js +3 -0
  29. package/dist/ai/core/media/image/index.js.map +1 -0
  30. package/dist/ai/core/media/index.d.ts +2 -0
  31. package/dist/ai/core/media/index.js +3 -0
  32. package/dist/ai/core/media/index.js.map +1 -0
  33. package/dist/ai/core/media/speech/generateSpeech.d.ts +5 -0
  34. package/dist/ai/core/media/speech/generateSpeech.js +55 -0
  35. package/dist/ai/core/media/speech/generateSpeech.js.map +1 -0
  36. package/dist/ai/core/media/speech/index.d.ts +2 -0
  37. package/dist/ai/core/media/speech/index.js +3 -0
  38. package/dist/ai/core/media/speech/index.js.map +1 -0
  39. package/dist/ai/core/media/types.d.ts +74 -0
  40. package/dist/ai/core/media/types.js +5 -0
  41. package/dist/ai/core/media/types.js.map +1 -0
  42. package/dist/ai/core/media/utils.d.ts +11 -0
  43. package/dist/ai/core/media/utils.js +34 -0
  44. package/dist/ai/core/media/utils.js.map +1 -0
  45. package/dist/ai/core/media/video/generateVideo.d.ts +6 -0
  46. package/dist/ai/core/media/video/generateVideo.js +32 -0
  47. package/dist/ai/core/media/video/generateVideo.js.map +1 -0
  48. package/dist/ai/core/media/video/index.d.ts +2 -0
  49. package/dist/ai/core/media/video/index.js +3 -0
  50. package/dist/ai/core/media/video/index.js.map +1 -0
  51. package/dist/ai/core/streamObject.d.ts +7 -0
  52. package/dist/ai/core/streamObject.js +54 -0
  53. package/dist/ai/core/streamObject.js.map +1 -0
  54. package/dist/ai/core/streamText.d.ts +7 -0
  55. package/dist/ai/core/streamText.js +30 -0
  56. package/dist/ai/core/streamText.js.map +1 -0
  57. package/dist/ai/core/types.d.ts +85 -0
  58. package/dist/ai/core/types.js +5 -0
  59. package/dist/ai/core/types.js.map +1 -0
  60. package/dist/ai/index.d.ts +11 -0
  61. package/dist/ai/index.js +25 -0
  62. package/dist/ai/index.js.map +1 -0
  63. package/dist/ai/providers/blocks/anthropic.d.ts +2 -0
  64. package/dist/ai/providers/blocks/anthropic.js +223 -0
  65. package/dist/ai/providers/blocks/anthropic.js.map +1 -0
  66. package/dist/ai/providers/blocks/elevenlabs.d.ts +2 -0
  67. package/dist/ai/providers/blocks/elevenlabs.js +449 -0
  68. package/dist/ai/providers/blocks/elevenlabs.js.map +1 -0
  69. package/dist/ai/providers/blocks/fal.d.ts +2 -0
  70. package/dist/ai/providers/blocks/fal.js +312 -0
  71. package/dist/ai/providers/blocks/fal.js.map +1 -0
  72. package/dist/ai/providers/blocks/google.d.ts +2 -0
  73. package/dist/ai/providers/blocks/google.js +623 -0
  74. package/dist/ai/providers/blocks/google.js.map +1 -0
  75. package/dist/ai/providers/blocks/index.d.ts +2 -0
  76. package/dist/ai/providers/blocks/index.js +18 -0
  77. package/dist/ai/providers/blocks/index.js.map +1 -0
  78. package/dist/ai/providers/blocks/openai-compatible.d.ts +2 -0
  79. package/dist/ai/providers/blocks/openai-compatible.js +308 -0
  80. package/dist/ai/providers/blocks/openai-compatible.js.map +1 -0
  81. package/dist/ai/providers/blocks/openai.d.ts +2 -0
  82. package/dist/ai/providers/blocks/openai.js +600 -0
  83. package/dist/ai/providers/blocks/openai.js.map +1 -0
  84. package/dist/ai/providers/blocks/xai.d.ts +2 -0
  85. package/dist/ai/providers/blocks/xai.js +247 -0
  86. package/dist/ai/providers/blocks/xai.js.map +1 -0
  87. package/dist/ai/providers/icons.d.ts +7 -0
  88. package/dist/ai/providers/icons.js +9 -0
  89. package/dist/ai/providers/icons.js.map +1 -0
  90. package/dist/ai/providers/index.d.ts +2 -0
  91. package/dist/ai/providers/index.js +6 -0
  92. package/dist/ai/providers/index.js.map +1 -0
  93. package/dist/ai/providers/registry.d.ts +40 -0
  94. package/dist/ai/providers/registry.js +267 -0
  95. package/dist/ai/providers/registry.js.map +1 -0
  96. package/dist/ai/providers/types.d.ts +115 -0
  97. package/dist/ai/providers/types.js +4 -0
  98. package/dist/ai/providers/types.js.map +1 -0
  99. package/dist/ai/utils/systemGenerate.d.ts +1 -1
  100. package/dist/ai/utils/systemGenerate.js +19 -19
  101. package/dist/ai/utils/systemGenerate.js.map +1 -1
  102. package/dist/collections/AIJobs.d.ts +2 -0
  103. package/dist/collections/AIJobs.js +81 -0
  104. package/dist/collections/AIJobs.js.map +1 -0
  105. package/dist/collections/AISettings.d.ts +2 -0
  106. package/dist/collections/AISettings.js +279 -0
  107. package/dist/collections/AISettings.js.map +1 -0
  108. package/dist/collections/Instructions.js +224 -50
  109. package/dist/collections/Instructions.js.map +1 -1
  110. package/dist/defaults.d.ts +3 -0
  111. package/dist/defaults.js +3 -0
  112. package/dist/defaults.js.map +1 -1
  113. package/dist/endpoints/buildPromptUtils.d.ts +19 -0
  114. package/dist/endpoints/buildPromptUtils.js +114 -0
  115. package/dist/endpoints/buildPromptUtils.js.map +1 -0
  116. package/dist/endpoints/chat.d.ts +4 -0
  117. package/dist/endpoints/fetchFields.js +0 -7
  118. package/dist/endpoints/fetchFields.js.map +1 -1
  119. package/dist/endpoints/fetchVoices.d.ts +2 -0
  120. package/dist/endpoints/fetchVoices.js +79 -0
  121. package/dist/endpoints/fetchVoices.js.map +1 -0
  122. package/dist/endpoints/index.js +339 -232
  123. package/dist/endpoints/index.js.map +1 -1
  124. package/dist/exports/client.d.ts +9 -0
  125. package/dist/exports/client.js +9 -0
  126. package/dist/exports/client.js.map +1 -1
  127. package/dist/exports/fields.d.ts +1 -0
  128. package/dist/exports/fields.js +1 -0
  129. package/dist/exports/fields.js.map +1 -1
  130. package/dist/fields/ArrayComposeField/ArrayComposeField.d.ts +15 -0
  131. package/dist/fields/ArrayComposeField/ArrayComposeField.js +87 -0
  132. package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -0
  133. package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +73 -0
  134. package/dist/fields/ComposeField/ComposeField.js +2 -2
  135. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  136. package/dist/fields/ComposeField/ComposeField.jsx +2 -2
  137. package/dist/fields/PromptEditorField/PromptEditorField.js +162 -16
  138. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  139. package/dist/fields/PromptEditorField/PromptEditorField.jsx +123 -5
  140. package/dist/index.d.ts +3 -0
  141. package/dist/index.js +1 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/init.js +63 -65
  144. package/dist/init.js.map +1 -1
  145. package/dist/payload-ai.d.ts +149 -0
  146. package/dist/plugin.js +94 -46
  147. package/dist/plugin.js.map +1 -1
  148. package/dist/providers/InstructionsProvider/InstructionsProvider.js +38 -7
  149. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  150. package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +30 -4
  151. package/dist/providers/InstructionsProvider/context.d.ts +1 -0
  152. package/dist/providers/InstructionsProvider/context.js +1 -0
  153. package/dist/providers/InstructionsProvider/context.js.map +1 -1
  154. package/dist/providers/InstructionsProvider/useInstructions.js +30 -10
  155. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  156. package/dist/styles.d.ts +11 -0
  157. package/dist/types/handlebars-async-helpers.d.ts +1 -0
  158. package/dist/types/handlebars-dist-handlebars.d.ts +1 -0
  159. package/dist/types/react-mentions.d.ts +1 -0
  160. package/dist/types.d.ts +6 -16
  161. package/dist/types.js.map +1 -1
  162. package/dist/ui/AIConfigDashboard/index.d.ts +2 -0
  163. package/dist/ui/AIConfigDashboard/index.js +46 -0
  164. package/dist/ui/AIConfigDashboard/index.js.map +1 -0
  165. package/dist/ui/AIConfigDashboard/index.jsx +24 -0
  166. package/dist/ui/ApiKeyStatusIndicator/index.d.ts +6 -0
  167. package/dist/ui/ApiKeyStatusIndicator/index.js +39 -0
  168. package/dist/ui/ApiKeyStatusIndicator/index.js.map +1 -0
  169. package/dist/ui/ApiKeyStatusIndicator/index.jsx +29 -0
  170. package/dist/ui/Compose/Compose.d.ts +2 -2
  171. package/dist/ui/Compose/Compose.js +118 -92
  172. package/dist/ui/Compose/Compose.js.map +1 -1
  173. package/dist/ui/Compose/Compose.jsx +113 -103
  174. package/dist/ui/Compose/ComposePlaceholder.d.ts +7 -0
  175. package/dist/ui/Compose/ComposePlaceholder.js +78 -0
  176. package/dist/ui/Compose/ComposePlaceholder.js.map +1 -0
  177. package/dist/ui/Compose/ComposePlaceholder.jsx +66 -0
  178. package/dist/ui/Compose/UndoRedoActions.d.ts +2 -2
  179. package/dist/ui/Compose/UndoRedoActions.js +11 -6
  180. package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
  181. package/dist/ui/Compose/UndoRedoActions.jsx +8 -6
  182. package/dist/ui/Compose/compose.module.css +57 -17
  183. package/dist/ui/Compose/hooks/menu/itemsMap.js +13 -7
  184. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
  185. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -1
  186. package/dist/ui/Compose/hooks/menu/useMenu.js +28 -17
  187. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  188. package/dist/ui/Compose/hooks/menu/useMenu.jsx +27 -14
  189. package/dist/ui/Compose/hooks/useActiveFieldTracking.js +69 -10
  190. package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
  191. package/dist/ui/Compose/hooks/useGenerate.d.ts +3 -0
  192. package/dist/ui/Compose/hooks/useGenerate.js +71 -11
  193. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  194. package/dist/ui/Compose/hooks/useHistory.d.ts +0 -1
  195. package/dist/ui/Compose/hooks/useHistory.js +113 -26
  196. package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
  197. package/dist/ui/DynamicModelSelect/index.d.ts +7 -0
  198. package/dist/ui/DynamicModelSelect/index.js +231 -0
  199. package/dist/ui/DynamicModelSelect/index.js.map +1 -0
  200. package/dist/ui/DynamicModelSelect/index.jsx +207 -0
  201. package/dist/ui/DynamicProviderSelect/index.d.ts +7 -0
  202. package/dist/ui/DynamicProviderSelect/index.js +101 -0
  203. package/dist/ui/DynamicProviderSelect/index.js.map +1 -0
  204. package/dist/ui/DynamicProviderSelect/index.jsx +90 -0
  205. package/dist/ui/DynamicVoiceSelect/index.d.ts +7 -0
  206. package/dist/ui/DynamicVoiceSelect/index.js +156 -0
  207. package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
  208. package/dist/ui/DynamicVoiceSelect/index.jsx +102 -0
  209. package/dist/ui/EncryptedTextField/index.d.ts +8 -0
  210. package/dist/ui/EncryptedTextField/index.js +74 -0
  211. package/dist/ui/EncryptedTextField/index.js.map +1 -0
  212. package/dist/ui/EncryptedTextField/index.jsx +35 -0
  213. package/dist/ui/Icons/LottieAnimation.js +3 -1
  214. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  215. package/dist/ui/Icons/LottieAnimation.jsx +2 -1
  216. package/dist/ui/ModelRowLabel/index.d.ts +6 -0
  217. package/dist/ui/ModelRowLabel/index.js +41 -0
  218. package/dist/ui/ModelRowLabel/index.js.map +1 -0
  219. package/dist/ui/ModelRowLabel/index.jsx +26 -0
  220. package/dist/ui/ProviderOptionsEditor/index.d.ts +7 -0
  221. package/dist/ui/ProviderOptionsEditor/index.js +291 -0
  222. package/dist/ui/ProviderOptionsEditor/index.js.map +1 -0
  223. package/dist/ui/ProviderOptionsEditor/index.jsx +210 -0
  224. package/dist/ui/VoicesFetcher/index.d.ts +7 -0
  225. package/dist/ui/VoicesFetcher/index.js +118 -0
  226. package/dist/ui/VoicesFetcher/index.js.map +1 -0
  227. package/dist/ui/VoicesFetcher/index.jsx +79 -0
  228. package/dist/utilities/buildSmartPrompt.d.ts +22 -0
  229. package/dist/utilities/buildSmartPrompt.js +143 -0
  230. package/dist/utilities/buildSmartPrompt.js.map +1 -0
  231. package/dist/utilities/encryption.d.ts +2 -0
  232. package/dist/utilities/encryption.js +47 -0
  233. package/dist/utilities/encryption.js.map +1 -0
  234. package/dist/utilities/extractImageData.d.ts +9 -0
  235. package/dist/utilities/extractImageData.js +12 -2
  236. package/dist/utilities/extractImageData.js.map +1 -1
  237. package/dist/utilities/fetchImages.d.ts +14 -0
  238. package/dist/utilities/fetchImages.js +38 -0
  239. package/dist/utilities/fetchImages.js.map +1 -0
  240. package/dist/utilities/fieldToJsonSchema.d.ts +2 -1
  241. package/dist/utilities/fieldToJsonSchema.js +66 -3
  242. package/dist/utilities/fieldToJsonSchema.js.map +1 -1
  243. package/dist/utilities/getFieldBySchemaPath.d.ts +2 -2
  244. package/dist/utilities/getFieldBySchemaPath.js +15 -0
  245. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  246. package/dist/utilities/getProviderOptionsFields.d.ts +16 -0
  247. package/dist/utilities/getProviderOptionsFields.js +80 -0
  248. package/dist/utilities/getProviderOptionsFields.js.map +1 -0
  249. package/dist/utilities/isPluginActivated.js +1 -2
  250. package/dist/utilities/isPluginActivated.js.map +1 -1
  251. package/dist/utilities/lexicalToHTML.js.map +1 -1
  252. package/dist/utilities/resolveImageReferences.d.ts +30 -0
  253. package/dist/utilities/resolveImageReferences.js +167 -0
  254. package/dist/utilities/resolveImageReferences.js.map +1 -0
  255. package/dist/utilities/schemaConverter.d.ts +3 -0
  256. package/dist/utilities/schemaConverter.js +93 -0
  257. package/dist/utilities/schemaConverter.js.map +1 -0
  258. package/dist/utilities/setSafeLexicalState.d.ts +1 -3
  259. package/dist/utilities/setSafeLexicalState.js +1 -1
  260. package/dist/utilities/setSafeLexicalState.js.map +1 -1
  261. package/dist/utilities/updateFieldsConfig.js +27 -43
  262. package/dist/utilities/updateFieldsConfig.js.map +1 -1
  263. package/package.json +23 -24
  264. package/dist/ai/models/anthropic/index.d.ts +0 -2
  265. package/dist/ai/models/anthropic/index.js +0 -129
  266. package/dist/ai/models/anthropic/index.js.map +0 -1
  267. package/dist/ai/models/elevenLabs/generateVoice.d.ts +0 -8
  268. package/dist/ai/models/elevenLabs/generateVoice.js +0 -20
  269. package/dist/ai/models/elevenLabs/generateVoice.js.map +0 -1
  270. package/dist/ai/models/elevenLabs/index.d.ts +0 -2
  271. package/dist/ai/models/elevenLabs/index.js +0 -133
  272. package/dist/ai/models/elevenLabs/index.js.map +0 -1
  273. package/dist/ai/models/elevenLabs/voices.d.ts +0 -8
  274. package/dist/ai/models/elevenLabs/voices.js +0 -24
  275. package/dist/ai/models/elevenLabs/voices.js.map +0 -1
  276. package/dist/ai/models/generateObject.d.ts +0 -11
  277. package/dist/ai/models/generateObject.js +0 -22
  278. package/dist/ai/models/generateObject.js.map +0 -1
  279. package/dist/ai/models/google/generateImage.d.ts +0 -9
  280. package/dist/ai/models/google/generateImage.js +0 -27
  281. package/dist/ai/models/google/generateImage.js.map +0 -1
  282. package/dist/ai/models/google/index.d.ts +0 -2
  283. package/dist/ai/models/google/index.js +0 -201
  284. package/dist/ai/models/google/index.js.map +0 -1
  285. package/dist/ai/models/index.d.ts +0 -2
  286. package/dist/ai/models/index.js +0 -13
  287. package/dist/ai/models/index.js.map +0 -1
  288. package/dist/ai/models/openai/generateImage.d.ts +0 -5
  289. package/dist/ai/models/openai/generateImage.js +0 -31
  290. package/dist/ai/models/openai/generateImage.js.map +0 -1
  291. package/dist/ai/models/openai/generateVoice.d.ts +0 -6
  292. package/dist/ai/models/openai/generateVoice.js +0 -19
  293. package/dist/ai/models/openai/generateVoice.js.map +0 -1
  294. package/dist/ai/models/openai/index.d.ts +0 -2
  295. package/dist/ai/models/openai/index.js +0 -428
  296. package/dist/ai/models/openai/index.js.map +0 -1
  297. package/dist/ai/models/openai/openai.d.ts +0 -1
  298. package/dist/ai/models/openai/openai.js +0 -8
  299. package/dist/ai/models/openai/openai.js.map +0 -1
  300. package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -10
  301. package/dist/ai/utils/editImagesWithOpenAI.js +0 -37
  302. package/dist/ai/utils/editImagesWithOpenAI.js.map +0 -1
  303. package/dist/styles.d.js +0 -2
  304. package/dist/styles.d.js.map +0 -1
  305. package/dist/types/handlebars-async-helpers.d.js +0 -2
  306. package/dist/types/handlebars-async-helpers.d.js.map +0 -1
  307. package/dist/types/handlebars-dist-handlebars.d.js +0 -2
  308. package/dist/types/handlebars-dist-handlebars.d.js.map +0 -1
  309. package/dist/types/react-mentions.d.js +0 -2
  310. package/dist/types/react-mentions.d.js.map +0 -1
  311. package/dist/utilities/getGenerationModels.d.ts +0 -2
  312. package/dist/utilities/getGenerationModels.js +0 -10
  313. 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
- import { getGenerationModels } from '../utilities/getGenerationModels.js';
3
- const groupSettings = (pluginConfig)=>(getGenerationModels(pluginConfig) ?? []).reduce((fields, model)=>{
4
- if (model.settings) {
5
- fields.push(model.settings);
6
- }
7
- return fields;
8
- }, []);
9
- const modelOptions = (pluginConfig)=>(getGenerationModels(pluginConfig) ?? []).map((model)=>{
10
- return {
11
- fields: model.fields,
12
- label: model.name,
13
- value: model.id
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
- export const instructionsCollection = (pluginConfig)=>{
47
- const isLocalized = pluginConfig._localization?.enabled && pluginConfig._localization.locales.length > 0;
48
- return {
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: modelOptions(pluginConfig)
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: 'Model',
127
- options: modelOptions(pluginConfig).map((option)=>{
128
- return {
129
- label: option.label,
130
- value: option.value
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'] === 'gpt-image-1';
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. You can combine multiple references for more controlled results.',
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
- /** TODO:
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
- ...groupSettings(pluginConfig)
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