@ai-sdk/minimax 3.0.3 → 3.0.5
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/CHANGELOG.md +27 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/minimax-video-model.ts +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @ai-sdk/minimax
|
|
2
2
|
|
|
3
|
+
## 3.0.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [160ccdb]
|
|
8
|
+
- @ai-sdk/provider-utils@5.0.20
|
|
9
|
+
- @ai-sdk/anthropic@4.0.29
|
|
10
|
+
|
|
11
|
+
## 3.0.4
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 79e133c: async APIs for generateVideo (poll, webhook)
|
|
16
|
+
|
|
17
|
+
Adds an asynchronous start/status flow to the experimental video model
|
|
18
|
+
interface (`VideoModelV4`): models may now implement `doStart`, `doStatus`,
|
|
19
|
+
and `handleWebhookOption` instead of (or in addition to) `doGenerate`, and
|
|
20
|
+
`experimental_generateVideo` accepts `poll` and `webhook` options to
|
|
21
|
+
orchestrate completion via polling or webhooks. Polling configuration can use
|
|
22
|
+
a custom delay implementation for durable workflow compatibility.
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [9337ecd]
|
|
25
|
+
- Updated dependencies [79e133c]
|
|
26
|
+
- @ai-sdk/anthropic@4.0.28
|
|
27
|
+
- @ai-sdk/provider@4.0.5
|
|
28
|
+
- @ai-sdk/provider-utils@5.0.19
|
|
29
|
+
|
|
3
30
|
## 3.0.3
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -560,7 +560,7 @@ var minimaxVideoFailedResponseHandler = createJsonErrorResponseHandler({
|
|
|
560
560
|
});
|
|
561
561
|
|
|
562
562
|
// src/version.ts
|
|
563
|
-
var VERSION = true ? "3.0.
|
|
563
|
+
var VERSION = true ? "3.0.5" : "0.0.0-test";
|
|
564
564
|
|
|
565
565
|
// src/minimax-provider.ts
|
|
566
566
|
var defaultBaseURL = "https://api.minimax.io/anthropic/v1";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/minimax-provider.ts","../src/minimax-video-model.ts","../src/minimax-video-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_VideoModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AnthropicLanguageModel } from '@ai-sdk/anthropic/internal';\nimport type { MiniMaxChatModelId } from './minimax-chat-options';\nimport { MiniMaxVideoModel } from './minimax-video-model';\nimport type { MiniMaxVideoModelId } from './minimax-video-settings';\nimport { VERSION } from './version';\n\nexport interface MiniMaxProviderSettings {\n /**\n * MiniMax API key. Default value is taken from the `MINIMAX_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls. Defaults to MiniMax's Anthropic-compatible\n * endpoint (`https://api.minimax.io/anthropic/v1`).\n */\n baseURL?: string;\n /**\n * Use a different URL prefix for video generation API calls.\n * The default prefix is `https://api.minimax.io`.\n */\n videoBaseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface MiniMaxProvider extends ProviderV4 {\n /**\n * Creates a MiniMax model for text generation.\n */\n (modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax language model for text generation.\n */\n languageModel(modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax chat model for text generation.\n */\n chat(modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax video model for video generation.\n */\n video(modelId: MiniMaxVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a MiniMax video model for video generation.\n */\n videoModel(modelId: MiniMaxVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://api.minimax.io/anthropic/v1';\nconst defaultVideoBaseURL = 'https://api.minimax.io';\n\nexport function createMiniMax(\n options: MiniMaxProviderSettings = {},\n): MiniMaxProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL ?? defaultBaseURL) ?? defaultBaseURL;\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL ?? defaultVideoBaseURL) ??\n defaultVideoBaseURL;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'anthropic-version': '2023-06-01',\n 'x-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MINIMAX_API_KEY',\n description: 'MiniMax API key',\n }),\n ...options.headers,\n },\n `ai-sdk/minimax/${VERSION}`,\n );\n\n const createChatModel = (modelId: MiniMaxChatModelId) =>\n new AnthropicLanguageModel(modelId, {\n provider: 'minimax.messages',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId,\n supportedUrls: () => ({}),\n });\n\n const getVideoHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MINIMAX_API_KEY',\n description: 'MiniMax API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/minimax/${VERSION}`,\n );\n\n const createVideoModel = (modelId: MiniMaxVideoModelId) =>\n new MiniMaxVideoModel(modelId, {\n provider: 'minimax.video',\n baseURL: videoBaseURL,\n headers: getVideoHeaders,\n fetch: options.fetch,\n });\n\n const provider = (modelId: MiniMaxChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const minimax = createMiniMax();\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n getTopLevelMediaType,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n minimaxVideoModelOptionsSchema,\n minimaxVideoRatios,\n minimaxVideoResolutions,\n type MiniMaxVideoModelOptions,\n} from './minimax-video-model-options';\nimport type { MiniMaxVideoModelId } from './minimax-video-settings';\n\ninterface MiniMaxVideoModelConfig {\n provider: string;\n // API root without a version suffix, e.g. `https://api.minimax.io`.\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype MiniMaxVideoDoGenerateOptions = Parameters<\n Experimental_VideoModelV4['doGenerate']\n>[0];\n\nconst DEFAULT_RESOLUTION = '2K';\nconst DEFAULT_ASPECT_RATIO = '16:9';\nconst DEFAULT_POLL_INTERVAL_MS = 10_000;\nconst DEFAULT_POLL_TIMEOUT_MS = 600_000;\nconst MIN_DURATION_SECONDS = 5;\nconst MAX_DURATION_SECONDS = 15;\nconst MAX_REFERENCE_IMAGES = 9;\nconst MAX_REFERENCE_VIDEOS = 3;\nconst MAX_REFERENCE_AUDIOS = 3;\n\nconst allowedRatios = new Set<string>(minimaxVideoRatios);\nconst allowedResolutions = new Set<string>(minimaxVideoResolutions);\n\n// The top-level `resolution` is `{width}x{height}`, but the API takes a named\n// tier, so map the canonical 2K frame sizes onto the single tier H3 supports.\n// Anything else can't be honored and warns.\n// One canonical frame size per ratio H3 supports, so a caller who pairs a\n// resolution with any supported ratio resolves to the tier instead of being\n// told 2K is unsupported.\nconst RESOLUTION_MAP: Record<string, string> = {\n // Square\n '2048x2048': '2K',\n // Landscape\n '2560x1080': '2K',\n '2560x1440': '2K',\n '2048x1536': '2K',\n // Portrait\n '1440x2560': '2K',\n '1536x2048': '2K',\n};\n\n// A caller may pass the named tier itself rather than a frame size — `2K` is\n// what the MiniMax API takes, so it is the natural thing to send. Accept it\n// case-insensitively instead of reporting it as unrecognized.\nfunction resolveTopLevelResolution(resolution: string): string | undefined {\n const named = resolution.toUpperCase();\n return allowedResolutions.has(named) ? named : RESOLUTION_MAP[resolution];\n}\n\n// Frame images must be images. Returns the offending top-level media type when\n// a frame is something else, so it can be rejected the way a reference input of\n// the wrong kind is. A frame with no media type is left alone: the core emits\n// URL inputs without one, and unlike a reference there is no routing decision\n// riding on it.\nfunction nonImageFrameMediaType(\n file: Experimental_VideoModelV4File,\n): string | undefined {\n if (file.mediaType == null) {\n return undefined;\n }\n\n const topLevelMediaType = getTopLevelMediaType(file.mediaType);\n return topLevelMediaType === 'image' ? undefined : topLevelMediaType;\n}\n\nexport class MiniMaxVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MiniMaxVideoModelId,\n private config: MiniMaxVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: MiniMaxVideoDoGenerateOptions,\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const minimaxOptions = (await parseProviderOptions({\n provider: 'minimax',\n providerOptions: options.providerOptions,\n schema: minimaxVideoModelOptionsSchema,\n })) as MiniMaxVideoModelOptions | undefined;\n\n if (options.fps != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'MiniMax-H3 does not support a custom frame rate.',\n });\n }\n\n if (options.seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details: 'MiniMax-H3 does not support a seed.',\n });\n }\n\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'MiniMax-H3 generates a single video per call. Only 1 video will be generated.',\n });\n }\n\n if (options.generateAudio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'The MiniMax-H3 API does not expose an audio parameter. The generateAudio option was ignored.',\n });\n }\n\n // Resolution: the API takes a named tier, so an explicit provider option\n // wins and a top-level value is resolved to a tier.\n let resolution: string | undefined = minimaxOptions?.resolution;\n if (options.resolution != null) {\n const mapped = resolveTopLevelResolution(options.resolution);\n if (resolution != null) {\n // The provider option is already a tier, so the only way the two can\n // disagree is a top-level value that maps to no tier at all.\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". MiniMax-H3 only supports \"2K\", ` +\n `so providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n }\n } else if (mapped != null) {\n resolution = mapped;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". MiniMax-H3 only ` +\n 'supports \"2K\".',\n });\n }\n }\n resolution ??= DEFAULT_RESOLUTION;\n\n // `convertImageModelFileToDataUri` passes `url` files through unchanged and\n // encodes inline data as a data URI. MiniMax `mm_file://…` handles survive\n // that pass-through, but not the core `generateVideo` path: it base64-decodes\n // any string that is not `http(s)://` or `data:`, so `mm_file://` only\n // reaches the API through `providerOptions.minimax.referenceAudioUrls`,\n // which is forwarded raw — not through `image`, `frameImages`, or\n // `inputReferences`.\n const content: Array<Record<string, unknown>> = [\n { type: 'text', text: options.prompt ?? '' },\n ];\n\n // The inputs that actually make it into `content` below, after the caps and\n // rejections H3 imposes. Reported as `providerMetadata.minimax\n // .resolvedInputs`: the warnings say an input was dropped, but not how many\n // survived, which callers that meter usage need. Accumulated at the push\n // sites rather than re-derived, so the two cannot disagree.\n let sentImageCount = 0;\n const sentReferenceVideoUrls: string[] = [];\n\n // Resolve first/last frame inputs. A standalone `image` is treated as the\n // first frame (image-to-video). The core sets `image` to the `first_frame`\n // frame image when there is one, so the frame-image entry is tracked\n // separately to report which input a warning came from.\n const firstFrameImage = options.frameImages?.find(\n frame => frame.frameType === 'first_frame',\n )?.image;\n let firstFrame = firstFrameImage ?? options.image;\n let lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n // Reject unusable frames before deciding the generation mode.\n const firstFrameMediaType =\n firstFrame != null ? nonImageFrameMediaType(firstFrame) : undefined;\n if (firstFrame != null && firstFrameMediaType != null) {\n warnings.push({\n type: 'unsupported',\n feature: firstFrameImage != null ? 'frameImages' : 'image',\n details:\n firstFrameMediaType === 'video'\n ? 'MiniMax-H3 does not accept a video as a frame image. The video was ignored.'\n : `MiniMax-H3 only accepts an image as a frame image; the \"${firstFrame.mediaType}\" file was ignored.`,\n });\n firstFrame = undefined;\n }\n\n if (lastFrame != null) {\n if (firstFrame == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'MiniMax-H3 requires a first_frame when a last_frame is provided. The last_frame was ignored.',\n });\n lastFrame = undefined;\n } else {\n const lastFrameMediaType = nonImageFrameMediaType(lastFrame);\n if (lastFrameMediaType != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n lastFrameMediaType === 'video'\n ? 'MiniMax-H3 does not accept a video as a frame image. The last_frame video was ignored.'\n : `MiniMax-H3 only accepts an image as a frame image; the \"${lastFrame.mediaType}\" last_frame was ignored.`,\n });\n lastFrame = undefined;\n }\n }\n }\n\n const usesFrameImages = firstFrame != null || lastFrame != null;\n\n const referenceFiles = options.inputReferences ?? [];\n const referenceAudioUrls = minimaxOptions?.referenceAudioUrls ?? [];\n const usesReferences =\n referenceFiles.length > 0 || referenceAudioUrls.length > 0;\n\n if (usesFrameImages) {\n if (firstFrame != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(firstFrame) },\n role: 'first_frame',\n });\n sentImageCount++;\n }\n\n if (lastFrame != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(lastFrame) },\n role: 'last_frame',\n });\n sentImageCount++;\n }\n\n // Frame images and reference inputs are mutually exclusive.\n if (usesReferences) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3 cannot combine frame images with reference inputs. The references were ignored.',\n });\n }\n } else if (usesReferences) {\n const referenceImages: Experimental_VideoModelV4File[] = [];\n const referenceVideos: Experimental_VideoModelV4File[] = [];\n\n for (const file of referenceFiles) {\n const topLevelMediaType =\n file.mediaType != null\n ? getTopLevelMediaType(file.mediaType)\n : undefined;\n\n if (topLevelMediaType === 'video') {\n referenceVideos.push(file);\n } else if (topLevelMediaType === 'image') {\n referenceImages.push(file);\n } else if (topLevelMediaType == null) {\n // Only URL references can omit a media type.\n // Fall back to an image and warn\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3 requires an explicit mediaType to route URL references as ' +\n 'video or image. Pass { data: url, mediaType: \"video/mp4\" } for video ' +\n 'references. The reference was treated as an image.',\n });\n referenceImages.push(file);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n `MiniMax-H3 only accepts image and video references; the \"${file.mediaType}\" ` +\n 'reference was ignored. Pass reference audio via ' +\n 'providerOptions.minimax.referenceAudioUrls.',\n });\n }\n }\n\n for (const image of referenceImages.slice(0, MAX_REFERENCE_IMAGES)) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(image) },\n role: 'reference_image',\n });\n sentImageCount++;\n }\n if (referenceImages.length > MAX_REFERENCE_IMAGES) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_IMAGES} reference images. Extra images were ignored.`,\n });\n }\n\n for (const video of referenceVideos.slice(0, MAX_REFERENCE_VIDEOS)) {\n const url = convertImageModelFileToDataUri(video);\n content.push({\n type: 'video_url',\n video_url: { url },\n role: 'reference_video',\n });\n // Inline files become data URIs, which are not worth echoing back.\n if (video.type === 'url') {\n sentReferenceVideoUrls.push(url);\n }\n }\n if (referenceVideos.length > MAX_REFERENCE_VIDEOS) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_VIDEOS} reference videos. Extra videos were ignored.`,\n });\n }\n\n // Reference audio must accompany at least one reference image or video.\n if (referenceAudioUrls.length > 0) {\n if (referenceImages.length === 0 && referenceVideos.length === 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details:\n 'MiniMax-H3 reference audio must be paired with at least one reference image or video. The audio was ignored.',\n });\n } else {\n for (const url of referenceAudioUrls.slice(0, MAX_REFERENCE_AUDIOS)) {\n content.push({\n type: 'audio_url',\n audio_url: { url },\n role: 'reference_audio',\n });\n }\n if (referenceAudioUrls.length > MAX_REFERENCE_AUDIOS) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_AUDIOS} reference audios. Extra audios were ignored.`,\n });\n }\n }\n }\n }\n\n // Aspect ratio. In frame-image mode the ratio follows the supplied image,\n // so an explicit ratio is ignored.\n const isTextToVideo = content.length === 1;\n let ratio = minimaxOptions?.ratio as string | undefined;\n if (ratio == null && options.aspectRatio != null) {\n if (allowedRatios.has(options.aspectRatio)) {\n ratio = options.aspectRatio;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: isTextToVideo\n ? `MiniMax-H3 does not support the aspect ratio \"${options.aspectRatio}\". Using the default (${DEFAULT_ASPECT_RATIO}).`\n : `MiniMax-H3 does not support the aspect ratio \"${options.aspectRatio}\". Using the provider default (adaptive).`,\n });\n if (isTextToVideo) {\n ratio = DEFAULT_ASPECT_RATIO;\n }\n }\n }\n if (ratio === 'adaptive' && isTextToVideo) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'MiniMax-H3 text-to-video does not support the adaptive aspect ratio. ' +\n `Using the default (${DEFAULT_ASPECT_RATIO}).`,\n });\n ratio = DEFAULT_ASPECT_RATIO;\n }\n if (usesFrameImages && ratio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'MiniMax-H3 derives the aspect ratio from the frame image; the requested ratio was ignored.',\n });\n ratio = undefined;\n }\n if (ratio == null && isTextToVideo) {\n ratio = DEFAULT_ASPECT_RATIO;\n }\n\n // H3 takes an integer between 5 and 15, so round before clamping: a\n // fractional duration is rejected by the API just as an out-of-range one is.\n let duration = options.duration ?? MIN_DURATION_SECONDS;\n if (options.duration != null) {\n if (!Number.isInteger(duration)) {\n duration = Math.round(duration);\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 requires a whole number of seconds. The requested duration of ${options.duration} was rounded to ${duration}.`,\n });\n }\n\n if (duration > MAX_DURATION_SECONDS) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 supports at most ${MAX_DURATION_SECONDS} seconds. The requested duration of ${options.duration} was clamped to ${MAX_DURATION_SECONDS}.`,\n });\n duration = MAX_DURATION_SECONDS;\n } else if (duration < MIN_DURATION_SECONDS) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 requires at least ${MIN_DURATION_SECONDS} seconds. The requested duration of ${options.duration} was clamped to ${MIN_DURATION_SECONDS}.`,\n });\n duration = MIN_DURATION_SECONDS;\n }\n }\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n content,\n resolution,\n duration,\n };\n if (ratio != null) {\n body.ratio = ratio;\n }\n if (minimaxOptions?.aigcWatermark != null) {\n body.aigc_watermark = minimaxOptions.aigcWatermark;\n }\n\n const baseURL = this.config.baseURL;\n\n const { value: createResponse } = await postJsonToApi({\n url: `${baseURL}/v2/video_generation`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: minimaxVideoFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n minimaxCreateVideoResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from the MiniMax API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n const pollIntervalMs =\n minimaxOptions?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const pollTimeoutMs =\n minimaxOptions?.pollTimeoutMs ?? DEFAULT_POLL_TIMEOUT_MS;\n const startTime = Date.now();\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_TIMEOUT',\n message: `MiniMax video generation timed out after ${pollTimeoutMs}ms. Task ID: ${taskId}`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${baseURL}/v2/query/video_generation/${taskId}`,\n validateUrl: false,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n minimaxVideoStatusResponseSchema,\n ),\n failedResponseHandler: minimaxVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const task = statusResponse.task;\n\n switch (task.status) {\n case 'succeeded': {\n const url = task.content?.url;\n if (!url) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_ERROR',\n message: `MiniMax video generation completed but no video URL was returned. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url' as const,\n url,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n minimax: {\n taskId,\n videoUrl: url,\n resolvedInputs: {\n imageCount: sentImageCount,\n referenceVideoUrls: sentReferenceVideoUrls,\n },\n ...(task.duration != null ? { duration: task.duration } : {}),\n ...(task.ratio != null ? { ratio: task.ratio } : {}),\n ...(task.resolution != null\n ? { resolution: task.resolution }\n : {}),\n ...(task.usage != null\n ? {\n usage: {\n totalSeconds: task.usage.total_seconds,\n inputSeconds: task.usage.input_seconds,\n outputSeconds: task.usage.output_seconds,\n },\n }\n : {}),\n },\n },\n };\n }\n\n case 'failed': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_FAILED',\n message: `MiniMax video generation failed${\n task.error?.message ? `: ${task.error.message}` : ''\n }${task.error?.code != null ? ` (${task.error.code})` : ''}. Task ID: ${taskId}`,\n });\n }\n\n case 'cancelled': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_CANCELLED',\n message: `MiniMax video generation was cancelled. Task ID: ${taskId}`,\n });\n }\n\n case 'expired': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_EXPIRED',\n message: `MiniMax video generation request expired. Task ID: ${taskId}`,\n });\n }\n\n // 'queued' | 'running' | unknown → keep polling.\n default:\n break;\n }\n }\n }\n}\n\nconst minimaxCreateVideoResponseSchema = z.object({\n task_id: z.string().nullish(),\n});\n\nconst minimaxVideoStatusResponseSchema = z.object({\n task: z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n content: z\n .object({\n url: z.string().nullish(),\n })\n .nullish(),\n resolution: z.string().nullish(),\n duration: z.number().nullish(),\n ratio: z.string().nullish(),\n usage: z\n .object({\n total_seconds: z.number().nullish(),\n input_seconds: z.number().nullish(),\n output_seconds: z.number().nullish(),\n })\n .nullish(),\n error: z\n .object({\n code: z.union([z.string(), z.number()]).nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n }),\n});\n\nconst minimaxVideoErrorSchema = z.object({\n type: z.string().nullish(),\n error: z\n .object({\n type: z.string().nullish(),\n message: z.string().nullish(),\n http_code: z.union([z.string(), z.number()]).nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst minimaxVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: minimaxVideoErrorSchema,\n errorToMessage: data =>\n data.error?.message ?? 'MiniMax video generation error',\n});\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Aspect ratios supported by the MiniMax-H3 video model.\n */\nexport const minimaxVideoRatios = [\n 'adaptive',\n '21:9',\n '16:9',\n '4:3',\n '1:1',\n '3:4',\n '9:16',\n] as const;\n\n/**\n * Output resolutions supported by the MiniMax-H3 video model.\n */\nexport const minimaxVideoResolutions = ['2K'] as const;\n\n/**\n * Provider options for MiniMax video generation.\n */\nexport const minimaxVideoProviderOptions = z.object({\n /**\n * Output resolution.\n */\n resolution: z.enum(minimaxVideoResolutions).optional(),\n\n /**\n * Aspect ratio of the generated video. Overrides the top-level `aspectRatio`.\n */\n ratio: z.enum(minimaxVideoRatios).optional(),\n\n /**\n * Reference audio URLs for reference-to-video generation.\n */\n referenceAudioUrls: z.array(z.string()).optional(),\n\n /**\n * Whether to embed an AIGC watermark in the output. Defaults to `false`.\n */\n aigcWatermark: z.boolean().optional(),\n\n /**\n * Interval in milliseconds between task status polls. Default: 10000.\n */\n pollIntervalMs: z.number().int().positive().optional(),\n\n /**\n * Maximum time in milliseconds to poll before timing out. Default: 600000.\n */\n pollTimeoutMs: z.number().int().positive().optional(),\n});\n\nexport type MiniMaxVideoModelOptions = z.infer<\n typeof minimaxVideoProviderOptions\n>;\n\nexport const minimaxVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(minimaxVideoProviderOptions),\n);\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,8BAA8B;;;ACbvC;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,KAAAA,UAAS;;;ACpBlB,SAAS,YAAY,iBAAiB;AACtC,SAAS,SAAS;AAKX,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,0BAA0B,CAAC,IAAI;AAKrC,IAAM,8BAA8B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAIlD,YAAY,EAAE,KAAK,uBAAuB,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKrD,OAAO,EAAE,KAAK,kBAAkB,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAK3C,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKjD,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKpC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKrD,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACtD,CAAC;AAMM,IAAM,iCAAiC;AAAA,EAAW,MACvD,UAAU,2BAA2B;AACvC;;;ADlBA,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAE7B,IAAM,gBAAgB,IAAI,IAAY,kBAAkB;AACxD,IAAM,qBAAqB,IAAI,IAAY,uBAAuB;AAQlE,IAAM,iBAAyC;AAAA;AAAA,EAE7C,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA,EACb,aAAa;AACf;AAKA,SAAS,0BAA0B,YAAwC;AACzE,QAAM,QAAQ,WAAW,YAAY;AACrC,SAAO,mBAAmB,IAAI,KAAK,IAAI,QAAQ,eAAe,UAAU;AAC1E;AAOA,SAAS,uBACP,MACoB;AACpB,MAAI,KAAK,aAAa,MAAM;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,qBAAqB,KAAK,SAAS;AAC7D,SAAO,sBAAsB,UAAU,SAAY;AACrD;AAEO,IAAM,oBAAN,MAA6D;AAAA,EAQlE,YACW,SACD,QACR;AAFS;AACD;AATV,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAAA,EASzB;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAM,WACJ,SACuE;AAlH3E;AAmHI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,WAA8B,CAAC;AAErC,UAAM,iBAAkB,MAAM,qBAAqB;AAAA,MACjD,UAAU;AAAA,MACV,iBAAiB,QAAQ;AAAA,MACzB,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,QAAQ,OAAO,MAAM;AACvB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,QAAQ,MAAM;AACxB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,KAAK,QAAQ,QAAQ,IAAI,GAAG;AACtC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,iBAAiB,MAAM;AACjC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAIA,QAAI,aAAiC,iDAAgB;AACrD,QAAI,QAAQ,cAAc,MAAM;AAC9B,YAAM,SAAS,0BAA0B,QAAQ,UAAU;AAC3D,UAAI,cAAc,MAAM;AAGtB,YAAI,UAAU,MAAM;AAClB,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE,4BAA4B,QAAQ,UAAU,6EACH,UAAU;AAAA,UACzD,CAAC;AAAA,QACH;AAAA,MACF,WAAW,UAAU,MAAM;AACzB,qBAAa;AAAA,MACf,OAAO;AACL,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE,4BAA4B,QAAQ,UAAU;AAAA,QAElD,CAAC;AAAA,MACH;AAAA,IACF;AACA,mDAAe;AASf,UAAM,UAA0C;AAAA,MAC9C,EAAE,MAAM,QAAQ,OAAM,aAAQ,WAAR,YAAkB,GAAG;AAAA,IAC7C;AAOA,QAAI,iBAAiB;AACrB,UAAM,yBAAmC,CAAC;AAM1C,UAAM,mBAAkB,mBAAQ,gBAAR,mBAAqB;AAAA,MAC3C,WAAS,MAAM,cAAc;AAAA,UADP,mBAErB;AACH,QAAI,aAAa,4CAAmB,QAAQ;AAC5C,QAAI,aAAY,mBAAQ,gBAAR,mBAAqB;AAAA,MACnC,WAAS,MAAM,cAAc;AAAA,UADf,mBAEb;AAGH,UAAM,sBACJ,cAAc,OAAO,uBAAuB,UAAU,IAAI;AAC5D,QAAI,cAAc,QAAQ,uBAAuB,MAAM;AACrD,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,mBAAmB,OAAO,gBAAgB;AAAA,QACnD,SACE,wBAAwB,UACpB,gFACA,2DAA2D,WAAW,SAAS;AAAA,MACvF,CAAC;AACD,mBAAa;AAAA,IACf;AAEA,QAAI,aAAa,MAAM;AACrB,UAAI,cAAc,MAAM;AACtB,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QACJ,CAAC;AACD,oBAAY;AAAA,MACd,OAAO;AACL,cAAM,qBAAqB,uBAAuB,SAAS;AAC3D,YAAI,sBAAsB,MAAM;AAC9B,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE,uBAAuB,UACnB,2FACA,2DAA2D,UAAU,SAAS;AAAA,UACtF,CAAC;AACD,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,UAAM,kBAAiB,aAAQ,oBAAR,YAA2B,CAAC;AACnD,UAAM,sBAAqB,sDAAgB,uBAAhB,YAAsC,CAAC;AAClE,UAAM,iBACJ,eAAe,SAAS,KAAK,mBAAmB,SAAS;AAE3D,QAAI,iBAAiB;AACnB,UAAI,cAAc,MAAM;AACtB,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,EAAE,KAAK,+BAA+B,UAAU,EAAE;AAAA,UAC7D,MAAM;AAAA,QACR,CAAC;AACD;AAAA,MACF;AAEA,UAAI,aAAa,MAAM;AACrB,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,EAAE,KAAK,+BAA+B,SAAS,EAAE;AAAA,UAC5D,MAAM;AAAA,QACR,CAAC;AACD;AAAA,MACF;AAGA,UAAI,gBAAgB;AAClB,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,IACF,WAAW,gBAAgB;AACzB,YAAM,kBAAmD,CAAC;AAC1D,YAAM,kBAAmD,CAAC;AAE1D,iBAAW,QAAQ,gBAAgB;AACjC,cAAM,oBACJ,KAAK,aAAa,OACd,qBAAqB,KAAK,SAAS,IACnC;AAEN,YAAI,sBAAsB,SAAS;AACjC,0BAAgB,KAAK,IAAI;AAAA,QAC3B,WAAW,sBAAsB,SAAS;AACxC,0BAAgB,KAAK,IAAI;AAAA,QAC3B,WAAW,qBAAqB,MAAM;AAGpC,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE;AAAA,UAGJ,CAAC;AACD,0BAAgB,KAAK,IAAI;AAAA,QAC3B,OAAO;AACL,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE,4DAA4D,KAAK,SAAS;AAAA,UAG9E,CAAC;AAAA,QACH;AAAA,MACF;AAEA,iBAAW,SAAS,gBAAgB,MAAM,GAAG,oBAAoB,GAAG;AAClE,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,EAAE,KAAK,+BAA+B,KAAK,EAAE;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AACD;AAAA,MACF;AACA,UAAI,gBAAgB,SAAS,sBAAsB;AACjD,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,8BAA8B,oBAAoB;AAAA,QAC7D,CAAC;AAAA,MACH;AAEA,iBAAW,SAAS,gBAAgB,MAAM,GAAG,oBAAoB,GAAG;AAClE,cAAM,MAAM,+BAA+B,KAAK;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,EAAE,IAAI;AAAA,UACjB,MAAM;AAAA,QACR,CAAC;AAED,YAAI,MAAM,SAAS,OAAO;AACxB,iCAAuB,KAAK,GAAG;AAAA,QACjC;AAAA,MACF;AACA,UAAI,gBAAgB,SAAS,sBAAsB;AACjD,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,8BAA8B,oBAAoB;AAAA,QAC7D,CAAC;AAAA,MACH;AAGA,UAAI,mBAAmB,SAAS,GAAG;AACjC,YAAI,gBAAgB,WAAW,KAAK,gBAAgB,WAAW,GAAG;AAChE,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE;AAAA,UACJ,CAAC;AAAA,QACH,OAAO;AACL,qBAAW,OAAO,mBAAmB,MAAM,GAAG,oBAAoB,GAAG;AACnE,oBAAQ,KAAK;AAAA,cACX,MAAM;AAAA,cACN,WAAW,EAAE,IAAI;AAAA,cACjB,MAAM;AAAA,YACR,CAAC;AAAA,UACH;AACA,cAAI,mBAAmB,SAAS,sBAAsB;AACpD,qBAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,SAAS;AAAA,cACT,SAAS,8BAA8B,oBAAoB;AAAA,YAC7D,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAIA,UAAM,gBAAgB,QAAQ,WAAW;AACzC,QAAI,QAAQ,iDAAgB;AAC5B,QAAI,SAAS,QAAQ,QAAQ,eAAe,MAAM;AAChD,UAAI,cAAc,IAAI,QAAQ,WAAW,GAAG;AAC1C,gBAAQ,QAAQ;AAAA,MAClB,OAAO;AACL,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,gBACL,iDAAiD,QAAQ,WAAW,yBAAyB,oBAAoB,OACjH,iDAAiD,QAAQ,WAAW;AAAA,QAC1E,CAAC;AACD,YAAI,eAAe;AACjB,kBAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AACA,QAAI,UAAU,cAAc,eAAe;AACzC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE,2FACsB,oBAAoB;AAAA,MAC9C,CAAC;AACD,cAAQ;AAAA,IACV;AACA,QAAI,mBAAmB,SAAS,MAAM;AACpC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AACD,cAAQ;AAAA,IACV;AACA,QAAI,SAAS,QAAQ,eAAe;AAClC,cAAQ;AAAA,IACV;AAIA,QAAI,YAAW,aAAQ,aAAR,YAAoB;AACnC,QAAI,QAAQ,YAAY,MAAM;AAC5B,UAAI,CAAC,OAAO,UAAU,QAAQ,GAAG;AAC/B,mBAAW,KAAK,MAAM,QAAQ;AAC9B,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,4EAA4E,QAAQ,QAAQ,mBAAmB,QAAQ;AAAA,QAClI,CAAC;AAAA,MACH;AAEA,UAAI,WAAW,sBAAsB;AACnC,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,+BAA+B,oBAAoB,uCAAuC,QAAQ,QAAQ,mBAAmB,oBAAoB;AAAA,QAC5J,CAAC;AACD,mBAAW;AAAA,MACb,WAAW,WAAW,sBAAsB;AAC1C,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,gCAAgC,oBAAoB,uCAAuC,QAAQ,QAAQ,mBAAmB,oBAAoB;AAAA,QAC7J,CAAC;AACD,mBAAW;AAAA,MACb;AAAA,IACF;AAEA,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,SAAS,MAAM;AACjB,WAAK,QAAQ;AAAA,IACf;AACA,SAAI,iDAAgB,kBAAiB,MAAM;AACzC,WAAK,iBAAiB,eAAe;AAAA,IACvC;AAEA,UAAM,UAAU,KAAK,OAAO;AAE5B,UAAM,EAAE,OAAO,eAAe,IAAI,MAAM,cAAc;AAAA,MACpD,KAAK,GAAG,OAAO;AAAA,MACf,SAAS;AAAA,QACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,QACjC,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,SAAS,eAAe;AAC9B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,uDAAuD,KAAK,UAAU,cAAc,CAAC;AAAA,MAChG,CAAC;AAAA,IACH;AAEA,UAAM,kBACJ,sDAAgB,mBAAhB,YAAkC;AACpC,UAAM,iBACJ,sDAAgB,kBAAhB,YAAiC;AACnC,UAAM,YAAY,KAAK,IAAI;AAC3B,QAAI;AAEJ,WAAO,MAAM;AACX,YAAM,MAAM,gBAAgB,EAAE,aAAa,QAAQ,YAAY,CAAC;AAEhE,UAAI,KAAK,IAAI,IAAI,YAAY,eAAe;AAC1C,cAAM,IAAI,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,4CAA4C,aAAa,gBAAgB,MAAM;AAAA,QAC1F,CAAC;AAAA,MACH;AAEA,YAAM,EAAE,OAAO,gBAAgB,iBAAiB,YAAY,IAC1D,MAAM,WAAW;AAAA,QACf,KAAK,GAAG,OAAO,8BAA8B,MAAM;AAAA,QACnD,aAAa;AAAA,QACb,SAAS;AAAA,UACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,UACjC,QAAQ;AAAA,QACV;AAAA,QACA,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuB;AAAA,QACvB,aAAa,QAAQ;AAAA,QACrB,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAEH,wBAAkB;AAClB,YAAM,OAAO,eAAe;AAE5B,cAAQ,KAAK,QAAQ;AAAA,QACnB,KAAK,aAAa;AAChB,gBAAM,OAAM,UAAK,YAAL,mBAAc;AAC1B,cAAI,CAAC,KAAK;AACR,kBAAM,IAAI,WAAW;AAAA,cACnB,MAAM;AAAA,cACN,SAAS,8EAA8E,MAAM;AAAA,YAC/F,CAAC;AAAA,UACH;AAEA,iBAAO;AAAA,YACL,QAAQ;AAAA,cACN;AAAA,gBACE,MAAM;AAAA,gBACN;AAAA,gBACA,WAAW;AAAA,cACb;AAAA,YACF;AAAA,YACA;AAAA,YACA,UAAU;AAAA,cACR,WAAW;AAAA,cACX,SAAS,KAAK;AAAA,cACd,SAAS;AAAA,YACX;AAAA,YACA,kBAAkB;AAAA,cAChB,SAAS;AAAA,gBACP;AAAA,gBACA,UAAU;AAAA,gBACV,gBAAgB;AAAA,kBACd,YAAY;AAAA,kBACZ,oBAAoB;AAAA,gBACtB;AAAA,gBACA,GAAI,KAAK,YAAY,OAAO,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,gBAC3D,GAAI,KAAK,SAAS,OAAO,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,gBAClD,GAAI,KAAK,cAAc,OACnB,EAAE,YAAY,KAAK,WAAW,IAC9B,CAAC;AAAA,gBACL,GAAI,KAAK,SAAS,OACd;AAAA,kBACE,OAAO;AAAA,oBACL,cAAc,KAAK,MAAM;AAAA,oBACzB,cAAc,KAAK,MAAM;AAAA,oBACzB,eAAe,KAAK,MAAM;AAAA,kBAC5B;AAAA,gBACF,IACA,CAAC;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,gBAAM,IAAI,WAAW;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,oCACP,UAAK,UAAL,mBAAY,WAAU,KAAK,KAAK,MAAM,OAAO,KAAK,EACpD,KAAG,UAAK,UAAL,mBAAY,SAAQ,OAAO,KAAK,KAAK,MAAM,IAAI,MAAM,EAAE,cAAc,MAAM;AAAA,UAChF,CAAC;AAAA,QACH;AAAA,QAEA,KAAK,aAAa;AAChB,gBAAM,IAAI,WAAW;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,oDAAoD,MAAM;AAAA,UACrE,CAAC;AAAA,QACH;AAAA,QAEA,KAAK,WAAW;AACd,gBAAM,IAAI,WAAW;AAAA,YACnB,MAAM;AAAA,YACN,SAAS,sDAAsD,MAAM;AAAA,UACvE,CAAC;AAAA,QACH;AAAA;AAAA,QAGA;AACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,mCAAmCC,GAAE,OAAO;AAAA,EAChD,SAASA,GAAE,OAAO,EAAE,QAAQ;AAC9B,CAAC;AAED,IAAM,mCAAmCA,GAAE,OAAO;AAAA,EAChD,MAAMA,GAAE,OAAO;AAAA,IACb,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACvB,QAAQA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC3B,SAASA,GACN,OAAO;AAAA,MACN,KAAKA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC1B,CAAC,EACA,QAAQ;AAAA,IACX,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC/B,UAAUA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC7B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC1B,OAAOA,GACJ,OAAO;AAAA,MACN,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAClC,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAClC,gBAAgBA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACrC,CAAC,EACA,QAAQ;AAAA,IACX,OAAOA,GACJ,OAAO;AAAA,MACN,MAAMA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA,MAChD,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC9B,CAAC,EACA,QAAQ;AAAA,EACb,CAAC;AACH,CAAC;AAED,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EACvC,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACzB,OAAOA,GACJ,OAAO;AAAA,IACN,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC5B,WAAWA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA,EACvD,CAAC,EACA,QAAQ;AAAA,EACX,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;AAED,IAAM,oCAAoC,+BAA+B;AAAA,EACvE,aAAa;AAAA,EACb,gBAAgB,UAAK;AAhqBvB;AAiqBI,4BAAK,UAAL,mBAAY,YAAZ,YAAuB;AAAA;AAC3B,CAAC;;;AEhqBM,IAAM,UACX,OACI,UACA;;;AHyEN,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAErB,SAAS,cACd,UAAmC,CAAC,GACnB;AAnFnB;AAoFE,QAAM,WACJ,2BAAqB,aAAQ,YAAR,YAAmB,cAAc,MAAtD,YAA2D;AAE7D,QAAM,gBACJ,2BAAqB,aAAQ,iBAAR,YAAwB,mBAAmB,MAAhE,YACA;AAEF,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,qBAAqB;AAAA,MACrB,aAAa,WAAW;AAAA,QACtB,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,kBAAkB,OAAO;AAAA,EAC3B;AAEF,QAAM,kBAAkB,CAAC,YACvB,IAAI,uBAAuB,SAAS;AAAA,IAClC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf;AAAA,IACA,eAAe,OAAO,CAAC;AAAA,EACzB,CAAC;AAEH,QAAM,kBAAkB,MACtB;AAAA,IACE;AAAA,MACE,eAAe,UAAU,WAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,kBAAkB,OAAO;AAAA,EAC3B;AAEF,QAAM,mBAAmB,CAAC,YACxB,IAAI,kBAAkB,SAAS;AAAA,IAC7B,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,CAAC,YAAgC,gBAAgB,OAAO;AAEzE,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,QAAQ;AACjB,WAAS,aAAa;AAEtB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,WAAS,qBAAqB,SAAS;AACvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,UAAU,cAAc;","names":["z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/minimax-provider.ts","../src/minimax-video-model.ts","../src/minimax-video-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type Experimental_VideoModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AnthropicLanguageModel } from '@ai-sdk/anthropic/internal';\nimport type { MiniMaxChatModelId } from './minimax-chat-options';\nimport { MiniMaxVideoModel } from './minimax-video-model';\nimport type { MiniMaxVideoModelId } from './minimax-video-settings';\nimport { VERSION } from './version';\n\nexport interface MiniMaxProviderSettings {\n /**\n * MiniMax API key. Default value is taken from the `MINIMAX_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls. Defaults to MiniMax's Anthropic-compatible\n * endpoint (`https://api.minimax.io/anthropic/v1`).\n */\n baseURL?: string;\n /**\n * Use a different URL prefix for video generation API calls.\n * The default prefix is `https://api.minimax.io`.\n */\n videoBaseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface MiniMaxProvider extends ProviderV4 {\n /**\n * Creates a MiniMax model for text generation.\n */\n (modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax language model for text generation.\n */\n languageModel(modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax chat model for text generation.\n */\n chat(modelId: MiniMaxChatModelId): LanguageModelV4;\n\n /**\n * Creates a MiniMax video model for video generation.\n */\n video(modelId: MiniMaxVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a MiniMax video model for video generation.\n */\n videoModel(modelId: MiniMaxVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://api.minimax.io/anthropic/v1';\nconst defaultVideoBaseURL = 'https://api.minimax.io';\n\nexport function createMiniMax(\n options: MiniMaxProviderSettings = {},\n): MiniMaxProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL ?? defaultBaseURL) ?? defaultBaseURL;\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL ?? defaultVideoBaseURL) ??\n defaultVideoBaseURL;\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'anthropic-version': '2023-06-01',\n 'x-api-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MINIMAX_API_KEY',\n description: 'MiniMax API key',\n }),\n ...options.headers,\n },\n `ai-sdk/minimax/${VERSION}`,\n );\n\n const createChatModel = (modelId: MiniMaxChatModelId) =>\n new AnthropicLanguageModel(modelId, {\n provider: 'minimax.messages',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId,\n supportedUrls: () => ({}),\n });\n\n const getVideoHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'MINIMAX_API_KEY',\n description: 'MiniMax API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/minimax/${VERSION}`,\n );\n\n const createVideoModel = (modelId: MiniMaxVideoModelId) =>\n new MiniMaxVideoModel(modelId, {\n provider: 'minimax.video',\n baseURL: videoBaseURL,\n headers: getVideoHeaders,\n fetch: options.fetch,\n });\n\n const provider = (modelId: MiniMaxChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const minimax = createMiniMax();\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n getTopLevelMediaType,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n minimaxVideoModelOptionsSchema,\n minimaxVideoRatios,\n minimaxVideoResolutions,\n type MiniMaxVideoModelOptions,\n} from './minimax-video-model-options';\nimport type { MiniMaxVideoModelId } from './minimax-video-settings';\n\ninterface MiniMaxVideoModelConfig {\n provider: string;\n // API root without a version suffix, e.g. `https://api.minimax.io`.\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\ntype MiniMaxVideoDoGenerateOptions = Parameters<\n NonNullable<Experimental_VideoModelV4['doGenerate']>\n>[0];\n\nconst DEFAULT_RESOLUTION = '2K';\nconst DEFAULT_ASPECT_RATIO = '16:9';\nconst DEFAULT_POLL_INTERVAL_MS = 10_000;\nconst DEFAULT_POLL_TIMEOUT_MS = 600_000;\nconst MIN_DURATION_SECONDS = 5;\nconst MAX_DURATION_SECONDS = 15;\nconst MAX_REFERENCE_IMAGES = 9;\nconst MAX_REFERENCE_VIDEOS = 3;\nconst MAX_REFERENCE_AUDIOS = 3;\n\nconst allowedRatios = new Set<string>(minimaxVideoRatios);\nconst allowedResolutions = new Set<string>(minimaxVideoResolutions);\n\n// The top-level `resolution` is `{width}x{height}`, but the API takes a named\n// tier, so map the canonical 2K frame sizes onto the single tier H3 supports.\n// Anything else can't be honored and warns.\n// One canonical frame size per ratio H3 supports, so a caller who pairs a\n// resolution with any supported ratio resolves to the tier instead of being\n// told 2K is unsupported.\nconst RESOLUTION_MAP: Record<string, string> = {\n // Square\n '2048x2048': '2K',\n // Landscape\n '2560x1080': '2K',\n '2560x1440': '2K',\n '2048x1536': '2K',\n // Portrait\n '1440x2560': '2K',\n '1536x2048': '2K',\n};\n\n// A caller may pass the named tier itself rather than a frame size — `2K` is\n// what the MiniMax API takes, so it is the natural thing to send. Accept it\n// case-insensitively instead of reporting it as unrecognized.\nfunction resolveTopLevelResolution(resolution: string): string | undefined {\n const named = resolution.toUpperCase();\n return allowedResolutions.has(named) ? named : RESOLUTION_MAP[resolution];\n}\n\n// Frame images must be images. Returns the offending top-level media type when\n// a frame is something else, so it can be rejected the way a reference input of\n// the wrong kind is. A frame with no media type is left alone: the core emits\n// URL inputs without one, and unlike a reference there is no routing decision\n// riding on it.\nfunction nonImageFrameMediaType(\n file: Experimental_VideoModelV4File,\n): string | undefined {\n if (file.mediaType == null) {\n return undefined;\n }\n\n const topLevelMediaType = getTopLevelMediaType(file.mediaType);\n return topLevelMediaType === 'image' ? undefined : topLevelMediaType;\n}\n\nexport class MiniMaxVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: MiniMaxVideoModelId,\n private config: MiniMaxVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: MiniMaxVideoDoGenerateOptions,\n ): Promise<\n Awaited<ReturnType<NonNullable<Experimental_VideoModelV4['doGenerate']>>>\n > {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n\n const minimaxOptions = (await parseProviderOptions({\n provider: 'minimax',\n providerOptions: options.providerOptions,\n schema: minimaxVideoModelOptionsSchema,\n })) as MiniMaxVideoModelOptions | undefined;\n\n if (options.fps != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'MiniMax-H3 does not support a custom frame rate.',\n });\n }\n\n if (options.seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details: 'MiniMax-H3 does not support a seed.',\n });\n }\n\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'MiniMax-H3 generates a single video per call. Only 1 video will be generated.',\n });\n }\n\n if (options.generateAudio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'The MiniMax-H3 API does not expose an audio parameter. The generateAudio option was ignored.',\n });\n }\n\n // Resolution: the API takes a named tier, so an explicit provider option\n // wins and a top-level value is resolved to a tier.\n let resolution: string | undefined = minimaxOptions?.resolution;\n if (options.resolution != null) {\n const mapped = resolveTopLevelResolution(options.resolution);\n if (resolution != null) {\n // The provider option is already a tier, so the only way the two can\n // disagree is a top-level value that maps to no tier at all.\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". MiniMax-H3 only supports \"2K\", ` +\n `so providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n }\n } else if (mapped != null) {\n resolution = mapped;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". MiniMax-H3 only ` +\n 'supports \"2K\".',\n });\n }\n }\n resolution ??= DEFAULT_RESOLUTION;\n\n // `convertImageModelFileToDataUri` passes `url` files through unchanged and\n // encodes inline data as a data URI. MiniMax `mm_file://…` handles survive\n // that pass-through, but not the core `generateVideo` path: it base64-decodes\n // any string that is not `http(s)://` or `data:`, so `mm_file://` only\n // reaches the API through `providerOptions.minimax.referenceAudioUrls`,\n // which is forwarded raw — not through `image`, `frameImages`, or\n // `inputReferences`.\n const content: Array<Record<string, unknown>> = [\n { type: 'text', text: options.prompt ?? '' },\n ];\n\n // The inputs that actually make it into `content` below, after the caps and\n // rejections H3 imposes. Reported as `providerMetadata.minimax\n // .resolvedInputs`: the warnings say an input was dropped, but not how many\n // survived, which callers that meter usage need. Accumulated at the push\n // sites rather than re-derived, so the two cannot disagree.\n let sentImageCount = 0;\n const sentReferenceVideoUrls: string[] = [];\n\n // Resolve first/last frame inputs. A standalone `image` is treated as the\n // first frame (image-to-video). The core sets `image` to the `first_frame`\n // frame image when there is one, so the frame-image entry is tracked\n // separately to report which input a warning came from.\n const firstFrameImage = options.frameImages?.find(\n frame => frame.frameType === 'first_frame',\n )?.image;\n let firstFrame = firstFrameImage ?? options.image;\n let lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n // Reject unusable frames before deciding the generation mode.\n const firstFrameMediaType =\n firstFrame != null ? nonImageFrameMediaType(firstFrame) : undefined;\n if (firstFrame != null && firstFrameMediaType != null) {\n warnings.push({\n type: 'unsupported',\n feature: firstFrameImage != null ? 'frameImages' : 'image',\n details:\n firstFrameMediaType === 'video'\n ? 'MiniMax-H3 does not accept a video as a frame image. The video was ignored.'\n : `MiniMax-H3 only accepts an image as a frame image; the \"${firstFrame.mediaType}\" file was ignored.`,\n });\n firstFrame = undefined;\n }\n\n if (lastFrame != null) {\n if (firstFrame == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'MiniMax-H3 requires a first_frame when a last_frame is provided. The last_frame was ignored.',\n });\n lastFrame = undefined;\n } else {\n const lastFrameMediaType = nonImageFrameMediaType(lastFrame);\n if (lastFrameMediaType != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n lastFrameMediaType === 'video'\n ? 'MiniMax-H3 does not accept a video as a frame image. The last_frame video was ignored.'\n : `MiniMax-H3 only accepts an image as a frame image; the \"${lastFrame.mediaType}\" last_frame was ignored.`,\n });\n lastFrame = undefined;\n }\n }\n }\n\n const usesFrameImages = firstFrame != null || lastFrame != null;\n\n const referenceFiles = options.inputReferences ?? [];\n const referenceAudioUrls = minimaxOptions?.referenceAudioUrls ?? [];\n const usesReferences =\n referenceFiles.length > 0 || referenceAudioUrls.length > 0;\n\n if (usesFrameImages) {\n if (firstFrame != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(firstFrame) },\n role: 'first_frame',\n });\n sentImageCount++;\n }\n\n if (lastFrame != null) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(lastFrame) },\n role: 'last_frame',\n });\n sentImageCount++;\n }\n\n // Frame images and reference inputs are mutually exclusive.\n if (usesReferences) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3 cannot combine frame images with reference inputs. The references were ignored.',\n });\n }\n } else if (usesReferences) {\n const referenceImages: Experimental_VideoModelV4File[] = [];\n const referenceVideos: Experimental_VideoModelV4File[] = [];\n\n for (const file of referenceFiles) {\n const topLevelMediaType =\n file.mediaType != null\n ? getTopLevelMediaType(file.mediaType)\n : undefined;\n\n if (topLevelMediaType === 'video') {\n referenceVideos.push(file);\n } else if (topLevelMediaType === 'image') {\n referenceImages.push(file);\n } else if (topLevelMediaType == null) {\n // Only URL references can omit a media type.\n // Fall back to an image and warn\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3 requires an explicit mediaType to route URL references as ' +\n 'video or image. Pass { data: url, mediaType: \"video/mp4\" } for video ' +\n 'references. The reference was treated as an image.',\n });\n referenceImages.push(file);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n `MiniMax-H3 only accepts image and video references; the \"${file.mediaType}\" ` +\n 'reference was ignored. Pass reference audio via ' +\n 'providerOptions.minimax.referenceAudioUrls.',\n });\n }\n }\n\n for (const image of referenceImages.slice(0, MAX_REFERENCE_IMAGES)) {\n content.push({\n type: 'image_url',\n image_url: { url: convertImageModelFileToDataUri(image) },\n role: 'reference_image',\n });\n sentImageCount++;\n }\n if (referenceImages.length > MAX_REFERENCE_IMAGES) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_IMAGES} reference images. Extra images were ignored.`,\n });\n }\n\n for (const video of referenceVideos.slice(0, MAX_REFERENCE_VIDEOS)) {\n const url = convertImageModelFileToDataUri(video);\n content.push({\n type: 'video_url',\n video_url: { url },\n role: 'reference_video',\n });\n // Inline files become data URIs, which are not worth echoing back.\n if (video.type === 'url') {\n sentReferenceVideoUrls.push(url);\n }\n }\n if (referenceVideos.length > MAX_REFERENCE_VIDEOS) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_VIDEOS} reference videos. Extra videos were ignored.`,\n });\n }\n\n // Reference audio must accompany at least one reference image or video.\n if (referenceAudioUrls.length > 0) {\n if (referenceImages.length === 0 && referenceVideos.length === 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details:\n 'MiniMax-H3 reference audio must be paired with at least one reference image or video. The audio was ignored.',\n });\n } else {\n for (const url of referenceAudioUrls.slice(0, MAX_REFERENCE_AUDIOS)) {\n content.push({\n type: 'audio_url',\n audio_url: { url },\n role: 'reference_audio',\n });\n }\n if (referenceAudioUrls.length > MAX_REFERENCE_AUDIOS) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details: `MiniMax-H3 accepts at most ${MAX_REFERENCE_AUDIOS} reference audios. Extra audios were ignored.`,\n });\n }\n }\n }\n }\n\n // Aspect ratio. In frame-image mode the ratio follows the supplied image,\n // so an explicit ratio is ignored.\n const isTextToVideo = content.length === 1;\n let ratio = minimaxOptions?.ratio as string | undefined;\n if (ratio == null && options.aspectRatio != null) {\n if (allowedRatios.has(options.aspectRatio)) {\n ratio = options.aspectRatio;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details: isTextToVideo\n ? `MiniMax-H3 does not support the aspect ratio \"${options.aspectRatio}\". Using the default (${DEFAULT_ASPECT_RATIO}).`\n : `MiniMax-H3 does not support the aspect ratio \"${options.aspectRatio}\". Using the provider default (adaptive).`,\n });\n if (isTextToVideo) {\n ratio = DEFAULT_ASPECT_RATIO;\n }\n }\n }\n if (ratio === 'adaptive' && isTextToVideo) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'MiniMax-H3 text-to-video does not support the adaptive aspect ratio. ' +\n `Using the default (${DEFAULT_ASPECT_RATIO}).`,\n });\n ratio = DEFAULT_ASPECT_RATIO;\n }\n if (usesFrameImages && ratio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'MiniMax-H3 derives the aspect ratio from the frame image; the requested ratio was ignored.',\n });\n ratio = undefined;\n }\n if (ratio == null && isTextToVideo) {\n ratio = DEFAULT_ASPECT_RATIO;\n }\n\n // H3 takes an integer between 5 and 15, so round before clamping: a\n // fractional duration is rejected by the API just as an out-of-range one is.\n let duration = options.duration ?? MIN_DURATION_SECONDS;\n if (options.duration != null) {\n if (!Number.isInteger(duration)) {\n duration = Math.round(duration);\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 requires a whole number of seconds. The requested duration of ${options.duration} was rounded to ${duration}.`,\n });\n }\n\n if (duration > MAX_DURATION_SECONDS) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 supports at most ${MAX_DURATION_SECONDS} seconds. The requested duration of ${options.duration} was clamped to ${MAX_DURATION_SECONDS}.`,\n });\n duration = MAX_DURATION_SECONDS;\n } else if (duration < MIN_DURATION_SECONDS) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `MiniMax-H3 requires at least ${MIN_DURATION_SECONDS} seconds. The requested duration of ${options.duration} was clamped to ${MIN_DURATION_SECONDS}.`,\n });\n duration = MIN_DURATION_SECONDS;\n }\n }\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n content,\n resolution,\n duration,\n };\n if (ratio != null) {\n body.ratio = ratio;\n }\n if (minimaxOptions?.aigcWatermark != null) {\n body.aigc_watermark = minimaxOptions.aigcWatermark;\n }\n\n const baseURL = this.config.baseURL;\n\n const { value: createResponse } = await postJsonToApi({\n url: `${baseURL}/v2/video_generation`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body,\n failedResponseHandler: minimaxVideoFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n minimaxCreateVideoResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from the MiniMax API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n const pollIntervalMs =\n minimaxOptions?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const pollTimeoutMs =\n minimaxOptions?.pollTimeoutMs ?? DEFAULT_POLL_TIMEOUT_MS;\n const startTime = Date.now();\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_TIMEOUT',\n message: `MiniMax video generation timed out after ${pollTimeoutMs}ms. Task ID: ${taskId}`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${baseURL}/v2/query/video_generation/${taskId}`,\n validateUrl: false,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n minimaxVideoStatusResponseSchema,\n ),\n failedResponseHandler: minimaxVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const task = statusResponse.task;\n\n switch (task.status) {\n case 'succeeded': {\n const url = task.content?.url;\n if (!url) {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_ERROR',\n message: `MiniMax video generation completed but no video URL was returned. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url' as const,\n url,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n minimax: {\n taskId,\n videoUrl: url,\n resolvedInputs: {\n imageCount: sentImageCount,\n referenceVideoUrls: sentReferenceVideoUrls,\n },\n ...(task.duration != null ? { duration: task.duration } : {}),\n ...(task.ratio != null ? { ratio: task.ratio } : {}),\n ...(task.resolution != null\n ? { resolution: task.resolution }\n : {}),\n ...(task.usage != null\n ? {\n usage: {\n totalSeconds: task.usage.total_seconds,\n inputSeconds: task.usage.input_seconds,\n outputSeconds: task.usage.output_seconds,\n },\n }\n : {}),\n },\n },\n };\n }\n\n case 'failed': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_FAILED',\n message: `MiniMax video generation failed${\n task.error?.message ? `: ${task.error.message}` : ''\n }${task.error?.code != null ? ` (${task.error.code})` : ''}. Task ID: ${taskId}`,\n });\n }\n\n case 'cancelled': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_CANCELLED',\n message: `MiniMax video generation was cancelled. Task ID: ${taskId}`,\n });\n }\n\n case 'expired': {\n throw new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_EXPIRED',\n message: `MiniMax video generation request expired. Task ID: ${taskId}`,\n });\n }\n\n // 'queued' | 'running' | unknown → keep polling.\n default:\n break;\n }\n }\n }\n}\n\nconst minimaxCreateVideoResponseSchema = z.object({\n task_id: z.string().nullish(),\n});\n\nconst minimaxVideoStatusResponseSchema = z.object({\n task: z.object({\n id: z.string().nullish(),\n status: z.string().nullish(),\n content: z\n .object({\n url: z.string().nullish(),\n })\n .nullish(),\n resolution: z.string().nullish(),\n duration: z.number().nullish(),\n ratio: z.string().nullish(),\n usage: z\n .object({\n total_seconds: z.number().nullish(),\n input_seconds: z.number().nullish(),\n output_seconds: z.number().nullish(),\n })\n .nullish(),\n error: z\n .object({\n code: z.union([z.string(), z.number()]).nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n }),\n});\n\nconst minimaxVideoErrorSchema = z.object({\n type: z.string().nullish(),\n error: z\n .object({\n type: z.string().nullish(),\n message: z.string().nullish(),\n http_code: z.union([z.string(), z.number()]).nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst minimaxVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: minimaxVideoErrorSchema,\n errorToMessage: data =>\n data.error?.message ?? 'MiniMax video generation error',\n});\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Aspect ratios supported by the MiniMax-H3 video model.\n */\nexport const minimaxVideoRatios = [\n 'adaptive',\n '21:9',\n '16:9',\n '4:3',\n '1:1',\n '3:4',\n '9:16',\n] as const;\n\n/**\n * Output resolutions supported by the MiniMax-H3 video model.\n */\nexport const minimaxVideoResolutions = ['2K'] as const;\n\n/**\n * Provider options for MiniMax video generation.\n */\nexport const minimaxVideoProviderOptions = z.object({\n /**\n * Output resolution.\n */\n resolution: z.enum(minimaxVideoResolutions).optional(),\n\n /**\n * Aspect ratio of the generated video. Overrides the top-level `aspectRatio`.\n */\n ratio: z.enum(minimaxVideoRatios).optional(),\n\n /**\n * Reference audio URLs for reference-to-video generation.\n */\n referenceAudioUrls: z.array(z.string()).optional(),\n\n /**\n * Whether to embed an AIGC watermark in the output. Defaults to `false`.\n */\n aigcWatermark: z.boolean().optional(),\n\n /**\n * Interval in milliseconds between task status polls. Default: 10000.\n */\n pollIntervalMs: z.number().int().positive().optional(),\n\n /**\n * Maximum time in milliseconds to poll before timing out. Default: 600000.\n */\n pollTimeoutMs: z.number().int().positive().optional(),\n});\n\nexport type MiniMaxVideoModelOptions = z.infer<\n typeof minimaxVideoProviderOptions\n>;\n\nexport const minimaxVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(minimaxVideoProviderOptions),\n);\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/minimax",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@ai-sdk/anthropic": "4.0.
|
|
29
|
-
"@ai-sdk/provider": "4.0.
|
|
30
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
28
|
+
"@ai-sdk/anthropic": "4.0.29",
|
|
29
|
+
"@ai-sdk/provider": "4.0.5",
|
|
30
|
+
"@ai-sdk/provider-utils": "5.0.20"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "22.19.19",
|
|
@@ -39,7 +39,7 @@ interface MiniMaxVideoModelConfig {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
type MiniMaxVideoDoGenerateOptions = Parameters<
|
|
42
|
-
Experimental_VideoModelV4['doGenerate']
|
|
42
|
+
NonNullable<Experimental_VideoModelV4['doGenerate']>
|
|
43
43
|
>[0];
|
|
44
44
|
|
|
45
45
|
const DEFAULT_RESOLUTION = '2K';
|
|
@@ -112,7 +112,9 @@ export class MiniMaxVideoModel implements Experimental_VideoModelV4 {
|
|
|
112
112
|
|
|
113
113
|
async doGenerate(
|
|
114
114
|
options: MiniMaxVideoDoGenerateOptions,
|
|
115
|
-
): Promise<
|
|
115
|
+
): Promise<
|
|
116
|
+
Awaited<ReturnType<NonNullable<Experimental_VideoModelV4['doGenerate']>>>
|
|
117
|
+
> {
|
|
116
118
|
const currentDate = this.config._internal?.currentDate?.() ?? new Date();
|
|
117
119
|
const warnings: SharedV4Warning[] = [];
|
|
118
120
|
|