@ai-sdk/alibaba 2.0.21 → 2.0.23
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 +103 -78
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/alibaba-video-model.ts +141 -90
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @ai-sdk/alibaba
|
|
2
2
|
|
|
3
|
+
## 2.0.23
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 79e133c: async APIs for generateVideo (poll, webhook)
|
|
8
|
+
|
|
9
|
+
Adds an asynchronous start/status flow to the experimental video model
|
|
10
|
+
interface (`VideoModelV4`): models may now implement `doStart`, `doStatus`,
|
|
11
|
+
and `handleWebhookOption` instead of (or in addition to) `doGenerate`, and
|
|
12
|
+
`experimental_generateVideo` accepts `poll` and `webhook` options to
|
|
13
|
+
orchestrate completion via polling or webhooks. Polling configuration can use
|
|
14
|
+
a custom delay implementation for durable workflow compatibility.
|
|
15
|
+
|
|
16
|
+
- Updated dependencies [79e133c]
|
|
17
|
+
- @ai-sdk/provider@4.0.5
|
|
18
|
+
- @ai-sdk/openai-compatible@3.0.21
|
|
19
|
+
- @ai-sdk/provider-utils@5.0.19
|
|
20
|
+
|
|
21
|
+
## 2.0.22
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [5fc7da5]
|
|
26
|
+
- Updated dependencies [93b2acd]
|
|
27
|
+
- @ai-sdk/provider-utils@5.0.18
|
|
28
|
+
- @ai-sdk/openai-compatible@3.0.20
|
|
29
|
+
|
|
3
30
|
## 2.0.21
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -866,7 +866,6 @@ import {
|
|
|
866
866
|
convertUint8ArrayToBase64,
|
|
867
867
|
createJsonErrorResponseHandler as createJsonErrorResponseHandler3,
|
|
868
868
|
createJsonResponseHandler as createJsonResponseHandler3,
|
|
869
|
-
delay,
|
|
870
869
|
getFromApi,
|
|
871
870
|
parseProviderOptions as parseProviderOptions3,
|
|
872
871
|
postJsonToApi as postJsonToApi3,
|
|
@@ -1063,9 +1062,8 @@ var AlibabaVideoModel = class {
|
|
|
1063
1062
|
get provider() {
|
|
1064
1063
|
return this.config.provider;
|
|
1065
1064
|
}
|
|
1066
|
-
async
|
|
1067
|
-
var _a, _b, _c, _d, _e
|
|
1068
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
1065
|
+
async buildRequest(options) {
|
|
1066
|
+
var _a, _b, _c, _d, _e;
|
|
1069
1067
|
const warnings = [];
|
|
1070
1068
|
const mode = detectMode(this.modelId);
|
|
1071
1069
|
const alibabaOptions = await parseProviderOptions3({
|
|
@@ -1106,9 +1104,9 @@ var AlibabaVideoModel = class {
|
|
|
1106
1104
|
}
|
|
1107
1105
|
}
|
|
1108
1106
|
}
|
|
1109
|
-
const lastFrame = (
|
|
1107
|
+
const lastFrame = (_b = (_a = options.frameImages) == null ? void 0 : _a.find(
|
|
1110
1108
|
(frame) => frame.frameType === "last_frame"
|
|
1111
|
-
)) == null ? void 0 :
|
|
1109
|
+
)) == null ? void 0 : _b.image;
|
|
1112
1110
|
if (lastFrame != null) {
|
|
1113
1111
|
warnings.push({
|
|
1114
1112
|
type: "unsupported",
|
|
@@ -1147,7 +1145,7 @@ var AlibabaVideoModel = class {
|
|
|
1147
1145
|
}
|
|
1148
1146
|
}
|
|
1149
1147
|
if (supportsRatio) {
|
|
1150
|
-
const ratio = (
|
|
1148
|
+
const ratio = (_d = (_c = alibabaOptions == null ? void 0 : alibabaOptions.ratio) != null ? _c : options.aspectRatio) != null ? _d : options.resolution != null ? deriveRatioFromResolution(options.resolution) : void 0;
|
|
1151
1149
|
if (ratio != null) {
|
|
1152
1150
|
parameters.ratio = ratio;
|
|
1153
1151
|
}
|
|
@@ -1169,7 +1167,7 @@ var AlibabaVideoModel = class {
|
|
|
1169
1167
|
if ((alibabaOptions == null ? void 0 : alibabaOptions.watermark) != null) {
|
|
1170
1168
|
parameters.watermark = alibabaOptions.watermark;
|
|
1171
1169
|
}
|
|
1172
|
-
const audio = (
|
|
1170
|
+
const audio = (_e = options.generateAudio) != null ? _e : alibabaOptions == null ? void 0 : alibabaOptions.audio;
|
|
1173
1171
|
if (audio != null) {
|
|
1174
1172
|
if (wan27) {
|
|
1175
1173
|
warnings.push({
|
|
@@ -1202,7 +1200,55 @@ var AlibabaVideoModel = class {
|
|
|
1202
1200
|
details: "Alibaba video models only support generating 1 video per call."
|
|
1203
1201
|
});
|
|
1204
1202
|
}
|
|
1205
|
-
|
|
1203
|
+
return { input, parameters, warnings, alibabaOptions };
|
|
1204
|
+
}
|
|
1205
|
+
buildCompletedResult(statusResponse, responseHeaders, warnings, currentDate) {
|
|
1206
|
+
var _a, _b, _c;
|
|
1207
|
+
const taskId = (_a = statusResponse.output) == null ? void 0 : _a.task_id;
|
|
1208
|
+
const videoUrl = (_b = statusResponse.output) == null ? void 0 : _b.video_url;
|
|
1209
|
+
if (!videoUrl) {
|
|
1210
|
+
throw new AISDKError({
|
|
1211
|
+
name: "ALIBABA_VIDEO_GENERATION_ERROR",
|
|
1212
|
+
message: `No video URL in response. Task ID: ${taskId}`
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
return {
|
|
1216
|
+
status: "completed",
|
|
1217
|
+
videos: [
|
|
1218
|
+
{
|
|
1219
|
+
type: "url",
|
|
1220
|
+
url: videoUrl,
|
|
1221
|
+
mediaType: "video/mp4"
|
|
1222
|
+
}
|
|
1223
|
+
],
|
|
1224
|
+
warnings,
|
|
1225
|
+
response: {
|
|
1226
|
+
timestamp: currentDate,
|
|
1227
|
+
modelId: this.modelId,
|
|
1228
|
+
headers: responseHeaders
|
|
1229
|
+
},
|
|
1230
|
+
providerMetadata: {
|
|
1231
|
+
alibaba: {
|
|
1232
|
+
taskId,
|
|
1233
|
+
videoUrl,
|
|
1234
|
+
...((_c = statusResponse.output) == null ? void 0 : _c.actual_prompt) ? { actualPrompt: statusResponse.output.actual_prompt } : {},
|
|
1235
|
+
...statusResponse.usage ? {
|
|
1236
|
+
usage: {
|
|
1237
|
+
duration: statusResponse.usage.duration,
|
|
1238
|
+
outputVideoDuration: statusResponse.usage.output_video_duration,
|
|
1239
|
+
resolution: statusResponse.usage.SR,
|
|
1240
|
+
size: statusResponse.usage.size
|
|
1241
|
+
}
|
|
1242
|
+
} : {}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
};
|
|
1246
|
+
}
|
|
1247
|
+
async doStart(options) {
|
|
1248
|
+
var _a, _b, _c, _d;
|
|
1249
|
+
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
1250
|
+
const { input, parameters, warnings } = await this.buildRequest(options);
|
|
1251
|
+
const { value: createResponse, responseHeaders } = await postJsonToApi3({
|
|
1206
1252
|
url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,
|
|
1207
1253
|
headers: combineHeaders3(
|
|
1208
1254
|
await resolve(this.config.headers),
|
|
@@ -1223,95 +1269,74 @@ var AlibabaVideoModel = class {
|
|
|
1223
1269
|
abortSignal: options.abortSignal,
|
|
1224
1270
|
fetch: this.config.fetch
|
|
1225
1271
|
});
|
|
1226
|
-
const taskId = (
|
|
1272
|
+
const taskId = (_d = createResponse.output) == null ? void 0 : _d.task_id;
|
|
1227
1273
|
if (!taskId) {
|
|
1228
1274
|
throw new AISDKError({
|
|
1229
1275
|
name: "ALIBABA_VIDEO_GENERATION_ERROR",
|
|
1230
1276
|
message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`
|
|
1231
1277
|
});
|
|
1232
1278
|
}
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
if (Date.now() - startTime > pollTimeoutMs) {
|
|
1241
|
-
throw new AISDKError({
|
|
1242
|
-
name: "ALIBABA_VIDEO_GENERATION_TIMEOUT",
|
|
1243
|
-
message: `Video generation timed out after ${pollTimeoutMs}ms`
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
const { value: statusResponse, responseHeaders: pollHeaders } = await getFromApi({
|
|
1247
|
-
url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
|
|
1248
|
-
validateUrl: false,
|
|
1249
|
-
headers: combineHeaders3(
|
|
1250
|
-
await resolve(this.config.headers),
|
|
1251
|
-
options.headers
|
|
1252
|
-
),
|
|
1253
|
-
successfulResponseHandler: createJsonResponseHandler3(
|
|
1254
|
-
alibabaVideoTaskStatusSchema
|
|
1255
|
-
),
|
|
1256
|
-
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
1257
|
-
abortSignal: options.abortSignal,
|
|
1258
|
-
fetch: this.config.fetch
|
|
1259
|
-
});
|
|
1260
|
-
responseHeaders = pollHeaders;
|
|
1261
|
-
const taskStatus = (_l = statusResponse.output) == null ? void 0 : _l.task_status;
|
|
1262
|
-
if (taskStatus === "SUCCEEDED") {
|
|
1263
|
-
finalResponse = statusResponse;
|
|
1264
|
-
break;
|
|
1265
|
-
}
|
|
1266
|
-
if (taskStatus === "FAILED" || taskStatus === "CANCELED") {
|
|
1267
|
-
throw new AISDKError({
|
|
1268
|
-
name: "ALIBABA_VIDEO_GENERATION_FAILED",
|
|
1269
|
-
message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${(_n = (_m = statusResponse.output) == null ? void 0 : _m.message) != null ? _n : ""}`
|
|
1270
|
-
});
|
|
1279
|
+
return {
|
|
1280
|
+
operation: { taskId },
|
|
1281
|
+
warnings,
|
|
1282
|
+
response: {
|
|
1283
|
+
timestamp: currentDate,
|
|
1284
|
+
modelId: this.modelId,
|
|
1285
|
+
headers: responseHeaders
|
|
1271
1286
|
}
|
|
1287
|
+
};
|
|
1288
|
+
}
|
|
1289
|
+
async doStatus(options) {
|
|
1290
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1291
|
+
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
1292
|
+
const { taskId } = options.operation;
|
|
1293
|
+
const { value: statusResponse, responseHeaders } = await getFromApi({
|
|
1294
|
+
url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
|
|
1295
|
+
validateUrl: false,
|
|
1296
|
+
headers: combineHeaders3(
|
|
1297
|
+
await resolve(this.config.headers),
|
|
1298
|
+
options.headers
|
|
1299
|
+
),
|
|
1300
|
+
successfulResponseHandler: createJsonResponseHandler3(
|
|
1301
|
+
alibabaVideoTaskStatusSchema
|
|
1302
|
+
),
|
|
1303
|
+
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
1304
|
+
abortSignal: options.abortSignal,
|
|
1305
|
+
fetch: this.config.fetch
|
|
1306
|
+
});
|
|
1307
|
+
const taskStatus = (_d = statusResponse.output) == null ? void 0 : _d.task_status;
|
|
1308
|
+
if (taskStatus === "SUCCEEDED") {
|
|
1309
|
+
return this.buildCompletedResult(
|
|
1310
|
+
statusResponse,
|
|
1311
|
+
responseHeaders,
|
|
1312
|
+
[],
|
|
1313
|
+
currentDate
|
|
1314
|
+
);
|
|
1272
1315
|
}
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1316
|
+
if (taskStatus === "FAILED" || taskStatus === "CANCELED") {
|
|
1317
|
+
return {
|
|
1318
|
+
status: "error",
|
|
1319
|
+
error: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${(_f = (_e = statusResponse.output) == null ? void 0 : _e.message) != null ? _f : ""}`.trim(),
|
|
1320
|
+
response: {
|
|
1321
|
+
timestamp: currentDate,
|
|
1322
|
+
modelId: this.modelId,
|
|
1323
|
+
headers: responseHeaders
|
|
1324
|
+
}
|
|
1325
|
+
};
|
|
1279
1326
|
}
|
|
1280
1327
|
return {
|
|
1281
|
-
|
|
1282
|
-
{
|
|
1283
|
-
type: "url",
|
|
1284
|
-
url: videoUrl,
|
|
1285
|
-
mediaType: "video/mp4"
|
|
1286
|
-
}
|
|
1287
|
-
],
|
|
1288
|
-
warnings,
|
|
1328
|
+
status: "pending",
|
|
1289
1329
|
response: {
|
|
1290
1330
|
timestamp: currentDate,
|
|
1291
1331
|
modelId: this.modelId,
|
|
1292
1332
|
headers: responseHeaders
|
|
1293
|
-
},
|
|
1294
|
-
providerMetadata: {
|
|
1295
|
-
alibaba: {
|
|
1296
|
-
taskId,
|
|
1297
|
-
videoUrl,
|
|
1298
|
-
...((_p = finalResponse == null ? void 0 : finalResponse.output) == null ? void 0 : _p.actual_prompt) ? { actualPrompt: finalResponse.output.actual_prompt } : {},
|
|
1299
|
-
...(finalResponse == null ? void 0 : finalResponse.usage) ? {
|
|
1300
|
-
usage: {
|
|
1301
|
-
duration: finalResponse.usage.duration,
|
|
1302
|
-
outputVideoDuration: finalResponse.usage.output_video_duration,
|
|
1303
|
-
resolution: finalResponse.usage.SR,
|
|
1304
|
-
size: finalResponse.usage.size
|
|
1305
|
-
}
|
|
1306
|
-
} : {}
|
|
1307
|
-
}
|
|
1308
1333
|
}
|
|
1309
1334
|
};
|
|
1310
1335
|
}
|
|
1311
1336
|
};
|
|
1312
1337
|
|
|
1313
1338
|
// src/version.ts
|
|
1314
|
-
var VERSION = true ? "2.0.
|
|
1339
|
+
var VERSION = true ? "2.0.23" : "0.0.0-test";
|
|
1315
1340
|
|
|
1316
1341
|
// src/alibaba-provider.ts
|
|
1317
1342
|
function createAlibaba(options = {}) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-language-model-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-model-options.ts","../src/alibaba-video-model.ts","../src/alibaba-video-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type Experimental_VideoModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaChatLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-language-model-options';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-model-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData } from './alibaba-error';\nexport { alibabaFailedResponseHandler } from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV4 {\n (modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV4;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new AlibabaChatLanguageModel(modelId, {\n provider: 'alibaba.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: options.includeUsage ?? true,\n });\n\n const createEmbeddingModel = (modelId: AlibabaEmbeddingModelId) =>\n new AlibabaEmbeddingModel(modelId, {\n provider: 'alibaba.embedding',\n baseURL: embeddingBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isCustomReasoning,\n mapReasoningToProviderBudget,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type InferSchema,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelChatOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-language-model-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV4 interface for Alibaba Cloud's Qwen models.\n * Supports OpenAI-compatible chat completions API with Alibaba-specific features:\n * - Reasoning/thinking mode (enable_thinking, reasoning_content)\n * - Thinking budget control (thinking_budget)\n * - Prompt caching (cached_tokens tracking)\n */\nexport class AlibabaChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\n\n static [WORKFLOW_SERIALIZE](model: AlibabaChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AlibabaChatModelId;\n config: AlibabaConfig;\n }) {\n return new AlibabaChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: AlibabaChatModelId, config: AlibabaConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n /**\n * Builds request arguments for Alibaba API call.\n * Converts AI SDK options to Alibaba API format.\n */\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n reasoning,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelChatOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n ...resolveAlibabaThinking({\n reasoning,\n alibabaOptions,\n warnings,\n }),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n }),\n };\n\n // Prepare tools\n const {\n tools: alibabaTools,\n toolChoice: alibabaToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...cacheControlValidator.getWarnings());\n\n return {\n args: {\n ...baseArgs,\n tools: alibabaTools,\n tool_choice: alibabaToolChoice,\n ...(alibabaTools != null &&\n alibabaOptions?.parallelToolCalls !== undefined\n ? { parallel_tool_calls: alibabaOptions.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: args,\n failedResponseHandler: alibabaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n alibabaChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // reasoning content (Alibaba uses 'reasoning_content' field):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: 'reasoning',\n text: reasoning,\n });\n }\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: this.config.includeUsage\n ? { include_usage: true }\n : undefined,\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: alibabaFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n alibabaChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Track state across chunks\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n let toolCallTracker: StreamingToolCallTracker;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // Handle parse errors\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Emit response metadata on first chunk\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n // Track usage (appears in final chunk)\n if (value.usage != null) {\n usage = value.usage;\n }\n\n // Skip processing if no choices (usage-only chunk)\n if (value.choices.length === 0) {\n return;\n }\n\n const choice = value.choices[0];\n const delta = choice.delta;\n\n // Handle reasoning content streaming (Alibaba thinking mode)\n if (\n delta.reasoning_content != null &&\n delta.reasoning_content.length > 0\n ) {\n if (activeReasoningId == null) {\n // End any active text before starting reasoning\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n activeReasoningId = generateId();\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: delta.reasoning_content,\n });\n }\n\n // Handle text content streaming\n if (delta.content != null && delta.content.length > 0) {\n // End any active reasoning before starting text\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n\n if (!activeText) {\n controller.enqueue({ type: 'text-start', id: '0' });\n activeText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: delta.content,\n });\n }\n\n // Handle tool call streaming\n if (delta.tool_calls != null) {\n // End any active reasoning or text before tool calls\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n toolCallTracker.processDelta(toolCallDelta);\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n toolCallTracker.flush();\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction resolveAlibabaThinking({\n reasoning,\n alibabaOptions,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n alibabaOptions:\n | InferSchema<typeof alibabaLanguageModelChatOptions>\n | undefined;\n warnings: SharedV4Warning[];\n}): { enable_thinking?: boolean; thinking_budget?: number } {\n if (\n alibabaOptions?.enableThinking != null ||\n alibabaOptions?.thinkingBudget != null\n ) {\n return {\n ...(alibabaOptions.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\n : {}),\n };\n }\n\n if (!isCustomReasoning(reasoning)) {\n return {};\n }\n\n if (reasoning === 'none') {\n return { enable_thinking: false };\n }\n\n const thinkingBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: 16384,\n maxReasoningBudget: 16384,\n warnings,\n });\n\n return {\n enable_thinking: true,\n ...(thinkingBudget != null ? { thinking_budget: thinkingBudget } : {}),\n };\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelChatOptions = z.object({\n /**\n * Enable thinking/reasoning mode for supported models.\n * When enabled, the model generates reasoning content before the response.\n *\n * @default false\n */\n enableThinking: z.boolean().optional(),\n\n /**\n * Maximum number of reasoning tokens to generate.\n */\n thinkingBudget: z.number().positive().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n});\n\nexport type AlibabaLanguageModelChatOptions = z.infer<\n typeof alibabaLanguageModelChatOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV4Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n type LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({ part }: { part: LanguageModelV4FilePart }): string {\n if (part.data.type === 'url') {\n return part.data.url.toString();\n }\n\n if (part.data.type === 'data') {\n return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part data type ${part.data.type}`,\n });\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n}: {\n prompt: LanguageModelV4Prompt;\n cacheControlValidator?: CacheControlValidator;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n for (const { role, content, ...message } of prompt) {\n const messageCacheControl = cacheControlValidator?.getCacheControl(\n message.providerOptions,\n );\n\n switch (role) {\n case 'system': {\n if (messageCacheControl) {\n messages.push({\n role: 'system',\n content: [\n {\n type: 'text',\n text: content,\n cache_control: messageCacheControl,\n },\n ],\n });\n } else {\n messages.push({ role: 'system', content });\n }\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n const isLastPart = index === content.length - 1;\n const partCacheControl =\n cacheControlValidator?.getCacheControl(part.providerOptions) ??\n (isLastPart ? messageCacheControl : undefined);\n\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n }\n\n case 'file': {\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n if (getTopLevelMediaType(part.mediaType) === 'image') {\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ part }),\n },\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n } else {\n throw new UnsupportedFunctionalityError({\n functionality: 'Only image file parts are supported',\n });\n }\n }\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n // Reasoning content is handled separately in the response\n // but may appear in assistant messages during multi-turn conversations\n text += part.text;\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { AlibabaCacheControl } from './alibaba-chat-prompt';\n\n// Alibaba allows a maximum of 4 cache breakpoints per request\nconst MAX_CACHE_BREAKPOINTS = 4;\n\nfunction getCacheControl(\n providerMetadata: SharedV4ProviderMetadata | undefined,\n): AlibabaCacheControl | undefined {\n const alibaba = providerMetadata?.alibaba;\n\n const cacheControlValue = alibaba?.cacheControl ?? alibaba?.cache_control;\n\n // Pass through value assuming it is of the correct type.\n // The Alibaba API will validate the value.\n return cacheControlValue as AlibabaCacheControl | undefined;\n}\n\nexport class CacheControlValidator {\n private breakpointCount = 0;\n private warnings: SharedV4Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV4ProviderMetadata | undefined,\n ): AlibabaCacheControl | undefined {\n const cacheControlValue = getCacheControl(providerMetadata);\n\n if (!cacheControlValue) {\n return undefined;\n }\n\n this.breakpointCount++;\n if (this.breakpointCount > MAX_CACHE_BREAKPOINTS) {\n this.warnings.push({\n type: 'other',\n message: `Max breakpoint limit exceeded. Only the last ${MAX_CACHE_BREAKPOINTS} cache markers will take effect.`,\n });\n }\n\n return cacheControlValue;\n }\n\n getWarnings(): SharedV4Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-model-options';\nimport type { AlibabaConfig } from './alibaba-config';\n\n// TODO: Add Alibaba multimodal embedding support in a follow-up change.\nconst alibabaEmbeddingFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n }),\n errorToMessage: data => data.message,\n});\n\nexport class AlibabaEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\n\n static [WORKFLOW_SERIALIZE](model: AlibabaEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AlibabaEmbeddingModelId;\n config: AlibabaConfig;\n }) {\n return new AlibabaEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(modelId: AlibabaEmbeddingModelId, config: AlibabaConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaEmbeddingModelOptions,\n });\n\n // TODO: Explore first-class sparse embedding support in AI SDK core.\n if (alibabaOptions?.outputType === 'sparse') {\n throw new UnsupportedFunctionalityError({\n functionality: \"Alibaba embedding outputType 'sparse'\",\n message:\n \"Alibaba embedding outputType 'sparse' is not supported because AI SDK embeddings require dense number arrays. Use 'dense' or 'dense&sparse' instead.\",\n });\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/services/embeddings/text-embedding/text-embedding`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n input: {\n texts: values,\n },\n parameters: {\n text_type: alibabaOptions?.textType,\n dimension: alibabaOptions?.dimension,\n output_type: alibabaOptions?.outputType,\n },\n },\n failedResponseHandler: alibabaEmbeddingFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n alibabaTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const sortedEmbeddings = response.output.embeddings.sort(\n (a, b) => a.text_index - b.text_index,\n );\n const sparseEmbeddings = sortedEmbeddings\n .map(item =>\n item.sparse_embedding == null\n ? undefined\n : {\n textIndex: item.text_index,\n sparseEmbedding: item.sparse_embedding,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\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 convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\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 alibabaVideoModelOptionsSchema,\n type AlibabaVideoModelOptions,\n} from './alibaba-video-model-options';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV4File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n): Experimental_VideoModelV4File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel 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: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV4Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n // Step 1: Create task\n const { value: createResponse } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = alibabaOptions?.pollIntervalMs ?? 5000;\n const pollTimeoutMs = alibabaOptions?.pollTimeoutMs ?? 600000;\n const startTime = Date.now();\n let finalResponse: AlibabaVideoTaskStatusResponse | undefined;\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: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n validateUrl: false,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_FAILED',\n message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,\n });\n }\n\n // Continue polling for PENDING, RUNNING, UNKNOWN statuses\n }\n\n const videoUrl = finalResponse?.output?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(finalResponse?.output?.actual_prompt\n ? { actualPrompt: finalResponse.output.actual_prompt }\n : {}),\n ...(finalResponse?.usage\n ? {\n usage: {\n duration: finalResponse.usage.duration,\n outputVideoDuration:\n finalResponse.usage.output_video_duration,\n resolution: finalResponse.usage.SR,\n size: finalResponse.usage.size,\n },\n }\n : {}),\n },\n },\n };\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /**\n * Shot type: 'single' for single-shot or 'multi' for multi-shot narrative\n * (wan2.6 and earlier; wan2.7 models describe shot structure in the prompt).\n */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /**\n * Enable audio generation (for wan2.6 I2V/R2V models;\n * wan2.7 models always generate audio).\n */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode (wan2.6 models).\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nexport const alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum(['reference_image', 'reference_video', 'first_frame']),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n }),\n ),\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","_a","alibaba","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","createJsonErrorResponseHandler","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","z","createJsonErrorResponseHandler","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-language-model-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-model-options.ts","../src/alibaba-video-model.ts","../src/alibaba-video-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type Experimental_VideoModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaChatLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-language-model-options';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-model-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData } from './alibaba-error';\nexport { alibabaFailedResponseHandler } from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV4 {\n (modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV4;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\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 /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new AlibabaChatLanguageModel(modelId, {\n provider: 'alibaba.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: options.includeUsage ?? true,\n });\n\n const createEmbeddingModel = (modelId: AlibabaEmbeddingModelId) =>\n new AlibabaEmbeddingModel(modelId, {\n provider: 'alibaba.embedding',\n baseURL: embeddingBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isCustomReasoning,\n mapReasoningToProviderBudget,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n StreamingToolCallTracker,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type InferSchema,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelChatOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-language-model-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV4 interface for Alibaba Cloud's Qwen models.\n * Supports OpenAI-compatible chat completions API with Alibaba-specific features:\n * - Reasoning/thinking mode (enable_thinking, reasoning_content)\n * - Thinking budget control (thinking_budget)\n * - Prompt caching (cached_tokens tracking)\n */\nexport class AlibabaChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\n\n static [WORKFLOW_SERIALIZE](model: AlibabaChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AlibabaChatModelId;\n config: AlibabaConfig;\n }) {\n return new AlibabaChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: AlibabaChatModelId, config: AlibabaConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n /**\n * Builds request arguments for Alibaba API call.\n * Converts AI SDK options to Alibaba API format.\n */\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n reasoning,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelChatOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n ...resolveAlibabaThinking({\n reasoning,\n alibabaOptions,\n warnings,\n }),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n }),\n };\n\n // Prepare tools\n const {\n tools: alibabaTools,\n toolChoice: alibabaToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...cacheControlValidator.getWarnings());\n\n return {\n args: {\n ...baseArgs,\n tools: alibabaTools,\n tool_choice: alibabaToolChoice,\n ...(alibabaTools != null &&\n alibabaOptions?.parallelToolCalls !== undefined\n ? { parallel_tool_calls: alibabaOptions.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: args,\n failedResponseHandler: alibabaFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n alibabaChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV4Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // reasoning content (Alibaba uses 'reasoning_content' field):\n const reasoning = choice.message.reasoning_content;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: 'reasoning',\n text: reasoning,\n });\n }\n\n // tool calls:\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: this.config.includeUsage\n ? { include_usage: true }\n : undefined,\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: alibabaFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n alibabaChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Track state across chunks\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n let toolCallTracker: StreamingToolCallTracker;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n toolCallTracker = new StreamingToolCallTracker(controller, {\n generateId,\n });\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // Handle parse errors\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Emit response metadata on first chunk\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n }\n\n // Track usage (appears in final chunk)\n if (value.usage != null) {\n usage = value.usage;\n }\n\n // Skip processing if no choices (usage-only chunk)\n if (value.choices.length === 0) {\n return;\n }\n\n const choice = value.choices[0];\n const delta = choice.delta;\n\n // Handle reasoning content streaming (Alibaba thinking mode)\n if (\n delta.reasoning_content != null &&\n delta.reasoning_content.length > 0\n ) {\n if (activeReasoningId == null) {\n // End any active text before starting reasoning\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n activeReasoningId = generateId();\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: delta.reasoning_content,\n });\n }\n\n // Handle text content streaming\n if (delta.content != null && delta.content.length > 0) {\n // End any active reasoning before starting text\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n\n if (!activeText) {\n controller.enqueue({ type: 'text-start', id: '0' });\n activeText = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: delta.content,\n });\n }\n\n // Handle tool call streaming\n if (delta.tool_calls != null) {\n // End any active reasoning or text before tool calls\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = null;\n }\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n activeText = false;\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n toolCallTracker.processDelta(toolCallDelta);\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n toolCallTracker.flush();\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction resolveAlibabaThinking({\n reasoning,\n alibabaOptions,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n alibabaOptions:\n | InferSchema<typeof alibabaLanguageModelChatOptions>\n | undefined;\n warnings: SharedV4Warning[];\n}): { enable_thinking?: boolean; thinking_budget?: number } {\n if (\n alibabaOptions?.enableThinking != null ||\n alibabaOptions?.thinkingBudget != null\n ) {\n return {\n ...(alibabaOptions.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\n : {}),\n };\n }\n\n if (!isCustomReasoning(reasoning)) {\n return {};\n }\n\n if (reasoning === 'none') {\n return { enable_thinking: false };\n }\n\n const thinkingBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: 16384,\n maxReasoningBudget: 16384,\n warnings,\n });\n\n return {\n enable_thinking: true,\n ...(thinkingBudget != null ? { thinking_budget: thinkingBudget } : {}),\n };\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelChatOptions = z.object({\n /**\n * Enable thinking/reasoning mode for supported models.\n * When enabled, the model generates reasoning content before the response.\n *\n * @default false\n */\n enableThinking: z.boolean().optional(),\n\n /**\n * Maximum number of reasoning tokens to generate.\n */\n thinkingBudget: z.number().positive().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n});\n\nexport type AlibabaLanguageModelChatOptions = z.infer<\n typeof alibabaLanguageModelChatOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV4Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n type LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({ part }: { part: LanguageModelV4FilePart }): string {\n if (part.data.type === 'url') {\n return part.data.url.toString();\n }\n\n if (part.data.type === 'data') {\n return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part data type ${part.data.type}`,\n });\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n}: {\n prompt: LanguageModelV4Prompt;\n cacheControlValidator?: CacheControlValidator;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n for (const { role, content, ...message } of prompt) {\n const messageCacheControl = cacheControlValidator?.getCacheControl(\n message.providerOptions,\n );\n\n switch (role) {\n case 'system': {\n if (messageCacheControl) {\n messages.push({\n role: 'system',\n content: [\n {\n type: 'text',\n text: content,\n cache_control: messageCacheControl,\n },\n ],\n });\n } else {\n messages.push({ role: 'system', content });\n }\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n const isLastPart = index === content.length - 1;\n const partCacheControl =\n cacheControlValidator?.getCacheControl(part.providerOptions) ??\n (isLastPart ? messageCacheControl : undefined);\n\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n }\n\n case 'file': {\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n case 'url':\n case 'data': {\n if (getTopLevelMediaType(part.mediaType) === 'image') {\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ part }),\n },\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n } else {\n throw new UnsupportedFunctionalityError({\n functionality: 'Only image file parts are supported',\n });\n }\n }\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n // Reasoning content is handled separately in the response\n // but may appear in assistant messages during multi-turn conversations\n text += part.text;\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { AlibabaCacheControl } from './alibaba-chat-prompt';\n\n// Alibaba allows a maximum of 4 cache breakpoints per request\nconst MAX_CACHE_BREAKPOINTS = 4;\n\nfunction getCacheControl(\n providerMetadata: SharedV4ProviderMetadata | undefined,\n): AlibabaCacheControl | undefined {\n const alibaba = providerMetadata?.alibaba;\n\n const cacheControlValue = alibaba?.cacheControl ?? alibaba?.cache_control;\n\n // Pass through value assuming it is of the correct type.\n // The Alibaba API will validate the value.\n return cacheControlValue as AlibabaCacheControl | undefined;\n}\n\nexport class CacheControlValidator {\n private breakpointCount = 0;\n private warnings: SharedV4Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV4ProviderMetadata | undefined,\n ): AlibabaCacheControl | undefined {\n const cacheControlValue = getCacheControl(providerMetadata);\n\n if (!cacheControlValue) {\n return undefined;\n }\n\n this.breakpointCount++;\n if (this.breakpointCount > MAX_CACHE_BREAKPOINTS) {\n this.warnings.push({\n type: 'other',\n message: `Max breakpoint limit exceeded. Only the last ${MAX_CACHE_BREAKPOINTS} cache markers will take effect.`,\n });\n }\n\n return cacheControlValue;\n }\n\n getWarnings(): SharedV4Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-model-options';\nimport type { AlibabaConfig } from './alibaba-config';\n\n// TODO: Add Alibaba multimodal embedding support in a follow-up change.\nconst alibabaEmbeddingFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n }),\n errorToMessage: data => data.message,\n});\n\nexport class AlibabaEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\n\n static [WORKFLOW_SERIALIZE](model: AlibabaEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: AlibabaEmbeddingModelId;\n config: AlibabaConfig;\n }) {\n return new AlibabaEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(modelId: AlibabaEmbeddingModelId, config: AlibabaConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaEmbeddingModelOptions,\n });\n\n // TODO: Explore first-class sparse embedding support in AI SDK core.\n if (alibabaOptions?.outputType === 'sparse') {\n throw new UnsupportedFunctionalityError({\n functionality: \"Alibaba embedding outputType 'sparse'\",\n message:\n \"Alibaba embedding outputType 'sparse' is not supported because AI SDK embeddings require dense number arrays. Use 'dense' or 'dense&sparse' instead.\",\n });\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/services/embeddings/text-embedding/text-embedding`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n input: {\n texts: values,\n },\n parameters: {\n text_type: alibabaOptions?.textType,\n dimension: alibabaOptions?.dimension,\n output_type: alibabaOptions?.outputType,\n },\n },\n failedResponseHandler: alibabaEmbeddingFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n alibabaTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const sortedEmbeddings = response.output.embeddings.sort(\n (a, b) => a.text_index - b.text_index,\n );\n const sparseEmbeddings = sortedEmbeddings\n .map(item =>\n item.sparse_embedding == null\n ? undefined\n : {\n textIndex: item.text_index,\n sparseEmbedding: item.sparse_embedding,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\n","import {\n AISDKError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4CallOptions as VideoModelV4CallOptions,\n type Experimental_VideoModelV4File,\n type Experimental_VideoModelV4OperationStartResult as VideoModelV4OperationStartResult,\n type Experimental_VideoModelV4OperationStatusResult as VideoModelV4OperationStatusResult,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\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 alibabaVideoModelOptionsSchema,\n type AlibabaVideoModelOptions,\n} from './alibaba-video-model-options';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\ntype VideoModelV4 = Experimental_VideoModelV4;\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV4File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: VideoModelV4CallOptions,\n): Experimental_VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: VideoModelV4CallOptions,\n): Experimental_VideoModelV4File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: VideoModelV4CallOptions,\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: VideoModelV4CallOptions,\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel 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: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n private async buildRequest(\n options: Parameters<NonNullable<VideoModelV4['doStart']>>[0],\n ): Promise<{\n input: Record<string, unknown>;\n parameters: Record<string, unknown>;\n warnings: SharedV4Warning[];\n alibabaOptions: AlibabaVideoModelOptions | undefined;\n }> {\n const warnings: SharedV4Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n return { input, parameters, warnings, alibabaOptions };\n }\n\n private buildCompletedResult(\n statusResponse: AlibabaVideoTaskStatusResponse,\n responseHeaders: Record<string, string> | undefined,\n warnings: SharedV4Warning[],\n currentDate: Date,\n ): {\n status: 'completed';\n videos: Array<{ type: 'url'; url: string; mediaType: string }>;\n warnings: SharedV4Warning[];\n providerMetadata: SharedV4ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n } {\n const taskId = statusResponse.output?.task_id;\n const videoUrl = statusResponse.output?.video_url;\n\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n status: 'completed',\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(statusResponse.output?.actual_prompt\n ? { actualPrompt: statusResponse.output.actual_prompt }\n : {}),\n ...(statusResponse.usage\n ? {\n usage: {\n duration: statusResponse.usage.duration,\n outputVideoDuration:\n statusResponse.usage.output_video_duration,\n resolution: statusResponse.usage.SR,\n size: statusResponse.usage.size,\n },\n }\n : {}),\n },\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 { input, parameters, warnings } = await this.buildRequest(options);\n\n const { value: createResponse, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n return {\n operation: { taskId },\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 currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { taskId } = options.operation as { taskId: string };\n\n const { value: statusResponse, responseHeaders } = await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n validateUrl: false,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n return this.buildCompletedResult(\n statusResponse,\n responseHeaders,\n [],\n currentDate,\n );\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n return {\n status: 'error' as const,\n error:\n `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`.trim(),\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n\n return {\n status: 'pending',\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /**\n * Shot type: 'single' for single-shot or 'multi' for multi-shot narrative\n * (wan2.6 and earlier; wan2.7 models describe shot structure in the prompt).\n */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /**\n * Enable audio generation (for wan2.6 I2V/R2V models;\n * wan2.7 models always generate audio).\n */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode (wan2.6 models).\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nexport const alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum(['reference_image', 'reference_video', 'first_frame']),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n }),\n ),\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","_a","alibaba","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","createJsonErrorResponseHandler","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","z","createJsonErrorResponseHandler","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/alibaba",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.23",
|
|
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/openai-compatible": "3.0.
|
|
29
|
-
"@ai-sdk/provider": "4.0.
|
|
30
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
28
|
+
"@ai-sdk/openai-compatible": "3.0.21",
|
|
29
|
+
"@ai-sdk/provider": "4.0.5",
|
|
30
|
+
"@ai-sdk/provider-utils": "5.0.19"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "22.19.19",
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AISDKError,
|
|
3
3
|
type Experimental_VideoModelV4,
|
|
4
|
+
type Experimental_VideoModelV4CallOptions as VideoModelV4CallOptions,
|
|
4
5
|
type Experimental_VideoModelV4File,
|
|
6
|
+
type Experimental_VideoModelV4OperationStartResult as VideoModelV4OperationStartResult,
|
|
7
|
+
type Experimental_VideoModelV4OperationStatusResult as VideoModelV4OperationStatusResult,
|
|
8
|
+
type SharedV4ProviderMetadata,
|
|
5
9
|
type SharedV4Warning,
|
|
6
10
|
} from '@ai-sdk/provider';
|
|
7
11
|
import {
|
|
@@ -10,7 +14,6 @@ import {
|
|
|
10
14
|
convertUint8ArrayToBase64,
|
|
11
15
|
createJsonErrorResponseHandler,
|
|
12
16
|
createJsonResponseHandler,
|
|
13
|
-
delay,
|
|
14
17
|
getFromApi,
|
|
15
18
|
parseProviderOptions,
|
|
16
19
|
postJsonToApi,
|
|
@@ -25,6 +28,8 @@ import {
|
|
|
25
28
|
} from './alibaba-video-model-options';
|
|
26
29
|
import type { AlibabaVideoModelId } from './alibaba-video-settings';
|
|
27
30
|
|
|
31
|
+
type VideoModelV4 = Experimental_VideoModelV4;
|
|
32
|
+
|
|
28
33
|
interface AlibabaVideoModelConfig {
|
|
29
34
|
provider: string;
|
|
30
35
|
baseURL: string;
|
|
@@ -150,14 +155,14 @@ function fileToImageString(file: Experimental_VideoModelV4File): string {
|
|
|
150
155
|
}
|
|
151
156
|
|
|
152
157
|
function getFirstFrameImage(
|
|
153
|
-
options:
|
|
158
|
+
options: VideoModelV4CallOptions,
|
|
154
159
|
): Experimental_VideoModelV4File | undefined {
|
|
155
160
|
return options.frameImages?.find(frame => frame.frameType === 'first_frame')
|
|
156
161
|
?.image;
|
|
157
162
|
}
|
|
158
163
|
|
|
159
164
|
function resolveStartImage(
|
|
160
|
-
options:
|
|
165
|
+
options: VideoModelV4CallOptions,
|
|
161
166
|
): Experimental_VideoModelV4File | undefined {
|
|
162
167
|
return getFirstFrameImage(options) ?? options.image;
|
|
163
168
|
}
|
|
@@ -168,7 +173,7 @@ function isVideoUrl(url: string): boolean {
|
|
|
168
173
|
|
|
169
174
|
// Builds the wan2.7 input.media array from inputReferences and frameImages.
|
|
170
175
|
function resolveMedia(
|
|
171
|
-
options:
|
|
176
|
+
options: VideoModelV4CallOptions,
|
|
172
177
|
alibabaOptions: AlibabaVideoModelOptions | undefined,
|
|
173
178
|
warnings: SharedV4Warning[],
|
|
174
179
|
): Array<Record<string, unknown>> | undefined {
|
|
@@ -218,7 +223,7 @@ function resolveMedia(
|
|
|
218
223
|
}
|
|
219
224
|
|
|
220
225
|
function resolveReferenceUrls(
|
|
221
|
-
options:
|
|
226
|
+
options: VideoModelV4CallOptions,
|
|
222
227
|
alibabaOptions: AlibabaVideoModelOptions | undefined,
|
|
223
228
|
warnings: SharedV4Warning[],
|
|
224
229
|
): string[] | undefined {
|
|
@@ -262,10 +267,14 @@ export class AlibabaVideoModel implements Experimental_VideoModelV4 {
|
|
|
262
267
|
private readonly config: AlibabaVideoModelConfig,
|
|
263
268
|
) {}
|
|
264
269
|
|
|
265
|
-
async
|
|
266
|
-
options: Parameters<
|
|
267
|
-
): Promise<
|
|
268
|
-
|
|
270
|
+
private async buildRequest(
|
|
271
|
+
options: Parameters<NonNullable<VideoModelV4['doStart']>>[0],
|
|
272
|
+
): Promise<{
|
|
273
|
+
input: Record<string, unknown>;
|
|
274
|
+
parameters: Record<string, unknown>;
|
|
275
|
+
warnings: SharedV4Warning[];
|
|
276
|
+
alibabaOptions: AlibabaVideoModelOptions | undefined;
|
|
277
|
+
}> {
|
|
269
278
|
const warnings: SharedV4Warning[] = [];
|
|
270
279
|
const mode = detectMode(this.modelId);
|
|
271
280
|
|
|
@@ -459,8 +468,80 @@ export class AlibabaVideoModel implements Experimental_VideoModelV4 {
|
|
|
459
468
|
});
|
|
460
469
|
}
|
|
461
470
|
|
|
462
|
-
|
|
463
|
-
|
|
471
|
+
return { input, parameters, warnings, alibabaOptions };
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
private buildCompletedResult(
|
|
475
|
+
statusResponse: AlibabaVideoTaskStatusResponse,
|
|
476
|
+
responseHeaders: Record<string, string> | undefined,
|
|
477
|
+
warnings: SharedV4Warning[],
|
|
478
|
+
currentDate: Date,
|
|
479
|
+
): {
|
|
480
|
+
status: 'completed';
|
|
481
|
+
videos: Array<{ type: 'url'; url: string; mediaType: string }>;
|
|
482
|
+
warnings: SharedV4Warning[];
|
|
483
|
+
providerMetadata: SharedV4ProviderMetadata;
|
|
484
|
+
response: {
|
|
485
|
+
timestamp: Date;
|
|
486
|
+
modelId: string;
|
|
487
|
+
headers: Record<string, string> | undefined;
|
|
488
|
+
};
|
|
489
|
+
} {
|
|
490
|
+
const taskId = statusResponse.output?.task_id;
|
|
491
|
+
const videoUrl = statusResponse.output?.video_url;
|
|
492
|
+
|
|
493
|
+
if (!videoUrl) {
|
|
494
|
+
throw new AISDKError({
|
|
495
|
+
name: 'ALIBABA_VIDEO_GENERATION_ERROR',
|
|
496
|
+
message: `No video URL in response. Task ID: ${taskId}`,
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
return {
|
|
501
|
+
status: 'completed',
|
|
502
|
+
videos: [
|
|
503
|
+
{
|
|
504
|
+
type: 'url',
|
|
505
|
+
url: videoUrl,
|
|
506
|
+
mediaType: 'video/mp4',
|
|
507
|
+
},
|
|
508
|
+
],
|
|
509
|
+
warnings,
|
|
510
|
+
response: {
|
|
511
|
+
timestamp: currentDate,
|
|
512
|
+
modelId: this.modelId,
|
|
513
|
+
headers: responseHeaders,
|
|
514
|
+
},
|
|
515
|
+
providerMetadata: {
|
|
516
|
+
alibaba: {
|
|
517
|
+
taskId,
|
|
518
|
+
videoUrl,
|
|
519
|
+
...(statusResponse.output?.actual_prompt
|
|
520
|
+
? { actualPrompt: statusResponse.output.actual_prompt }
|
|
521
|
+
: {}),
|
|
522
|
+
...(statusResponse.usage
|
|
523
|
+
? {
|
|
524
|
+
usage: {
|
|
525
|
+
duration: statusResponse.usage.duration,
|
|
526
|
+
outputVideoDuration:
|
|
527
|
+
statusResponse.usage.output_video_duration,
|
|
528
|
+
resolution: statusResponse.usage.SR,
|
|
529
|
+
size: statusResponse.usage.size,
|
|
530
|
+
},
|
|
531
|
+
}
|
|
532
|
+
: {}),
|
|
533
|
+
},
|
|
534
|
+
},
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
async doStart(
|
|
539
|
+
options: Parameters<NonNullable<VideoModelV4['doStart']>>[0],
|
|
540
|
+
): Promise<VideoModelV4OperationStartResult> {
|
|
541
|
+
const currentDate = this.config._internal?.currentDate?.() ?? new Date();
|
|
542
|
+
const { input, parameters, warnings } = await this.buildRequest(options);
|
|
543
|
+
|
|
544
|
+
const { value: createResponse, responseHeaders } = await postJsonToApi({
|
|
464
545
|
url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,
|
|
465
546
|
headers: combineHeaders(
|
|
466
547
|
await resolve(this.config.headers),
|
|
@@ -490,99 +571,69 @@ export class AlibabaVideoModel implements Experimental_VideoModelV4 {
|
|
|
490
571
|
});
|
|
491
572
|
}
|
|
492
573
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
if (Date.now() - startTime > pollTimeoutMs) {
|
|
504
|
-
throw new AISDKError({
|
|
505
|
-
name: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',
|
|
506
|
-
message: `Video generation timed out after ${pollTimeoutMs}ms`,
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
const { value: statusResponse, responseHeaders: pollHeaders } =
|
|
511
|
-
await getFromApi({
|
|
512
|
-
url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
|
|
513
|
-
validateUrl: false,
|
|
514
|
-
headers: combineHeaders(
|
|
515
|
-
await resolve(this.config.headers),
|
|
516
|
-
options.headers,
|
|
517
|
-
),
|
|
518
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
519
|
-
alibabaVideoTaskStatusSchema,
|
|
520
|
-
),
|
|
521
|
-
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
522
|
-
abortSignal: options.abortSignal,
|
|
523
|
-
fetch: this.config.fetch,
|
|
524
|
-
});
|
|
574
|
+
return {
|
|
575
|
+
operation: { taskId },
|
|
576
|
+
warnings,
|
|
577
|
+
response: {
|
|
578
|
+
timestamp: currentDate,
|
|
579
|
+
modelId: this.modelId,
|
|
580
|
+
headers: responseHeaders,
|
|
581
|
+
},
|
|
582
|
+
};
|
|
583
|
+
}
|
|
525
584
|
|
|
526
|
-
|
|
527
|
-
|
|
585
|
+
async doStatus(
|
|
586
|
+
options: Parameters<NonNullable<VideoModelV4['doStatus']>>[0],
|
|
587
|
+
): Promise<VideoModelV4OperationStatusResult> {
|
|
588
|
+
const currentDate = this.config._internal?.currentDate?.() ?? new Date();
|
|
589
|
+
const { taskId } = options.operation as { taskId: string };
|
|
528
590
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
591
|
+
const { value: statusResponse, responseHeaders } = await getFromApi({
|
|
592
|
+
url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
|
|
593
|
+
validateUrl: false,
|
|
594
|
+
headers: combineHeaders(
|
|
595
|
+
await resolve(this.config.headers),
|
|
596
|
+
options.headers,
|
|
597
|
+
),
|
|
598
|
+
successfulResponseHandler: createJsonResponseHandler(
|
|
599
|
+
alibabaVideoTaskStatusSchema,
|
|
600
|
+
),
|
|
601
|
+
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
602
|
+
abortSignal: options.abortSignal,
|
|
603
|
+
fetch: this.config.fetch,
|
|
604
|
+
});
|
|
533
605
|
|
|
534
|
-
|
|
535
|
-
throw new AISDKError({
|
|
536
|
-
name: 'ALIBABA_VIDEO_GENERATION_FAILED',
|
|
537
|
-
message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,
|
|
538
|
-
});
|
|
539
|
-
}
|
|
606
|
+
const taskStatus = statusResponse.output?.task_status;
|
|
540
607
|
|
|
541
|
-
|
|
608
|
+
if (taskStatus === 'SUCCEEDED') {
|
|
609
|
+
return this.buildCompletedResult(
|
|
610
|
+
statusResponse,
|
|
611
|
+
responseHeaders,
|
|
612
|
+
[],
|
|
613
|
+
currentDate,
|
|
614
|
+
);
|
|
542
615
|
}
|
|
543
616
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
617
|
+
if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {
|
|
618
|
+
return {
|
|
619
|
+
status: 'error' as const,
|
|
620
|
+
error:
|
|
621
|
+
`Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`.trim(),
|
|
622
|
+
response: {
|
|
623
|
+
timestamp: currentDate,
|
|
624
|
+
modelId: this.modelId,
|
|
625
|
+
headers: responseHeaders,
|
|
626
|
+
},
|
|
627
|
+
};
|
|
550
628
|
}
|
|
551
629
|
|
|
552
630
|
return {
|
|
553
|
-
|
|
554
|
-
{
|
|
555
|
-
type: 'url',
|
|
556
|
-
url: videoUrl,
|
|
557
|
-
mediaType: 'video/mp4',
|
|
558
|
-
},
|
|
559
|
-
],
|
|
560
|
-
warnings,
|
|
631
|
+
status: 'pending',
|
|
561
632
|
response: {
|
|
562
633
|
timestamp: currentDate,
|
|
563
634
|
modelId: this.modelId,
|
|
564
635
|
headers: responseHeaders,
|
|
565
636
|
},
|
|
566
|
-
providerMetadata: {
|
|
567
|
-
alibaba: {
|
|
568
|
-
taskId,
|
|
569
|
-
videoUrl,
|
|
570
|
-
...(finalResponse?.output?.actual_prompt
|
|
571
|
-
? { actualPrompt: finalResponse.output.actual_prompt }
|
|
572
|
-
: {}),
|
|
573
|
-
...(finalResponse?.usage
|
|
574
|
-
? {
|
|
575
|
-
usage: {
|
|
576
|
-
duration: finalResponse.usage.duration,
|
|
577
|
-
outputVideoDuration:
|
|
578
|
-
finalResponse.usage.output_video_duration,
|
|
579
|
-
resolution: finalResponse.usage.SR,
|
|
580
|
-
size: finalResponse.usage.size,
|
|
581
|
-
},
|
|
582
|
-
}
|
|
583
|
-
: {}),
|
|
584
|
-
},
|
|
585
|
-
},
|
|
586
637
|
};
|
|
587
638
|
}
|
|
588
639
|
}
|