@ai-sdk/alibaba 2.0.54 → 2.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @ai-sdk/alibaba
2
2
 
3
+ ## 2.0.57
4
+
5
+ ### Patch Changes
6
+
7
+ - e3605f6: Fix streamed tool calls with missing, blank, or repeated IDs.
8
+ - Updated dependencies [e3605f6]
9
+ - Updated dependencies [525efc5]
10
+ - @ai-sdk/provider-utils@5.0.50
11
+ - @ai-sdk/provider@4.0.19
12
+
13
+ ## 2.0.56
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [af9597b]
18
+ - Updated dependencies [bc49f78]
19
+ - @ai-sdk/provider-utils@5.0.49
20
+
21
+ ## 2.0.55
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [be877ff]
26
+ - @ai-sdk/provider-utils@5.0.48
27
+
3
28
  ## 2.0.54
4
29
 
5
30
  ### Patch Changes
package/dist/index.js CHANGED
@@ -81,7 +81,7 @@ function prepareTools({
81
81
  tools,
82
82
  toolChoice
83
83
  }) {
84
- tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
84
+ tools = tools?.length ? tools : void 0;
85
85
  const toolWarnings = [];
86
86
  if (tools == null) {
87
87
  return { tools: void 0, toolChoice: void 0, toolWarnings };
@@ -135,15 +135,14 @@ function prepareTools({
135
135
  // src/convert-alibaba-usage.ts
136
136
  import { createNullLanguageModelUsage } from "@ai-sdk/provider-utils";
137
137
  function convertAlibabaUsage(usage) {
138
- var _a, _b, _c, _d, _e, _f, _g, _h;
139
138
  if (usage == null) {
140
139
  return createNullLanguageModelUsage();
141
140
  }
142
- const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;
143
- const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;
144
- const cacheReadTokens = (_d = (_c = usage.prompt_tokens_details) == null ? void 0 : _c.cached_tokens) != null ? _d : 0;
145
- const cacheWriteTokens = (_f = (_e = usage.prompt_tokens_details) == null ? void 0 : _e.cache_creation_input_tokens) != null ? _f : 0;
146
- const reasoningTokens = (_h = (_g = usage.completion_tokens_details) == null ? void 0 : _g.reasoning_tokens) != null ? _h : 0;
141
+ const promptTokens = usage.prompt_tokens ?? 0;
142
+ const completionTokens = usage.completion_tokens ?? 0;
143
+ const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;
144
+ const cacheWriteTokens = usage.prompt_tokens_details?.cache_creation_input_tokens ?? 0;
145
+ const reasoningTokens = usage.completion_tokens_details?.reasoning_tokens ?? 0;
147
146
  return {
148
147
  inputTokens: {
149
148
  total: promptTokens,
@@ -186,7 +185,6 @@ function convertToAlibabaChatMessages({
186
185
  cacheControlValidator,
187
186
  preserveThinking = false
188
187
  }) {
189
- var _a, _b;
190
188
  const messages = [];
191
189
  let lastUserMessageIndex = -1;
192
190
  for (let i = prompt.length - 1; i >= 0; i--) {
@@ -198,7 +196,7 @@ function convertToAlibabaChatMessages({
198
196
  let index = -1;
199
197
  for (const { role, content, ...message } of prompt) {
200
198
  index++;
201
- const messageCacheControl = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(
199
+ const messageCacheControl = cacheControlValidator?.getCacheControl(
202
200
  message.providerOptions
203
201
  );
204
202
  switch (role) {
@@ -223,9 +221,8 @@ function convertToAlibabaChatMessages({
223
221
  messages.push({
224
222
  role: "user",
225
223
  content: content.map((part, index2) => {
226
- var _a2;
227
224
  const isLastPart = index2 === content.length - 1;
228
- const partCacheControl = (_a2 = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(part.providerOptions)) != null ? _a2 : isLastPart ? messageCacheControl : void 0;
225
+ const partCacheControl = cacheControlValidator?.getCacheControl(part.providerOptions) ?? (isLastPart ? messageCacheControl : void 0);
229
226
  switch (part.type) {
230
227
  case "text": {
231
228
  return {
@@ -317,9 +314,9 @@ function convertToAlibabaChatMessages({
317
314
  const toolResponse = toolResponses[i];
318
315
  const output = toolResponse.output;
319
316
  const isLastPart = i === toolResponses.length - 1;
320
- const partCacheControl = (_a = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(
317
+ const partCacheControl = cacheControlValidator?.getCacheControl(
321
318
  toolResponse.providerOptions
322
- )) != null ? _a : isLastPart ? messageCacheControl : void 0;
319
+ ) ?? (isLastPart ? messageCacheControl : void 0);
323
320
  let contentValue;
324
321
  switch (output.type) {
325
322
  case "text":
@@ -327,7 +324,7 @@ function convertToAlibabaChatMessages({
327
324
  contentValue = output.value;
328
325
  break;
329
326
  case "execution-denied":
330
- contentValue = (_b = output.reason) != null ? _b : "Tool call execution denied.";
327
+ contentValue = output.reason ?? "Tool call execution denied.";
331
328
  break;
332
329
  case "content":
333
330
  case "json":
@@ -361,9 +358,8 @@ function convertToAlibabaChatMessages({
361
358
  // src/get-cache-control.ts
362
359
  var MAX_CACHE_BREAKPOINTS = 4;
363
360
  function getCacheControl(providerMetadata) {
364
- var _a;
365
- const alibaba2 = providerMetadata == null ? void 0 : providerMetadata.alibaba;
366
- const cacheControlValue = (_a = alibaba2 == null ? void 0 : alibaba2.cacheControl) != null ? _a : alibaba2 == null ? void 0 : alibaba2.cache_control;
361
+ const alibaba2 = providerMetadata?.alibaba;
362
+ const cacheControlValue = alibaba2?.cacheControl ?? alibaba2?.cache_control;
367
363
  return cacheControlValue;
368
364
  }
369
365
  var CacheControlValidator = class {
@@ -486,7 +482,6 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
486
482
  tools,
487
483
  toolChoice
488
484
  }) {
489
- var _a, _b;
490
485
  const warnings = [];
491
486
  const cacheControlValidator = new CacheControlValidator();
492
487
  const alibabaOptions = await parseProviderOptions({
@@ -497,9 +492,9 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
497
492
  if (frequencyPenalty != null) {
498
493
  warnings.push({ type: "unsupported", feature: "frequencyPenalty" });
499
494
  }
500
- const preserveThinking = (_a = alibabaOptions == null ? void 0 : alibabaOptions.preserveThinking) != null ? _a : supportsPreservedThinking(this.modelId) ? true : void 0;
501
- const useJsonSchema = (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && supportsJsonSchemaOutput(this.modelId);
502
- const useJsonObject = (responseFormat == null ? void 0 : responseFormat.type) === "json" && !useJsonSchema;
495
+ const preserveThinking = alibabaOptions?.preserveThinking ?? (supportsPreservedThinking(this.modelId) ? true : void 0);
496
+ const useJsonSchema = responseFormat?.type === "json" && responseFormat.schema != null && supportsJsonSchemaOutput(this.modelId);
497
+ const useJsonObject = responseFormat?.type === "json" && !useJsonSchema;
503
498
  if (useJsonObject && responseFormat.schema != null) {
504
499
  warnings.push({
505
500
  type: "compatibility",
@@ -520,11 +515,11 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
520
515
  presence_penalty: presencePenalty,
521
516
  stop: stopSequences,
522
517
  seed,
523
- response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? useJsonSchema ? {
518
+ response_format: responseFormat?.type === "json" ? useJsonSchema ? {
524
519
  type: "json_schema",
525
520
  json_schema: {
526
521
  schema: responseFormat.schema,
527
- name: (_b = responseFormat.name) != null ? _b : "response",
522
+ name: responseFormat.name ?? "response",
528
523
  description: responseFormat.description
529
524
  }
530
525
  } : { type: "json_object" } : void 0,
@@ -538,7 +533,7 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
538
533
  messages: convertToAlibabaChatMessages({
539
534
  prompt: resolvedPrompt,
540
535
  cacheControlValidator,
541
- preserveThinking: preserveThinking != null ? preserveThinking : false
536
+ preserveThinking: preserveThinking ?? false
542
537
  })
543
538
  };
544
539
  const {
@@ -552,13 +547,12 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
552
547
  ...baseArgs,
553
548
  tools: alibabaTools,
554
549
  tool_choice: alibabaToolChoice,
555
- ...alibabaTools != null && (alibabaOptions == null ? void 0 : alibabaOptions.parallelToolCalls) !== void 0 ? { parallel_tool_calls: alibabaOptions.parallelToolCalls } : {}
550
+ ...alibabaTools != null && alibabaOptions?.parallelToolCalls !== void 0 ? { parallel_tool_calls: alibabaOptions.parallelToolCalls } : {}
556
551
  },
557
552
  warnings: [...warnings, ...toolWarnings]
558
553
  };
559
554
  }
560
555
  async doGenerate(options) {
561
- var _a, _b, _c;
562
556
  const { args, warnings } = await this.getArgs(options);
563
557
  const {
564
558
  responseHeaders,
@@ -566,7 +560,7 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
566
560
  rawValue: rawResponse
567
561
  } = await postJsonToApi({
568
562
  url: `${this.config.baseURL}/chat/completions`,
569
- headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
563
+ headers: combineHeaders(this.config.headers?.(), options.headers),
570
564
  body: args,
571
565
  failedResponseHandler: alibabaFailedResponseHandler,
572
566
  successfulResponseHandler: createJsonResponseHandler(
@@ -602,7 +596,7 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
602
596
  content,
603
597
  finishReason: {
604
598
  unified: mapAlibabaFinishReason(choice.finish_reason),
605
- raw: (_c = choice.finish_reason) != null ? _c : void 0
599
+ raw: choice.finish_reason ?? void 0
606
600
  },
607
601
  usage: convertAlibabaUsage(response.usage),
608
602
  request: { body: JSON.stringify(args) },
@@ -615,7 +609,6 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
615
609
  };
616
610
  }
617
611
  async doStream(options) {
618
- var _a, _b;
619
612
  const { args, warnings } = await this.getArgs(options);
620
613
  const body = {
621
614
  ...args,
@@ -624,7 +617,7 @@ var AlibabaChatLanguageModel = class _AlibabaChatLanguageModel {
624
617
  };
625
618
  const { responseHeaders, value: response } = await postJsonToApi({
626
619
  url: `${this.config.baseURL}/chat/completions`,
627
- headers: combineHeaders((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), options.headers),
620
+ headers: combineHeaders(this.config.headers?.(), options.headers),
628
621
  body,
629
622
  failedResponseHandler: alibabaFailedResponseHandler,
630
623
  successfulResponseHandler: createEventSourceResponseHandler(
@@ -763,7 +756,7 @@ function resolveAlibabaThinking({
763
756
  alibabaOptions,
764
757
  warnings
765
758
  }) {
766
- if ((alibabaOptions == null ? void 0 : alibabaOptions.enableThinking) != null || (alibabaOptions == null ? void 0 : alibabaOptions.thinkingBudget) != null) {
759
+ if (alibabaOptions?.enableThinking != null || alibabaOptions?.thinkingBudget != null) {
767
760
  return {
768
761
  ...alibabaOptions.enableThinking != null ? { enable_thinking: alibabaOptions.enableThinking } : {},
769
762
  ...alibabaOptions.thinkingBudget != null ? { thinking_budget: alibabaOptions.thinkingBudget } : {}
@@ -934,7 +927,6 @@ var AlibabaEmbeddingModel = class _AlibabaEmbeddingModel {
934
927
  abortSignal,
935
928
  providerOptions
936
929
  }) {
937
- var _a, _b;
938
930
  if (values.length > this.maxEmbeddingsPerCall) {
939
931
  throw new TooManyEmbeddingValuesForCallError({
940
932
  provider: this.provider,
@@ -948,7 +940,7 @@ var AlibabaEmbeddingModel = class _AlibabaEmbeddingModel {
948
940
  providerOptions,
949
941
  schema: alibabaEmbeddingModelOptions
950
942
  });
951
- if ((alibabaOptions == null ? void 0 : alibabaOptions.outputType) === "sparse") {
943
+ if (alibabaOptions?.outputType === "sparse") {
952
944
  throw new UnsupportedFunctionalityError3({
953
945
  functionality: "Alibaba embedding outputType 'sparse'",
954
946
  message: "Alibaba embedding outputType 'sparse' is not supported because AI SDK embeddings require dense number arrays. Use 'dense' or 'dense&sparse' instead."
@@ -960,16 +952,16 @@ var AlibabaEmbeddingModel = class _AlibabaEmbeddingModel {
960
952
  rawValue
961
953
  } = await postJsonToApi2({
962
954
  url: `${this.config.baseURL}/services/embeddings/text-embedding/text-embedding`,
963
- headers: combineHeaders2((_b = (_a = this.config).headers) == null ? void 0 : _b.call(_a), headers),
955
+ headers: combineHeaders2(this.config.headers?.(), headers),
964
956
  body: {
965
957
  model: this.modelId,
966
958
  input: {
967
959
  texts: values
968
960
  },
969
961
  parameters: {
970
- text_type: alibabaOptions == null ? void 0 : alibabaOptions.textType,
971
- dimension: alibabaOptions == null ? void 0 : alibabaOptions.dimension,
972
- output_type: alibabaOptions == null ? void 0 : alibabaOptions.outputType
962
+ text_type: alibabaOptions?.textType,
963
+ dimension: alibabaOptions?.dimension,
964
+ output_type: alibabaOptions?.outputType
973
965
  }
974
966
  },
975
967
  failedResponseHandler: alibabaEmbeddingFailedResponseHandler,
@@ -1161,23 +1153,19 @@ function fileToImageString(file) {
1161
1153
  return typeof file.data === "string" ? file.data : convertUint8ArrayToBase64(file.data);
1162
1154
  }
1163
1155
  function getFirstFrameImage(options) {
1164
- var _a, _b;
1165
- return (_b = (_a = options.frameImages) == null ? void 0 : _a.find((frame) => frame.frameType === "first_frame")) == null ? void 0 : _b.image;
1156
+ return options.frameImages?.find((frame) => frame.frameType === "first_frame")?.image;
1166
1157
  }
1167
1158
  function getLastFrameImage(options) {
1168
- var _a, _b;
1169
- return (_b = (_a = options.frameImages) == null ? void 0 : _a.find((frame) => frame.frameType === "last_frame")) == null ? void 0 : _b.image;
1159
+ return options.frameImages?.find((frame) => frame.frameType === "last_frame")?.image;
1170
1160
  }
1171
1161
  function resolveStartImage(options) {
1172
- var _a;
1173
- return (_a = getFirstFrameImage(options)) != null ? _a : options.image;
1162
+ return getFirstFrameImage(options) ?? options.image;
1174
1163
  }
1175
1164
  function isVideoUrl(url) {
1176
1165
  return /\.(mp4|mov)([?#]|$)/i.test(url);
1177
1166
  }
1178
1167
  function resolveMedia(options, alibabaOptions, warnings, frames) {
1179
- var _a;
1180
- if ((alibabaOptions == null ? void 0 : alibabaOptions.media) != null && alibabaOptions.media.length > 0) {
1168
+ if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {
1181
1169
  return alibabaOptions.media.map((item) => ({
1182
1170
  type: item.type,
1183
1171
  url: item.url,
@@ -1185,7 +1173,7 @@ function resolveMedia(options, alibabaOptions, warnings, frames) {
1185
1173
  }));
1186
1174
  }
1187
1175
  const media = [];
1188
- for (const reference of (_a = options.inputReferences) != null ? _a : []) {
1176
+ for (const reference of options.inputReferences ?? []) {
1189
1177
  if (reference.type === "url") {
1190
1178
  media.push({
1191
1179
  type: isVideoUrl(reference.url) ? "reference_video" : "reference_image",
@@ -1219,7 +1207,6 @@ function resolveMedia(options, alibabaOptions, warnings, frames) {
1219
1207
  return media.length > 0 ? media : void 0;
1220
1208
  }
1221
1209
  function resolveReferenceUrls(options, alibabaOptions, warnings) {
1222
- var _a;
1223
1210
  if (options.frameImages != null && options.frameImages.length > 0) {
1224
1211
  return void 0;
1225
1212
  }
@@ -1238,7 +1225,7 @@ function resolveReferenceUrls(options, alibabaOptions, warnings) {
1238
1225
  }
1239
1226
  return urls.length > 0 ? urls : void 0;
1240
1227
  }
1241
- return (_a = alibabaOptions == null ? void 0 : alibabaOptions.referenceUrls) != null ? _a : void 0;
1228
+ return alibabaOptions?.referenceUrls ?? void 0;
1242
1229
  }
1243
1230
  var AlibabaVideoModel = class {
1244
1231
  constructor(modelId, config) {
@@ -1251,7 +1238,6 @@ var AlibabaVideoModel = class {
1251
1238
  return this.config.provider;
1252
1239
  }
1253
1240
  async buildRequest(options) {
1254
- var _a, _b, _c;
1255
1241
  const warnings = [];
1256
1242
  const mode = detectMode(this.modelId);
1257
1243
  const alibabaOptions = await parseProviderOptions3({
@@ -1263,10 +1249,10 @@ var AlibabaVideoModel = class {
1263
1249
  if (options.prompt != null) {
1264
1250
  input.prompt = options.prompt;
1265
1251
  }
1266
- if ((alibabaOptions == null ? void 0 : alibabaOptions.negativePrompt) != null) {
1252
+ if (alibabaOptions?.negativePrompt != null) {
1267
1253
  input.negative_prompt = alibabaOptions.negativePrompt;
1268
1254
  }
1269
- if ((alibabaOptions == null ? void 0 : alibabaOptions.audioUrl) != null) {
1255
+ if (alibabaOptions?.audioUrl != null) {
1270
1256
  input.audio_url = alibabaOptions.audioUrl;
1271
1257
  }
1272
1258
  const startImage = resolveStartImage(options);
@@ -1345,15 +1331,15 @@ var AlibabaVideoModel = class {
1345
1331
  }
1346
1332
  }
1347
1333
  if (supportsRatio) {
1348
- const ratio = (_b = (_a = alibabaOptions == null ? void 0 : alibabaOptions.ratio) != null ? _a : options.aspectRatio) != null ? _b : options.resolution != null ? deriveRatioFromResolution(options.resolution) : void 0;
1334
+ const ratio = alibabaOptions?.ratio ?? options.aspectRatio ?? (options.resolution != null ? deriveRatioFromResolution(options.resolution) : void 0);
1349
1335
  if (ratio != null) {
1350
1336
  parameters.ratio = ratio;
1351
1337
  }
1352
1338
  }
1353
- if ((alibabaOptions == null ? void 0 : alibabaOptions.promptExtend) != null) {
1339
+ if (alibabaOptions?.promptExtend != null) {
1354
1340
  parameters.prompt_extend = alibabaOptions.promptExtend;
1355
1341
  }
1356
- if ((alibabaOptions == null ? void 0 : alibabaOptions.shotType) != null) {
1342
+ if (alibabaOptions?.shotType != null) {
1357
1343
  if (tieredProtocol) {
1358
1344
  warnings.push({
1359
1345
  type: "unsupported",
@@ -1364,10 +1350,10 @@ var AlibabaVideoModel = class {
1364
1350
  parameters.shot_type = alibabaOptions.shotType;
1365
1351
  }
1366
1352
  }
1367
- if ((alibabaOptions == null ? void 0 : alibabaOptions.watermark) != null) {
1353
+ if (alibabaOptions?.watermark != null) {
1368
1354
  parameters.watermark = alibabaOptions.watermark;
1369
1355
  }
1370
- const audio = (_c = options.generateAudio) != null ? _c : alibabaOptions == null ? void 0 : alibabaOptions.audio;
1356
+ const audio = options.generateAudio ?? alibabaOptions?.audio;
1371
1357
  if (audio != null) {
1372
1358
  if (wan27) {
1373
1359
  warnings.push({
@@ -1403,9 +1389,8 @@ var AlibabaVideoModel = class {
1403
1389
  return { input, parameters, warnings, alibabaOptions };
1404
1390
  }
1405
1391
  buildCompletedResult(statusResponse, responseHeaders, warnings, currentDate) {
1406
- var _a, _b, _c;
1407
- const taskId = (_a = statusResponse.output) == null ? void 0 : _a.task_id;
1408
- const videoUrl = (_b = statusResponse.output) == null ? void 0 : _b.video_url;
1392
+ const taskId = statusResponse.output?.task_id;
1393
+ const videoUrl = statusResponse.output?.video_url;
1409
1394
  if (!videoUrl) {
1410
1395
  throw new AISDKError({
1411
1396
  name: "ALIBABA_VIDEO_GENERATION_ERROR",
@@ -1431,7 +1416,7 @@ var AlibabaVideoModel = class {
1431
1416
  alibaba: {
1432
1417
  taskId,
1433
1418
  videoUrl,
1434
- ...((_c = statusResponse.output) == null ? void 0 : _c.actual_prompt) ? { actualPrompt: statusResponse.output.actual_prompt } : {},
1419
+ ...statusResponse.output?.actual_prompt ? { actualPrompt: statusResponse.output.actual_prompt } : {},
1435
1420
  ...statusResponse.usage ? {
1436
1421
  usage: {
1437
1422
  duration: statusResponse.usage.duration,
@@ -1452,8 +1437,7 @@ var AlibabaVideoModel = class {
1452
1437
  };
1453
1438
  }
1454
1439
  async doStart(options) {
1455
- var _a, _b, _c, _d;
1456
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
1440
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
1457
1441
  const { input, parameters, warnings } = await this.buildRequest(options);
1458
1442
  const { value: createResponse, responseHeaders } = await postJsonToApi3({
1459
1443
  url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,
@@ -1476,7 +1460,7 @@ var AlibabaVideoModel = class {
1476
1460
  abortSignal: options.abortSignal,
1477
1461
  fetch: this.config.fetch
1478
1462
  });
1479
- const taskId = (_d = createResponse.output) == null ? void 0 : _d.task_id;
1463
+ const taskId = createResponse.output?.task_id;
1480
1464
  if (!taskId) {
1481
1465
  throw new AISDKError({
1482
1466
  name: "ALIBABA_VIDEO_GENERATION_ERROR",
@@ -1494,8 +1478,7 @@ var AlibabaVideoModel = class {
1494
1478
  };
1495
1479
  }
1496
1480
  async doStatus(options) {
1497
- var _a, _b, _c, _d, _e, _f;
1498
- const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
1481
+ const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
1499
1482
  const { taskId } = options.operation;
1500
1483
  const { value: statusResponse, responseHeaders } = await getFromApi({
1501
1484
  url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
@@ -1511,7 +1494,7 @@ var AlibabaVideoModel = class {
1511
1494
  abortSignal: options.abortSignal,
1512
1495
  fetch: this.config.fetch
1513
1496
  });
1514
- const taskStatus = (_d = statusResponse.output) == null ? void 0 : _d.task_status;
1497
+ const taskStatus = statusResponse.output?.task_status;
1515
1498
  if (taskStatus === "SUCCEEDED") {
1516
1499
  return this.buildCompletedResult(
1517
1500
  statusResponse,
@@ -1523,7 +1506,7 @@ var AlibabaVideoModel = class {
1523
1506
  if (taskStatus === "FAILED" || taskStatus === "CANCELED") {
1524
1507
  return {
1525
1508
  status: "error",
1526
- error: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${(_f = (_e = statusResponse.output) == null ? void 0 : _e.message) != null ? _f : ""}`.trim(),
1509
+ error: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ""}`.trim(),
1527
1510
  response: {
1528
1511
  timestamp: currentDate,
1529
1512
  modelId: this.modelId,
@@ -1543,14 +1526,13 @@ var AlibabaVideoModel = class {
1543
1526
  };
1544
1527
 
1545
1528
  // src/version.ts
1546
- var VERSION = true ? "2.0.54" : "0.0.0-test";
1529
+ var VERSION = true ? "2.0.57" : "0.0.0-test";
1547
1530
 
1548
1531
  // src/alibaba-provider.ts
1549
1532
  function createAlibaba(options = {}) {
1550
- var _a, _b, _c;
1551
- const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
1552
- const videoBaseURL = (_b = withoutTrailingSlash(options.videoBaseURL)) != null ? _b : "https://dashscope-intl.aliyuncs.com";
1553
- const embeddingBaseURL = (_c = withoutTrailingSlash(options.embeddingBaseURL)) != null ? _c : "https://dashscope-intl.aliyuncs.com/api/v1";
1533
+ const baseURL = withoutTrailingSlash(options.baseURL) ?? "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
1534
+ const videoBaseURL = withoutTrailingSlash(options.videoBaseURL) ?? "https://dashscope-intl.aliyuncs.com";
1535
+ const embeddingBaseURL = withoutTrailingSlash(options.embeddingBaseURL) ?? "https://dashscope-intl.aliyuncs.com/api/v1";
1554
1536
  const getHeaders = () => withUserAgentSuffix(
1555
1537
  {
1556
1538
  Authorization: `Bearer ${loadApiKey({
@@ -1562,16 +1544,13 @@ function createAlibaba(options = {}) {
1562
1544
  },
1563
1545
  `ai-sdk/alibaba/${VERSION}`
1564
1546
  );
1565
- const createLanguageModel = (modelId) => {
1566
- var _a2;
1567
- return new AlibabaChatLanguageModel(modelId, {
1568
- provider: "alibaba.chat",
1569
- baseURL,
1570
- headers: getHeaders,
1571
- fetch: options.fetch,
1572
- includeUsage: (_a2 = options.includeUsage) != null ? _a2 : true
1573
- });
1574
- };
1547
+ const createLanguageModel = (modelId) => new AlibabaChatLanguageModel(modelId, {
1548
+ provider: "alibaba.chat",
1549
+ baseURL,
1550
+ headers: getHeaders,
1551
+ fetch: options.fetch,
1552
+ includeUsage: options.includeUsage ?? true
1553
+ });
1575
1554
  const createEmbeddingModel = (modelId) => new AlibabaEmbeddingModel(modelId, {
1576
1555
  provider: "alibaba.embedding",
1577
1556
  baseURL: embeddingBaseURL,
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/alibaba-prepare-tools.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/map-alibaba-finish-reason.ts","../src/supports-json-schema-output.ts","../src/supports-preserved-thinking.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 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 createLanguageModelResponseMetadata as getResponseMetadata,\n generateId,\n injectJsonInstructionIntoMessages,\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 { prepareTools } from './alibaba-prepare-tools';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { mapAlibabaFinishReason } from './map-alibaba-finish-reason';\nimport { supportsJsonSchemaOutput } from './supports-json-schema-output';\nimport { supportsPreservedThinking } from './supports-preserved-thinking';\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 // Preserved thinking defaults to on for models that support it; an\n // explicit option always passes through. Unsupported models without an\n // explicit option omit the wire field entirely.\n const preserveThinking =\n alibabaOptions?.preserveThinking ??\n (supportsPreservedThinking(this.modelId) ? true : undefined);\n\n const useJsonSchema =\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n supportsJsonSchemaOutput(this.modelId);\n\n const useJsonObject = responseFormat?.type === 'json' && !useJsonSchema;\n\n if (useJsonObject && responseFormat.schema != null) {\n warnings.push({\n type: 'compatibility',\n feature: 'responseFormat JSON schema',\n details:\n `Alibaba does not support JSON Schema output for model ${this.modelId}. ` +\n 'JSON Object mode is used instead. The schema was injected into the system message and will only be validated locally.',\n });\n }\n\n const resolvedPrompt = useJsonObject\n ? injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n })\n : prompt;\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 ? useJsonSchema\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 ...(preserveThinking != null\n ? { preserve_thinking: preserveThinking }\n : {}),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt: resolvedPrompt,\n cacheControlValidator,\n preserveThinking: preserveThinking ?? false,\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: mapAlibabaFinishReason(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 && delta.tool_calls.length > 0) {\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: mapAlibabaFinishReason(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.looseObject({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .looseObject({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n cache_type: z.string().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .looseObject({\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 preserve reasoning from previous assistant messages.\n *\n * When enabled, historical reasoning is sent separately as\n * `reasoning_content` and Alibaba receives `preserve_thinking: true`.\n * Defaults to `true` for models that support preserved thinking; set to\n * `false` to opt out.\n */\n preserveThinking: z.boolean().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 {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type {\n AlibabaChatToolChoice,\n AlibabaFunctionTool,\n} from './alibaba-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: undefined | Array<AlibabaFunctionTool>;\n toolChoice: AlibabaChatToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const alibabaTools: Array<AlibabaFunctionTool> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n alibabaTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: alibabaTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: alibabaTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: alibabaTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\n/**\n * Usage as reported by Alibaba's OpenAI-compatible chat completions API.\n *\n * The fields below are the ones this provider maps onto the standard usage\n * shape. Alibaba returns more than this, and `alibabaUsageSchema` parses\n * loosely so that anything undeclared survives into `raw` rather than being\n * dropped. Declared fields are therefore a subset of what a caller may find\n * there.\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 /**\n * Which caching mode served the request. Alibaba populates this only under\n * explicit context caching, which sending `cache_control` selects; under\n * implicit caching the field is absent. The two modes are mutually\n * exclusive and priced differently, so this is the discriminator for\n * attributing cache reads to a rate.\n */\n cache_type?: string | 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 if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const cacheWriteTokens =\n usage.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n // Alibaba counts both cache reads and cache writes inside prompt_tokens.\n noCache: promptTokens - cacheReadTokens - cacheWriteTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: cacheWriteTokens,\n },\n outputTokens: {\n total: completionTokens,\n text: Math.max(0, completionTokens - reasoningTokens),\n reasoning: reasoningTokens,\n },\n raw: usage,\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 preserveThinking = false,\n}: {\n prompt: LanguageModelV4Prompt;\n cacheControlValidator?: CacheControlValidator;\n preserveThinking?: boolean;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n // TODO use findLastIndex once we use ES2023\n let lastUserMessageIndex = -1;\n for (let i = prompt.length - 1; i >= 0; i--) {\n if (prompt[i].role === 'user') {\n lastUserMessageIndex = i;\n break;\n }\n }\n\n let index = -1;\n for (const { role, content, ...message } of prompt) {\n index++;\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 let reasoningContent = '';\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 from the current round (after the last user\n // message) always accompanies tool calls. Earlier rounds are\n // replayed only when preserved thinking is enabled.\n if (preserveThinking || index > lastUserMessageIndex) {\n reasoningContent += part.text;\n }\n break;\n }\n }\n }\n\n if (\n text.length === 0 &&\n toolCalls.length === 0 &&\n reasoningContent.length === 0\n ) {\n break;\n }\n\n messages.push({\n role: 'assistant',\n content:\n text.length === 0 &&\n toolCalls.length === 0 &&\n reasoningContent.length > 0\n ? null\n : messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n ...(reasoningContent.length > 0\n ? { reasoning_content: reasoningContent }\n : {}),\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 type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapAlibabaFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","// https://www.alibabacloud.com/help/en/model-studio/qwen-structured-output#supported-models\nconst JSON_SCHEMA_MODEL_PREFIXES = [\n 'qwen3.7-plus',\n 'qwen3.7-flash',\n 'qwen3.7-max',\n 'qwen3.8-max',\n 'qwen3.8-flash',\n];\n\nexport function supportsJsonSchemaOutput(modelId: string): boolean {\n return JSON_SCHEMA_MODEL_PREFIXES.some(\n prefix => modelId === prefix || modelId.startsWith(`${prefix}-`),\n );\n}\n","/**\n * Whether a model id supports Alibaba's preserved-thinking mode\n * (`preserve_thinking`), which replays assistant `reasoning_content` from\n * previous turns.\n *\n * Supported models per Alibaba's documentation:\n * https://docs.qwencloud.com/developer-guides/text-generation/thinking#preserve-thinking-in-multi-turn\n */\nconst preservedThinkingModelIds = new Set([\n 'kimi-k2.7-code',\n 'qwen3.6-max-preview',\n 'qwen3.6-plus',\n 'qwen3.6-plus-2026-04-02',\n 'qwen3.7-flash',\n 'qwen3.7-flash-2026-07-15',\n 'qwen3.7-max',\n 'qwen3.7-max-2026-05-17',\n 'qwen3.7-max-2026-05-20',\n 'qwen3.7-max-2026-06-08',\n 'qwen3.7-max-preview',\n 'qwen3.7-plus',\n 'qwen3.7-plus-2026-05-26',\n 'qwen3.8-flash',\n 'qwen3.8-max',\n 'qwen3.8-max-0902',\n]);\n\nexport function supportsPreservedThinking(modelId: string): boolean {\n return preservedThinkingModelIds.has(modelId);\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 as VideoModelV4,\n type Experimental_VideoModelV4CallOptions as VideoModelV4CallOptions,\n type Experimental_VideoModelV4File as 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\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 // wan3 splits the total: input video counts toward its 30s ceiling.\n input_video_duration: z.number().nullish(),\n fps: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n ratio: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\n// Only meaningful for ids that name their mode (wan2.6/wan2.7). wan3 ships a\n// single all-in-one id, so its mode comes from the media the request carries.\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/**\n * Request protocol, selected by model id:\n * - `legacy` (wan2.6 and earlier): `parameters.size`, `input.img_url`, and\n * `input.reference_urls`.\n * - `wan27`: resolution tiers and `ratio` instead of `size`, `input.media`\n * instead of `input.reference_urls`, no `shot_type`, audio always on.\n * - `wan3`: like `wan27`, plus a real `last_frame` slot, an `audio` toggle,\n * a 480P tier, and one id covering every mode.\n */\ntype AlibabaVideoProtocol = 'legacy' | 'wan27' | 'wan3';\n\nfunction detectProtocol(modelId: string): AlibabaVideoProtocol {\n if (modelId.startsWith('wan3')) return 'wan3';\n if (modelId.startsWith('wan2.7')) return 'wan27';\n return 'legacy';\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: 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): VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction getLastFrameImage(\n options: VideoModelV4CallOptions,\n): VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'last_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: VideoModelV4CallOptions,\n): 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 input.media array (wan2.7 and wan3) from inputReferences plus the\n// frame images the caller resolved for this protocol.\nfunction resolveMedia(\n options: VideoModelV4CallOptions,\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n frames: { first?: VideoModelV4File; last?: VideoModelV4File },\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 if (frames.first != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(frames.first),\n });\n }\n\n if (frames.last != null) {\n media.push({\n type: 'last_frame',\n url: convertImageModelFileToDataUri(frames.last),\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 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 protocol = detectProtocol(this.modelId);\n const wan27 = protocol === 'wan27';\n const wan3 = protocol === 'wan3';\n // Resolution tiers and input.media replaced size/img_url from wan2.7 on.\n const tieredProtocol = wan27 || wan3;\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input\n // image); wan3 serves every mode from one id, so it always takes one.\n const supportsRatio = wan3 || (wan27 && mode !== 'i2v');\n\n // Handle image input for I2V mode (wan3 carries frames in input.media)\n if (!wan3 && mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n if (wan3) {\n // The media the request carries decides whether this is text-, image-,\n // or reference-to-video, so there is no mode to read off the id. A bare\n // prompt stays text-to-video.\n const media = resolveMedia(options, alibabaOptions, warnings, {\n first: startImage,\n last: getLastFrameImage(options),\n });\n if (media != null) {\n input.media = media;\n }\n } else if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings, {\n first: getFirstFrameImage(options),\n });\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 = getLastFrameImage(options);\n\n // wan3 has a real closing-frame slot, filled in input.media above.\n if (lastFrame != null && !wan3) {\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 !wan3\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' || tieredProtocol) {\n // I2V, wan2.7, and wan3 use the \"720P\" / \"1080P\" tier format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n // wan3 adds a 480P tier to wan2.7's two.\n const supportedTiers = wan3\n ? ['480P', '720P', '1080P']\n : ['720P', '1080P'];\n if (tieredProtocol && !supportedTiers.includes(resolutionTier)) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `${wan3 ? 'wan3' : 'wan2.7'} models only support the ` +\n `${supportedTiers.join(', ')} resolution tiers. ` +\n `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 (tieredProtocol) {\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 `${wan3 ? 'wan3' : 'wan2.7'} models do not support the shotType ` +\n 'option. 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 // wan3-only. Spread rather than set to undefined so the\n // metadata shape for older wan models is unchanged.\n ...(statusResponse.usage.input_video_duration != null\n ? {\n inputVideoDuration:\n statusResponse.usage.input_video_duration,\n }\n : {}),\n ...(statusResponse.usage.fps != null\n ? { fps: statusResponse.usage.fps }\n : {}),\n ...(statusResponse.usage.ratio != null\n ? { ratio: statusResponse.usage.ratio }\n : {}),\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 (wan2.6 I2V/R2V and wan3 models;\n * wan2.7 models always generate audio). Defaults to true on wan3.\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 (wan2.7 and wan3 models). Overrides the automatic\n * mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images, videos, and audio are counted separately, in array order).\n *\n * `reference_audio`, `file`, and `link` are wan3-only and have no top-level\n * call option, so they can only be passed here. wan3 also rejects mixing\n * `reference_*`/`file`/`link` with `first_frame`/`last_frame`.\n */\n media?: Array<{\n type:\n | 'reference_image'\n | 'reference_video'\n | 'reference_audio'\n | 'first_frame'\n | 'last_frame'\n | 'file'\n | 'link';\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, and\n * every wan3 generation). `adaptive` is wan3-only, and is its default.\n */\n ratio?: 'adaptive' | '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([\n 'reference_image',\n 'reference_video',\n 'reference_audio',\n 'first_frame',\n 'last_frame',\n 'file',\n 'link',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z\n .enum(['adaptive', '16:9', '9:16', '1:1', '4:3', '3:4'])\n .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","UnsupportedFunctionalityError","index","_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/alibaba-prepare-tools.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/map-alibaba-finish-reason.ts","../src/supports-json-schema-output.ts","../src/supports-preserved-thinking.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 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 createLanguageModelResponseMetadata as getResponseMetadata,\n generateId,\n injectJsonInstructionIntoMessages,\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 { prepareTools } from './alibaba-prepare-tools';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { mapAlibabaFinishReason } from './map-alibaba-finish-reason';\nimport { supportsJsonSchemaOutput } from './supports-json-schema-output';\nimport { supportsPreservedThinking } from './supports-preserved-thinking';\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 // Preserved thinking defaults to on for models that support it; an\n // explicit option always passes through. Unsupported models without an\n // explicit option omit the wire field entirely.\n const preserveThinking =\n alibabaOptions?.preserveThinking ??\n (supportsPreservedThinking(this.modelId) ? true : undefined);\n\n const useJsonSchema =\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n supportsJsonSchemaOutput(this.modelId);\n\n const useJsonObject = responseFormat?.type === 'json' && !useJsonSchema;\n\n if (useJsonObject && responseFormat.schema != null) {\n warnings.push({\n type: 'compatibility',\n feature: 'responseFormat JSON schema',\n details:\n `Alibaba does not support JSON Schema output for model ${this.modelId}. ` +\n 'JSON Object mode is used instead. The schema was injected into the system message and will only be validated locally.',\n });\n }\n\n const resolvedPrompt = useJsonObject\n ? injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema,\n })\n : prompt;\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 ? useJsonSchema\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 ...(preserveThinking != null\n ? { preserve_thinking: preserveThinking }\n : {}),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt: resolvedPrompt,\n cacheControlValidator,\n preserveThinking: preserveThinking ?? false,\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: mapAlibabaFinishReason(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 && delta.tool_calls.length > 0) {\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: mapAlibabaFinishReason(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.looseObject({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .looseObject({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n cache_type: z.string().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .looseObject({\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 preserve reasoning from previous assistant messages.\n *\n * When enabled, historical reasoning is sent separately as\n * `reasoning_content` and Alibaba receives `preserve_thinking: true`.\n * Defaults to `true` for models that support preserved thinking; set to\n * `false` to opt out.\n */\n preserveThinking: z.boolean().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 {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type {\n AlibabaChatToolChoice,\n AlibabaFunctionTool,\n} from './alibaba-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: undefined | Array<AlibabaFunctionTool>;\n toolChoice: AlibabaChatToolChoice | undefined;\n toolWarnings: SharedV4Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const alibabaTools: Array<AlibabaFunctionTool> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n alibabaTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: alibabaTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: alibabaTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: alibabaTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\n/**\n * Usage as reported by Alibaba's OpenAI-compatible chat completions API.\n *\n * The fields below are the ones this provider maps onto the standard usage\n * shape. Alibaba returns more than this, and `alibabaUsageSchema` parses\n * loosely so that anything undeclared survives into `raw` rather than being\n * dropped. Declared fields are therefore a subset of what a caller may find\n * there.\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 /**\n * Which caching mode served the request. Alibaba populates this only under\n * explicit context caching, which sending `cache_control` selects; under\n * implicit caching the field is absent. The two modes are mutually\n * exclusive and priced differently, so this is the discriminator for\n * attributing cache reads to a rate.\n */\n cache_type?: string | 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 if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const cacheWriteTokens =\n usage.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const reasoningTokens =\n usage.completion_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n // Alibaba counts both cache reads and cache writes inside prompt_tokens.\n noCache: promptTokens - cacheReadTokens - cacheWriteTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: cacheWriteTokens,\n },\n outputTokens: {\n total: completionTokens,\n text: Math.max(0, completionTokens - reasoningTokens),\n reasoning: reasoningTokens,\n },\n raw: usage,\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 preserveThinking = false,\n}: {\n prompt: LanguageModelV4Prompt;\n cacheControlValidator?: CacheControlValidator;\n preserveThinking?: boolean;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n // TODO use findLastIndex once we use ES2023\n let lastUserMessageIndex = -1;\n for (let i = prompt.length - 1; i >= 0; i--) {\n if (prompt[i].role === 'user') {\n lastUserMessageIndex = i;\n break;\n }\n }\n\n let index = -1;\n for (const { role, content, ...message } of prompt) {\n index++;\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 let reasoningContent = '';\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 from the current round (after the last user\n // message) always accompanies tool calls. Earlier rounds are\n // replayed only when preserved thinking is enabled.\n if (preserveThinking || index > lastUserMessageIndex) {\n reasoningContent += part.text;\n }\n break;\n }\n }\n }\n\n if (\n text.length === 0 &&\n toolCalls.length === 0 &&\n reasoningContent.length === 0\n ) {\n break;\n }\n\n messages.push({\n role: 'assistant',\n content:\n text.length === 0 &&\n toolCalls.length === 0 &&\n reasoningContent.length > 0\n ? null\n : messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n ...(reasoningContent.length > 0\n ? { reasoning_content: reasoningContent }\n : {}),\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 type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapAlibabaFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","// https://www.alibabacloud.com/help/en/model-studio/qwen-structured-output#supported-models\nconst JSON_SCHEMA_MODEL_PREFIXES = [\n 'qwen3.7-plus',\n 'qwen3.7-flash',\n 'qwen3.7-max',\n 'qwen3.8-max',\n 'qwen3.8-flash',\n];\n\nexport function supportsJsonSchemaOutput(modelId: string): boolean {\n return JSON_SCHEMA_MODEL_PREFIXES.some(\n prefix => modelId === prefix || modelId.startsWith(`${prefix}-`),\n );\n}\n","/**\n * Whether a model id supports Alibaba's preserved-thinking mode\n * (`preserve_thinking`), which replays assistant `reasoning_content` from\n * previous turns.\n *\n * Supported models per Alibaba's documentation:\n * https://docs.qwencloud.com/developer-guides/text-generation/thinking#preserve-thinking-in-multi-turn\n */\nconst preservedThinkingModelIds = new Set([\n 'kimi-k2.7-code',\n 'qwen3.6-max-preview',\n 'qwen3.6-plus',\n 'qwen3.6-plus-2026-04-02',\n 'qwen3.7-flash',\n 'qwen3.7-flash-2026-07-15',\n 'qwen3.7-max',\n 'qwen3.7-max-2026-05-17',\n 'qwen3.7-max-2026-05-20',\n 'qwen3.7-max-2026-06-08',\n 'qwen3.7-max-preview',\n 'qwen3.7-plus',\n 'qwen3.7-plus-2026-05-26',\n 'qwen3.8-flash',\n 'qwen3.8-max',\n 'qwen3.8-max-0902',\n]);\n\nexport function supportsPreservedThinking(modelId: string): boolean {\n return preservedThinkingModelIds.has(modelId);\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 as VideoModelV4,\n type Experimental_VideoModelV4CallOptions as VideoModelV4CallOptions,\n type Experimental_VideoModelV4File as 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\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 // wan3 splits the total: input video counts toward its 30s ceiling.\n input_video_duration: z.number().nullish(),\n fps: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n ratio: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\n// Only meaningful for ids that name their mode (wan2.6/wan2.7). wan3 ships a\n// single all-in-one id, so its mode comes from the media the request carries.\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/**\n * Request protocol, selected by model id:\n * - `legacy` (wan2.6 and earlier): `parameters.size`, `input.img_url`, and\n * `input.reference_urls`.\n * - `wan27`: resolution tiers and `ratio` instead of `size`, `input.media`\n * instead of `input.reference_urls`, no `shot_type`, audio always on.\n * - `wan3`: like `wan27`, plus a real `last_frame` slot, an `audio` toggle,\n * a 480P tier, and one id covering every mode.\n */\ntype AlibabaVideoProtocol = 'legacy' | 'wan27' | 'wan3';\n\nfunction detectProtocol(modelId: string): AlibabaVideoProtocol {\n if (modelId.startsWith('wan3')) return 'wan3';\n if (modelId.startsWith('wan2.7')) return 'wan27';\n return 'legacy';\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: 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): VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction getLastFrameImage(\n options: VideoModelV4CallOptions,\n): VideoModelV4File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'last_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: VideoModelV4CallOptions,\n): 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 input.media array (wan2.7 and wan3) from inputReferences plus the\n// frame images the caller resolved for this protocol.\nfunction resolveMedia(\n options: VideoModelV4CallOptions,\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV4Warning[],\n frames: { first?: VideoModelV4File; last?: VideoModelV4File },\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 if (frames.first != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(frames.first),\n });\n }\n\n if (frames.last != null) {\n media.push({\n type: 'last_frame',\n url: convertImageModelFileToDataUri(frames.last),\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 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 protocol = detectProtocol(this.modelId);\n const wan27 = protocol === 'wan27';\n const wan3 = protocol === 'wan3';\n // Resolution tiers and input.media replaced size/img_url from wan2.7 on.\n const tieredProtocol = wan27 || wan3;\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input\n // image); wan3 serves every mode from one id, so it always takes one.\n const supportsRatio = wan3 || (wan27 && mode !== 'i2v');\n\n // Handle image input for I2V mode (wan3 carries frames in input.media)\n if (!wan3 && mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n if (wan3) {\n // The media the request carries decides whether this is text-, image-,\n // or reference-to-video, so there is no mode to read off the id. A bare\n // prompt stays text-to-video.\n const media = resolveMedia(options, alibabaOptions, warnings, {\n first: startImage,\n last: getLastFrameImage(options),\n });\n if (media != null) {\n input.media = media;\n }\n } else if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings, {\n first: getFirstFrameImage(options),\n });\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 = getLastFrameImage(options);\n\n // wan3 has a real closing-frame slot, filled in input.media above.\n if (lastFrame != null && !wan3) {\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 !wan3\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' || tieredProtocol) {\n // I2V, wan2.7, and wan3 use the \"720P\" / \"1080P\" tier format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n // wan3 adds a 480P tier to wan2.7's two.\n const supportedTiers = wan3\n ? ['480P', '720P', '1080P']\n : ['720P', '1080P'];\n if (tieredProtocol && !supportedTiers.includes(resolutionTier)) {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n `${wan3 ? 'wan3' : 'wan2.7'} models only support the ` +\n `${supportedTiers.join(', ')} resolution tiers. ` +\n `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 (tieredProtocol) {\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 `${wan3 ? 'wan3' : 'wan2.7'} models do not support the shotType ` +\n 'option. 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 // wan3-only. Spread rather than set to undefined so the\n // metadata shape for older wan models is unchanged.\n ...(statusResponse.usage.input_video_duration != null\n ? {\n inputVideoDuration:\n statusResponse.usage.input_video_duration,\n }\n : {}),\n ...(statusResponse.usage.fps != null\n ? { fps: statusResponse.usage.fps }\n : {}),\n ...(statusResponse.usage.ratio != null\n ? { ratio: statusResponse.usage.ratio }\n : {}),\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 (wan2.6 I2V/R2V and wan3 models;\n * wan2.7 models always generate audio). Defaults to true on wan3.\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 (wan2.7 and wan3 models). Overrides the automatic\n * mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images, videos, and audio are counted separately, in array order).\n *\n * `reference_audio`, `file`, and `link` are wan3-only and have no top-level\n * call option, so they can only be passed here. wan3 also rejects mixing\n * `reference_*`/`file`/`link` with `first_frame`/`last_frame`.\n */\n media?: Array<{\n type:\n | 'reference_image'\n | 'reference_video'\n | 'reference_audio'\n | 'first_frame'\n | 'last_frame'\n | 'file'\n | 'link';\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, and\n * every wan3 generation). `adaptive` is wan3-only, and is its default.\n */\n ratio?: 'adaptive' | '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([\n 'reference_image',\n 'reference_video',\n 'reference_audio',\n 'first_frame',\n 'last_frame',\n 'file',\n 'link',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z\n .enum(['adaptive', '16:9', '9:16', '1:1', '4:3', '3:4'])\n .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","UnsupportedFunctionalityError","index","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/alibaba",
3
- "version": "2.0.54",
3
+ "version": "2.0.57",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -25,11 +25,11 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "@ai-sdk/provider": "4.0.18",
29
- "@ai-sdk/provider-utils": "5.0.47"
28
+ "@ai-sdk/provider": "4.0.19",
29
+ "@ai-sdk/provider-utils": "5.0.50"
30
30
  },
31
31
  "devDependencies": {
32
- "@ai-sdk/test-server": "2.0.1",
32
+ "@ai-sdk/test-server": "2.0.2",
33
33
  "@types/node": "22.19.19",
34
34
  "@vercel/ai-tsconfig": "0.0.0",
35
35
  "tsup": "^8.5.1",