@ai-sdk/alibaba 2.0.71 → 2.0.73

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.
@@ -9,6 +9,8 @@ import type {
9
9
  SharedV4Warning,
10
10
  } from '@ai-sdk/provider';
11
11
  import {
12
+ lazySchema,
13
+ zodSchema,
12
14
  combineHeaders,
13
15
  createEventSourceResponseHandler,
14
16
  createJsonResponseHandler,
@@ -311,7 +313,8 @@ export class AlibabaChatLanguageModel implements LanguageModelV4 {
311
313
  unified: 'other',
312
314
  raw: undefined,
313
315
  };
314
- let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;
316
+ let usage: z.infer<ReturnType<typeof alibabaUsageSchema>> | undefined =
317
+ undefined;
315
318
 
316
319
  let isFirstChunk = true;
317
320
  let activeText = false;
@@ -322,7 +325,7 @@ export class AlibabaChatLanguageModel implements LanguageModelV4 {
322
325
  return {
323
326
  stream: response.pipeThrough(
324
327
  new TransformStream<
325
- ParseResult<z.infer<typeof alibabaChatChunkSchema>>,
328
+ ParseResult<InferSchema<typeof alibabaChatChunkSchema>>,
326
329
  LanguageModelV4StreamPart
327
330
  >({
328
331
  start(controller) {
@@ -524,83 +527,92 @@ function resolveAlibabaThinking({
524
527
  * Reference for schemas below:
525
528
  * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions
526
529
  */
527
- const alibabaUsageSchema = z.looseObject({
528
- prompt_tokens: z.number(),
529
- completion_tokens: z.number(),
530
- total_tokens: z.number(),
531
- prompt_tokens_details: z
532
- .looseObject({
533
- cached_tokens: z.number().nullish(),
534
- cache_creation_input_tokens: z.number().nullish(),
535
- cache_type: z.string().nullish(),
536
- })
537
- .nullish(),
538
- completion_tokens_details: z
539
- .looseObject({
540
- reasoning_tokens: z.number().nullish(),
541
- })
542
- .nullish(),
543
- });
544
-
545
- const alibabaChatResponseSchema = z.object({
546
- id: z.string().nullish(),
547
- created: z.number().nullish(),
548
- model: z.string().nullish(),
549
- choices: z.array(
530
+ const alibabaUsageSchema = () =>
531
+ z.looseObject({
532
+ prompt_tokens: z.number(),
533
+ completion_tokens: z.number(),
534
+ total_tokens: z.number(),
535
+ prompt_tokens_details: z
536
+ .looseObject({
537
+ cached_tokens: z.number().nullish(),
538
+ cache_creation_input_tokens: z.number().nullish(),
539
+ cache_type: z.string().nullish(),
540
+ })
541
+ .nullish(),
542
+ completion_tokens_details: z
543
+ .looseObject({
544
+ reasoning_tokens: z.number().nullish(),
545
+ })
546
+ .nullish(),
547
+ });
548
+
549
+ const alibabaChatResponseSchema = lazySchema(() =>
550
+ zodSchema(
550
551
  z.object({
551
- message: z.object({
552
- role: z.literal('assistant').nullish(),
553
- content: z.string().nullish(),
554
- reasoning_content: z.string().nullish(), // Alibaba thinking mode
555
- tool_calls: z
556
- .array(
557
- z.object({
558
- id: z.string(),
559
- type: z.literal('function'),
560
- function: z.object({
561
- name: z.string(),
562
- arguments: z.string(),
563
- }),
564
- }),
565
- )
566
- .nullish(),
567
- }),
568
- finish_reason: z.string().nullish(),
569
- index: z.number(),
552
+ id: z.string().nullish(),
553
+ created: z.number().nullish(),
554
+ model: z.string().nullish(),
555
+ choices: z.array(
556
+ z.object({
557
+ message: z.object({
558
+ role: z.literal('assistant').nullish(),
559
+ content: z.string().nullish(),
560
+ reasoning_content: z.string().nullish(), // Alibaba thinking mode
561
+ tool_calls: z
562
+ .array(
563
+ z.object({
564
+ id: z.string(),
565
+ type: z.literal('function'),
566
+ function: z.object({
567
+ name: z.string(),
568
+ arguments: z.string(),
569
+ }),
570
+ }),
571
+ )
572
+ .nullish(),
573
+ }),
574
+ finish_reason: z.string().nullish(),
575
+ index: z.number(),
576
+ }),
577
+ ),
578
+ usage: alibabaUsageSchema().nullish(),
570
579
  }),
571
580
  ),
572
- usage: alibabaUsageSchema.nullish(),
573
- });
574
-
575
- const alibabaChatChunkSchema = z.object({
576
- id: z.string().nullish(),
577
- created: z.number().nullish(),
578
- model: z.string().nullish(),
579
- choices: z.array(
581
+ );
582
+
583
+ const alibabaChatChunkSchema = lazySchema(() =>
584
+ zodSchema(
580
585
  z.object({
581
- delta: z.object({
582
- role: z.enum(['assistant']).nullish(),
583
- content: z.string().nullish(),
584
- reasoning_content: z.string().nullish(), // Alibaba thinking mode delta
585
- tool_calls: z
586
- .array(
587
- z.object({
588
- index: z.number().nullish(), // Index for accumulating tool calls
589
- id: z.string().nullish(),
590
- type: z.literal('function').nullish(),
591
- function: z
592
- .object({
593
- name: z.string().nullish(),
594
- arguments: z.string().nullish(),
595
- })
596
- .nullish(),
597
- }),
598
- )
599
- .nullish(),
600
- }),
601
- finish_reason: z.string().nullish(),
602
- index: z.number(),
586
+ id: z.string().nullish(),
587
+ created: z.number().nullish(),
588
+ model: z.string().nullish(),
589
+ choices: z.array(
590
+ z.object({
591
+ delta: z.object({
592
+ role: z.enum(['assistant']).nullish(),
593
+ content: z.string().nullish(),
594
+ reasoning_content: z.string().nullish(), // Alibaba thinking mode delta
595
+ tool_calls: z
596
+ .array(
597
+ z.object({
598
+ index: z.number().nullish(), // Index for accumulating tool calls
599
+ id: z.string().nullish(),
600
+ type: z.literal('function').nullish(),
601
+ function: z
602
+ .object({
603
+ name: z.string().nullish(),
604
+ arguments: z.string().nullish(),
605
+ })
606
+ .nullish(),
607
+ }),
608
+ )
609
+ .nullish(),
610
+ }),
611
+ finish_reason: z.string().nullish(),
612
+ index: z.number(),
613
+ }),
614
+ ),
615
+ usage: alibabaUsageSchema().nullish(), // Usage only appears in final chunk
603
616
  }),
604
617
  ),
605
- usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk
606
- });
618
+ );
@@ -1,3 +1,8 @@
1
+ import {
2
+ lazySchema,
3
+ zodSchema,
4
+ type InferSchema,
5
+ } from '@ai-sdk/provider-utils';
1
6
  import { z } from 'zod/v4';
2
7
 
3
8
  export type AlibabaEmbeddingModelId =
@@ -5,29 +10,33 @@ export type AlibabaEmbeddingModelId =
5
10
  | 'text-embedding-v3'
6
11
  | (string & {});
7
12
 
8
- export const alibabaEmbeddingModelOptions = z.object({
9
- /**
10
- * Differentiates query text from document text for asymmetric retrieval tasks.
11
- * Defaults to `document`.
12
- */
13
- textType: z.enum(['query', 'document']).optional(),
13
+ export const alibabaEmbeddingModelOptions = lazySchema(() =>
14
+ zodSchema(
15
+ z.object({
16
+ /**
17
+ * Differentiates query text from document text for asymmetric retrieval tasks.
18
+ * Defaults to `document`.
19
+ */
20
+ textType: z.enum(['query', 'document']).optional(),
14
21
 
15
- /**
16
- * The dimension of the output embedding vectors. Defaults to 1024.
17
- *
18
- * `text-embedding-v4` also supports 1536 and 2048 dimensions.
19
- */
20
- dimension: z.number().optional(),
22
+ /**
23
+ * The dimension of the output embedding vectors. Defaults to 1024.
24
+ *
25
+ * `text-embedding-v4` also supports 1536 and 2048 dimensions.
26
+ */
27
+ dimension: z.number().optional(),
21
28
 
22
- /**
23
- * The output vector type. Defaults to `dense`.
24
- *
25
- * Sparse-only output is not supported by the AI SDK embedding interface,
26
- * which requires dense number arrays.
27
- */
28
- outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),
29
- });
29
+ /**
30
+ * The output vector type. Defaults to `dense`.
31
+ *
32
+ * Sparse-only output is not supported by the AI SDK embedding interface,
33
+ * which requires dense number arrays.
34
+ */
35
+ outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),
36
+ }),
37
+ ),
38
+ );
30
39
 
31
- export type AlibabaEmbeddingModelOptions = z.infer<
40
+ export type AlibabaEmbeddingModelOptions = InferSchema<
32
41
  typeof alibabaEmbeddingModelOptions
33
42
  >;
@@ -4,6 +4,8 @@ import {
4
4
  type EmbeddingModelV4,
5
5
  } from '@ai-sdk/provider';
6
6
  import {
7
+ lazySchema,
8
+ zodSchema,
7
9
  combineHeaders,
8
10
  createJsonErrorResponseHandler,
9
11
  createJsonResponseHandler,
@@ -153,27 +155,32 @@ export class AlibabaEmbeddingModel implements EmbeddingModelV4 {
153
155
  }
154
156
  }
155
157
 
156
- const alibabaTextEmbeddingSparseEmbeddingSchema = z.object({
157
- index: z.number(),
158
- value: z.number(),
159
- token: z.string().nullish(),
160
- });
158
+ const alibabaTextEmbeddingSparseEmbeddingSchema = () =>
159
+ z.object({
160
+ index: z.number(),
161
+ value: z.number(),
162
+ token: z.string().nullish(),
163
+ });
161
164
 
162
- const alibabaTextEmbeddingResponseSchema = z.object({
163
- output: z.object({
164
- embeddings: z.array(
165
- z.object({
166
- embedding: z.array(z.number()),
167
- text_index: z.number(),
168
- sparse_embedding: z
169
- .array(alibabaTextEmbeddingSparseEmbeddingSchema)
170
- .nullish(),
165
+ const alibabaTextEmbeddingResponseSchema = lazySchema(() =>
166
+ zodSchema(
167
+ z.object({
168
+ output: z.object({
169
+ embeddings: z.array(
170
+ z.object({
171
+ embedding: z.array(z.number()),
172
+ text_index: z.number(),
173
+ sparse_embedding: z
174
+ .array(alibabaTextEmbeddingSparseEmbeddingSchema())
175
+ .nullish(),
176
+ }),
177
+ ),
171
178
  }),
172
- ),
173
- }),
174
- usage: z
175
- .object({
176
- total_tokens: z.number(),
177
- })
178
- .nullish(),
179
- });
179
+ usage: z
180
+ .object({
181
+ total_tokens: z.number(),
182
+ })
183
+ .nullish(),
184
+ }),
185
+ ),
186
+ );
@@ -1,15 +1,24 @@
1
- import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';
1
+ import {
2
+ lazySchema,
3
+ zodSchema,
4
+ type InferSchema,
5
+ createJsonErrorResponseHandler,
6
+ } from '@ai-sdk/provider-utils';
2
7
  import { z } from 'zod/v4';
3
8
 
4
- const alibabaErrorDataSchema = z.object({
5
- error: z.object({
6
- message: z.string(),
7
- code: z.string().nullish(),
8
- type: z.string().nullish(),
9
- }),
10
- });
9
+ const alibabaErrorDataSchema = lazySchema(() =>
10
+ zodSchema(
11
+ z.object({
12
+ error: z.object({
13
+ message: z.string(),
14
+ code: z.string().nullish(),
15
+ type: z.string().nullish(),
16
+ }),
17
+ }),
18
+ ),
19
+ );
11
20
 
12
- export type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;
21
+ export type AlibabaErrorData = InferSchema<typeof alibabaErrorDataSchema>;
13
22
 
14
23
  export const alibabaFailedResponseHandler = createJsonErrorResponseHandler({
15
24
  errorSchema: alibabaErrorDataSchema,
@@ -9,11 +9,15 @@ import {
9
9
  type SharedV4Warning,
10
10
  } from '@ai-sdk/provider';
11
11
  import {
12
+ lazySchema,
13
+ zodSchema,
14
+ type InferSchema,
12
15
  combineHeaders,
13
16
  convertImageModelFileToDataUri,
14
17
  convertUint8ArrayToBase64,
15
18
  createJsonErrorResponseHandler,
16
19
  createJsonResponseHandler,
20
+ encodePathSegment,
17
21
  getFromApi,
18
22
  parseProviderOptions,
19
23
  postJsonToApi,
@@ -39,58 +43,70 @@ interface AlibabaVideoModelConfig {
39
43
  }
40
44
 
41
45
  // DashScope native API error format (different from OpenAI-compatible endpoint)
42
- const alibabaVideoErrorSchema = z.object({
43
- code: z.string().nullish(),
44
- message: z.string(),
45
- request_id: z.string().nullish(),
46
- });
46
+ const alibabaVideoErrorSchema = lazySchema(() =>
47
+ zodSchema(
48
+ z.object({
49
+ code: z.string().nullish(),
50
+ message: z.string(),
51
+ request_id: z.string().nullish(),
52
+ }),
53
+ ),
54
+ );
47
55
 
48
56
  const alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({
49
57
  errorSchema: alibabaVideoErrorSchema,
50
58
  errorToMessage: data => data.message,
51
59
  });
52
60
 
53
- const alibabaVideoCreateTaskSchema = z.object({
54
- output: z
55
- .object({
56
- task_status: z.string(),
57
- task_id: z.string(),
58
- })
59
- .nullish(),
60
- request_id: z.string().nullish(),
61
- });
62
-
63
- const alibabaVideoTaskStatusSchema = z.object({
64
- output: z
65
- .object({
66
- task_id: z.string(),
67
- task_status: z.string(),
68
- video_url: z.string().nullish(),
69
- submit_time: z.string().nullish(),
70
- scheduled_time: z.string().nullish(),
71
- end_time: z.string().nullish(),
72
- orig_prompt: z.string().nullish(),
73
- actual_prompt: z.string().nullish(),
74
- code: z.string().nullish(),
75
- message: z.string().nullish(),
76
- })
77
- .nullish(),
78
- usage: z
79
- .object({
80
- duration: z.number().nullish(),
81
- output_video_duration: z.number().nullish(),
82
- // wan3 splits the total: input video counts toward its 30s ceiling.
83
- input_video_duration: z.number().nullish(),
84
- fps: z.number().nullish(),
85
- SR: z.number().nullish(),
86
- size: z.string().nullish(),
87
- ratio: z.string().nullish(),
88
- })
89
- .nullish(),
90
- request_id: z.string().nullish(),
91
- });
92
-
93
- type AlibabaVideoTaskStatusResponse = z.infer<
61
+ const alibabaVideoCreateTaskSchema = lazySchema(() =>
62
+ zodSchema(
63
+ z.object({
64
+ output: z
65
+ .object({
66
+ task_status: z.string(),
67
+ task_id: z.string(),
68
+ })
69
+ .nullish(),
70
+ request_id: z.string().nullish(),
71
+ }),
72
+ ),
73
+ );
74
+
75
+ const alibabaVideoTaskStatusSchema = lazySchema(() =>
76
+ zodSchema(
77
+ z.object({
78
+ output: z
79
+ .object({
80
+ task_id: z.string(),
81
+ task_status: z.string(),
82
+ video_url: z.string().nullish(),
83
+ submit_time: z.string().nullish(),
84
+ scheduled_time: z.string().nullish(),
85
+ end_time: z.string().nullish(),
86
+ orig_prompt: z.string().nullish(),
87
+ actual_prompt: z.string().nullish(),
88
+ code: z.string().nullish(),
89
+ message: z.string().nullish(),
90
+ })
91
+ .nullish(),
92
+ usage: z
93
+ .object({
94
+ duration: z.number().nullish(),
95
+ output_video_duration: z.number().nullish(),
96
+ // wan3 splits the total: input video counts toward its 30s ceiling.
97
+ input_video_duration: z.number().nullish(),
98
+ fps: z.number().nullish(),
99
+ SR: z.number().nullish(),
100
+ size: z.string().nullish(),
101
+ ratio: z.string().nullish(),
102
+ })
103
+ .nullish(),
104
+ request_id: z.string().nullish(),
105
+ }),
106
+ ),
107
+ );
108
+
109
+ type AlibabaVideoTaskStatusResponse = InferSchema<
94
110
  typeof alibabaVideoTaskStatusSchema
95
111
  >;
96
112
 
@@ -662,7 +678,7 @@ export class AlibabaVideoModel implements VideoModelV4 {
662
678
  const { taskId } = options.operation as { taskId: string };
663
679
 
664
680
  const { value: statusResponse, responseHeaders } = await getFromApi({
665
- url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
681
+ url: `${this.config.baseURL}/api/v1/tasks/${encodePathSegment(taskId)}`,
666
682
  validateUrl: false,
667
683
  headers: combineHeaders(
668
684
  await resolve(this.config.headers),