@ai-stack/payloadcms 3.2.24 → 3.68.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) 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 +95 -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 +57 -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 +222 -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 +448 -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 +311 -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 +622 -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 +307 -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 +599 -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 +246 -0
  86. package/dist/ai/providers/blocks/xai.js.map +1 -0
  87. package/dist/ai/providers/index.d.ts +2 -0
  88. package/dist/ai/providers/index.js +6 -0
  89. package/dist/ai/providers/index.js.map +1 -0
  90. package/dist/ai/providers/registry.d.ts +40 -0
  91. package/dist/ai/providers/registry.js +256 -0
  92. package/dist/ai/providers/registry.js.map +1 -0
  93. package/dist/ai/providers/types.d.ts +115 -0
  94. package/dist/ai/providers/types.js +4 -0
  95. package/dist/ai/providers/types.js.map +1 -0
  96. package/dist/ai/utils/systemGenerate.d.ts +1 -1
  97. package/dist/ai/utils/systemGenerate.js +19 -19
  98. package/dist/ai/utils/systemGenerate.js.map +1 -1
  99. package/dist/collections/AIJobs.d.ts +2 -0
  100. package/dist/collections/AIJobs.js +81 -0
  101. package/dist/collections/AIJobs.js.map +1 -0
  102. package/dist/collections/AISettings.d.ts +2 -0
  103. package/dist/collections/AISettings.js +279 -0
  104. package/dist/collections/AISettings.js.map +1 -0
  105. package/dist/collections/Instructions.js +185 -37
  106. package/dist/collections/Instructions.js.map +1 -1
  107. package/dist/defaults.d.ts +3 -0
  108. package/dist/defaults.js +3 -0
  109. package/dist/defaults.js.map +1 -1
  110. package/dist/endpoints/buildPromptUtils.d.ts +19 -0
  111. package/dist/endpoints/buildPromptUtils.js +114 -0
  112. package/dist/endpoints/buildPromptUtils.js.map +1 -0
  113. package/dist/endpoints/chat.d.js +3 -0
  114. package/dist/endpoints/chat.d.js.map +1 -0
  115. package/dist/endpoints/fetchVoices.d.ts +2 -0
  116. package/dist/endpoints/fetchVoices.js +79 -0
  117. package/dist/endpoints/fetchVoices.js.map +1 -0
  118. package/dist/endpoints/index.js +253 -214
  119. package/dist/endpoints/index.js.map +1 -1
  120. package/dist/exports/client.d.ts +9 -0
  121. package/dist/exports/client.js +9 -0
  122. package/dist/exports/client.js.map +1 -1
  123. package/dist/fields/ComposeField/ComposeField.js +2 -2
  124. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  125. package/dist/fields/ComposeField/ComposeField.jsx +2 -2
  126. package/dist/fields/PromptEditorField/PromptEditorField.js +155 -14
  127. package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
  128. package/dist/fields/PromptEditorField/PromptEditorField.jsx +118 -3
  129. package/dist/index.d.ts +1 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/init.js +35 -13
  132. package/dist/init.js.map +1 -1
  133. package/dist/payload-ai.d.js +3 -0
  134. package/dist/payload-ai.d.js.map +1 -0
  135. package/dist/plugin.js +80 -9
  136. package/dist/plugin.js.map +1 -1
  137. package/dist/providers/InstructionsProvider/InstructionsProvider.js +35 -7
  138. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  139. package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +27 -4
  140. package/dist/providers/InstructionsProvider/context.d.ts +1 -0
  141. package/dist/providers/InstructionsProvider/context.js +1 -0
  142. package/dist/providers/InstructionsProvider/context.js.map +1 -1
  143. package/dist/providers/InstructionsProvider/useInstructions.js +13 -6
  144. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  145. package/dist/types.d.ts +7 -7
  146. package/dist/types.js.map +1 -1
  147. package/dist/ui/AIConfigDashboard/index.d.ts +2 -0
  148. package/dist/ui/AIConfigDashboard/index.js +46 -0
  149. package/dist/ui/AIConfigDashboard/index.js.map +1 -0
  150. package/dist/ui/AIConfigDashboard/index.jsx +24 -0
  151. package/dist/ui/ApiKeyStatusIndicator/index.d.ts +6 -0
  152. package/dist/ui/ApiKeyStatusIndicator/index.js +39 -0
  153. package/dist/ui/ApiKeyStatusIndicator/index.js.map +1 -0
  154. package/dist/ui/ApiKeyStatusIndicator/index.jsx +29 -0
  155. package/dist/ui/Compose/Compose.d.ts +1 -2
  156. package/dist/ui/Compose/Compose.js +116 -90
  157. package/dist/ui/Compose/Compose.js.map +1 -1
  158. package/dist/ui/Compose/Compose.jsx +111 -101
  159. package/dist/ui/Compose/ComposePlaceholder.d.ts +7 -0
  160. package/dist/ui/Compose/ComposePlaceholder.js +78 -0
  161. package/dist/ui/Compose/ComposePlaceholder.js.map +1 -0
  162. package/dist/ui/Compose/ComposePlaceholder.jsx +66 -0
  163. package/dist/ui/Compose/UndoRedoActions.js +3 -1
  164. package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
  165. package/dist/ui/Compose/UndoRedoActions.jsx +2 -1
  166. package/dist/ui/Compose/compose.module.css +1 -1
  167. package/dist/ui/Compose/hooks/menu/itemsMap.js +1 -1
  168. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
  169. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -1
  170. package/dist/ui/Compose/hooks/menu/useMenu.js +2 -2
  171. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  172. package/dist/ui/Compose/hooks/menu/useMenu.jsx +2 -2
  173. package/dist/ui/Compose/hooks/useActiveFieldTracking.js +69 -10
  174. package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
  175. package/dist/ui/Compose/hooks/useGenerate.d.ts +3 -0
  176. package/dist/ui/Compose/hooks/useGenerate.js +71 -11
  177. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  178. package/dist/ui/Compose/hooks/useHistory.js +52 -5
  179. package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
  180. package/dist/ui/DynamicModelSelect/index.d.ts +7 -0
  181. package/dist/ui/DynamicModelSelect/index.js +231 -0
  182. package/dist/ui/DynamicModelSelect/index.js.map +1 -0
  183. package/dist/ui/DynamicModelSelect/index.jsx +207 -0
  184. package/dist/ui/DynamicProviderSelect/index.d.ts +7 -0
  185. package/dist/ui/DynamicProviderSelect/index.js +101 -0
  186. package/dist/ui/DynamicProviderSelect/index.js.map +1 -0
  187. package/dist/ui/DynamicProviderSelect/index.jsx +90 -0
  188. package/dist/ui/DynamicVoiceSelect/index.d.ts +7 -0
  189. package/dist/ui/DynamicVoiceSelect/index.js +104 -0
  190. package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
  191. package/dist/ui/DynamicVoiceSelect/index.jsx +69 -0
  192. package/dist/ui/EncryptedTextField/index.d.ts +8 -0
  193. package/dist/ui/EncryptedTextField/index.js +74 -0
  194. package/dist/ui/EncryptedTextField/index.js.map +1 -0
  195. package/dist/ui/EncryptedTextField/index.jsx +35 -0
  196. package/dist/ui/Icons/LottieAnimation.js +3 -1
  197. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  198. package/dist/ui/Icons/LottieAnimation.jsx +2 -1
  199. package/dist/ui/ModelRowLabel/index.d.ts +6 -0
  200. package/dist/ui/ModelRowLabel/index.js +41 -0
  201. package/dist/ui/ModelRowLabel/index.js.map +1 -0
  202. package/dist/ui/ModelRowLabel/index.jsx +26 -0
  203. package/dist/ui/ProviderOptionsEditor/index.d.ts +7 -0
  204. package/dist/ui/ProviderOptionsEditor/index.js +291 -0
  205. package/dist/ui/ProviderOptionsEditor/index.js.map +1 -0
  206. package/dist/ui/ProviderOptionsEditor/index.jsx +210 -0
  207. package/dist/ui/VoicesFetcher/index.d.ts +7 -0
  208. package/dist/ui/VoicesFetcher/index.js +72 -0
  209. package/dist/ui/VoicesFetcher/index.js.map +1 -0
  210. package/dist/ui/VoicesFetcher/index.jsx +56 -0
  211. package/dist/utilities/encryption.d.ts +2 -0
  212. package/dist/utilities/encryption.js +47 -0
  213. package/dist/utilities/encryption.js.map +1 -0
  214. package/dist/utilities/extractImageData.d.ts +9 -0
  215. package/dist/utilities/extractImageData.js +12 -2
  216. package/dist/utilities/extractImageData.js.map +1 -1
  217. package/dist/utilities/fetchImages.d.ts +14 -0
  218. package/dist/utilities/fetchImages.js +38 -0
  219. package/dist/utilities/fetchImages.js.map +1 -0
  220. package/dist/utilities/fieldToJsonSchema.d.ts +2 -1
  221. package/dist/utilities/fieldToJsonSchema.js +66 -3
  222. package/dist/utilities/fieldToJsonSchema.js.map +1 -1
  223. package/dist/utilities/getFieldBySchemaPath.js +15 -0
  224. package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
  225. package/dist/utilities/getProviderOptionsFields.d.ts +16 -0
  226. package/dist/utilities/getProviderOptionsFields.js +80 -0
  227. package/dist/utilities/getProviderOptionsFields.js.map +1 -0
  228. package/dist/utilities/isPluginActivated.js +1 -2
  229. package/dist/utilities/isPluginActivated.js.map +1 -1
  230. package/dist/utilities/lexicalToHTML.js.map +1 -1
  231. package/dist/utilities/resolveImageReferences.d.ts +28 -0
  232. package/dist/utilities/resolveImageReferences.js +148 -0
  233. package/dist/utilities/resolveImageReferences.js.map +1 -0
  234. package/dist/utilities/schemaConverter.d.ts +3 -0
  235. package/dist/utilities/schemaConverter.js +93 -0
  236. package/dist/utilities/schemaConverter.js.map +1 -0
  237. package/dist/utilities/setSafeLexicalState.d.ts +1 -3
  238. package/dist/utilities/setSafeLexicalState.js +1 -1
  239. package/dist/utilities/setSafeLexicalState.js.map +1 -1
  240. package/package.json +38 -39
  241. package/dist/ai/models/anthropic/index.d.ts +0 -2
  242. package/dist/ai/models/anthropic/index.js +0 -129
  243. package/dist/ai/models/anthropic/index.js.map +0 -1
  244. package/dist/ai/models/elevenLabs/generateVoice.d.ts +0 -8
  245. package/dist/ai/models/elevenLabs/generateVoice.js +0 -20
  246. package/dist/ai/models/elevenLabs/generateVoice.js.map +0 -1
  247. package/dist/ai/models/elevenLabs/index.d.ts +0 -2
  248. package/dist/ai/models/elevenLabs/index.js +0 -133
  249. package/dist/ai/models/elevenLabs/index.js.map +0 -1
  250. package/dist/ai/models/elevenLabs/voices.d.ts +0 -8
  251. package/dist/ai/models/elevenLabs/voices.js +0 -24
  252. package/dist/ai/models/elevenLabs/voices.js.map +0 -1
  253. package/dist/ai/models/generateObject.d.ts +0 -11
  254. package/dist/ai/models/generateObject.js +0 -22
  255. package/dist/ai/models/generateObject.js.map +0 -1
  256. package/dist/ai/models/google/generateImage.d.ts +0 -9
  257. package/dist/ai/models/google/generateImage.js +0 -27
  258. package/dist/ai/models/google/generateImage.js.map +0 -1
  259. package/dist/ai/models/google/index.d.ts +0 -2
  260. package/dist/ai/models/google/index.js +0 -201
  261. package/dist/ai/models/google/index.js.map +0 -1
  262. package/dist/ai/models/index.d.ts +0 -2
  263. package/dist/ai/models/index.js +0 -13
  264. package/dist/ai/models/index.js.map +0 -1
  265. package/dist/ai/models/openai/generateImage.d.ts +0 -5
  266. package/dist/ai/models/openai/generateImage.js +0 -31
  267. package/dist/ai/models/openai/generateImage.js.map +0 -1
  268. package/dist/ai/models/openai/generateVoice.d.ts +0 -6
  269. package/dist/ai/models/openai/generateVoice.js +0 -19
  270. package/dist/ai/models/openai/generateVoice.js.map +0 -1
  271. package/dist/ai/models/openai/index.d.ts +0 -2
  272. package/dist/ai/models/openai/index.js +0 -428
  273. package/dist/ai/models/openai/index.js.map +0 -1
  274. package/dist/ai/models/openai/openai.d.ts +0 -1
  275. package/dist/ai/models/openai/openai.js +0 -8
  276. package/dist/ai/models/openai/openai.js.map +0 -1
  277. package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -10
  278. package/dist/ai/utils/editImagesWithOpenAI.js +0 -37
  279. package/dist/ai/utils/editImagesWithOpenAI.js.map +0 -1
  280. package/dist/types.d.js +0 -3
  281. package/dist/types.d.js.map +0 -1
  282. package/dist/utilities/getGenerationModels.d.ts +0 -2
  283. package/dist/utilities/getGenerationModels.js +0 -10
  284. package/dist/utilities/getGenerationModels.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ai/core/generateObject.ts"],"sourcesContent":["import { jsonSchema, generateObject as sdkGenerateObject } from 'ai'\n\nimport type { PayloadGenerateObjectArgs } from './types.js'\n\nimport { extractPromptAttachments } from '../../utilities/extractPromptAttachments.js'\nimport { getLanguageModel } from '../providers/registry.js'\n\nfunction isZodSchema(schema: unknown): boolean {\n return typeof schema === 'object' && schema !== null && '_def' in schema\n}\n\n/**\n * Generate structured output using AI SDK's generateObject\n * This is a thin wrapper that resolves the model from the registry\n * and passes everything directly to the AI SDK\n */\nexport async function generateObject(args: PayloadGenerateObjectArgs) {\n const {\n maxTokens,\n mode,\n model: modelId,\n payload,\n prompt,\n provider,\n providerOptions,\n schema,\n system,\n temperature,\n ...rest\n } = args\n\n // Extract attachments if needed (from existing utility)\n const processedPrompt = (rest as any).extractAttachments\n ? extractPromptAttachments(prompt)\n : prompt\n\n // Resolve model from registry\n const model = await getLanguageModel(payload, provider, modelId, providerOptions)\n\n // Pass directly to AI SDK with minimal transformation\n const options: Record<string, unknown> = {\n mode: mode || 'auto',\n model,\n prompt: processedPrompt,\n schema: schema ? (isZodSchema(schema) ? schema : jsonSchema(schema as any)) : undefined,\n system,\n temperature: temperature ?? 0.7,\n ...(maxTokens ? { maxOutputTokens: maxTokens } : {}),\n }\n\n if (providerOptions) {\n options.providerOptions = providerOptions\n }\n\n return sdkGenerateObject(options as Parameters<typeof sdkGenerateObject>[0])\n}\n"],"names":["jsonSchema","generateObject","sdkGenerateObject","extractPromptAttachments","getLanguageModel","isZodSchema","schema","args","maxTokens","mode","model","modelId","payload","prompt","provider","providerOptions","system","temperature","rest","processedPrompt","extractAttachments","options","undefined","maxOutputTokens"],"mappings":"AAAA,SAASA,UAAU,EAAEC,kBAAkBC,iBAAiB,QAAQ,KAAI;AAIpE,SAASC,wBAAwB,QAAQ,8CAA6C;AACtF,SAASC,gBAAgB,QAAQ,2BAA0B;AAE3D,SAASC,YAAYC,MAAe;IAClC,OAAO,OAAOA,WAAW,YAAYA,WAAW,QAAQ,UAAUA;AACpE;AAEA;;;;CAIC,GACD,OAAO,eAAeL,eAAeM,IAA+B;IAClE,MAAM,EACJC,SAAS,EACTC,IAAI,EACJC,OAAOC,OAAO,EACdC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACRC,eAAe,EACfT,MAAM,EACNU,MAAM,EACNC,WAAW,EACX,GAAGC,MACJ,GAAGX;IAEJ,wDAAwD;IACxD,MAAMY,kBAAkB,AAACD,KAAaE,kBAAkB,GACpDjB,yBAAyBU,UACzBA;IAEJ,8BAA8B;IAC9B,MAAMH,QAAQ,MAAMN,iBAAiBQ,SAASE,UAAUH,SAASI;IAEjE,sDAAsD;IACtD,MAAMM,UAAmC;QACvCZ,MAAMA,QAAQ;QACdC;QACAG,QAAQM;QACRb,QAAQA,SAAUD,YAAYC,UAAUA,SAASN,WAAWM,UAAkBgB;QAC9EN;QACAC,aAAaA,eAAe;QAC5B,GAAIT,YAAY;YAAEe,iBAAiBf;QAAU,IAAI,CAAC,CAAC;IACrD;IAEA,IAAIO,iBAAiB;QACnBM,QAAQN,eAAe,GAAGA;IAC5B;IAEA,OAAOb,kBAAkBmB;AAC3B"}
@@ -0,0 +1,7 @@
1
+ import type { PayloadGenerateTextArgs } from './types.js';
2
+ /**
3
+ * Generate simple text using AI SDK's generateText
4
+ * This is a thin wrapper that resolves the model from the registry
5
+ * and passes everything directly to the AI SDK
6
+ */
7
+ export declare function generateText(args: PayloadGenerateTextArgs): Promise<import("ai").GenerateTextResult<import("ai").ToolSet, unknown>>;
@@ -0,0 +1,31 @@
1
+ import { generateText as sdkGenerateText } from 'ai';
2
+ import { extractPromptAttachments } from '../../utilities/extractPromptAttachments.js';
3
+ import { getLanguageModel } from '../providers/registry.js';
4
+ /**
5
+ * Generate simple text using AI SDK's generateText
6
+ * This is a thin wrapper that resolves the model from the registry
7
+ * and passes everything directly to the AI SDK
8
+ */ export async function generateText(args) {
9
+ const { maxTokens, model: modelId, payload, prompt, provider, providerOptions, system, temperature, ...rest } = args;
10
+ // Extract attachments if needed
11
+ const processedPrompt = rest.extractAttachments ? extractPromptAttachments(prompt) : prompt;
12
+ // Resolve model from registry with provider options
13
+ const model = await getLanguageModel(payload, provider, modelId, providerOptions);
14
+ // Pass directly to AI SDK
15
+ const options = {
16
+ model,
17
+ prompt: processedPrompt,
18
+ system,
19
+ temperature: temperature ?? 0.7,
20
+ ...maxTokens ? {
21
+ maxOutputTokens: maxTokens
22
+ } : {}
23
+ };
24
+ // Also pass providerOptions to generateText for per-call overrides if supported by SDK/Model
25
+ if (providerOptions) {
26
+ options.providerOptions = providerOptions;
27
+ }
28
+ return sdkGenerateText(options);
29
+ }
30
+
31
+ //# sourceMappingURL=generateText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ai/core/generateText.ts"],"sourcesContent":["import { generateText as sdkGenerateText } from 'ai'\n\nimport type { PayloadGenerateTextArgs } from './types.js'\n\nimport { extractPromptAttachments } from '../../utilities/extractPromptAttachments.js'\nimport { getLanguageModel } from '../providers/registry.js'\n\n/**\n * Generate simple text using AI SDK's generateText\n * This is a thin wrapper that resolves the model from the registry\n * and passes everything directly to the AI SDK\n */\nexport async function generateText(args: PayloadGenerateTextArgs) {\n const { \n maxTokens, \n model: modelId, \n payload,\n prompt,\n provider,\n providerOptions,\n system,\n temperature,\n ...rest\n } = args\n \n // Extract attachments if needed\n const processedPrompt = (rest as any).extractAttachments \n ? extractPromptAttachments(prompt) \n : prompt\n \n // Resolve model from registry with provider options\n const model = await getLanguageModel(payload, provider, modelId, providerOptions)\n \n // Pass directly to AI SDK\n const options: Record<string, unknown> = {\n model,\n prompt: processedPrompt,\n system,\n temperature: temperature ?? 0.7,\n ...(maxTokens ? { maxOutputTokens: maxTokens } : {}),\n }\n\n // Also pass providerOptions to generateText for per-call overrides if supported by SDK/Model\n if (providerOptions) {\n options.providerOptions = providerOptions\n }\n\n return sdkGenerateText(options as Parameters<typeof sdkGenerateText>[0])\n}\n"],"names":["generateText","sdkGenerateText","extractPromptAttachments","getLanguageModel","args","maxTokens","model","modelId","payload","prompt","provider","providerOptions","system","temperature","rest","processedPrompt","extractAttachments","options","maxOutputTokens"],"mappings":"AAAA,SAASA,gBAAgBC,eAAe,QAAQ,KAAI;AAIpD,SAASC,wBAAwB,QAAQ,8CAA6C;AACtF,SAASC,gBAAgB,QAAQ,2BAA0B;AAE3D;;;;CAIC,GACD,OAAO,eAAeH,aAAaI,IAA6B;IAC9D,MAAM,EACJC,SAAS,EACTC,OAAOC,OAAO,EACdC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACRC,eAAe,EACfC,MAAM,EACNC,WAAW,EACX,GAAGC,MACJ,GAAGV;IAEJ,gCAAgC;IAChC,MAAMW,kBAAkB,AAACD,KAAaE,kBAAkB,GACpDd,yBAAyBO,UACzBA;IAEJ,oDAAoD;IACpD,MAAMH,QAAQ,MAAMH,iBAAiBK,SAASE,UAAUH,SAASI;IAEjE,0BAA0B;IAC1B,MAAMM,UAAmC;QACvCX;QACAG,QAAQM;QACRH;QACAC,aAAaA,eAAe;QAC5B,GAAIR,YAAY;YAAEa,iBAAiBb;QAAU,IAAI,CAAC,CAAC;IACrD;IAEA,6FAA6F;IAC7F,IAAIM,iBAAiB;QACnBM,QAAQN,eAAe,GAAGA;IAC5B;IAEA,OAAOV,gBAAgBgB;AACzB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AI Core Module
3
+ * Thin wrappers around AI SDK functions with model resolution from registry
4
+ */
5
+ export { generateObject } from './generateObject.js';
6
+ export { generateText } from './generateText.js';
7
+ export { generateMedia } from './media/index.js';
8
+ export type { ImageGenerationArgs, MediaResult, SpeechGenerationArgs, VideoGenerationArgs } from './media/types.js';
9
+ export { streamObject } from './streamObject.js';
10
+ export { streamText } from './streamText.js';
11
+ export type { PayloadGenerateMediaArgs, PayloadGenerateObjectArgs, PayloadGenerateTextArgs, ProviderOptions, } from './types.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * AI Core Module
3
+ * Thin wrappers around AI SDK functions with model resolution from registry
4
+ */ export { generateObject } from './generateObject.js';
5
+ export { generateText } from './generateText.js';
6
+ export { generateMedia } from './media/index.js';
7
+ export { streamObject } from './streamObject.js';
8
+ export { streamText } from './streamText.js';
9
+
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ai/core/index.ts"],"sourcesContent":["/**\n * AI Core Module\n * Thin wrappers around AI SDK functions with model resolution from registry\n */\n\nexport { generateObject } from './generateObject.js'\nexport { generateText } from './generateText.js'\nexport { generateMedia } from './media/index.js'\n// Re-export media types\nexport type { ImageGenerationArgs, MediaResult, SpeechGenerationArgs, VideoGenerationArgs } from './media/types.js'\nexport { streamObject } from './streamObject.js'\n\nexport { streamText } from './streamText.js'\n\n// Export types (excluding conflicting ones from media/types.js)\nexport type {\n PayloadGenerateMediaArgs,\n PayloadGenerateObjectArgs,\n PayloadGenerateTextArgs,\n ProviderOptions,\n} from './types.js'\n"],"names":["generateObject","generateText","generateMedia","streamObject","streamText"],"mappings":"AAAA;;;CAGC,GAED,SAASA,cAAc,QAAQ,sBAAqB;AACpD,SAASC,YAAY,QAAQ,oBAAmB;AAChD,SAASC,aAAa,QAAQ,mBAAkB;AAGhD,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,SAASC,UAAU,QAAQ,kBAAiB"}
@@ -0,0 +1,7 @@
1
+ import type { PayloadGenerateMediaArgs } from '../types.js';
2
+ import type { MediaResult } from './types.js';
3
+ /**
4
+ * Unified media generation handler
5
+ * Routes to appropriate specialized handler based on media type
6
+ */
7
+ export declare function generateMedia(args: PayloadGenerateMediaArgs): Promise<MediaResult>;
@@ -0,0 +1,50 @@
1
+ import { getProviderRegistry } from '../../providers/registry.js';
2
+ import { generateImage } from './image/index.js';
3
+ import { generateSpeech } from './speech/index.js';
4
+ /**
5
+ * Detect media type from provider and model configuration
6
+ */ async function detectMediaType(args) {
7
+ const { model: modelId, payload, provider } = args;
8
+ if (!provider) {
9
+ throw new Error('Provider is required for media generation');
10
+ }
11
+ const registry = await getProviderRegistry(payload);
12
+ const providerConfig = registry[provider];
13
+ if (!providerConfig) {
14
+ throw new Error(`Provider ${provider} not found in registry`);
15
+ }
16
+ // Check for video (Fal + video use case)
17
+ const isVideo = providerConfig.id === 'fal' && providerConfig.models?.find((m)=>m.id === modelId)?.useCase === 'video';
18
+ if (isVideo) {
19
+ return 'video';
20
+ }
21
+ // Check for speech (TTS)
22
+ const isTTS = providerConfig.id === 'elevenlabs' || providerConfig.id === 'openai' && modelId?.startsWith('tts');
23
+ if (isTTS) {
24
+ return 'speech';
25
+ }
26
+ // Default to image
27
+ return 'image';
28
+ }
29
+ /**
30
+ * Unified media generation handler
31
+ * Routes to appropriate specialized handler based on media type
32
+ */ export async function generateMedia(args) {
33
+ if (!args.prompt || !args.prompt.trim()) {
34
+ throw new Error('Prompt is required for media generation');
35
+ }
36
+ const mediaType = await detectMediaType(args);
37
+ switch(mediaType){
38
+ case 'image':
39
+ return generateImage(args);
40
+ case 'speech':
41
+ return generateSpeech(args);
42
+ case 'video':
43
+ throw Error(`Not implemented: ${mediaType}`);
44
+ // return generateVideo(args)
45
+ default:
46
+ throw new Error(`Unsupported media type: ${mediaType}`);
47
+ }
48
+ }
49
+
50
+ //# sourceMappingURL=generateMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ai/core/media/generateMedia.ts"],"sourcesContent":["import type { PayloadGenerateMediaArgs } from '../types.js'\nimport type { MediaResult } from './types.js'\n\nimport { getProviderRegistry } from '../../providers/registry.js'\nimport { generateImage } from './image/index.js'\nimport { generateSpeech } from './speech/index.js'\nimport { generateVideo } from './video/index.js'\n\n/**\n * Detect media type from provider and model configuration\n */\nasync function detectMediaType(\n args: PayloadGenerateMediaArgs,\n): Promise<'image' | 'speech' | 'video'> {\n const { model: modelId, payload, provider } = args\n\n if (!provider) {\n throw new Error('Provider is required for media generation')\n }\n\n const registry = await getProviderRegistry(payload)\n const providerConfig = registry[provider]\n\n if (!providerConfig) {\n throw new Error(`Provider ${provider} not found in registry`)\n }\n\n // Check for video (Fal + video use case)\n const isVideo =\n providerConfig.id === 'fal' &&\n providerConfig.models?.find((m) => m.id === modelId)?.useCase === 'video'\n\n if (isVideo) {\n return 'video'\n }\n\n // Check for speech (TTS)\n const isTTS =\n providerConfig.id === 'elevenlabs' ||\n (providerConfig.id === 'openai' && modelId?.startsWith('tts'))\n\n if (isTTS) {\n return 'speech'\n }\n\n // Default to image\n return 'image'\n}\n\n/**\n * Unified media generation handler\n * Routes to appropriate specialized handler based on media type\n */\nexport async function generateMedia(args: PayloadGenerateMediaArgs): Promise<MediaResult> {\n if (!args.prompt || !args.prompt.trim()) {\n throw new Error('Prompt is required for media generation')\n }\n\n const mediaType = await detectMediaType(args)\n\n switch (mediaType) {\n case 'image':\n return generateImage(args)\n case 'speech':\n return generateSpeech(args)\n case 'video':\n throw Error(`Not implemented: ${mediaType}`)\n // return generateVideo(args)\n default:\n throw new Error(`Unsupported media type: ${mediaType}`)\n }\n}\n"],"names":["getProviderRegistry","generateImage","generateSpeech","detectMediaType","args","model","modelId","payload","provider","Error","registry","providerConfig","isVideo","id","models","find","m","useCase","isTTS","startsWith","generateMedia","prompt","trim","mediaType"],"mappings":"AAGA,SAASA,mBAAmB,QAAQ,8BAA6B;AACjE,SAASC,aAAa,QAAQ,mBAAkB;AAChD,SAASC,cAAc,QAAQ,oBAAmB;AAGlD;;CAEC,GACD,eAAeC,gBACbC,IAA8B;IAE9B,MAAM,EAAEC,OAAOC,OAAO,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGJ;IAE9C,IAAI,CAACI,UAAU;QACb,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,WAAW,MAAMV,oBAAoBO;IAC3C,MAAMI,iBAAiBD,QAAQ,CAACF,SAAS;IAEzC,IAAI,CAACG,gBAAgB;QACnB,MAAM,IAAIF,MAAM,CAAC,SAAS,EAAED,SAAS,sBAAsB,CAAC;IAC9D;IAEA,yCAAyC;IACzC,MAAMI,UACJD,eAAeE,EAAE,KAAK,SACtBF,eAAeG,MAAM,EAAEC,KAAK,CAACC,IAAMA,EAAEH,EAAE,KAAKP,UAAUW,YAAY;IAEpE,IAAIL,SAAS;QACX,OAAO;IACT;IAEA,yBAAyB;IACzB,MAAMM,QACJP,eAAeE,EAAE,KAAK,gBACrBF,eAAeE,EAAE,KAAK,YAAYP,SAASa,WAAW;IAEzD,IAAID,OAAO;QACT,OAAO;IACT;IAEA,mBAAmB;IACnB,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,eAAeE,cAAchB,IAA8B;IAChE,IAAI,CAACA,KAAKiB,MAAM,IAAI,CAACjB,KAAKiB,MAAM,CAACC,IAAI,IAAI;QACvC,MAAM,IAAIb,MAAM;IAClB;IAEA,MAAMc,YAAY,MAAMpB,gBAAgBC;IAExC,OAAQmB;QACN,KAAK;YACH,OAAOtB,cAAcG;QACvB,KAAK;YACH,OAAOF,eAAeE;QACxB,KAAK;YACH,MAAMK,MAAM,CAAC,iBAAiB,EAAEc,UAAU,CAAC;QAC3C,6BAA6B;QAC/B;YACE,MAAM,IAAId,MAAM,CAAC,wBAAwB,EAAEc,UAAU,CAAC;IAC1D;AACF"}
@@ -0,0 +1,6 @@
1
+ import type { ImageGenerationArgs, MediaResult } from '../types.js';
2
+ /**
3
+ * Main image generation handler
4
+ * Routes to appropriate handler based on model capabilities
5
+ */
6
+ export declare function generateImage(args: ImageGenerationArgs): Promise<MediaResult>;
@@ -0,0 +1,41 @@
1
+ import { getImageModel, getProviderRegistry } from '../../../providers/registry.js';
2
+ import { generateMultimodalImage } from './handlers/multimodal.js';
3
+ import { generateStandardImage } from './handlers/standard.js';
4
+ /**
5
+ * Main image generation handler
6
+ * Routes to appropriate handler based on model capabilities
7
+ */ export async function generateImage(args) {
8
+ const { model: modelId, payload, provider } = args;
9
+ console.log('args: ', args.images);
10
+ // Get provider registry and model configuration
11
+ const registry = await getProviderRegistry(payload);
12
+ const providerConfig = registry[provider || ''];
13
+ if (!providerConfig) {
14
+ throw new Error(`Provider ${provider} not found in registry`);
15
+ }
16
+ const modelConfig = providerConfig.models?.find((m)=>m.id === modelId);
17
+ // Determine if this is a multimodal text-to-image model
18
+ const isMultimodalText = modelConfig?.responseModalities?.includes('IMAGE') ?? false;
19
+ // Merge provider's default image options with instruction-level overrides
20
+ const mergedProviderOptions = {
21
+ ...providerConfig.options?.image || {},
22
+ ...args.providerOptions || {}
23
+ };
24
+ // Get appropriate model instance
25
+ const model = await getImageModel(payload, provider, modelId, mergedProviderOptions, isMultimodalText);
26
+ console.log('isMultimodalText : ', isMultimodalText);
27
+ console.log('modelConfig : ', modelConfig);
28
+ console.log('mergedProviderOptions : ', mergedProviderOptions);
29
+ console.log('model : ', model);
30
+ // Pass merged options to handlers
31
+ const argsWithMergedOptions = {
32
+ ...args,
33
+ providerOptions: mergedProviderOptions
34
+ };
35
+ if (isMultimodalText) {
36
+ return generateMultimodalImage(model, argsWithMergedOptions);
37
+ }
38
+ return generateStandardImage(model, argsWithMergedOptions);
39
+ }
40
+
41
+ //# sourceMappingURL=generateImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/core/media/image/generateImage.ts"],"sourcesContent":["import type { ImageModel, LanguageModel } from 'ai'\n\nimport type { ImageGenerationArgs, MediaResult } from '../types.js'\n\nimport { getImageModel, getProviderRegistry } from '../../../providers/registry.js'\nimport { generateMultimodalImage } from './handlers/multimodal.js'\nimport { generateStandardImage } from './handlers/standard.js'\n\n/**\n * Main image generation handler\n * Routes to appropriate handler based on model capabilities\n */\nexport async function generateImage(args: ImageGenerationArgs): Promise<MediaResult> {\n const { model: modelId, payload, provider } = args\n console.log('args: ', args.images)\n // Get provider registry and model configuration\n const registry = await getProviderRegistry(payload)\n const providerConfig = registry[provider || '']\n\n if (!providerConfig) {\n throw new Error(`Provider ${provider} not found in registry`)\n }\n\n const modelConfig = providerConfig.models?.find((m) => m.id === modelId)\n\n // Determine if this is a multimodal text-to-image model\n const isMultimodalText = modelConfig?.responseModalities?.includes('IMAGE') ?? false\n\n // Merge provider's default image options with instruction-level overrides\n const mergedProviderOptions = {\n ...(providerConfig.options?.image || {}),\n ...(args.providerOptions || {}),\n }\n\n // Get appropriate model instance\n const model = await getImageModel(\n payload,\n provider,\n modelId,\n mergedProviderOptions,\n isMultimodalText,\n )\n console.log('isMultimodalText : ', isMultimodalText)\n console.log('modelConfig : ', modelConfig)\n console.log('mergedProviderOptions : ', mergedProviderOptions)\n console.log('model : ', model)\n\n // Pass merged options to handlers\n const argsWithMergedOptions = { ...args, providerOptions: mergedProviderOptions }\n\n if (isMultimodalText) {\n return generateMultimodalImage(model as LanguageModel, argsWithMergedOptions)\n }\n\n return generateStandardImage(model as ImageModel, argsWithMergedOptions)\n}\n"],"names":["getImageModel","getProviderRegistry","generateMultimodalImage","generateStandardImage","generateImage","args","model","modelId","payload","provider","console","log","images","registry","providerConfig","Error","modelConfig","models","find","m","id","isMultimodalText","responseModalities","includes","mergedProviderOptions","options","image","providerOptions","argsWithMergedOptions"],"mappings":"AAIA,SAASA,aAAa,EAAEC,mBAAmB,QAAQ,iCAAgC;AACnF,SAASC,uBAAuB,QAAQ,2BAA0B;AAClE,SAASC,qBAAqB,QAAQ,yBAAwB;AAE9D;;;CAGC,GACD,OAAO,eAAeC,cAAcC,IAAyB;IAC3D,MAAM,EAAEC,OAAOC,OAAO,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGJ;IAC9CK,QAAQC,GAAG,CAAC,UAAUN,KAAKO,MAAM;IACjC,gDAAgD;IAChD,MAAMC,WAAW,MAAMZ,oBAAoBO;IAC3C,MAAMM,iBAAiBD,QAAQ,CAACJ,YAAY,GAAG;IAE/C,IAAI,CAACK,gBAAgB;QACnB,MAAM,IAAIC,MAAM,CAAC,SAAS,EAAEN,SAAS,sBAAsB,CAAC;IAC9D;IAEA,MAAMO,cAAcF,eAAeG,MAAM,EAAEC,KAAK,CAACC,IAAMA,EAAEC,EAAE,KAAKb;IAEhE,wDAAwD;IACxD,MAAMc,mBAAmBL,aAAaM,oBAAoBC,SAAS,YAAY;IAE/E,0EAA0E;IAC1E,MAAMC,wBAAwB;QAC5B,GAAIV,eAAeW,OAAO,EAAEC,SAAS,CAAC,CAAC;QACvC,GAAIrB,KAAKsB,eAAe,IAAI,CAAC,CAAC;IAChC;IAEA,iCAAiC;IACjC,MAAMrB,QAAQ,MAAMN,cAClBQ,SACAC,UACAF,SACAiB,uBACAH;IAEFX,QAAQC,GAAG,CAAC,uBAAuBU;IACnCX,QAAQC,GAAG,CAAC,kBAAkBK;IAC9BN,QAAQC,GAAG,CAAC,4BAA4Ba;IACxCd,QAAQC,GAAG,CAAC,YAAYL;IAExB,kCAAkC;IAClC,MAAMsB,wBAAwB;QAAE,GAAGvB,IAAI;QAAEsB,iBAAiBH;IAAsB;IAEhF,IAAIH,kBAAkB;QACpB,OAAOnB,wBAAwBI,OAAwBsB;IACzD;IAEA,OAAOzB,sBAAsBG,OAAqBsB;AACpD"}
@@ -0,0 +1,7 @@
1
+ import { type LanguageModel } from 'ai';
2
+ import type { ImageGenerationArgs, MediaResult } from '../../types.js';
3
+ /**
4
+ * Handle multimodal text-to-image generation (e.g., Gemini Nano Banana)
5
+ * Uses generateText with image response modalities
6
+ */
7
+ export declare function generateMultimodalImage(model: LanguageModel, args: ImageGenerationArgs): Promise<MediaResult>;
@@ -0,0 +1,95 @@
1
+ import { generateText } from 'ai';
2
+ import { convertToBuffer, getExtensionFromMimeType } from '../../utils.js';
3
+ /**
4
+ * Handle multimodal text-to-image generation (e.g., Gemini Nano Banana)
5
+ * Uses generateText with image response modalities
6
+ */ export async function generateMultimodalImage(model, args) {
7
+ const { images = [], prompt, providerOptions = {} } = args;
8
+ //
9
+ // const promptParts: ModelMessage[] = [
10
+ // { role: 'user', content: [{ type: 'text', text: prompt } }],
11
+ // ...,
12
+ // ]
13
+ //
14
+ // const messages = [
15
+ // {
16
+ // content: promptParts,
17
+ // role: 'user' as const,
18
+ // },
19
+ // ]
20
+ console.log('providerOptions: ', providerOptions);
21
+ // Build Google-specific options with required defaults
22
+ const googleOptions = {
23
+ imageConfig: {
24
+ aspectRatio: args.aspectRatio || providerOptions?.aspectRatio || '16:9',
25
+ ...providerOptions?.personGeneration && {
26
+ personGeneration: providerOptions.personGeneration
27
+ },
28
+ ...providerOptions?.addWatermark !== undefined && {
29
+ addWatermark: providerOptions.addWatermark
30
+ }
31
+ },
32
+ responseModalities: [
33
+ 'IMAGE',
34
+ 'TEXT'
35
+ ]
36
+ };
37
+ const result = await generateText({
38
+ model,
39
+ // onStepFinish: (step) => {
40
+ // console.log('step finish: ', step.files)
41
+ // console.log('step finish: ', step.response)
42
+ // },
43
+ prompt: [
44
+ {
45
+ content: [
46
+ {
47
+ type: 'text',
48
+ text: prompt
49
+ },
50
+ ...images
51
+ ],
52
+ role: 'user'
53
+ }
54
+ ],
55
+ providerOptions: {
56
+ google: googleOptions
57
+ }
58
+ });
59
+ // console.log("model -->", model)
60
+ // console.log('result.files: ', result.files)
61
+ // console.log('result.text: ', result.text)
62
+ // console.log('result.response: ', JSON.stringify(result.response, null, 2))
63
+ // Extract images from result.files
64
+ const resultImages = result.files?.filter((f)=>f.mediaType?.startsWith('image/')) || [];
65
+ if (resultImages.length === 0) {
66
+ // Check if Google returned a specific error message
67
+ const responseBody = result.response?.body;
68
+ const candidate = responseBody?.candidates?.[0];
69
+ if (candidate?.finishMessage) {
70
+ throw new Error(`Image generation failed: ${candidate.finishMessage}`);
71
+ }
72
+ if (candidate?.finishReason && candidate.finishReason !== 'STOP') {
73
+ throw new Error(`Image generation failed with reason: ${candidate.finishReason}`);
74
+ }
75
+ throw new Error('No images returned from the model. The model may have generated only text.');
76
+ }
77
+ const firstImage = resultImages[0];
78
+ const mimeType = firstImage.mediaType || 'image/png';
79
+ const imageData = firstImage.base64Data || firstImage.uint8Array;
80
+ if (!imageData) {
81
+ throw new Error('Image data is missing from the response.');
82
+ }
83
+ const buffer = convertToBuffer(imageData);
84
+ const extension = getExtensionFromMimeType(mimeType);
85
+ return {
86
+ file: {
87
+ name: `generated.${extension}`,
88
+ data: buffer,
89
+ mimetype: mimeType,
90
+ size: buffer.byteLength
91
+ }
92
+ };
93
+ }
94
+
95
+ //# sourceMappingURL=multimodal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/ai/core/media/image/handlers/multimodal.ts"],"sourcesContent":["import { generateText, type LanguageModel, ModelMessage } from 'ai'\n\nimport type { ImageGenerationArgs, MediaResult, MultimodalImageFile } from '../../types.js'\n\nimport { convertToBuffer, getExtensionFromMimeType } from '../../utils.js'\n\n/**\n * Handle multimodal text-to-image generation (e.g., Gemini Nano Banana)\n * Uses generateText with image response modalities\n */\nexport async function generateMultimodalImage(\n model: LanguageModel,\n args: ImageGenerationArgs,\n): Promise<MediaResult> {\n const { images = [], prompt, providerOptions = {} } = args\n //\n // const promptParts: ModelMessage[] = [\n // { role: 'user', content: [{ type: 'text', text: prompt } }],\n // ...,\n // ]\n //\n // const messages = [\n // {\n // content: promptParts,\n // role: 'user' as const,\n // },\n // ]\n\n console.log('providerOptions: ', providerOptions)\n \n // Build Google-specific options with required defaults\n const googleOptions = {\n imageConfig: {\n aspectRatio: args.aspectRatio || providerOptions?.aspectRatio || '16:9',\n ...(providerOptions?.personGeneration && { personGeneration: providerOptions.personGeneration }),\n ...(providerOptions?.addWatermark !== undefined && { addWatermark: providerOptions.addWatermark }),\n },\n responseModalities: ['IMAGE', 'TEXT'],\n }\n \n const result = await generateText({\n model,\n // onStepFinish: (step) => {\n // console.log('step finish: ', step.files)\n // console.log('step finish: ', step.response)\n // },\n prompt: [\n {\n content: [{ type: 'text', text: prompt }, ...images],\n role: 'user',\n },\n ],\n providerOptions: {\n google: googleOptions,\n },\n })\n\n // console.log(\"model -->\", model)\n // console.log('result.files: ', result.files)\n // console.log('result.text: ', result.text)\n // console.log('result.response: ', JSON.stringify(result.response, null, 2))\n\n // Extract images from result.files\n const resultImages = (result.files?.filter((f: MultimodalImageFile) =>\n f.mediaType?.startsWith('image/'),\n ) || []) as MultimodalImageFile[]\n\n if (resultImages.length === 0) {\n // Check if Google returned a specific error message\n const responseBody = result.response?.body as { candidates?: Array<{ finishMessage?: string; finishReason?: string }> } | undefined\n const candidate = responseBody?.candidates?.[0]\n \n if (candidate?.finishMessage) {\n throw new Error(`Image generation failed: ${candidate.finishMessage}`)\n }\n if (candidate?.finishReason && candidate.finishReason !== 'STOP') {\n throw new Error(`Image generation failed with reason: ${candidate.finishReason}`)\n }\n \n throw new Error('No images returned from the model. The model may have generated only text.')\n }\n\n const firstImage = resultImages[0]\n const mimeType = firstImage.mediaType || 'image/png'\n const imageData = firstImage.base64Data || firstImage.uint8Array\n\n if (!imageData) {\n throw new Error('Image data is missing from the response.')\n }\n\n const buffer = convertToBuffer(imageData)\n const extension = getExtensionFromMimeType(mimeType)\n\n return {\n file: {\n name: `generated.${extension}`,\n data: buffer,\n mimetype: mimeType,\n size: buffer.byteLength,\n },\n }\n}\n"],"names":["generateText","convertToBuffer","getExtensionFromMimeType","generateMultimodalImage","model","args","images","prompt","providerOptions","console","log","googleOptions","imageConfig","aspectRatio","personGeneration","addWatermark","undefined","responseModalities","result","content","type","text","role","google","resultImages","files","filter","f","mediaType","startsWith","length","responseBody","response","body","candidate","candidates","finishMessage","Error","finishReason","firstImage","mimeType","imageData","base64Data","uint8Array","buffer","extension","file","name","data","mimetype","size","byteLength"],"mappings":"AAAA,SAASA,YAAY,QAA0C,KAAI;AAInE,SAASC,eAAe,EAAEC,wBAAwB,QAAQ,iBAAgB;AAE1E;;;CAGC,GACD,OAAO,eAAeC,wBACpBC,KAAoB,EACpBC,IAAyB;IAEzB,MAAM,EAAEC,SAAS,EAAE,EAAEC,MAAM,EAAEC,kBAAkB,CAAC,CAAC,EAAE,GAAGH;IACtD,EAAE;IACF,wCAAwC;IACxC,iEAAiE;IACjE,SAAS;IACT,IAAI;IACJ,EAAE;IACF,qBAAqB;IACrB,MAAM;IACN,4BAA4B;IAC5B,6BAA6B;IAC7B,OAAO;IACP,IAAI;IAEJI,QAAQC,GAAG,CAAC,qBAAqBF;IAEjC,uDAAuD;IACvD,MAAMG,gBAAgB;QACpBC,aAAa;YACXC,aAAaR,KAAKQ,WAAW,IAAIL,iBAAiBK,eAAe;YACjE,GAAIL,iBAAiBM,oBAAoB;gBAAEA,kBAAkBN,gBAAgBM,gBAAgB;YAAC,CAAC;YAC/F,GAAIN,iBAAiBO,iBAAiBC,aAAa;gBAAED,cAAcP,gBAAgBO,YAAY;YAAC,CAAC;QACnG;QACAE,oBAAoB;YAAC;YAAS;SAAO;IACvC;IAEA,MAAMC,SAAS,MAAMlB,aAAa;QAChCI;QACA,4BAA4B;QAC5B,6CAA6C;QAC7C,gDAAgD;QAChD,KAAK;QACLG,QAAQ;YACN;gBACEY,SAAS;oBAAC;wBAAEC,MAAM;wBAAQC,MAAMd;oBAAO;uBAAMD;iBAAO;gBACpDgB,MAAM;YACR;SACD;QACDd,iBAAiB;YACfe,QAAQZ;QACV;IACF;IAEA,kCAAkC;IAClC,8CAA8C;IAC9C,4CAA4C;IAC5C,6EAA6E;IAE7E,mCAAmC;IACnC,MAAMa,eAAgBN,OAAOO,KAAK,EAAEC,OAAO,CAACC,IAC1CA,EAAEC,SAAS,EAAEC,WAAW,cACrB,EAAE;IAEP,IAAIL,aAAaM,MAAM,KAAK,GAAG;QAC7B,oDAAoD;QACpD,MAAMC,eAAeb,OAAOc,QAAQ,EAAEC;QACtC,MAAMC,YAAYH,cAAcI,YAAY,CAAC,EAAE;QAE/C,IAAID,WAAWE,eAAe;YAC5B,MAAM,IAAIC,MAAM,CAAC,yBAAyB,EAAEH,UAAUE,aAAa,CAAC,CAAC;QACvE;QACA,IAAIF,WAAWI,gBAAgBJ,UAAUI,YAAY,KAAK,QAAQ;YAChE,MAAM,IAAID,MAAM,CAAC,qCAAqC,EAAEH,UAAUI,YAAY,CAAC,CAAC;QAClF;QAEA,MAAM,IAAID,MAAM;IAClB;IAEA,MAAME,aAAaf,YAAY,CAAC,EAAE;IAClC,MAAMgB,WAAWD,WAAWX,SAAS,IAAI;IACzC,MAAMa,YAAYF,WAAWG,UAAU,IAAIH,WAAWI,UAAU;IAEhE,IAAI,CAACF,WAAW;QACd,MAAM,IAAIJ,MAAM;IAClB;IAEA,MAAMO,SAAS3C,gBAAgBwC;IAC/B,MAAMI,YAAY3C,yBAAyBsC;IAE3C,OAAO;QACLM,MAAM;YACJC,MAAM,CAAC,UAAU,EAAEF,UAAU,CAAC;YAC9BG,MAAMJ;YACNK,UAAUT;YACVU,MAAMN,OAAOO,UAAU;QACzB;IACF;AACF"}
@@ -0,0 +1,7 @@
1
+ import { type ImageModel } from 'ai';
2
+ import type { ImageGenerationArgs, MediaResult } from '../../types.js';
3
+ /**
4
+ * Handle standard image generation (DALL-E, Imagen, Flux, etc.)
5
+ * Uses AI SDK's experimental_generateImage
6
+ */
7
+ export declare function generateStandardImage(model: ImageModel, args: ImageGenerationArgs): Promise<MediaResult>;
@@ -0,0 +1,28 @@
1
+ import { experimental_generateImage } from 'ai';
2
+ import { getExtensionFromMimeType } from '../../utils.js';
3
+ /**
4
+ * Handle standard image generation (DALL-E, Imagen, Flux, etc.)
5
+ * Uses AI SDK's experimental_generateImage
6
+ */ export async function generateStandardImage(model, args) {
7
+ const { n = 1, prompt, providerOptions } = args;
8
+ const generateResult = await experimental_generateImage({
9
+ model,
10
+ n,
11
+ prompt,
12
+ providerOptions
13
+ });
14
+ const { image } = generateResult;
15
+ const buffer = Buffer.from(image.base64, 'base64');
16
+ const mimeType = image.mediaType || 'image/png';
17
+ const extension = getExtensionFromMimeType(mimeType);
18
+ return {
19
+ file: {
20
+ name: `generated.${extension}`,
21
+ data: buffer,
22
+ mimetype: mimeType,
23
+ size: buffer.byteLength
24
+ }
25
+ };
26
+ }
27
+
28
+ //# sourceMappingURL=standard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/ai/core/media/image/handlers/standard.ts"],"sourcesContent":["import { experimental_generateImage, type ImageModel } from 'ai'\n\nimport type { ImageGenerationArgs, MediaResult } from '../../types.js'\n\nimport { getExtensionFromMimeType } from '../../utils.js'\n\n/**\n * Handle standard image generation (DALL-E, Imagen, Flux, etc.)\n * Uses AI SDK's experimental_generateImage\n */\nexport async function generateStandardImage(\n model: ImageModel,\n args: ImageGenerationArgs,\n): Promise<MediaResult> {\n const { n = 1, prompt, providerOptions } = args\n\n const generateResult = await experimental_generateImage({\n model,\n n,\n prompt,\n providerOptions,\n })\n\n const { image } = generateResult\n\n const buffer = Buffer.from(image.base64, 'base64')\n const mimeType = image.mediaType || 'image/png'\n const extension = getExtensionFromMimeType(mimeType)\n\n return {\n file: {\n name: `generated.${extension}`,\n data: buffer,\n mimetype: mimeType,\n size: buffer.byteLength,\n },\n }\n}\n"],"names":["experimental_generateImage","getExtensionFromMimeType","generateStandardImage","model","args","n","prompt","providerOptions","generateResult","image","buffer","Buffer","from","base64","mimeType","mediaType","extension","file","name","data","mimetype","size","byteLength"],"mappings":"AAAA,SAASA,0BAA0B,QAAyB,KAAI;AAIhE,SAASC,wBAAwB,QAAQ,iBAAgB;AAEzD;;;CAGC,GACD,OAAO,eAAeC,sBACpBC,KAAiB,EACjBC,IAAyB;IAEzB,MAAM,EAAEC,IAAI,CAAC,EAAEC,MAAM,EAAEC,eAAe,EAAE,GAAGH;IAE3C,MAAMI,iBAAiB,MAAMR,2BAA2B;QACtDG;QACAE;QACAC;QACAC;IACF;IAEA,MAAM,EAAEE,KAAK,EAAE,GAAGD;IAElB,MAAME,SAASC,OAAOC,IAAI,CAACH,MAAMI,MAAM,EAAE;IACzC,MAAMC,WAAWL,MAAMM,SAAS,IAAI;IACpC,MAAMC,YAAYf,yBAAyBa;IAE3C,OAAO;QACLG,MAAM;YACJC,MAAM,CAAC,UAAU,EAAEF,UAAU,CAAC;YAC9BG,MAAMT;YACNU,UAAUN;YACVO,MAAMX,OAAOY,UAAU;QACzB;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ export type * from '../types.js';
2
+ export { generateImage } from './generateImage.js';
@@ -0,0 +1,3 @@
1
+ export { generateImage } from './generateImage.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/core/media/image/index.ts"],"sourcesContent":["export type * from '../types.js'\nexport { generateImage } from './generateImage.js'\n"],"names":["generateImage"],"mappings":"AACA,SAASA,aAAa,QAAQ,qBAAoB"}
@@ -0,0 +1,2 @@
1
+ export { generateMedia } from './generateMedia.js';
2
+ export type * from './types.js';
@@ -0,0 +1,3 @@
1
+ export { generateMedia } from './generateMedia.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ai/core/media/index.ts"],"sourcesContent":["export { generateMedia } from './generateMedia.js'\nexport type * from './types.js'\n"],"names":["generateMedia"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAoB"}
@@ -0,0 +1,5 @@
1
+ import type { MediaResult, SpeechGenerationArgs } from '../types.js';
2
+ /**
3
+ * Generate speech from text using AI SDK's generateSpeech
4
+ */
5
+ export declare function generateSpeech(args: SpeechGenerationArgs): Promise<MediaResult>;
@@ -0,0 +1,55 @@
1
+ import { getGlobalDefaults, getTTSModel } from '../../../providers/registry.js';
2
+ import { getExtensionFromMimeType } from '../utils.js';
3
+ /**
4
+ * Generate speech from text using AI SDK's generateSpeech
5
+ */ export async function generateSpeech(args) {
6
+ const { model: modelId, payload, prompt, provider } = args;
7
+ let { voice } = args;
8
+ // Fallback to global default voice if not specified
9
+ if (!voice) {
10
+ const defaults = await getGlobalDefaults(payload);
11
+ if (defaults?.tts?.voice) {
12
+ voice = defaults.tts.voice;
13
+ }
14
+ }
15
+ // Get TTS model instance
16
+ const model = await getTTSModel(payload, provider, modelId, args.providerOptions);
17
+ console.log("model: ", model);
18
+ // Dynamic import to support older SDK versions
19
+ let generateSpeechFn;
20
+ try {
21
+ const ai = await import('ai');
22
+ generateSpeechFn = ai.experimental_generateSpeech;
23
+ } catch (_e) {
24
+ throw new Error('generateSpeech not found in "ai" package. Please upgrade to the latest version.');
25
+ }
26
+ if (!generateSpeechFn) {
27
+ throw new Error('generateSpeech not found in "ai" package. Please upgrade to the latest version.');
28
+ }
29
+ // TODO: fix with proper error handling
30
+ const result = await generateSpeechFn({
31
+ model,
32
+ providerOptions: args.providerOptions,
33
+ speed: args.speed,
34
+ text: prompt,
35
+ voice
36
+ });
37
+ console.log("result", result);
38
+ // Extract audio from result
39
+ const { audio } = result;
40
+ const mimeType = audio.mediaType || 'audio/mp3';
41
+ // Try to get format from audio object, otherwise infer from mime type
42
+ const extension = audio.format || getExtensionFromMimeType(mimeType);
43
+ // Prefer uint8Array if available, else base64
44
+ const dataBuffer = audio.uint8Array ? Buffer.from(audio.uint8Array) : Buffer.from(audio.base64, 'base64');
45
+ return {
46
+ file: {
47
+ name: `speech.${extension}`,
48
+ data: dataBuffer,
49
+ mimetype: mimeType,
50
+ size: dataBuffer.length
51
+ }
52
+ };
53
+ }
54
+
55
+ //# sourceMappingURL=generateSpeech.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/core/media/speech/generateSpeech.ts"],"sourcesContent":["import type { MediaResult, SpeechGenerationArgs } from '../types.js'\n\nimport { getGlobalDefaults, getTTSModel } from '../../../providers/registry.js'\nimport { getExtensionFromMimeType } from '../utils.js'\n\n/**\n * Generate speech from text using AI SDK's generateSpeech\n */\nexport async function generateSpeech(args: SpeechGenerationArgs): Promise<MediaResult> {\n const { model: modelId, payload, prompt, provider } = args\n let { voice } = args\n\n // Fallback to global default voice if not specified\n if (!voice) {\n const defaults = await getGlobalDefaults(payload)\n if (defaults?.tts?.voice) {\n voice = defaults.tts.voice\n }\n }\n\n // Get TTS model instance\n const model = await getTTSModel(payload, provider, modelId, args.providerOptions)\n console.log(\"model: \", model)\n\n // Dynamic import to support older SDK versions\n let generateSpeechFn\n try {\n const ai = await import('ai')\n generateSpeechFn = ai.experimental_generateSpeech\n } catch (_e) {\n throw new Error('generateSpeech not found in \"ai\" package. Please upgrade to the latest version.')\n }\n\n if (!generateSpeechFn) {\n throw new Error('generateSpeech not found in \"ai\" package. Please upgrade to the latest version.')\n }\n\n // TODO: fix with proper error handling\n const result = await generateSpeechFn({\n model,\n providerOptions: args.providerOptions,\n speed: args.speed,\n text: prompt,\n voice,\n })\n console.log(\"result\", result)\n // Extract audio from result\n const { audio } = result\n const mimeType = audio.mediaType || 'audio/mp3'\n \n // Try to get format from audio object, otherwise infer from mime type\n const extension = audio.format || getExtensionFromMimeType(mimeType)\n\n // Prefer uint8Array if available, else base64\n const dataBuffer = audio.uint8Array\n ? Buffer.from(audio.uint8Array)\n : Buffer.from(audio.base64, 'base64')\n\n return {\n file: {\n name: `speech.${extension}`,\n data: dataBuffer,\n mimetype: mimeType,\n size: dataBuffer.length,\n },\n }\n}\n"],"names":["getGlobalDefaults","getTTSModel","getExtensionFromMimeType","generateSpeech","args","model","modelId","payload","prompt","provider","voice","defaults","tts","providerOptions","console","log","generateSpeechFn","ai","experimental_generateSpeech","_e","Error","result","speed","text","audio","mimeType","mediaType","extension","format","dataBuffer","uint8Array","Buffer","from","base64","file","name","data","mimetype","size","length"],"mappings":"AAEA,SAASA,iBAAiB,EAAEC,WAAW,QAAQ,iCAAgC;AAC/E,SAASC,wBAAwB,QAAQ,cAAa;AAEtD;;CAEC,GACD,OAAO,eAAeC,eAAeC,IAA0B;IAC7D,MAAM,EAAEC,OAAOC,OAAO,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGL;IACtD,IAAI,EAAEM,KAAK,EAAE,GAAGN;IAEhB,oDAAoD;IACpD,IAAI,CAACM,OAAO;QACV,MAAMC,WAAW,MAAMX,kBAAkBO;QACzC,IAAII,UAAUC,KAAKF,OAAO;YACxBA,QAAQC,SAASC,GAAG,CAACF,KAAK;QAC5B;IACF;IAEA,yBAAyB;IACzB,MAAML,QAAQ,MAAMJ,YAAYM,SAASE,UAAUH,SAASF,KAAKS,eAAe;IAChFC,QAAQC,GAAG,CAAC,aAAaV;IAEzB,+CAA+C;IAC/C,IAAIW;IACJ,IAAI;QACF,MAAMC,KAAK,MAAM,MAAM,CAAC;QACxBD,mBAAmBC,GAAGC,2BAA2B;IACnD,EAAE,OAAOC,IAAI;QACX,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAI,CAACJ,kBAAkB;QACrB,MAAM,IAAII,MAAM;IAClB;IAEA,uCAAuC;IACvC,MAAMC,SAAS,MAAML,iBAAiB;QACpCX;QACAQ,iBAAiBT,KAAKS,eAAe;QACrCS,OAAOlB,KAAKkB,KAAK;QACjBC,MAAMf;QACNE;IACF;IACAI,QAAQC,GAAG,CAAC,UAAUM;IACvB,4BAA4B;IAC3B,MAAM,EAAEG,KAAK,EAAE,GAAGH;IAClB,MAAMI,WAAWD,MAAME,SAAS,IAAI;IAEpC,sEAAsE;IACtE,MAAMC,YAAYH,MAAMI,MAAM,IAAI1B,yBAAyBuB;IAE3D,8CAA8C;IAC9C,MAAMI,aAAaL,MAAMM,UAAU,GAC/BC,OAAOC,IAAI,CAACR,MAAMM,UAAU,IAC5BC,OAAOC,IAAI,CAACR,MAAMS,MAAM,EAAE;IAE9B,OAAO;QACLC,MAAM;YACJC,MAAM,CAAC,OAAO,EAAER,UAAU,CAAC;YAC3BS,MAAMP;YACNQ,UAAUZ;YACVa,MAAMT,WAAWU,MAAM;QACzB;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ export type * from '../types.js';
2
+ export { generateSpeech } from './generateSpeech.js';
@@ -0,0 +1,3 @@
1
+ export { generateSpeech } from './generateSpeech.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/core/media/speech/index.ts"],"sourcesContent":["export type * from '../types.js'\nexport { generateSpeech } from './generateSpeech.js'\n"],"names":["generateSpeech"],"mappings":"AACA,SAASA,cAAc,QAAQ,sBAAqB"}
@@ -0,0 +1,74 @@
1
+ import type { ImagePart } from 'ai';
2
+ import type { Payload } from 'payload';
3
+ import type { ProviderOptions } from '../types.js';
4
+ /**
5
+ * Base interface for all media generation arguments
6
+ */
7
+ export interface MediaGenerationArgs {
8
+ model?: string;
9
+ payload: Payload;
10
+ prompt: string;
11
+ provider?: string;
12
+ providerOptions?: ProviderOptions;
13
+ }
14
+ /**
15
+ * Arguments specific to image generation
16
+ */
17
+ export interface ImageGenerationArgs extends MediaGenerationArgs {
18
+ aspectRatio?: string;
19
+ images?: ImagePart[];
20
+ n?: number;
21
+ seed?: number;
22
+ size?: {
23
+ height: number;
24
+ width: number;
25
+ };
26
+ }
27
+ /**
28
+ * Arguments specific to video generation
29
+ */
30
+ export interface VideoGenerationArgs extends MediaGenerationArgs {
31
+ callbackUrl?: string;
32
+ duration?: number;
33
+ fps?: number;
34
+ images?: ImagePart[];
35
+ instructionId?: number | string;
36
+ mode?: 'i2v' | 't2v';
37
+ }
38
+ /**
39
+ * Arguments specific to speech generation
40
+ */
41
+ export interface SpeechGenerationArgs extends MediaGenerationArgs {
42
+ audioFormat?: string;
43
+ speed?: number;
44
+ voice?: string;
45
+ }
46
+ /**
47
+ * Generated media file
48
+ */
49
+ export interface MediaFile {
50
+ data: Buffer;
51
+ mimetype: string;
52
+ name: string;
53
+ size: number;
54
+ }
55
+ /**
56
+ * Result from media generation
57
+ * Can be either an immediate file result or an async job
58
+ */
59
+ export interface MediaResult {
60
+ file?: MediaFile;
61
+ jobId?: string;
62
+ progress?: number;
63
+ status?: 'completed' | 'failed' | 'queued' | 'running';
64
+ taskId?: string;
65
+ data?: any;
66
+ }
67
+ /**
68
+ * Internal type for multimodal image files from AI SDK
69
+ */
70
+ export interface MultimodalImageFile {
71
+ base64Data?: string;
72
+ mediaType?: string;
73
+ uint8Array?: Uint8Array;
74
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Internal type for multimodal image files from AI SDK
3
+ */ export { };
4
+
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ai/core/media/types.ts"],"sourcesContent":["import type { ImagePart } from 'ai'\nimport type { Payload } from 'payload'\n\nimport type { ProviderOptions } from '../types.js'\n\n/**\n * Base interface for all media generation arguments\n */\nexport interface MediaGenerationArgs {\n model?: string\n payload: Payload\n prompt: string\n provider?: string\n providerOptions?: ProviderOptions\n}\n\n/**\n * Arguments specific to image generation\n */\nexport interface ImageGenerationArgs extends MediaGenerationArgs {\n aspectRatio?: string\n images?: ImagePart[]\n n?: number\n seed?: number\n size?: { height: number; width: number }\n}\n\n/**\n * Arguments specific to video generation\n */\nexport interface VideoGenerationArgs extends MediaGenerationArgs {\n callbackUrl?: string\n duration?: number\n fps?: number\n images?: ImagePart[]\n instructionId?: number | string\n mode?: 'i2v' | 't2v'\n}\n\n/**\n * Arguments specific to speech generation\n */\nexport interface SpeechGenerationArgs extends MediaGenerationArgs {\n audioFormat?: string\n speed?: number\n voice?: string\n}\n\n/**\n * Generated media file\n */\nexport interface MediaFile {\n data: Buffer\n mimetype: string\n name: string\n size: number\n}\n\n/**\n * Result from media generation\n * Can be either an immediate file result or an async job\n */\nexport interface MediaResult {\n // Immediate result (image, speech)\n file?: MediaFile\n\n // Async job result (video)\n jobId?: string\n progress?: number\n status?: 'completed' | 'failed' | 'queued' | 'running'\n taskId?: string\n data?: any\n}\n\n/**\n * Internal type for multimodal image files from AI SDK\n */\nexport interface MultimodalImageFile {\n base64Data?: string\n mediaType?: string\n uint8Array?: Uint8Array\n}\n"],"names":[],"mappings":"AA0EA;;CAEC,GACD,WAIC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared utilities for media generation
3
+ */
4
+ /**
5
+ * Get file extension from MIME type
6
+ */
7
+ export declare function getExtensionFromMimeType(mimeType: string): string;
8
+ /**
9
+ * Convert image/audio data to Buffer
10
+ */
11
+ export declare function convertToBuffer(data: string | Uint8Array): Buffer;