@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.
- package/CHANGELOG.md +19 -0
- package/dist/index.d.ts +14 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -26
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/alibaba-chat-language-model-options.ts +38 -29
- package/src/alibaba-chat-language-model.ts +88 -76
- package/src/alibaba-embedding-model-options.ts +30 -21
- package/src/alibaba-embedding-model.ts +29 -22
- package/src/alibaba-error.ts +18 -9
- package/src/alibaba-video-model.ts +63 -47
|
@@ -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
|
|
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<
|
|
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 =
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
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
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
.
|
|
557
|
-
z.
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
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
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
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
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
.
|
|
587
|
-
z.
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
.object({
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
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
|
-
|
|
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 =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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 =
|
|
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 =
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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 =
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
z.object({
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
})
|
|
178
|
-
|
|
179
|
-
|
|
179
|
+
usage: z
|
|
180
|
+
.object({
|
|
181
|
+
total_tokens: z.number(),
|
|
182
|
+
})
|
|
183
|
+
.nullish(),
|
|
184
|
+
}),
|
|
185
|
+
),
|
|
186
|
+
);
|
package/src/alibaba-error.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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 =
|
|
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 =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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 =
|
|
54
|
-
|
|
55
|
-
.object({
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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),
|