@ai-sdk/minimax 3.0.27 → 3.0.29

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 CHANGED
@@ -1,5 +1,25 @@
1
1
  # @ai-sdk/minimax
2
2
 
3
+ ## 3.0.29
4
+
5
+ ### Patch Changes
6
+
7
+ - ef3bac4: Forward `webhookUrl` as `callback_url` in `doStart` for application-owned receivers. Document challenge verification and terminal-status handling requirements. `generateVideo({ webhook })` continues to fall back to SDK polling without invoking the webhook factory.
8
+ - Updated dependencies [9942196]
9
+ - Updated dependencies [5a7e647]
10
+ - @ai-sdk/provider@4.0.13
11
+ - @ai-sdk/anthropic@4.0.52
12
+ - @ai-sdk/provider-utils@5.0.39
13
+
14
+ ## 3.0.28
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [912fb01]
19
+ - @ai-sdk/provider@4.0.12
20
+ - @ai-sdk/anthropic@4.0.51
21
+ - @ai-sdk/provider-utils@5.0.38
22
+
3
23
  ## 3.0.27
4
24
 
5
25
  ### Patch Changes
package/dist/index.js CHANGED
@@ -469,7 +469,12 @@ var MiniMaxVideoModel = class {
469
469
  await resolve(this.config.headers),
470
470
  options.headers
471
471
  ),
472
- body,
472
+ body: {
473
+ ...body,
474
+ // The challenge handshake and progress notifications rule out handleWebhookOption.
475
+ // Forward webhookUrl for caller-owned receivers that echo the challenge within 3s.
476
+ ...options.webhookUrl != null ? { callback_url: options.webhookUrl } : {}
477
+ },
473
478
  failedResponseHandler: minimaxVideoFailedResponseHandler,
