@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.
- package/{LICENSE.md → LICENSE} +1 -1
- package/README.md +218 -229
- package/dist/access/checkAccess.d.ts +4 -0
- package/dist/access/checkAccess.js +20 -0
- package/dist/access/checkAccess.js.map +1 -0
- package/dist/ai/core/generateObject.d.ts +7 -0
- package/dist/ai/core/generateObject.js +35 -0
- package/dist/ai/core/generateObject.js.map +1 -0
- package/dist/ai/core/generateText.d.ts +7 -0
- package/dist/ai/core/generateText.js +31 -0
- package/dist/ai/core/generateText.js.map +1 -0
- package/dist/ai/core/index.d.ts +11 -0
- package/dist/ai/core/index.js +10 -0
- package/dist/ai/core/index.js.map +1 -0
- package/dist/ai/core/media/generateMedia.d.ts +7 -0
- package/dist/ai/core/media/generateMedia.js +50 -0
- package/dist/ai/core/media/generateMedia.js.map +1 -0
- package/dist/ai/core/media/image/generateImage.d.ts +6 -0
- package/dist/ai/core/media/image/generateImage.js +41 -0
- package/dist/ai/core/media/image/generateImage.js.map +1 -0
- package/dist/ai/core/media/image/handlers/multimodal.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/multimodal.js +95 -0
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -0
- package/dist/ai/core/media/image/handlers/standard.d.ts +7 -0
- package/dist/ai/core/media/image/handlers/standard.js +28 -0
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -0
- package/dist/ai/core/media/image/index.d.ts +2 -0
- package/dist/ai/core/media/image/index.js +3 -0
- package/dist/ai/core/media/image/index.js.map +1 -0
- package/dist/ai/core/media/index.d.ts +2 -0
- package/dist/ai/core/media/index.js +3 -0
- package/dist/ai/core/media/index.js.map +1 -0
- package/dist/ai/core/media/speech/generateSpeech.d.ts +5 -0
- package/dist/ai/core/media/speech/generateSpeech.js +55 -0
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -0
- package/dist/ai/core/media/speech/index.d.ts +2 -0
- package/dist/ai/core/media/speech/index.js +3 -0
- package/dist/ai/core/media/speech/index.js.map +1 -0
- package/dist/ai/core/media/types.d.ts +74 -0
- package/dist/ai/core/media/types.js +5 -0
- package/dist/ai/core/media/types.js.map +1 -0
- package/dist/ai/core/media/utils.d.ts +11 -0
- package/dist/ai/core/media/utils.js +34 -0
- package/dist/ai/core/media/utils.js.map +1 -0
- package/dist/ai/core/media/video/generateVideo.d.ts +6 -0
- package/dist/ai/core/media/video/generateVideo.js +32 -0
- package/dist/ai/core/media/video/generateVideo.js.map +1 -0
- package/dist/ai/core/media/video/index.d.ts +2 -0
- package/dist/ai/core/media/video/index.js +3 -0
- package/dist/ai/core/media/video/index.js.map +1 -0
- package/dist/ai/core/streamObject.d.ts +7 -0
- package/dist/ai/core/streamObject.js +57 -0
- package/dist/ai/core/streamObject.js.map +1 -0
- package/dist/ai/core/streamText.d.ts +7 -0
- package/dist/ai/core/streamText.js +30 -0
- package/dist/ai/core/streamText.js.map +1 -0
- package/dist/ai/core/types.d.ts +85 -0
- package/dist/ai/core/types.js +5 -0
- package/dist/ai/core/types.js.map +1 -0
- package/dist/ai/index.d.ts +11 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/providers/blocks/anthropic.d.ts +2 -0
- package/dist/ai/providers/blocks/anthropic.js +222 -0
- package/dist/ai/providers/blocks/anthropic.js.map +1 -0
- package/dist/ai/providers/blocks/elevenlabs.d.ts +2 -0
- package/dist/ai/providers/blocks/elevenlabs.js +448 -0
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -0
- package/dist/ai/providers/blocks/fal.d.ts +2 -0
- package/dist/ai/providers/blocks/fal.js +311 -0
- package/dist/ai/providers/blocks/fal.js.map +1 -0
- package/dist/ai/providers/blocks/google.d.ts +2 -0
- package/dist/ai/providers/blocks/google.js +622 -0
- package/dist/ai/providers/blocks/google.js.map +1 -0
- package/dist/ai/providers/blocks/index.d.ts +2 -0
- package/dist/ai/providers/blocks/index.js +18 -0
- package/dist/ai/providers/blocks/index.js.map +1 -0
- package/dist/ai/providers/blocks/openai-compatible.d.ts +2 -0
- package/dist/ai/providers/blocks/openai-compatible.js +307 -0
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -0
- package/dist/ai/providers/blocks/openai.d.ts +2 -0
- package/dist/ai/providers/blocks/openai.js +599 -0
- package/dist/ai/providers/blocks/openai.js.map +1 -0
- package/dist/ai/providers/blocks/xai.d.ts +2 -0
- package/dist/ai/providers/blocks/xai.js +246 -0
- package/dist/ai/providers/blocks/xai.js.map +1 -0
- package/dist/ai/providers/index.d.ts +2 -0
- package/dist/ai/providers/index.js +6 -0
- package/dist/ai/providers/index.js.map +1 -0
- package/dist/ai/providers/registry.d.ts +40 -0
- package/dist/ai/providers/registry.js +256 -0
- package/dist/ai/providers/registry.js.map +1 -0
- package/dist/ai/providers/types.d.ts +115 -0
- package/dist/ai/providers/types.js +4 -0
- package/dist/ai/providers/types.js.map +1 -0
- package/dist/ai/utils/systemGenerate.d.ts +1 -1
- package/dist/ai/utils/systemGenerate.js +19 -19
- package/dist/ai/utils/systemGenerate.js.map +1 -1
- package/dist/collections/AIJobs.d.ts +2 -0
- package/dist/collections/AIJobs.js +81 -0
- package/dist/collections/AIJobs.js.map +1 -0
- package/dist/collections/AISettings.d.ts +2 -0
- package/dist/collections/AISettings.js +279 -0
- package/dist/collections/AISettings.js.map +1 -0
- package/dist/collections/Instructions.js +185 -37
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/defaults.js.map +1 -1
- package/dist/endpoints/buildPromptUtils.d.ts +19 -0
- package/dist/endpoints/buildPromptUtils.js +114 -0
- package/dist/endpoints/buildPromptUtils.js.map +1 -0
- package/dist/endpoints/chat.d.js +3 -0
- package/dist/endpoints/chat.d.js.map +1 -0
- package/dist/endpoints/fetchVoices.d.ts +2 -0
- package/dist/endpoints/fetchVoices.js +79 -0
- package/dist/endpoints/fetchVoices.js.map +1 -0
- package/dist/endpoints/index.js +253 -214
- package/dist/endpoints/index.js.map +1 -1
- package/dist/exports/client.d.ts +9 -0
- package/dist/exports/client.js +9 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.js +2 -2
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +2 -2
- package/dist/fields/PromptEditorField/PromptEditorField.js +155 -14
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +1 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +118 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +35 -13
- package/dist/init.js.map +1 -1
- package/dist/payload-ai.d.js +3 -0
- package/dist/payload-ai.d.js.map +1 -0
- package/dist/plugin.js +80 -9
- package/dist/plugin.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +35 -7
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +27 -4
- package/dist/providers/InstructionsProvider/context.d.ts +1 -0
- package/dist/providers/InstructionsProvider/context.js +1 -0
- package/dist/providers/InstructionsProvider/context.js.map +1 -1
- package/dist/providers/InstructionsProvider/useInstructions.js +13 -6
- package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
- package/dist/types.d.ts +7 -7
- package/dist/types.js.map +1 -1
- package/dist/ui/AIConfigDashboard/index.d.ts +2 -0
- package/dist/ui/AIConfigDashboard/index.js +46 -0
- package/dist/ui/AIConfigDashboard/index.js.map +1 -0
- package/dist/ui/AIConfigDashboard/index.jsx +24 -0
- package/dist/ui/ApiKeyStatusIndicator/index.d.ts +6 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js +39 -0
- package/dist/ui/ApiKeyStatusIndicator/index.js.map +1 -0
- package/dist/ui/ApiKeyStatusIndicator/index.jsx +29 -0
- package/dist/ui/Compose/Compose.d.ts +1 -2
- package/dist/ui/Compose/Compose.js +116 -90
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +111 -101
- package/dist/ui/Compose/ComposePlaceholder.d.ts +7 -0
- package/dist/ui/Compose/ComposePlaceholder.js +78 -0
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -0
- package/dist/ui/Compose/ComposePlaceholder.jsx +66 -0
- package/dist/ui/Compose/UndoRedoActions.js +3 -1
- package/dist/ui/Compose/UndoRedoActions.js.map +1 -1
- package/dist/ui/Compose/UndoRedoActions.jsx +2 -1
- package/dist/ui/Compose/compose.module.css +1 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js +1 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/useMenu.js +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +2 -2
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js +69 -10
- package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerate.d.ts +3 -0
- package/dist/ui/Compose/hooks/useGenerate.js +71 -11
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.js +52 -5
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.d.ts +7 -0
- package/dist/ui/DynamicModelSelect/index.js +231 -0
- package/dist/ui/DynamicModelSelect/index.js.map +1 -0
- package/dist/ui/DynamicModelSelect/index.jsx +207 -0
- package/dist/ui/DynamicProviderSelect/index.d.ts +7 -0
- package/dist/ui/DynamicProviderSelect/index.js +101 -0
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -0
- package/dist/ui/DynamicProviderSelect/index.jsx +90 -0
- package/dist/ui/DynamicVoiceSelect/index.d.ts +7 -0
- package/dist/ui/DynamicVoiceSelect/index.js +104 -0
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -0
- package/dist/ui/DynamicVoiceSelect/index.jsx +69 -0
- package/dist/ui/EncryptedTextField/index.d.ts +8 -0
- package/dist/ui/EncryptedTextField/index.js +74 -0
- package/dist/ui/EncryptedTextField/index.js.map +1 -0
- package/dist/ui/EncryptedTextField/index.jsx +35 -0
- package/dist/ui/Icons/LottieAnimation.js +3 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +2 -1
- package/dist/ui/ModelRowLabel/index.d.ts +6 -0
- package/dist/ui/ModelRowLabel/index.js +41 -0
- package/dist/ui/ModelRowLabel/index.js.map +1 -0
- package/dist/ui/ModelRowLabel/index.jsx +26 -0
- package/dist/ui/ProviderOptionsEditor/index.d.ts +7 -0
- package/dist/ui/ProviderOptionsEditor/index.js +291 -0
- package/dist/ui/ProviderOptionsEditor/index.js.map +1 -0
- package/dist/ui/ProviderOptionsEditor/index.jsx +210 -0
- package/dist/ui/VoicesFetcher/index.d.ts +7 -0
- package/dist/ui/VoicesFetcher/index.js +72 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -0
- package/dist/ui/VoicesFetcher/index.jsx +56 -0
- package/dist/utilities/encryption.d.ts +2 -0
- package/dist/utilities/encryption.js +47 -0
- package/dist/utilities/encryption.js.map +1 -0
- package/dist/utilities/extractImageData.d.ts +9 -0
- package/dist/utilities/extractImageData.js +12 -2
- package/dist/utilities/extractImageData.js.map +1 -1
- package/dist/utilities/fetchImages.d.ts +14 -0
- package/dist/utilities/fetchImages.js +38 -0
- package/dist/utilities/fetchImages.js.map +1 -0
- package/dist/utilities/fieldToJsonSchema.d.ts +2 -1
- package/dist/utilities/fieldToJsonSchema.js +66 -3
- package/dist/utilities/fieldToJsonSchema.js.map +1 -1
- package/dist/utilities/getFieldBySchemaPath.js +15 -0
- package/dist/utilities/getFieldBySchemaPath.js.map +1 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +16 -0
- package/dist/utilities/getProviderOptionsFields.js +80 -0
- package/dist/utilities/getProviderOptionsFields.js.map +1 -0
- package/dist/utilities/isPluginActivated.js +1 -2
- package/dist/utilities/isPluginActivated.js.map +1 -1
- package/dist/utilities/lexicalToHTML.js.map +1 -1
- package/dist/utilities/resolveImageReferences.d.ts +28 -0
- package/dist/utilities/resolveImageReferences.js +148 -0
- package/dist/utilities/resolveImageReferences.js.map +1 -0
- package/dist/utilities/schemaConverter.d.ts +3 -0
- package/dist/utilities/schemaConverter.js +93 -0
- package/dist/utilities/schemaConverter.js.map +1 -0
- package/dist/utilities/setSafeLexicalState.d.ts +1 -3
- package/dist/utilities/setSafeLexicalState.js +1 -1
- package/dist/utilities/setSafeLexicalState.js.map +1 -1
- package/package.json +38 -39
- package/dist/ai/models/anthropic/index.d.ts +0 -2
- package/dist/ai/models/anthropic/index.js +0 -129
- package/dist/ai/models/anthropic/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/generateVoice.d.ts +0 -8
- package/dist/ai/models/elevenLabs/generateVoice.js +0 -20
- package/dist/ai/models/elevenLabs/generateVoice.js.map +0 -1
- package/dist/ai/models/elevenLabs/index.d.ts +0 -2
- package/dist/ai/models/elevenLabs/index.js +0 -133
- package/dist/ai/models/elevenLabs/index.js.map +0 -1
- package/dist/ai/models/elevenLabs/voices.d.ts +0 -8
- package/dist/ai/models/elevenLabs/voices.js +0 -24
- package/dist/ai/models/elevenLabs/voices.js.map +0 -1
- package/dist/ai/models/generateObject.d.ts +0 -11
- package/dist/ai/models/generateObject.js +0 -22
- package/dist/ai/models/generateObject.js.map +0 -1
- package/dist/ai/models/google/generateImage.d.ts +0 -9
- package/dist/ai/models/google/generateImage.js +0 -27
- package/dist/ai/models/google/generateImage.js.map +0 -1
- package/dist/ai/models/google/index.d.ts +0 -2
- package/dist/ai/models/google/index.js +0 -201
- package/dist/ai/models/google/index.js.map +0 -1
- package/dist/ai/models/index.d.ts +0 -2
- package/dist/ai/models/index.js +0 -13
- package/dist/ai/models/index.js.map +0 -1
- package/dist/ai/models/openai/generateImage.d.ts +0 -5
- package/dist/ai/models/openai/generateImage.js +0 -31
- package/dist/ai/models/openai/generateImage.js.map +0 -1
- package/dist/ai/models/openai/generateVoice.d.ts +0 -6
- package/dist/ai/models/openai/generateVoice.js +0 -19
- package/dist/ai/models/openai/generateVoice.js.map +0 -1
- package/dist/ai/models/openai/index.d.ts +0 -2
- package/dist/ai/models/openai/index.js +0 -428
- package/dist/ai/models/openai/index.js.map +0 -1
- package/dist/ai/models/openai/openai.d.ts +0 -1
- package/dist/ai/models/openai/openai.js +0 -8
- package/dist/ai/models/openai/openai.js.map +0 -1
- package/dist/ai/utils/editImagesWithOpenAI.d.ts +0 -10
- package/dist/ai/utils/editImagesWithOpenAI.js +0 -37
- package/dist/ai/utils/editImagesWithOpenAI.js.map +0 -1
- package/dist/types.d.js +0 -3
- package/dist/types.d.js.map +0 -1
- package/dist/utilities/getGenerationModels.d.ts +0 -2
- package/dist/utilities/getGenerationModels.js +0 -10
- package/dist/utilities/getGenerationModels.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
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,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 @@
|
|
|
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 @@
|
|
|
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,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 @@
|
|
|
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 @@
|
|
|
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;
|