@ai-sdk/alibaba 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +54 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +90 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +91 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @ai-sdk/alibaba
|
|
2
2
|
|
|
3
|
+
## 0.0.29
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1f0e0af: fix(alibaba): use model-specific structured output modes
|
|
8
|
+
|
|
9
|
+
## 0.0.28
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- b6cae9b: feat(alibaba): preserve reasoning in multi-turn requests by default on supported models
|
|
14
|
+
|
|
3
15
|
## 0.0.27
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -63,6 +63,60 @@ console.log('Reasoning:', reasoningText);
|
|
|
63
63
|
console.log('Answer:', text);
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
## Preserved Thinking Example (Multi-Turn Reasoning)
|
|
67
|
+
|
|
68
|
+
For models that support preserved thinking, the AI SDK sends reasoning from
|
|
69
|
+
previous assistant messages back as Alibaba `reasoning_content` by default
|
|
70
|
+
(`preserve_thinking`), so the model can build on its earlier thought process:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { alibaba } from '@ai-sdk/alibaba';
|
|
74
|
+
import { generateText } from 'ai';
|
|
75
|
+
|
|
76
|
+
const providerOptions = {
|
|
77
|
+
alibaba: {
|
|
78
|
+
enableThinking: true,
|
|
79
|
+
thinkingBudget: 2048,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const opening = {
|
|
84
|
+
role: 'user' as const,
|
|
85
|
+
content: 'Is Kafka or RocketMQ a better fit for transactional messages?',
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const first = await generateText({
|
|
89
|
+
model: alibaba('qwen3.7-max'),
|
|
90
|
+
messages: [opening],
|
|
91
|
+
providerOptions,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const second = await generateText({
|
|
95
|
+
model: alibaba('qwen3.7-max'),
|
|
96
|
+
messages: [
|
|
97
|
+
opening,
|
|
98
|
+
...first.responseMessages, // append unchanged to keep the reasoning parts
|
|
99
|
+
{ role: 'user', content: 'Which tradeoff mattered most?' },
|
|
100
|
+
],
|
|
101
|
+
providerOptions,
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
When continuing the conversation, append `responseMessages` unchanged so the
|
|
106
|
+
reasoning parts survive to be serialized as `reasoning_content`. Set the
|
|
107
|
+
`preserveThinking` provider option to `false` to opt out. Keep in mind:
|
|
108
|
+
|
|
109
|
+
- `preserveThinking` does not enable thinking by itself.
|
|
110
|
+
- It is enabled by default only for models that Alibaba documents as supporting
|
|
111
|
+
preserved thinking; for other models the option is not sent unless you set it
|
|
112
|
+
explicitly. See Alibaba's
|
|
113
|
+
[preserved-thinking documentation](https://docs.qwencloud.com/developer-guides/text-generation/thinking#preserve-thinking-in-multi-turn).
|
|
114
|
+
- Reasoning from the current tool-call round is always sent back with tool
|
|
115
|
+
results, as Alibaba recommends.
|
|
116
|
+
- Preserved reasoning increases input token usage and billing.
|
|
117
|
+
- Historical reasoning remains separate from visible assistant text; it is never
|
|
118
|
+
merged into `content`.
|
|
119
|
+
|
|
66
120
|
## Embedding Model Example
|
|
67
121
|
|
|
68
122
|
```ts
|
package/dist/index.d.mts
CHANGED
|
@@ -6,6 +6,7 @@ type AlibabaChatModelId = 'qwen3.7-max' | 'qwen3-max' | 'qwen3-max-preview' | 'q
|
|
|
6
6
|
declare const alibabaLanguageModelOptions: z.ZodObject<{
|
|
7
7
|
enableThinking: z.ZodOptional<z.ZodBoolean>;
|
|
8
8
|
thinkingBudget: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
preserveThinking: z.ZodOptional<z.ZodBoolean>;
|
|
9
10
|
parallelToolCalls: z.ZodOptional<z.ZodBoolean>;
|
|
10
11
|
}, z.core.$strip>;
|
|
11
12
|
type AlibabaLanguageModelOptions = z.infer<typeof alibabaLanguageModelOptions>;
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ type AlibabaChatModelId = 'qwen3.7-max' | 'qwen3-max' | 'qwen3-max-preview' | 'q
|
|
|
6
6
|
declare const alibabaLanguageModelOptions: z.ZodObject<{
|
|
7
7
|
enableThinking: z.ZodOptional<z.ZodBoolean>;
|
|
8
8
|
thinkingBudget: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
preserveThinking: z.ZodOptional<z.ZodBoolean>;
|
|
9
10
|
parallelToolCalls: z.ZodOptional<z.ZodBoolean>;
|
|
10
11
|
}, z.core.$strip>;
|
|
11
12
|
type AlibabaLanguageModelOptions = z.infer<typeof alibabaLanguageModelOptions>;
|
package/dist/index.js
CHANGED
|
@@ -50,6 +50,15 @@ var alibabaLanguageModelOptions = import_v4.z.object({
|
|
|
50
50
|
* Maximum number of reasoning tokens to generate.
|
|
51
51
|
*/
|
|
52
52
|
thinkingBudget: import_v4.z.number().positive().optional(),
|
|
53
|
+
/**
|
|
54
|
+
* Whether to preserve reasoning from previous assistant messages.
|
|
55
|
+
*
|
|
56
|
+
* When enabled, historical reasoning is sent separately as
|
|
57
|
+
* `reasoning_content` and Alibaba receives `preserve_thinking: true`.
|
|
58
|
+
* Defaults to `true` for models that support preserved thinking; set to
|
|
59
|
+
* `false` to opt out.
|
|
60
|
+
*/
|
|
61
|
+
preserveThinking: import_v4.z.boolean().optional(),
|
|
53
62
|
/**
|
|
54
63
|
* Whether to enable parallel function calling during tool use.
|
|
55
64
|
*
|
|
@@ -96,11 +105,21 @@ function formatImageUrl({
|
|
|
96
105
|
}
|
|
97
106
|
function convertToAlibabaChatMessages({
|
|
98
107
|
prompt,
|
|
99
|
-
cacheControlValidator
|
|
108
|
+
cacheControlValidator,
|
|
109
|
+
preserveThinking = false
|
|
100
110
|
}) {
|
|
101
111
|
var _a;
|
|
102
112
|
const messages = [];
|
|
113
|
+
let lastUserMessageIndex = -1;
|
|
114
|
+
for (let i = prompt.length - 1; i >= 0; i--) {
|
|
115
|
+
if (prompt[i].role === "user") {
|
|
116
|
+
lastUserMessageIndex = i;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
let index = -1;
|
|
103
121
|
for (const { role, content, ...message } of prompt) {
|
|
122
|
+
index++;
|
|
104
123
|
const messageCacheControl = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(
|
|
105
124
|
message.providerOptions
|
|
106
125
|
);
|
|
@@ -125,9 +144,9 @@ function convertToAlibabaChatMessages({
|
|
|
125
144
|
case "user": {
|
|
126
145
|
messages.push({
|
|
127
146
|
role: "user",
|
|
128
|
-
content: content.map((part,
|
|
147
|
+
content: content.map((part, index2) => {
|
|
129
148
|
var _a2;
|
|
130
|
-
const isLastPart =
|
|
149
|
+
const isLastPart = index2 === content.length - 1;
|
|
131
150
|
const partCacheControl = (_a2 = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(part.providerOptions)) != null ? _a2 : isLastPart ? messageCacheControl : void 0;
|
|
132
151
|
switch (part.type) {
|
|
133
152
|
case "text": {
|
|
@@ -160,6 +179,7 @@ function convertToAlibabaChatMessages({
|
|
|
160
179
|
}
|
|
161
180
|
case "assistant": {
|
|
162
181
|
let text = "";
|
|
182
|
+
let reasoningContent = "";
|
|
163
183
|
const toolCalls = [];
|
|
164
184
|
for (const part of content) {
|
|
165
185
|
switch (part.type) {
|
|
@@ -179,14 +199,20 @@ function convertToAlibabaChatMessages({
|
|
|
179
199
|
break;
|
|
180
200
|
}
|
|
181
201
|
case "reasoning": {
|
|
182
|
-
|
|
202
|
+
if (preserveThinking || index > lastUserMessageIndex) {
|
|
203
|
+
reasoningContent += part.text;
|
|
204
|
+
}
|
|
183
205
|
break;
|
|
184
206
|
}
|
|
185
207
|
}
|
|
186
208
|
}
|
|
209
|
+
if (text.length === 0 && toolCalls.length === 0 && reasoningContent.length === 0) {
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
187
212
|
messages.push({
|
|
188
213
|
role: "assistant",
|
|
189
|
-
content: text && messageCacheControl ? [{ type: "text", text, cache_control: messageCacheControl }] : text || null,
|
|
214
|
+
content: text.length === 0 && toolCalls.length === 0 && reasoningContent.length > 0 ? null : text && messageCacheControl ? [{ type: "text", text, cache_control: messageCacheControl }] : text || null,
|
|
215
|
+
...reasoningContent.length > 0 ? { reasoning_content: reasoningContent } : {},
|
|
190
216
|
tool_calls: toolCalls.length > 0 ? toolCalls : void 0
|
|
191
217
|
});
|
|
192
218
|
break;
|
|
@@ -319,6 +345,43 @@ function prepareTools({
|
|
|
319
345
|
}
|
|
320
346
|
}
|
|
321
347
|
|
|
348
|
+
// src/supports-json-schema-output.ts
|
|
349
|
+
var JSON_SCHEMA_MODEL_PREFIXES = [
|
|
350
|
+
"qwen3.7-plus",
|
|
351
|
+
"qwen3.7-flash",
|
|
352
|
+
"qwen3.7-max",
|
|
353
|
+
"qwen3.8-max",
|
|
354
|
+
"qwen3.8-flash"
|
|
355
|
+
];
|
|
356
|
+
function supportsJsonSchemaOutput(modelId) {
|
|
357
|
+
return JSON_SCHEMA_MODEL_PREFIXES.some(
|
|
358
|
+
(prefix) => modelId === prefix || modelId.startsWith(`${prefix}-`)
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// src/supports-preserved-thinking.ts
|
|
363
|
+
var preservedThinkingModelIds = /* @__PURE__ */ new Set([
|
|
364
|
+
"kimi-k2.7-code",
|
|
365
|
+
"qwen3.6-max-preview",
|
|
366
|
+
"qwen3.6-plus",
|
|
367
|
+
"qwen3.6-plus-2026-04-02",
|
|
368
|
+
"qwen3.7-flash",
|
|
369
|
+
"qwen3.7-flash-2026-07-15",
|
|
370
|
+
"qwen3.7-max",
|
|
371
|
+
"qwen3.7-max-2026-05-17",
|
|
372
|
+
"qwen3.7-max-2026-05-20",
|
|
373
|
+
"qwen3.7-max-2026-06-08",
|
|
374
|
+
"qwen3.7-max-preview",
|
|
375
|
+
"qwen3.7-plus",
|
|
376
|
+
"qwen3.7-plus-2026-05-26",
|
|
377
|
+
"qwen3.8-flash",
|
|
378
|
+
"qwen3.8-max",
|
|
379
|
+
"qwen3.8-max-0902"
|
|
380
|
+
]);
|
|
381
|
+
function supportsPreservedThinking(modelId) {
|
|
382
|
+
return preservedThinkingModelIds.has(modelId);
|
|
383
|
+
}
|
|
384
|
+
|
|
322
385
|
// src/alibaba-chat-language-model.ts
|
|
323
386
|
var AlibabaLanguageModel = class {
|
|
324
387
|
constructor(modelId, config) {
|
|
@@ -351,7 +414,7 @@ var AlibabaLanguageModel = class {
|
|
|
351
414
|
tools,
|
|
352
415
|
toolChoice
|
|
353
416
|
}) {
|
|
354
|
-
var _a;
|
|
417
|
+
var _a, _b;
|
|
355
418
|
const warnings = [];
|
|
356
419
|
const cacheControlValidator = new CacheControlValidator();
|
|
357
420
|
const alibabaOptions = await (0, import_provider_utils3.parseProviderOptions)({
|
|
@@ -365,6 +428,20 @@ var AlibabaLanguageModel = class {
|
|
|
365
428
|
setting: "frequencyPenalty"
|
|
366
429
|
});
|
|
367
430
|
}
|
|
431
|
+
const preserveThinking = (_a = alibabaOptions == null ? void 0 : alibabaOptions.preserveThinking) != null ? _a : supportsPreservedThinking(this.modelId) ? true : void 0;
|
|
432
|
+
const useJsonSchema = (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && supportsJsonSchemaOutput(this.modelId);
|
|
433
|
+
const useJsonObject = (responseFormat == null ? void 0 : responseFormat.type) === "json" && !useJsonSchema;
|
|
434
|
+
if (useJsonObject && responseFormat.schema != null) {
|
|
435
|
+
warnings.push({
|
|
436
|
+
type: "unsupported-setting",
|
|
437
|
+
setting: "responseFormat",
|
|
438
|
+
details: `Alibaba does not support JSON Schema output for model ${this.modelId}. JSON Object mode is used instead. The schema was injected into the system message and will only be validated locally.`
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
const resolvedPrompt = useJsonObject ? (0, import_provider_utils3.injectJsonInstructionIntoMessages)({
|
|
442
|
+
messages: prompt,
|
|
443
|
+
schema: responseFormat.schema
|
|
444
|
+
}) : prompt;
|
|
368
445
|
const baseArgs = {
|
|
369
446
|
model: this.modelId,
|
|
370
447
|
max_tokens: maxOutputTokens,
|
|
@@ -374,21 +451,23 @@ var AlibabaLanguageModel = class {
|
|
|
374
451
|
presence_penalty: presencePenalty,
|
|
375
452
|
stop: stopSequences,
|
|
376
453
|
seed,
|
|
377
|
-
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ?
|
|
454
|
+
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? useJsonSchema ? {
|
|
378
455
|
type: "json_schema",
|
|
379
456
|
json_schema: {
|
|
380
457
|
schema: responseFormat.schema,
|
|
381
|
-
name: (
|
|
458
|
+
name: (_b = responseFormat.name) != null ? _b : "response",
|
|
382
459
|
description: responseFormat.description
|
|
383
460
|
}
|
|
384
461
|
} : { type: "json_object" } : void 0,
|
|
385
462
|
// Alibaba-specific options
|
|
386
463
|
...(alibabaOptions == null ? void 0 : alibabaOptions.enableThinking) != null ? { enable_thinking: alibabaOptions.enableThinking } : {},
|
|
387
464
|
...(alibabaOptions == null ? void 0 : alibabaOptions.thinkingBudget) != null ? { thinking_budget: alibabaOptions.thinkingBudget } : {},
|
|
465
|
+
...preserveThinking != null ? { preserve_thinking: preserveThinking } : {},
|
|
388
466
|
// Convert messages with cache control support
|
|
389
467
|
messages: convertToAlibabaChatMessages({
|
|
390
|
-
prompt,
|
|
391
|
-
cacheControlValidator
|
|
468
|
+
prompt: resolvedPrompt,
|
|
469
|
+
cacheControlValidator,
|
|
470
|
+
preserveThinking: preserveThinking != null ? preserveThinking : false
|
|
392
471
|
})
|
|
393
472
|
};
|
|
394
473
|
const {
|
|
@@ -899,7 +978,7 @@ var alibabaTextEmbeddingResponseSchema = import_v45.z.object({
|
|
|
899
978
|
});
|
|
900
979
|
|
|
901
980
|
// src/version.ts
|
|
902
|
-
var VERSION = true ? "0.0.
|
|
981
|
+
var VERSION = true ? "0.0.29" : "0.0.0-test";
|
|
903
982
|
|
|
904
983
|
// src/alibaba-provider.ts
|
|
905
984
|
function createAlibaba(options = {}) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-prepare-tools.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/version.ts"],"sourcesContent":["export type {\n AlibabaChatModelId,\n AlibabaLanguageModelOptions,\n /** @deprecated Use `AlibabaLanguageModelOptions` instead. */\n AlibabaLanguageModelOptions as AlibabaProviderOptions,\n} from './alibaba-chat-options';\nexport type { AlibabaCacheControl } from './alibaba-chat-prompt';\nexport type {\n AlibabaEmbeddingModelId,\n AlibabaEmbeddingModelOptions,\n} from './alibaba-embedding-options';\nexport {\n type AlibabaProvider,\n type AlibabaProviderSettings,\n alibaba,\n createAlibaba,\n} from './alibaba-provider';\nexport type { AlibabaUsage } from './convert-alibaba-usage';\nexport { VERSION } from './version';\n","import {\n type EmbeddingModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-options';\nimport {\n type AlibabaErrorData,\n alibabaFailedResponseHandler,\n} from './alibaba-error';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData };\nexport { alibabaFailedResponseHandler };\n\nexport interface AlibabaProvider extends ProviderV2 {\n (modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbeddingModel(\n modelId: AlibabaEmbeddingModelId,\n ): EmbeddingModelV2<string>;\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 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 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 AlibabaLanguageModel(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 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 = 'v2' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { prepareTools } from './alibaba-prepare-tools';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV2 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 AlibabaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\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 providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // Alibaba-specific options\n ...(alibabaOptions?.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions?.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\n : {}),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n }),\n };\n\n // Prepare tools\n const {\n tools: alibabaTools,\n toolChoice: alibabaToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...cacheControlValidator.getWarnings());\n\n return {\n args: {\n ...baseArgs,\n tools: alibabaTools,\n tool_choice: alibabaToolChoice,\n ...(alibabaTools != null &&\n alibabaOptions?.parallelToolCalls !== undefined\n ? { parallel_tool_calls: alibabaOptions.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\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<LanguageModelV2Content> = [];\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: mapOpenAICompatibleFinishReason(choice.finish_reason),\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 providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n response.usage?.prompt_tokens_details\n ?.cache_creation_input_tokens ?? null,\n },\n },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\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: LanguageModelV2FinishReason = 'other';\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 // Track tool calls for accumulation across chunks\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\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 const index = toolCallDelta.index ?? toolCalls.length;\n\n // New tool call - first chunk with id and name\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n // Send initial delta if arguments started\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Check if already complete (some providers send full tool call at once)\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n\n continue;\n }\n\n // Existing tool call - accumulate arguments\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n // Append arguments if not null (skip arguments: null chunks)\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n\n // Check if tool call is now complete\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = mapOpenAICompatibleFinishReason(\n 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 controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n usage?.prompt_tokens_details?.cache_creation_input_tokens ??\n null,\n },\n },\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelOptions = z.object({\n /**\n * Enable thinking/reasoning mode for supported models.\n * When enabled, the model generates reasoning content before the response.\n *\n * @default false\n */\n enableThinking: z.boolean().optional(),\n\n /**\n * Maximum number of reasoning tokens to generate.\n */\n thinkingBudget: z.number().positive().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n});\n\nexport type AlibabaLanguageModelOptions = z.infer<\n typeof alibabaLanguageModelOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\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 const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import type { LanguageModelV2Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV2Usage {\n return {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ?? undefined,\n cachedInputTokens: usage?.prompt_tokens_details?.cached_tokens ?? undefined,\n };\n}\n","import {\n type LanguageModelV2DataContent,\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({\n data,\n mediaType,\n}: {\n data: LanguageModelV2DataContent;\n mediaType: string;\n}): string {\n return data instanceof URL\n ? data.toString()\n : `data:${mediaType};base64,${convertToBase64(data as Uint8Array)}`;\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n}: {\n prompt: LanguageModelV2Prompt;\n cacheControlValidator?: CacheControlValidator;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n for (const { role, content, ...message } of prompt) {\n const messageCacheControl = cacheControlValidator?.getCacheControl(\n message.providerOptions,\n );\n\n switch (role) {\n case 'system': {\n if (messageCacheControl) {\n messages.push({\n role: 'system',\n content: [\n {\n type: 'text',\n text: content,\n cache_control: messageCacheControl,\n },\n ],\n });\n } else {\n messages.push({ role: 'system', content });\n }\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n const isLastPart = index === content.length - 1;\n const partCacheControl =\n cacheControlValidator?.getCacheControl(part.providerOptions) ??\n (isLastPart ? messageCacheControl : undefined);\n\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n }\n\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ data: part.data, mediaType }),\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 break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n // Reasoning content is handled separately in the response\n // but may appear in assistant messages during multi-turn conversations\n text += part.text;\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content:\n text && messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const toolResponse = content[i];\n const output = toolResponse.output;\n const isLastPart = i === content.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 '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 LanguageModelV2CallWarning,\n SharedV2ProviderMetadata,\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: SharedV2ProviderMetadata | 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: LanguageModelV2CallWarning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV2ProviderMetadata | 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(): LanguageModelV2CallWarning[] {\n return this.warnings;\n }\n}\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\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: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({ type: 'unsupported-tool', tool });\n } else {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, 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: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\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 {\n type EmbeddingModelV2,\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaConfig } from './alibaba-config';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-options';\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 EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\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<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['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 // The AI SDK embedding interface requires dense number arrays.\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.map(sparseItem => ({\n index: sparseItem.index,\n value: sparseItem.value,\n ...(sparseItem.token == null\n ? {}\n : { token: sparseItem.token }),\n })),\n },\n )\n .filter(item => item != null);\n\n return {\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","// 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":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_v4","import_v4","import_provider_utils","_a","alibaba","import_provider","toolCall","import_provider","import_provider_utils","import_v4","import_v4","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-prepare-tools.ts","../src/supports-json-schema-output.ts","../src/supports-preserved-thinking.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/version.ts"],"sourcesContent":["export type {\n AlibabaChatModelId,\n AlibabaLanguageModelOptions,\n /** @deprecated Use `AlibabaLanguageModelOptions` instead. */\n AlibabaLanguageModelOptions as AlibabaProviderOptions,\n} from './alibaba-chat-options';\nexport type { AlibabaCacheControl } from './alibaba-chat-prompt';\nexport type {\n AlibabaEmbeddingModelId,\n AlibabaEmbeddingModelOptions,\n} from './alibaba-embedding-options';\nexport {\n type AlibabaProvider,\n type AlibabaProviderSettings,\n alibaba,\n createAlibaba,\n} from './alibaba-provider';\nexport type { AlibabaUsage } from './convert-alibaba-usage';\nexport { VERSION } from './version';\n","import {\n type EmbeddingModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-options';\nimport {\n type AlibabaErrorData,\n alibabaFailedResponseHandler,\n} from './alibaba-error';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData };\nexport { alibabaFailedResponseHandler };\n\nexport interface AlibabaProvider extends ProviderV2 {\n (modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbeddingModel(\n modelId: AlibabaEmbeddingModelId,\n ): EmbeddingModelV2<string>;\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 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 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 AlibabaLanguageModel(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 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 = 'v2' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { prepareTools } from './alibaba-prepare-tools';\nimport { supportsJsonSchemaOutput } from './supports-json-schema-output';\nimport { supportsPreservedThinking } from './supports-preserved-thinking';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV2 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 AlibabaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\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 providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\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: 'unsupported-setting',\n setting: 'responseFormat',\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 // Alibaba-specific options\n ...(alibabaOptions?.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions?.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\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: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\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<LanguageModelV2Content> = [];\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: mapOpenAICompatibleFinishReason(choice.finish_reason),\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 providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n response.usage?.prompt_tokens_details\n ?.cache_creation_input_tokens ?? null,\n },\n },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\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: LanguageModelV2FinishReason = 'other';\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 // Track tool calls for accumulation across chunks\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\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 const index = toolCallDelta.index ?? toolCalls.length;\n\n // New tool call - first chunk with id and name\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n // Send initial delta if arguments started\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Check if already complete (some providers send full tool call at once)\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n\n continue;\n }\n\n // Existing tool call - accumulate arguments\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n // Append arguments if not null (skip arguments: null chunks)\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n\n // Check if tool call is now complete\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = mapOpenAICompatibleFinishReason(\n 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 controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n usage?.prompt_tokens_details?.cache_creation_input_tokens ??\n null,\n },\n },\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelOptions = 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 AlibabaLanguageModelOptions = z.infer<\n typeof alibabaLanguageModelOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\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 const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import type { LanguageModelV2Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV2Usage {\n return {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ?? undefined,\n cachedInputTokens: usage?.prompt_tokens_details?.cached_tokens ?? undefined,\n };\n}\n","import {\n type LanguageModelV2DataContent,\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({\n data,\n mediaType,\n}: {\n data: LanguageModelV2DataContent;\n mediaType: string;\n}): string {\n return data instanceof URL\n ? data.toString()\n : `data:${mediaType};base64,${convertToBase64(data as Uint8Array)}`;\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n preserveThinking = false,\n}: {\n prompt: LanguageModelV2Prompt;\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 if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ data: part.data, mediaType }),\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 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 : text && 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 for (let i = 0; i < content.length; i++) {\n const toolResponse = content[i];\n const output = toolResponse.output;\n const isLastPart = i === content.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 '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 LanguageModelV2CallWarning,\n SharedV2ProviderMetadata,\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: SharedV2ProviderMetadata | 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: LanguageModelV2CallWarning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV2ProviderMetadata | 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(): LanguageModelV2CallWarning[] {\n return this.warnings;\n }\n}\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\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: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({ type: 'unsupported-tool', tool });\n } else {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, 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: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\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","// 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 type EmbeddingModelV2,\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaConfig } from './alibaba-config';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-options';\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 EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\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<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['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 // The AI SDK embedding interface requires dense number arrays.\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.map(sparseItem => ({\n index: sparseItem.index,\n value: sparseItem.value,\n ...(sparseItem.token == null\n ? {}\n : { token: sparseItem.token }),\n })),\n },\n )\n .filter(item => item != null);\n\n return {\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","// 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":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_v4","import_v4","import_provider_utils","index","_a","alibaba","import_provider","toolCall","import_provider","import_provider_utils","import_v4","import_v4","_a"]}
|
package/dist/index.mjs
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
createEventSourceResponseHandler,
|
|
22
22
|
createJsonResponseHandler,
|
|
23
23
|
generateId,
|
|
24
|
+
injectJsonInstructionIntoMessages,
|
|
24
25
|
isParsableJson,
|
|
25
26
|
parseProviderOptions,
|
|
26
27
|
postJsonToApi
|
|
@@ -41,6 +42,15 @@ var alibabaLanguageModelOptions = z.object({
|
|
|
41
42
|
* Maximum number of reasoning tokens to generate.
|
|
42
43
|
*/
|
|
43
44
|
thinkingBudget: z.number().positive().optional(),
|
|
45
|
+
/**
|
|
46
|
+
* Whether to preserve reasoning from previous assistant messages.
|
|
47
|
+
*
|
|
48
|
+
* When enabled, historical reasoning is sent separately as
|
|
49
|
+
* `reasoning_content` and Alibaba receives `preserve_thinking: true`.
|
|
50
|
+
* Defaults to `true` for models that support preserved thinking; set to
|
|
51
|
+
* `false` to opt out.
|
|
52
|
+
*/
|
|
53
|
+
preserveThinking: z.boolean().optional(),
|
|
44
54
|
/**
|
|
45
55
|
* Whether to enable parallel function calling during tool use.
|
|
46
56
|
*
|
|
@@ -89,11 +99,21 @@ function formatImageUrl({
|
|
|
89
99
|
}
|
|
90
100
|
function convertToAlibabaChatMessages({
|
|
91
101
|
prompt,
|
|
92
|
-
cacheControlValidator
|
|
102
|
+
cacheControlValidator,
|
|
103
|
+
preserveThinking = false
|
|
93
104
|
}) {
|
|
94
105
|
var _a;
|
|
95
106
|
const messages = [];
|
|
107
|
+
let lastUserMessageIndex = -1;
|
|
108
|
+
for (let i = prompt.length - 1; i >= 0; i--) {
|
|
109
|
+
if (prompt[i].role === "user") {
|
|
110
|
+
lastUserMessageIndex = i;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
let index = -1;
|
|
96
115
|
for (const { role, content, ...message } of prompt) {
|
|
116
|
+
index++;
|
|
97
117
|
const messageCacheControl = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(
|
|
98
118
|
message.providerOptions
|
|
99
119
|
);
|
|
@@ -118,9 +138,9 @@ function convertToAlibabaChatMessages({
|
|
|
118
138
|
case "user": {
|
|
119
139
|
messages.push({
|
|
120
140
|
role: "user",
|
|
121
|
-
content: content.map((part,
|
|
141
|
+
content: content.map((part, index2) => {
|
|
122
142
|
var _a2;
|
|
123
|
-
const isLastPart =
|
|
143
|
+
const isLastPart = index2 === content.length - 1;
|
|
124
144
|
const partCacheControl = (_a2 = cacheControlValidator == null ? void 0 : cacheControlValidator.getCacheControl(part.providerOptions)) != null ? _a2 : isLastPart ? messageCacheControl : void 0;
|
|
125
145
|
switch (part.type) {
|
|
126
146
|
case "text": {
|
|
@@ -153,6 +173,7 @@ function convertToAlibabaChatMessages({
|
|
|
153
173
|
}
|
|
154
174
|
case "assistant": {
|
|
155
175
|
let text = "";
|
|
176
|
+
let reasoningContent = "";
|
|
156
177
|
const toolCalls = [];
|
|
157
178
|
for (const part of content) {
|
|
158
179
|
switch (part.type) {
|
|
@@ -172,14 +193,20 @@ function convertToAlibabaChatMessages({
|
|
|
172
193
|
break;
|
|
173
194
|
}
|
|
174
195
|
case "reasoning": {
|
|
175
|
-
|
|
196
|
+
if (preserveThinking || index > lastUserMessageIndex) {
|
|
197
|
+
reasoningContent += part.text;
|
|
198
|
+
}
|
|
176
199
|
break;
|
|
177
200
|
}
|
|
178
201
|
}
|
|
179
202
|
}
|
|
203
|
+
if (text.length === 0 && toolCalls.length === 0 && reasoningContent.length === 0) {
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
180
206
|
messages.push({
|
|
181
207
|
role: "assistant",
|
|
182
|
-
content: text && messageCacheControl ? [{ type: "text", text, cache_control: messageCacheControl }] : text || null,
|
|
208
|
+
content: text.length === 0 && toolCalls.length === 0 && reasoningContent.length > 0 ? null : text && messageCacheControl ? [{ type: "text", text, cache_control: messageCacheControl }] : text || null,
|
|
209
|
+
...reasoningContent.length > 0 ? { reasoning_content: reasoningContent } : {},
|
|
183
210
|
tool_calls: toolCalls.length > 0 ? toolCalls : void 0
|
|
184
211
|
});
|
|
185
212
|
break;
|
|
@@ -314,6 +341,43 @@ function prepareTools({
|
|
|
314
341
|
}
|
|
315
342
|
}
|
|
316
343
|
|
|
344
|
+
// src/supports-json-schema-output.ts
|
|
345
|
+
var JSON_SCHEMA_MODEL_PREFIXES = [
|
|
346
|
+
"qwen3.7-plus",
|
|
347
|
+
"qwen3.7-flash",
|
|
348
|
+
"qwen3.7-max",
|
|
349
|
+
"qwen3.8-max",
|
|
350
|
+
"qwen3.8-flash"
|
|
351
|
+
];
|
|
352
|
+
function supportsJsonSchemaOutput(modelId) {
|
|
353
|
+
return JSON_SCHEMA_MODEL_PREFIXES.some(
|
|
354
|
+
(prefix) => modelId === prefix || modelId.startsWith(`${prefix}-`)
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// src/supports-preserved-thinking.ts
|
|
359
|
+
var preservedThinkingModelIds = /* @__PURE__ */ new Set([
|
|
360
|
+
"kimi-k2.7-code",
|
|
361
|
+
"qwen3.6-max-preview",
|
|
362
|
+
"qwen3.6-plus",
|
|
363
|
+
"qwen3.6-plus-2026-04-02",
|
|
364
|
+
"qwen3.7-flash",
|
|
365
|
+
"qwen3.7-flash-2026-07-15",
|
|
366
|
+
"qwen3.7-max",
|
|
367
|
+
"qwen3.7-max-2026-05-17",
|
|
368
|
+
"qwen3.7-max-2026-05-20",
|
|
369
|
+
"qwen3.7-max-2026-06-08",
|
|
370
|
+
"qwen3.7-max-preview",
|
|
371
|
+
"qwen3.7-plus",
|
|
372
|
+
"qwen3.7-plus-2026-05-26",
|
|
373
|
+
"qwen3.8-flash",
|
|
374
|
+
"qwen3.8-max",
|
|
375
|
+
"qwen3.8-max-0902"
|
|
376
|
+
]);
|
|
377
|
+
function supportsPreservedThinking(modelId) {
|
|
378
|
+
return preservedThinkingModelIds.has(modelId);
|
|
379
|
+
}
|
|
380
|
+
|
|
317
381
|
// src/alibaba-chat-language-model.ts
|
|
318
382
|
var AlibabaLanguageModel = class {
|
|
319
383
|
constructor(modelId, config) {
|
|
@@ -346,7 +410,7 @@ var AlibabaLanguageModel = class {
|
|
|
346
410
|
tools,
|
|
347
411
|
toolChoice
|
|
348
412
|
}) {
|
|
349
|
-
var _a;
|
|
413
|
+
var _a, _b;
|
|
350
414
|
const warnings = [];
|
|
351
415
|
const cacheControlValidator = new CacheControlValidator();
|
|
352
416
|
const alibabaOptions = await parseProviderOptions({
|
|
@@ -360,6 +424,20 @@ var AlibabaLanguageModel = class {
|
|
|
360
424
|
setting: "frequencyPenalty"
|
|
361
425
|
});
|
|
362
426
|
}
|
|
427
|
+
const preserveThinking = (_a = alibabaOptions == null ? void 0 : alibabaOptions.preserveThinking) != null ? _a : supportsPreservedThinking(this.modelId) ? true : void 0;
|
|
428
|
+
const useJsonSchema = (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && supportsJsonSchemaOutput(this.modelId);
|
|
429
|
+
const useJsonObject = (responseFormat == null ? void 0 : responseFormat.type) === "json" && !useJsonSchema;
|
|
430
|
+
if (useJsonObject && responseFormat.schema != null) {
|
|
431
|
+
warnings.push({
|
|
432
|
+
type: "unsupported-setting",
|
|
433
|
+
setting: "responseFormat",
|
|
434
|
+
details: `Alibaba does not support JSON Schema output for model ${this.modelId}. JSON Object mode is used instead. The schema was injected into the system message and will only be validated locally.`
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
const resolvedPrompt = useJsonObject ? injectJsonInstructionIntoMessages({
|
|
438
|
+
messages: prompt,
|
|
439
|
+
schema: responseFormat.schema
|
|
440
|
+
}) : prompt;
|
|
363
441
|
const baseArgs = {
|
|
364
442
|
model: this.modelId,
|
|
365
443
|
max_tokens: maxOutputTokens,
|
|
@@ -369,21 +447,23 @@ var AlibabaLanguageModel = class {
|
|
|
369
447
|
presence_penalty: presencePenalty,
|
|
370
448
|
stop: stopSequences,
|
|
371
449
|
seed,
|
|
372
|
-
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ?
|
|
450
|
+
response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? useJsonSchema ? {
|
|
373
451
|
type: "json_schema",
|
|
374
452
|
json_schema: {
|
|
375
453
|
schema: responseFormat.schema,
|
|
376
|
-
name: (
|
|
454
|
+
name: (_b = responseFormat.name) != null ? _b : "response",
|
|
377
455
|
description: responseFormat.description
|
|
378
456
|
}
|
|
379
457
|
} : { type: "json_object" } : void 0,
|
|
380
458
|
// Alibaba-specific options
|
|
381
459
|
...(alibabaOptions == null ? void 0 : alibabaOptions.enableThinking) != null ? { enable_thinking: alibabaOptions.enableThinking } : {},
|
|
382
460
|
...(alibabaOptions == null ? void 0 : alibabaOptions.thinkingBudget) != null ? { thinking_budget: alibabaOptions.thinkingBudget } : {},
|
|
461
|
+
...preserveThinking != null ? { preserve_thinking: preserveThinking } : {},
|
|
383
462
|
// Convert messages with cache control support
|
|
384
463
|
messages: convertToAlibabaChatMessages({
|
|
385
|
-
prompt,
|
|
386
|
-
cacheControlValidator
|
|
464
|
+
prompt: resolvedPrompt,
|
|
465
|
+
cacheControlValidator,
|
|
466
|
+
preserveThinking: preserveThinking != null ? preserveThinking : false
|
|
387
467
|
})
|
|
388
468
|
};
|
|
389
469
|
const {
|
|
@@ -903,7 +983,7 @@ var alibabaTextEmbeddingResponseSchema = z5.object({
|
|
|
903
983
|
});
|
|
904
984
|
|
|
905
985
|
// src/version.ts
|
|
906
|
-
var VERSION = true ? "0.0.
|
|
986
|
+
var VERSION = true ? "0.0.29" : "0.0.0-test";
|
|
907
987
|
|
|
908
988
|
// src/alibaba-provider.ts
|
|
909
989
|
function createAlibaba(options = {}) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-prepare-tools.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/version.ts"],"sourcesContent":["import {\n type EmbeddingModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-options';\nimport {\n type AlibabaErrorData,\n alibabaFailedResponseHandler,\n} from './alibaba-error';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData };\nexport { alibabaFailedResponseHandler };\n\nexport interface AlibabaProvider extends ProviderV2 {\n (modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbeddingModel(\n modelId: AlibabaEmbeddingModelId,\n ): EmbeddingModelV2<string>;\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 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 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 AlibabaLanguageModel(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 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 = 'v2' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { prepareTools } from './alibaba-prepare-tools';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV2 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 AlibabaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\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 providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // Alibaba-specific options\n ...(alibabaOptions?.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions?.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\n : {}),\n\n // Convert messages with cache control support\n messages: convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n }),\n };\n\n // Prepare tools\n const {\n tools: alibabaTools,\n toolChoice: alibabaToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...cacheControlValidator.getWarnings());\n\n return {\n args: {\n ...baseArgs,\n tools: alibabaTools,\n tool_choice: alibabaToolChoice,\n ...(alibabaTools != null &&\n alibabaOptions?.parallelToolCalls !== undefined\n ? { parallel_tool_calls: alibabaOptions.parallelToolCalls }\n : {}),\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\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<LanguageModelV2Content> = [];\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: mapOpenAICompatibleFinishReason(choice.finish_reason),\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 providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n response.usage?.prompt_tokens_details\n ?.cache_creation_input_tokens ?? null,\n },\n },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\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: LanguageModelV2FinishReason = 'other';\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 // Track tool calls for accumulation across chunks\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\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 const index = toolCallDelta.index ?? toolCalls.length;\n\n // New tool call - first chunk with id and name\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n // Send initial delta if arguments started\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Check if already complete (some providers send full tool call at once)\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n\n continue;\n }\n\n // Existing tool call - accumulate arguments\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n // Append arguments if not null (skip arguments: null chunks)\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n\n // Check if tool call is now complete\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = mapOpenAICompatibleFinishReason(\n 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 controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n usage?.prompt_tokens_details?.cache_creation_input_tokens ??\n null,\n },\n },\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelOptions = z.object({\n /**\n * Enable thinking/reasoning mode for supported models.\n * When enabled, the model generates reasoning content before the response.\n *\n * @default false\n */\n enableThinking: z.boolean().optional(),\n\n /**\n * Maximum number of reasoning tokens to generate.\n */\n thinkingBudget: z.number().positive().optional(),\n\n /**\n * Whether to enable parallel function calling during tool use.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n});\n\nexport type AlibabaLanguageModelOptions = z.infer<\n typeof alibabaLanguageModelOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\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 const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import type { LanguageModelV2Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV2Usage {\n return {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ?? undefined,\n cachedInputTokens: usage?.prompt_tokens_details?.cached_tokens ?? undefined,\n };\n}\n","import {\n type LanguageModelV2DataContent,\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({\n data,\n mediaType,\n}: {\n data: LanguageModelV2DataContent;\n mediaType: string;\n}): string {\n return data instanceof URL\n ? data.toString()\n : `data:${mediaType};base64,${convertToBase64(data as Uint8Array)}`;\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n}: {\n prompt: LanguageModelV2Prompt;\n cacheControlValidator?: CacheControlValidator;\n}): AlibabaChatPrompt {\n const messages: AlibabaChatPrompt = [];\n\n for (const { role, content, ...message } of prompt) {\n const messageCacheControl = cacheControlValidator?.getCacheControl(\n message.providerOptions,\n );\n\n switch (role) {\n case 'system': {\n if (messageCacheControl) {\n messages.push({\n role: 'system',\n content: [\n {\n type: 'text',\n text: content,\n cache_control: messageCacheControl,\n },\n ],\n });\n } else {\n messages.push({ role: 'system', content });\n }\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n const isLastPart = index === content.length - 1;\n const partCacheControl =\n cacheControlValidator?.getCacheControl(part.providerOptions) ??\n (isLastPart ? messageCacheControl : undefined);\n\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n ...(partCacheControl\n ? { cache_control: partCacheControl }\n : {}),\n };\n }\n\n case 'file': {\n if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ data: part.data, mediaType }),\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 break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'reasoning': {\n // Reasoning content is handled separately in the response\n // but may appear in assistant messages during multi-turn conversations\n text += part.text;\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content:\n text && messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const toolResponse = content[i];\n const output = toolResponse.output;\n const isLastPart = i === content.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 '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 LanguageModelV2CallWarning,\n SharedV2ProviderMetadata,\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: SharedV2ProviderMetadata | 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: LanguageModelV2CallWarning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV2ProviderMetadata | 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(): LanguageModelV2CallWarning[] {\n return this.warnings;\n }\n}\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\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: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({ type: 'unsupported-tool', tool });\n } else {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, 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: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\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 {\n type EmbeddingModelV2,\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaConfig } from './alibaba-config';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-options';\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 EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\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<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['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 // The AI SDK embedding interface requires dense number arrays.\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.map(sparseItem => ({\n index: sparseItem.index,\n value: sparseItem.value,\n ...(sparseItem.token == null\n ? {}\n : { token: sparseItem.token }),\n })),\n },\n )\n .filter(item => item != null);\n\n return {\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","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","_a","alibaba","UnsupportedFunctionalityError","toolCall","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","createJsonErrorResponseHandler","z","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/alibaba-provider.ts","../src/alibaba-chat-language-model.ts","../src/alibaba-chat-options.ts","../src/alibaba-error.ts","../src/convert-alibaba-usage.ts","../src/convert-to-alibaba-chat-messages.ts","../src/get-cache-control.ts","../src/alibaba-prepare-tools.ts","../src/supports-json-schema-output.ts","../src/supports-preserved-thinking.ts","../src/alibaba-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/version.ts"],"sourcesContent":["import {\n type EmbeddingModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { AlibabaLanguageModel } from './alibaba-chat-language-model';\nimport type { AlibabaChatModelId } from './alibaba-chat-options';\nimport {\n type AlibabaErrorData,\n alibabaFailedResponseHandler,\n} from './alibaba-error';\nimport { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { VERSION } from './version';\n\nexport type { AlibabaErrorData };\nexport { alibabaFailedResponseHandler };\n\nexport interface AlibabaProvider extends ProviderV2 {\n (modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV2;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV2<string>;\n\n /**\n * Creates a model for text embeddings.\n */\n textEmbeddingModel(\n modelId: AlibabaEmbeddingModelId,\n ): EmbeddingModelV2<string>;\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 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 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 AlibabaLanguageModel(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 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 = 'v2' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n alibabaLanguageModelOptions,\n type AlibabaChatModelId,\n} from './alibaba-chat-options';\nimport type { AlibabaConfig } from './alibaba-config';\nimport { alibabaFailedResponseHandler } from './alibaba-error';\nimport { convertAlibabaUsage } from './convert-alibaba-usage';\nimport { convertToAlibabaChatMessages } from './convert-to-alibaba-chat-messages';\nimport { CacheControlValidator } from './get-cache-control';\nimport { prepareTools } from './alibaba-prepare-tools';\nimport { supportsJsonSchemaOutput } from './supports-json-schema-output';\nimport { supportsPreservedThinking } from './supports-preserved-thinking';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV2 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 AlibabaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaChatModelId;\n\n private readonly config: AlibabaConfig;\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 providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n\n const cacheControlValidator = new CacheControlValidator();\n\n const alibabaOptions = await parseProviderOptions({\n provider: 'alibaba',\n providerOptions,\n schema: alibabaLanguageModelOptions,\n });\n\n // Warn about unsupported features\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\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: 'unsupported-setting',\n setting: 'responseFormat',\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 // Alibaba-specific options\n ...(alibabaOptions?.enableThinking != null\n ? { enable_thinking: alibabaOptions.enableThinking }\n : {}),\n ...(alibabaOptions?.thinkingBudget != null\n ? { thinking_budget: alibabaOptions.thinkingBudget }\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: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\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<LanguageModelV2Content> = [];\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,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments!,\n });\n }\n }\n\n return {\n content,\n finishReason: mapOpenAICompatibleFinishReason(choice.finish_reason),\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 providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n response.usage?.prompt_tokens_details\n ?.cache_creation_input_tokens ?? null,\n },\n },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\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: LanguageModelV2FinishReason = 'other';\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 // Track tool calls for accumulation across chunks\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n hasFinished: boolean;\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof alibabaChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n start(controller) {\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 const index = toolCallDelta.index ?? toolCalls.length;\n\n // New tool call - first chunk with id and name\n if (toolCalls[index] == null) {\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n // Send initial delta if arguments started\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // Check if already complete (some providers send full tool call at once)\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n\n continue;\n }\n\n // Existing tool call - accumulate arguments\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n // Append arguments if not null (skip arguments: null chunks)\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function.arguments;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n\n // Check if tool call is now complete\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.hasFinished = true;\n }\n }\n }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = mapOpenAICompatibleFinishReason(\n 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 controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n providerMetadata: {\n alibaba: {\n cacheCreationInputTokens:\n usage?.prompt_tokens_details?.cache_creation_input_tokens ??\n null,\n },\n },\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\n/**\n * Reference for schemas below:\n * https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions\n */\nconst alibabaUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n cache_creation_input_tokens: z.number().nullish(),\n })\n .nullish(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nconst alibabaChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(),\n});\n\nconst alibabaChatChunkSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(), // Alibaba thinking mode delta\n tool_calls: z\n .array(\n z.object({\n index: z.number().nullish(), // Index for accumulating tool calls\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z\n .object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n })\n .nullish(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: alibabaUsageSchema.nullish(), // Usage only appears in final chunk\n});\n","import { z } from 'zod/v4';\n\n// https://www.alibabacloud.com/help/en/model-studio/models\nexport type AlibabaChatModelId =\n // commercial edition - hybrid-thinking mode (disabled by default)\n | 'qwen3.7-max'\n | 'qwen3-max'\n | 'qwen3-max-preview'\n | 'qwen-plus'\n | 'qwen-plus-latest'\n | 'qwen-flash'\n | 'qwen-turbo'\n | 'qwen-turbo-latest'\n // open-source edition - hybrid-thinking mode (enabled by default)\n | 'qwen3-235b-a22b'\n | 'qwen3-32b'\n | 'qwen3-30b-a3b'\n | 'qwen3-14b'\n // thinking-only mode\n | 'qwen3-next-80b-a3b-thinking'\n | 'qwen3-235b-a22b-thinking-2507'\n | 'qwen3-30b-a3b-thinking-2507'\n | 'qwq-plus'\n | 'qwq-plus-latest'\n | 'qwq-32b'\n // code models\n | 'qwen-coder'\n | 'qwen3-coder-plus'\n | 'qwen3-coder-flash'\n | (string & {});\n\nexport const alibabaLanguageModelOptions = 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 AlibabaLanguageModelOptions = z.infer<\n typeof alibabaLanguageModelOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\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 const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import type { LanguageModelV2Usage } from '@ai-sdk/provider';\n\nexport type AlibabaUsage = {\n prompt_tokens?: number | null;\n completion_tokens?: number | null;\n total_tokens?: number | null;\n prompt_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n } | null;\n completion_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n};\n\nexport function convertAlibabaUsage(\n usage: AlibabaUsage | undefined | null,\n): LanguageModelV2Usage {\n return {\n inputTokens: usage?.prompt_tokens ?? undefined,\n outputTokens: usage?.completion_tokens ?? undefined,\n totalTokens: usage?.total_tokens ?? undefined,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ?? undefined,\n cachedInputTokens: usage?.prompt_tokens_details?.cached_tokens ?? undefined,\n };\n}\n","import {\n type LanguageModelV2DataContent,\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { AlibabaChatPrompt } from './alibaba-chat-prompt';\nimport type { CacheControlValidator } from './get-cache-control';\n\nfunction formatImageUrl({\n data,\n mediaType,\n}: {\n data: LanguageModelV2DataContent;\n mediaType: string;\n}): string {\n return data instanceof URL\n ? data.toString()\n : `data:${mediaType};base64,${convertToBase64(data as Uint8Array)}`;\n}\n\nexport function convertToAlibabaChatMessages({\n prompt,\n cacheControlValidator,\n preserveThinking = false,\n}: {\n prompt: LanguageModelV2Prompt;\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 if (part.mediaType.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n\n return {\n type: 'image_url',\n image_url: {\n url: formatImageUrl({ data: part.data, mediaType }),\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 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 : text && 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 for (let i = 0; i < content.length; i++) {\n const toolResponse = content[i];\n const output = toolResponse.output;\n const isLastPart = i === content.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 '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 LanguageModelV2CallWarning,\n SharedV2ProviderMetadata,\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: SharedV2ProviderMetadata | 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: LanguageModelV2CallWarning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV2ProviderMetadata | 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(): LanguageModelV2CallWarning[] {\n return this.warnings;\n }\n}\n","import {\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: LanguageModelV2CallWarning[];\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: LanguageModelV2CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider-defined') {\n toolWarnings.push({ type: 'unsupported-tool', tool });\n } else {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, 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: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\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","// 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 type EmbeddingModelV2,\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaConfig } from './alibaba-config';\nimport {\n alibabaEmbeddingModelOptions,\n type AlibabaEmbeddingModelId,\n} from './alibaba-embedding-options';\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 EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly modelId: AlibabaEmbeddingModelId;\n readonly maxEmbeddingsPerCall = 10;\n readonly supportsParallelCalls = false;\n\n private readonly config: AlibabaConfig;\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<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['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 // The AI SDK embedding interface requires dense number arrays.\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.map(sparseItem => ({\n index: sparseItem.index,\n value: sparseItem.value,\n ...(sparseItem.token == null\n ? {}\n : { token: sparseItem.token }),\n })),\n },\n )\n .filter(item => item != null);\n\n return {\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","// 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","index","_a","alibaba","UnsupportedFunctionalityError","toolCall","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","createJsonErrorResponseHandler","z","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/alibaba",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.29",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@ai-sdk/openai-compatible": "1.0.54",
|
|
23
|
-
"@ai-sdk/provider": "
|
|
24
|
-
"@ai-sdk/provider
|
|
23
|
+
"@ai-sdk/provider-utils": "3.0.37",
|
|
24
|
+
"@ai-sdk/provider": "2.0.4"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "20.17.24",
|