474
479
  successfulResponseHandler: createJsonResponseHandler(
475
480
  minimaxCreateVideoResponseSchema
@@ -698,7 +703,7 @@ var minimaxVideoFailedResponseHandler = createJsonErrorResponseHandler({
698
703
  });
699
704
 
700
705
  // src/version.ts
701
- var VERSION = true ? "3.0.27" : "0.0.0-test";
706
+ var VERSION = true ? "3.0.29" : "0.0.0-test";
702
707
 
703
708
  // src/minimax-provider.ts
704
709
  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 as VideoModelV4,\n type Experimental_VideoModelV4File as VideoModelV4File,\n type Experimental_VideoModelV4OperationStartResult as VideoModelV4OperationStartResult,\n type Experimental_VideoModelV4OperationStatusResult as VideoModelV4OperationStatusResult,\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<VideoModelV4['doGenerate']>\n>[0];\n\ntype MiniMaxVideoOperation = {\n taskId: string;\n resolvedInputs: {\n imageCount: number;\n referenceVideoIndices: number[];\n };\n};\n\n// Keep the synchronous API's named errors while exposing status errors as text.\ntype MiniMaxVideoStatusResult =\n | Exclude<VideoModelV4OperationStatusResult, { status: 'error' }>\n | {\n status: 'error';\n error: AISDKError;\n response: VideoModelV4OperationStatusResult['response'];\n };\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 DEFAULT_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);\nconst modelResolutionSettings: Record<\n string,\n { supported: readonly string[]; default: string }\n> = {\n 'MiniMax-H3': { supported: ['768P', '2K'], default: DEFAULT_RESOLUTION },\n 'MiniMax-H3-Max': { supported: ['480P', '768P'], default: '768P' },\n};\n\n// The top-level `resolution` is `{width}x{height}`, but the API takes a named\n// tier, so map canonical frame sizes onto the tiers. One frame size per ratio\n// per tier, so a caller who pairs a resolution with any supported ratio\n// resolves to the tier instead of being told the resolution is unsupported.\n// MiniMax does not publish tier dimensions, so this is a closed table rather\n// than a rule: 480P and 768P rows are named for the shorter side, the 2K rows\n// for the longer one. A frame size not listed here warns.\nconst RESOLUTION_MAP: Record<string, string> = {\n // 480P — square, landscape, portrait\n '480x480': '480P',\n '1120x480': '480P',\n '854x480': '480P',\n '640x480': '480P',\n '480x854': '480P',\n '480x640': '480P',\n // 768P — square, landscape, portrait\n '768x768': '768P',\n '1792x768': '768P',\n '1366x768': '768P',\n '1024x768': '768P',\n '768x1366': '768P',\n '768x1024': '768P',\n // 2K — square, landscape, portrait\n '2048x2048': '2K',\n '2560x1080': '2K',\n '2560x1440': '2K',\n '2048x1536': '2K',\n '1440x2560': '2K',\n '1536x2048': '2K',\n};\n\n// A caller may pass a named tier itself rather than a frame size. Normalize it\n// case-insensitively to the exact casing expected by the MiniMax API.\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(file: VideoModelV4File): 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 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 private async getArgs(options: MiniMaxVideoDoGenerateOptions) {\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: `${this.modelId} 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: `${this.modelId} 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: `${this.modelId} 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: `The ${this.modelId} API does not expose an audio parameter. The generateAudio option was ignored.`,\n });\n }\n\n const resolutionSettings = modelResolutionSettings[this.modelId];\n const supportedResolutions =\n resolutionSettings?.supported ?? minimaxVideoResolutions;\n const supportedResolutionSet = new Set<string>(supportedResolutions);\n const supportedResolutionNames = supportedResolutions\n .map(resolution => `\"${resolution}\"`)\n .join(' or ');\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 (resolution != null && !supportedResolutionSet.has(resolution)) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details: `${this.modelId} supports ${supportedResolutionNames}. The provider resolution \"${resolution}\" was ignored.`,\n });\n resolution = undefined;\n }\n\n if (options.resolution != null) {\n const mapped = resolveTopLevelResolution(options.resolution);\n if (resolution != null) {\n // The provider option is already a tier and wins, so say so whenever\n // the top-level value is dropped — it either names no tier, or names a\n // different one now that every tier has frame sizes.\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". ${this.modelId} supports ${supportedResolutionNames}, ` +\n `so providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n } else if (mapped !== resolution) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `The resolution \"${options.resolution}\" selects ${mapped}, but ` +\n `providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n }\n } else if (mapped != null && supportedResolutionSet.has(mapped)) {\n resolution = mapped;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n mapped == null\n ? `Unrecognized resolution \"${options.resolution}\". ${this.modelId} supports ${supportedResolutionNames}.`\n : `${this.modelId} does not support the resolution \"${mapped}\". It supports ${supportedResolutionNames}.`,\n });\n }\n }\n resolution ??= resolutionSettings?.default ?? 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 sentReferenceVideoIndices: number[] = [];\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 ? `${this.modelId} does not accept a video as a frame image. The video was ignored.`\n : `${this.modelId} 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: `${this.modelId} 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 ? `${this.modelId} does not accept a video as a frame image. The last_frame video was ignored.`\n : `${this.modelId} 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 supportsReferences = this.modelId !== 'MiniMax-H3-Max';\n\n if (!supportsReferences && referenceFiles.length > 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3-Max does not support reference-to-video inputs. The references were ignored.',\n });\n }\n\n if (!supportsReferences && referenceAudioUrls.length > 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details:\n 'MiniMax-H3-Max does not support reference audio. The audio was ignored.',\n });\n }\n\n const usesReferences =\n supportsReferences &&\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: VideoModelV4File[] = [];\n const referenceVideos: Array<{ file: VideoModelV4File; index: number }> =\n [];\n\n for (const [index, file] of referenceFiles.entries()) {\n const topLevelMediaType =\n file.mediaType != null\n ? getTopLevelMediaType(file.mediaType)\n : undefined;\n\n if (topLevelMediaType === 'video') {\n referenceVideos.push({ file, index });\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 { file: video, index } of referenceVideos.slice(\n 0,\n MAX_REFERENCE_VIDEOS,\n )) {\n const url = convertImageModelFileToDataUri(video);\n content.push({\n type: 'video_url',\n video_url: { url },\n role: 'reference_video',\n });\n // Retain input positions, not request URLs or inline data, in the operation.\n if (video.type === 'url') {\n sentReferenceVideoIndices.push(index);\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 ? `${this.modelId} does not support the aspect ratio \"${options.aspectRatio}\". Using the default (${DEFAULT_ASPECT_RATIO}).`\n : `${this.modelId} 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 `${this.modelId} 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: `${this.modelId} 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 // Both H3 models take an integer duration, but H3 starts at 4 seconds while\n // H3-Max starts at 5. Round before clamping because the API rejects both\n // fractional and out-of-range values.\n const minDurationSeconds = this.modelId === 'MiniMax-H3' ? 4 : 5;\n let duration = options.duration ?? DEFAULT_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: `${this.modelId} 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: `${this.modelId} 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 < minDurationSeconds) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `${this.modelId} requires at least ${minDurationSeconds} seconds. The requested duration of ${options.duration} was clamped to ${minDurationSeconds}.`,\n });\n duration = minDurationSeconds;\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 return {\n body,\n warnings,\n resolvedInputs: {\n imageCount: sentImageCount,\n referenceVideoIndices: sentReferenceVideoIndices,\n },\n };\n }\n\n async doStart(\n options: Parameters<NonNullable<VideoModelV4['doStart']>>[0],\n ): Promise<VideoModelV4OperationStartResult> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings, resolvedInputs } = await this.getArgs(options);\n\n const { value: createResponse, responseHeaders } = await postJsonToApi({\n url: `${this.config.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 return {\n operation: { taskId, resolvedInputs } satisfies MiniMaxVideoOperation,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n async doStatus(\n options: Parameters<NonNullable<VideoModelV4['doStatus']>>[0],\n ): Promise<VideoModelV4OperationStatusResult> {\n const result = await this.getStatus(options);\n return result.status === 'error'\n ? { ...result, error: result.error.message }\n : result;\n }\n\n private async getStatus(\n options: Parameters<NonNullable<VideoModelV4['doStatus']>>[0],\n ): Promise<MiniMaxVideoStatusResult> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { taskId, resolvedInputs } =\n options.operation as MiniMaxVideoOperation;\n const baseURL = this.config.baseURL;\n const { value: statusResponse, responseHeaders } = await getFromApi({\n url: `${baseURL}/v2/query/video_generation/${encodeURIComponent(taskId)}`,\n validateUrl: true,\n trustedOrigin: baseURL,\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 const response = {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n };\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 status: 'completed',\n videos: [\n {\n type: 'url' as const,\n url,\n mediaType: 'video/mp4',\n },\n ],\n warnings: [],\n response,\n providerMetadata: {\n minimax: {\n taskId,\n videoUrl: url,\n resolvedInputs,\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 return {\n status: 'error',\n response,\n error: 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\n case 'cancelled': {\n return {\n status: 'error',\n response,\n error: new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_CANCELLED',\n message: `MiniMax video generation was cancelled. Task ID: ${taskId}`,\n }),\n };\n }\n\n case 'expired': {\n return {\n status: 'error',\n response,\n error: new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_EXPIRED',\n message: `MiniMax video generation request expired. Task ID: ${taskId}`,\n }),\n };\n }\n\n // 'queued' | 'running' | unknown → keep polling.\n default:\n return { status: 'pending', response };\n }\n }\n\n async doGenerate(\n options: MiniMaxVideoDoGenerateOptions,\n ): Promise<Awaited<ReturnType<NonNullable<VideoModelV4['doGenerate']>>>> {\n const startResult = await this.doStart(options);\n const operation = startResult.operation as MiniMaxVideoOperation;\n const minimaxOptions = await parseProviderOptions({\n provider: 'minimax',\n providerOptions: options.providerOptions,\n schema: minimaxVideoModelOptionsSchema,\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\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: ${operation.taskId}`,\n });\n }\n\n const result = await this.getStatus({\n operation,\n headers: options.headers,\n abortSignal: options.abortSignal,\n });\n if (result.status === 'pending') {\n continue;\n }\n if (result.status === 'error') {\n throw result.error;\n }\n return {\n videos: result.videos,\n warnings: [...startResult.warnings, ...result.warnings],\n providerMetadata: {\n ...result.providerMetadata,\n minimax: {\n ...result.providerMetadata?.minimax,\n resolvedInputs: {\n imageCount: operation.resolvedInputs.imageCount,\n referenceVideoUrls:\n operation.resolvedInputs.referenceVideoIndices.flatMap(\n index => {\n const file = options.inputReferences?.[index];\n return file?.type === 'url' ? [file.url] : [];\n },\n ),\n },\n },\n },\n response: {\n ...result.response,\n timestamp: startResult.response.timestamp,\n },\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 video models.\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 MiniMax video models. Availability depends\n * on the selected model.\n */\nexport const minimaxVideoResolutions = ['480P', '768P', '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","resolution","_a","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 as VideoModelV4,\n type Experimental_VideoModelV4File as VideoModelV4File,\n type Experimental_VideoModelV4OperationStartResult as VideoModelV4OperationStartResult,\n type Experimental_VideoModelV4OperationStatusResult as VideoModelV4OperationStatusResult,\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<VideoModelV4['doGenerate']>\n>[0];\n\ntype MiniMaxVideoOperation = {\n taskId: string;\n resolvedInputs: {\n imageCount: number;\n referenceVideoIndices: number[];\n };\n};\n\n// Keep the synchronous API's named errors while exposing status errors as text.\ntype MiniMaxVideoStatusResult =\n | Exclude<VideoModelV4OperationStatusResult, { status: 'error' }>\n | {\n status: 'error';\n error: AISDKError;\n response: VideoModelV4OperationStatusResult['response'];\n };\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 DEFAULT_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);\nconst modelResolutionSettings: Record<\n string,\n { supported: readonly string[]; default: string }\n> = {\n 'MiniMax-H3': { supported: ['768P', '2K'], default: DEFAULT_RESOLUTION },\n 'MiniMax-H3-Max': { supported: ['480P', '768P'], default: '768P' },\n};\n\n// The top-level `resolution` is `{width}x{height}`, but the API takes a named\n// tier, so map canonical frame sizes onto the tiers. One frame size per ratio\n// per tier, so a caller who pairs a resolution with any supported ratio\n// resolves to the tier instead of being told the resolution is unsupported.\n// MiniMax does not publish tier dimensions, so this is a closed table rather\n// than a rule: 480P and 768P rows are named for the shorter side, the 2K rows\n// for the longer one. A frame size not listed here warns.\nconst RESOLUTION_MAP: Record<string, string> = {\n // 480P — square, landscape, portrait\n '480x480': '480P',\n '1120x480': '480P',\n '854x480': '480P',\n '640x480': '480P',\n '480x854': '480P',\n '480x640': '480P',\n // 768P — square, landscape, portrait\n '768x768': '768P',\n '1792x768': '768P',\n '1366x768': '768P',\n '1024x768': '768P',\n '768x1366': '768P',\n '768x1024': '768P',\n // 2K — square, landscape, portrait\n '2048x2048': '2K',\n '2560x1080': '2K',\n '2560x1440': '2K',\n '2048x1536': '2K',\n '1440x2560': '2K',\n '1536x2048': '2K',\n};\n\n// A caller may pass a named tier itself rather than a frame size. Normalize it\n// case-insensitively to the exact casing expected by the MiniMax API.\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(file: VideoModelV4File): 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 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 private async getArgs(options: MiniMaxVideoDoGenerateOptions) {\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: `${this.modelId} 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: `${this.modelId} 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: `${this.modelId} 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: `The ${this.modelId} API does not expose an audio parameter. The generateAudio option was ignored.`,\n });\n }\n\n const resolutionSettings = modelResolutionSettings[this.modelId];\n const supportedResolutions =\n resolutionSettings?.supported ?? minimaxVideoResolutions;\n const supportedResolutionSet = new Set<string>(supportedResolutions);\n const supportedResolutionNames = supportedResolutions\n .map(resolution => `\"${resolution}\"`)\n .join(' or ');\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 (resolution != null && !supportedResolutionSet.has(resolution)) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details: `${this.modelId} supports ${supportedResolutionNames}. The provider resolution \"${resolution}\" was ignored.`,\n });\n resolution = undefined;\n }\n\n if (options.resolution != null) {\n const mapped = resolveTopLevelResolution(options.resolution);\n if (resolution != null) {\n // The provider option is already a tier and wins, so say so whenever\n // the top-level value is dropped — it either names no tier, or names a\n // different one now that every tier has frame sizes.\n if (mapped == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `Unrecognized resolution \"${options.resolution}\". ${this.modelId} supports ${supportedResolutionNames}, ` +\n `so providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n } else if (mapped !== resolution) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `The resolution \"${options.resolution}\" selects ${mapped}, but ` +\n `providerOptions.minimax.resolution (\"${resolution}\") was used instead.`,\n });\n }\n } else if (mapped != null && supportedResolutionSet.has(mapped)) {\n resolution = mapped;\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n mapped == null\n ? `Unrecognized resolution \"${options.resolution}\". ${this.modelId} supports ${supportedResolutionNames}.`\n : `${this.modelId} does not support the resolution \"${mapped}\". It supports ${supportedResolutionNames}.`,\n });\n }\n }\n resolution ??= resolutionSettings?.default ?? 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 sentReferenceVideoIndices: number[] = [];\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 ? `${this.modelId} does not accept a video as a frame image. The video was ignored.`\n : `${this.modelId} 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: `${this.modelId} 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 ? `${this.modelId} does not accept a video as a frame image. The last_frame video was ignored.`\n : `${this.modelId} 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 supportsReferences = this.modelId !== 'MiniMax-H3-Max';\n\n if (!supportsReferences && referenceFiles.length > 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'MiniMax-H3-Max does not support reference-to-video inputs. The references were ignored.',\n });\n }\n\n if (!supportsReferences && referenceAudioUrls.length > 0) {\n warnings.push({\n type: 'unsupported',\n feature: 'referenceAudioUrls',\n details:\n 'MiniMax-H3-Max does not support reference audio. The audio was ignored.',\n });\n }\n\n const usesReferences =\n supportsReferences &&\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: VideoModelV4File[] = [];\n const referenceVideos: Array<{ file: VideoModelV4File; index: number }> =\n [];\n\n for (const [index, file] of referenceFiles.entries()) {\n const topLevelMediaType =\n file.mediaType != null\n ? getTopLevelMediaType(file.mediaType)\n : undefined;\n\n if (topLevelMediaType === 'video') {\n referenceVideos.push({ file, index });\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 { file: video, index } of referenceVideos.slice(\n 0,\n MAX_REFERENCE_VIDEOS,\n )) {\n const url = convertImageModelFileToDataUri(video);\n content.push({\n type: 'video_url',\n video_url: { url },\n role: 'reference_video',\n });\n // Retain input positions, not request URLs or inline data, in the operation.\n if (video.type === 'url') {\n sentReferenceVideoIndices.push(index);\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 ? `${this.modelId} does not support the aspect ratio \"${options.aspectRatio}\". Using the default (${DEFAULT_ASPECT_RATIO}).`\n : `${this.modelId} 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 `${this.modelId} 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: `${this.modelId} 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 // Both H3 models take an integer duration, but H3 starts at 4 seconds while\n // H3-Max starts at 5. Round before clamping because the API rejects both\n // fractional and out-of-range values.\n const minDurationSeconds = this.modelId === 'MiniMax-H3' ? 4 : 5;\n let duration = options.duration ?? DEFAULT_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: `${this.modelId} 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: `${this.modelId} 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 < minDurationSeconds) {\n warnings.push({\n type: 'unsupported',\n feature: 'duration',\n details: `${this.modelId} requires at least ${minDurationSeconds} seconds. The requested duration of ${options.duration} was clamped to ${minDurationSeconds}.`,\n });\n duration = minDurationSeconds;\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 return {\n body,\n warnings,\n resolvedInputs: {\n imageCount: sentImageCount,\n referenceVideoIndices: sentReferenceVideoIndices,\n },\n };\n }\n\n async doStart(\n options: Parameters<NonNullable<VideoModelV4['doStart']>>[0],\n ): Promise<VideoModelV4OperationStartResult> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings, resolvedInputs } = await this.getArgs(options);\n\n const { value: createResponse, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/v2/video_generation`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n body: {\n ...body,\n // The challenge handshake and progress notifications rule out handleWebhookOption.\n // Forward webhookUrl for caller-owned receivers that echo the challenge within 3s.\n ...(options.webhookUrl != null\n ? { callback_url: options.webhookUrl }\n : {}),\n },\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 return {\n operation: { taskId, resolvedInputs } satisfies MiniMaxVideoOperation,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n async doStatus(\n options: Parameters<NonNullable<VideoModelV4['doStatus']>>[0],\n ): Promise<VideoModelV4OperationStatusResult> {\n const result = await this.getStatus(options);\n return result.status === 'error'\n ? { ...result, error: result.error.message }\n : result;\n }\n\n private async getStatus(\n options: Parameters<NonNullable<VideoModelV4['doStatus']>>[0],\n ): Promise<MiniMaxVideoStatusResult> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { taskId, resolvedInputs } =\n options.operation as MiniMaxVideoOperation;\n const baseURL = this.config.baseURL;\n const { value: statusResponse, responseHeaders } = await getFromApi({\n url: `${baseURL}/v2/query/video_generation/${encodeURIComponent(taskId)}`,\n validateUrl: true,\n trustedOrigin: baseURL,\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 const response = {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n };\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 status: 'completed',\n videos: [\n {\n type: 'url' as const,\n url,\n mediaType: 'video/mp4',\n },\n ],\n warnings: [],\n response,\n providerMetadata: {\n minimax: {\n taskId,\n videoUrl: url,\n resolvedInputs,\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 return {\n status: 'error',\n response,\n error: 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\n case 'cancelled': {\n return {\n status: 'error',\n response,\n error: new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_CANCELLED',\n message: `MiniMax video generation was cancelled. Task ID: ${taskId}`,\n }),\n };\n }\n\n case 'expired': {\n return {\n status: 'error',\n response,\n error: new AISDKError({\n name: 'MINIMAX_VIDEO_GENERATION_EXPIRED',\n message: `MiniMax video generation request expired. Task ID: ${taskId}`,\n }),\n };\n }\n\n // 'queued' | 'running' | unknown → keep polling.\n default:\n return { status: 'pending', response };\n }\n }\n\n async doGenerate(\n options: MiniMaxVideoDoGenerateOptions,\n ): Promise<Awaited<ReturnType<NonNullable<VideoModelV4['doGenerate']>>>> {\n const startResult = await this.doStart(options);\n const operation = startResult.operation as MiniMaxVideoOperation;\n const minimaxOptions = await parseProviderOptions({\n provider: 'minimax',\n providerOptions: options.providerOptions,\n schema: minimaxVideoModelOptionsSchema,\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\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: ${operation.taskId}`,\n });\n }\n\n const result = await this.getStatus({\n operation,\n headers: options.headers,\n abortSignal: options.abortSignal,\n });\n if (result.status === 'pending') {\n continue;\n }\n if (result.status === 'error') {\n throw result.error;\n }\n return {\n videos: result.videos,\n warnings: [...startResult.warnings, ...result.warnings],\n providerMetadata: {\n ...result.providerMetadata,\n minimax: {\n ...result.providerMetadata?.minimax,\n resolvedInputs: {\n imageCount: operation.resolvedInputs.imageCount,\n referenceVideoUrls:\n operation.resolvedInputs.referenceVideoIndices.flatMap(\n index => {\n const file = options.inputReferences?.[index];\n return file?.type === 'url' ? [file.url] : [];\n },\n ),\n },\n },\n },\n response: {\n ...result.response,\n timestamp: startResult.response.timestamp,\n },\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 video models.\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 MiniMax video models. Availability depends\n * on the selected model.\n */\nexport const minimaxVideoResolutions = ['480P', '768P', '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","resolution","_a","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/minimax",
3
- "version": "3.0.27",
3
+ "version": "3.0.29",
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.50",
29
- "@ai-sdk/provider": "4.0.11",
30
- "@ai-sdk/provider-utils": "5.0.37"
28
+ "@ai-sdk/anthropic": "4.0.52",
29
+ "@ai-sdk/provider": "4.0.13",
30
+ "@ai-sdk/provider-utils": "5.0.39"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@ai-sdk/test-server": "2.0.1",
@@ -586,7 +586,14 @@ export class MiniMaxVideoModel implements VideoModelV4 {
586
586
  await resolve(this.config.headers),
587
587
  options.headers,
588
588
  ),
589
- body,
589
+ body: {
590
+ ...body,
591
+ // The challenge handshake and progress notifications rule out handleWebhookOption.
592
+ // Forward webhookUrl for caller-owned receivers that echo the challenge within 3s.
593
+ ...(options.webhookUrl != null
594
+ ? { callback_url: options.webhookUrl }
595
+ : {}),
596
+ },
590
597
  failedResponseHandler: minimaxVideoFailedResponseHandler,
591
598
  successfulResponseHandler: createJsonResponseHandler(
592
599
  minimaxCreateVideoResponseSchema,