@ai-sdk/alibaba 1.0.35 → 1.0.37
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 +26 -0
- package/dist/index.js +17 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/alibaba-chat-language-model.ts +19 -35
- package/src/convert-to-alibaba-chat-messages.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @ai-sdk/alibaba
|
|
2
2
|
|
|
3
|
+
## 1.0.37
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e1af05f: feat (video): support video (not just image) reference inputs in `inputReferences` for reference-to-video generation
|
|
8
|
+
- Updated dependencies [e1af05f]
|
|
9
|
+
- @ai-sdk/provider@3.0.14
|
|
10
|
+
- @ai-sdk/openai-compatible@2.0.59
|
|
11
|
+
- @ai-sdk/provider-utils@4.0.38
|
|
12
|
+
|
|
13
|
+
## 1.0.36
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- bef93ae: fix(security): prevent streaming tool calls from finalizing on parsable partial JSON
|
|
18
|
+
|
|
19
|
+
Streaming tool call arguments were finalized using `isParsableJson()` as a heuristic for completion. If partial accumulated JSON happened to be valid JSON before all chunks arrived, the tool call would be executed with incomplete arguments. Tool call finalization now only occurs in `flush()` after the stream is fully consumed.
|
|
20
|
+
|
|
21
|
+
- 327642b: fix: more precise default message for tool execution denial
|
|
22
|
+
- Updated dependencies [4d4e176]
|
|
23
|
+
- Updated dependencies [bef93ae]
|
|
24
|
+
- Updated dependencies [d559de9]
|
|
25
|
+
- Updated dependencies [327642b]
|
|
26
|
+
- @ai-sdk/openai-compatible@2.0.58
|
|
27
|
+
- @ai-sdk/provider-utils@4.0.37
|
|
28
|
+
|
|
3
29
|
## 1.0.35
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -214,7 +214,7 @@ function convertToAlibabaChatMessages({
|
|
|
214
214
|
contentValue = output.value;
|
|
215
215
|
break;
|
|
216
216
|
case "execution-denied":
|
|
217
|
-
contentValue = (_b = output.reason) != null ? _b : "Tool execution denied.";
|
|
217
|
+
contentValue = (_b = output.reason) != null ? _b : "Tool call execution denied.";
|
|
218
218
|
break;
|
|
219
219
|
case "content":
|
|
220
220
|
case "json":
|
|
@@ -562,19 +562,6 @@ var AlibabaLanguageModel = class {
|
|
|
562
562
|
delta: toolCall2.function.arguments
|
|
563
563
|
});
|
|
564
564
|
}
|
|
565
|
-
if ((0, import_provider_utils3.isParsableJson)(toolCall2.function.arguments)) {
|
|
566
|
-
controller.enqueue({
|
|
567
|
-
type: "tool-input-end",
|
|
568
|
-
id: toolCall2.id
|
|
569
|
-
});
|
|
570
|
-
controller.enqueue({
|
|
571
|
-
type: "tool-call",
|
|
572
|
-
toolCallId: toolCall2.id,
|
|
573
|
-
toolName: toolCall2.function.name,
|
|
574
|
-
input: toolCall2.function.arguments
|
|
575
|
-
});
|
|
576
|
-
toolCall2.hasFinished = true;
|
|
577
|
-
}
|
|
578
565
|
continue;
|
|
579
566
|
}
|
|
580
567
|
const toolCall = toolCalls[index];
|
|
@@ -589,19 +576,6 @@ var AlibabaLanguageModel = class {
|
|
|
589
576
|
delta: toolCallDelta.function.arguments
|
|
590
577
|
});
|
|
591
578
|
}
|
|
592
|
-
if ((0, import_provider_utils3.isParsableJson)(toolCall.function.arguments)) {
|
|
593
|
-
controller.enqueue({
|
|
594
|
-
type: "tool-input-end",
|
|
595
|
-
id: toolCall.id
|
|
596
|
-
});
|
|
597
|
-
controller.enqueue({
|
|
598
|
-
type: "tool-call",
|
|
599
|
-
toolCallId: toolCall.id,
|
|
600
|
-
toolName: toolCall.function.name,
|
|
601
|
-
input: toolCall.function.arguments
|
|
602
|
-
});
|
|
603
|
-
toolCall.hasFinished = true;
|
|
604
|
-
}
|
|
605
579
|
}
|
|
606
580
|
}
|
|
607
581
|
if (choice.finish_reason != null) {
|
|
@@ -621,6 +595,21 @@ var AlibabaLanguageModel = class {
|
|
|
621
595
|
if (activeText) {
|
|
622
596
|
controller.enqueue({ type: "text-end", id: "0" });
|
|
623
597
|
}
|
|
598
|
+
for (const toolCall of toolCalls) {
|
|
599
|
+
if (!toolCall.hasFinished) {
|
|
600
|
+
controller.enqueue({
|
|
601
|
+
type: "tool-input-end",
|
|
602
|
+
id: toolCall.id
|
|
603
|
+
});
|
|
604
|
+
controller.enqueue({
|
|
605
|
+
type: "tool-call",
|
|
606
|
+
toolCallId: toolCall.id,
|
|
607
|
+
toolName: toolCall.function.name,
|
|
608
|
+
input: toolCall.function.arguments
|
|
609
|
+
});
|
|
610
|
+
toolCall.hasFinished = true;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
624
613
|
controller.enqueue({
|
|
625
614
|
type: "finish",
|
|
626
615
|
finishReason,
|
|
@@ -1285,7 +1274,7 @@ var AlibabaVideoModel = class {
|
|
|
1285
1274
|
};
|
|
1286
1275
|
|
|
1287
1276
|
// src/version.ts
|
|
1288
|
-
var VERSION = true ? "1.0.
|
|
1277
|
+
var VERSION = true ? "1.0.37" : "0.0.0-test";
|
|
1289
1278
|
|
|
1290
1279
|
// src/alibaba-provider.ts
|
|
1291
1280
|
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-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/alibaba-video-model.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 {\n AlibabaVideoModelOptions,\n /** @deprecated Use `AlibabaVideoModelOptions` instead. */\n AlibabaVideoModelOptions as AlibabaVideoProviderOptions,\n} from './alibaba-video-model';\nexport type { AlibabaVideoModelId } from './alibaba-video-settings';\nexport type { AlibabaUsage } from './convert-alibaba-usage';\nexport { VERSION } from './version';\n","import {\n type EmbeddingModelV3,\n type Experimental_VideoModelV3,\n type LanguageModelV3,\n NoSuchModelError,\n type ProviderV3,\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 { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport {\n alibabaFailedResponseHandler,\n type AlibabaErrorData,\n} from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV3 {\n (modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new 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 createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\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';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV3 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 LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\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({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // 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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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<LanguageModelV3Content> = [];\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: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\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: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n // 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 LanguageModelV3StreamPart\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) {\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 = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\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\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV3Usage } 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): LanguageModelV3Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n type LanguageModelV3DataContent,\n type LanguageModelV3Prompt,\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: LanguageModelV3DataContent;\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: LanguageModelV3Prompt;\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: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV3ProviderMetadata,\n SharedV3Warning,\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: SharedV3ProviderMetadata | 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: SharedV3Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV3ProviderMetadata | 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(): SharedV3Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV3,\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 EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\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<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['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,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\n","import {\n AISDKError,\n type Experimental_VideoModelV3,\n type Experimental_VideoModelV3File,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /** Shot type: 'single' for single-shot or 'multi' for multi-shot narrative. */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /** Enable audio generation (for I2V/R2V models). */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode.\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nconst alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum([\n 'reference_image',\n 'reference_video',\n 'first_frame',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV3File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n // Step 1: Create task\n const { value: createResponse } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = alibabaOptions?.pollIntervalMs ?? 5000;\n const pollTimeoutMs = alibabaOptions?.pollTimeoutMs ?? 600000;\n const startTime = Date.now();\n let finalResponse: AlibabaVideoTaskStatusResponse | undefined;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_FAILED',\n message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,\n });\n }\n\n // Continue polling for PENDING, RUNNING, UNKNOWN statuses\n }\n\n const videoUrl = finalResponse?.output?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(finalResponse?.output?.actual_prompt\n ? { actualPrompt: finalResponse.output.actual_prompt }\n : {}),\n ...(finalResponse?.usage\n ? {\n usage: {\n duration: finalResponse.usage.duration,\n outputVideoDuration:\n finalResponse.usage.output_video_duration,\n resolution: finalResponse.usage.SR,\n size: finalResponse.usage.size,\n },\n }\n : {}),\n },\n },\n };\n }\n}\n","// 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_internal","import_provider","import_provider_utils","import_v4","import_v4","import_provider_utils","_a","alibaba","toolCall","import_provider","import_provider_utils","import_v4","import_v4","import_provider","import_provider_utils","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-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/alibaba-video-model.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 {\n AlibabaVideoModelOptions,\n /** @deprecated Use `AlibabaVideoModelOptions` instead. */\n AlibabaVideoModelOptions as AlibabaVideoProviderOptions,\n} from './alibaba-video-model';\nexport type { AlibabaVideoModelId } from './alibaba-video-settings';\nexport type { AlibabaUsage } from './convert-alibaba-usage';\nexport { VERSION } from './version';\n","import {\n type EmbeddingModelV3,\n type Experimental_VideoModelV3,\n type LanguageModelV3,\n NoSuchModelError,\n type ProviderV3,\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 { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport {\n alibabaFailedResponseHandler,\n type AlibabaErrorData,\n} from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV3 {\n (modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new 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 createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\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';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV3 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 LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\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({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // 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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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<LanguageModelV3Content> = [];\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: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\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: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n // 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 LanguageModelV3StreamPart\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) {\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 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 }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n // Finalize any unfinished tool calls on stream end to\n // prevent premature execution from parsable partial JSON.\n for (const toolCall of toolCalls) {\n if (!toolCall.hasFinished) {\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 toolCall.hasFinished = true;\n }\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\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\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV3Usage } 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): LanguageModelV3Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n type LanguageModelV3DataContent,\n type LanguageModelV3Prompt,\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: LanguageModelV3DataContent;\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: LanguageModelV3Prompt;\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: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV3ProviderMetadata,\n SharedV3Warning,\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: SharedV3ProviderMetadata | 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: SharedV3Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV3ProviderMetadata | 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(): SharedV3Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV3,\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 EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\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<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['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,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\n","import {\n AISDKError,\n type Experimental_VideoModelV3,\n type Experimental_VideoModelV3File,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /** Shot type: 'single' for single-shot or 'multi' for multi-shot narrative. */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /** Enable audio generation (for I2V/R2V models). */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode.\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nconst alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum([\n 'reference_image',\n 'reference_video',\n 'first_frame',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV3File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n // Step 1: Create task\n const { value: createResponse } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = alibabaOptions?.pollIntervalMs ?? 5000;\n const pollTimeoutMs = alibabaOptions?.pollTimeoutMs ?? 600000;\n const startTime = Date.now();\n let finalResponse: AlibabaVideoTaskStatusResponse | undefined;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_FAILED',\n message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,\n });\n }\n\n // Continue polling for PENDING, RUNNING, UNKNOWN statuses\n }\n\n const videoUrl = finalResponse?.output?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(finalResponse?.output?.actual_prompt\n ? { actualPrompt: finalResponse.output.actual_prompt }\n : {}),\n ...(finalResponse?.usage\n ? {\n usage: {\n duration: finalResponse.usage.duration,\n outputVideoDuration:\n finalResponse.usage.output_video_duration,\n resolution: finalResponse.usage.SR,\n size: finalResponse.usage.size,\n },\n }\n : {}),\n },\n },\n };\n }\n}\n","// 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_internal","import_provider","import_provider_utils","import_v4","import_v4","import_provider_utils","_a","alibaba","toolCall","import_provider","import_provider_utils","import_v4","import_v4","import_provider","import_provider_utils","import_v4","_a"]}
|
package/dist/index.mjs
CHANGED
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
createEventSourceResponseHandler,
|
|
23
23
|
createJsonResponseHandler,
|
|
24
24
|
generateId,
|
|
25
|
-
isParsableJson,
|
|
26
25
|
parseProviderOptions,
|
|
27
26
|
postJsonToApi
|
|
28
27
|
} from "@ai-sdk/provider-utils";
|
|
@@ -208,7 +207,7 @@ function convertToAlibabaChatMessages({
|
|
|
208
207
|
contentValue = output.value;
|
|
209
208
|
break;
|
|
210
209
|
case "execution-denied":
|
|
211
|
-
contentValue = (_b = output.reason) != null ? _b : "Tool execution denied.";
|
|
210
|
+
contentValue = (_b = output.reason) != null ? _b : "Tool call execution denied.";
|
|
212
211
|
break;
|
|
213
212
|
case "content":
|
|
214
213
|
case "json":
|
|
@@ -556,19 +555,6 @@ var AlibabaLanguageModel = class {
|
|
|
556
555
|
delta: toolCall2.function.arguments
|
|
557
556
|
});
|
|
558
557
|
}
|
|
559
|
-
if (isParsableJson(toolCall2.function.arguments)) {
|
|
560
|
-
controller.enqueue({
|
|
561
|
-
type: "tool-input-end",
|
|
562
|
-
id: toolCall2.id
|
|
563
|
-
});
|
|
564
|
-
controller.enqueue({
|
|
565
|
-
type: "tool-call",
|
|
566
|
-
toolCallId: toolCall2.id,
|
|
567
|
-
toolName: toolCall2.function.name,
|
|
568
|
-
input: toolCall2.function.arguments
|
|
569
|
-
});
|
|
570
|
-
toolCall2.hasFinished = true;
|
|
571
|
-
}
|
|
572
558
|
continue;
|
|
573
559
|
}
|
|
574
560
|
const toolCall = toolCalls[index];
|
|
@@ -583,19 +569,6 @@ var AlibabaLanguageModel = class {
|
|
|
583
569
|
delta: toolCallDelta.function.arguments
|
|
584
570
|
});
|
|
585
571
|
}
|
|
586
|
-
if (isParsableJson(toolCall.function.arguments)) {
|
|
587
|
-
controller.enqueue({
|
|
588
|
-
type: "tool-input-end",
|
|
589
|
-
id: toolCall.id
|
|
590
|
-
});
|
|
591
|
-
controller.enqueue({
|
|
592
|
-
type: "tool-call",
|
|
593
|
-
toolCallId: toolCall.id,
|
|
594
|
-
toolName: toolCall.function.name,
|
|
595
|
-
input: toolCall.function.arguments
|
|
596
|
-
});
|
|
597
|
-
toolCall.hasFinished = true;
|
|
598
|
-
}
|
|
599
572
|
}
|
|
600
573
|
}
|
|
601
574
|
if (choice.finish_reason != null) {
|
|
@@ -615,6 +588,21 @@ var AlibabaLanguageModel = class {
|
|
|
615
588
|
if (activeText) {
|
|
616
589
|
controller.enqueue({ type: "text-end", id: "0" });
|
|
617
590
|
}
|
|
591
|
+
for (const toolCall of toolCalls) {
|
|
592
|
+
if (!toolCall.hasFinished) {
|
|
593
|
+
controller.enqueue({
|
|
594
|
+
type: "tool-input-end",
|
|
595
|
+
id: toolCall.id
|
|
596
|
+
});
|
|
597
|
+
controller.enqueue({
|
|
598
|
+
type: "tool-call",
|
|
599
|
+
toolCallId: toolCall.id,
|
|
600
|
+
toolName: toolCall.function.name,
|
|
601
|
+
input: toolCall.function.arguments
|
|
602
|
+
});
|
|
603
|
+
toolCall.hasFinished = true;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
618
606
|
controller.enqueue({
|
|
619
607
|
type: "finish",
|
|
620
608
|
finishReason,
|
|
@@ -1303,7 +1291,7 @@ var AlibabaVideoModel = class {
|
|
|
1303
1291
|
};
|
|
1304
1292
|
|
|
1305
1293
|
// src/version.ts
|
|
1306
|
-
var VERSION = true ? "1.0.
|
|
1294
|
+
var VERSION = true ? "1.0.37" : "0.0.0-test";
|
|
1307
1295
|
|
|
1308
1296
|
// src/alibaba-provider.ts
|
|
1309
1297
|
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-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/alibaba-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n type EmbeddingModelV3,\n type Experimental_VideoModelV3,\n type LanguageModelV3,\n NoSuchModelError,\n type ProviderV3,\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 { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport {\n alibabaFailedResponseHandler,\n type AlibabaErrorData,\n} from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV3 {\n (modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new 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 createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\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';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV3 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 LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\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({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // 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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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<LanguageModelV3Content> = [];\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: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\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: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n // 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 LanguageModelV3StreamPart\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) {\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 = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\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\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV3Usage } 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): LanguageModelV3Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n type LanguageModelV3DataContent,\n type LanguageModelV3Prompt,\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: LanguageModelV3DataContent;\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: LanguageModelV3Prompt;\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: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV3ProviderMetadata,\n SharedV3Warning,\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: SharedV3ProviderMetadata | 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: SharedV3Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV3ProviderMetadata | 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(): SharedV3Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV3,\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 EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\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<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['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,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\n","import {\n AISDKError,\n type Experimental_VideoModelV3,\n type Experimental_VideoModelV3File,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /** Shot type: 'single' for single-shot or 'multi' for multi-shot narrative. */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /** Enable audio generation (for I2V/R2V models). */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode.\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nconst alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum([\n 'reference_image',\n 'reference_video',\n 'first_frame',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV3File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n // Step 1: Create task\n const { value: createResponse } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = alibabaOptions?.pollIntervalMs ?? 5000;\n const pollTimeoutMs = alibabaOptions?.pollTimeoutMs ?? 600000;\n const startTime = Date.now();\n let finalResponse: AlibabaVideoTaskStatusResponse | undefined;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_FAILED',\n message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,\n });\n }\n\n // Continue polling for PENDING, RUNNING, UNKNOWN statuses\n }\n\n const videoUrl = finalResponse?.output?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(finalResponse?.output?.actual_prompt\n ? { actualPrompt: finalResponse.output.actual_prompt }\n : {}),\n ...(finalResponse?.usage\n ? {\n usage: {\n duration: finalResponse.usage.duration,\n outputVideoDuration:\n finalResponse.usage.output_video_duration,\n resolution: finalResponse.usage.SR,\n size: finalResponse.usage.size,\n },\n }\n : {}),\n },\n },\n };\n }\n}\n","// 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","toolCall","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","createJsonErrorResponseHandler","z","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","_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-embedding-model.ts","../src/alibaba-embedding-options.ts","../src/alibaba-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n type EmbeddingModelV3,\n type Experimental_VideoModelV3,\n type LanguageModelV3,\n NoSuchModelError,\n type ProviderV3,\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 { AlibabaEmbeddingModel } from './alibaba-embedding-model';\nimport type { AlibabaEmbeddingModelId } from './alibaba-embedding-options';\nimport { AlibabaVideoModel } from './alibaba-video-model';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\nimport { VERSION } from './version';\n\nexport {\n alibabaFailedResponseHandler,\n type AlibabaErrorData,\n} from './alibaba-error';\n\nexport interface AlibabaProvider extends ProviderV3 {\n (modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: AlibabaChatModelId): LanguageModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for text embeddings.\n *\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: AlibabaEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: AlibabaVideoModelId): Experimental_VideoModelV3;\n}\n\nexport interface AlibabaProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers or regional endpoints.\n * The default prefix is `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`.\n */\n baseURL?: string;\n\n /**\n * Use a different URL prefix for video generation API calls.\n * The video API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com`.\n */\n videoBaseURL?: string;\n\n /**\n * Use a different URL prefix for embedding API calls.\n * The embedding API uses the DashScope native endpoint (not the OpenAI-compatible endpoint).\n * The default prefix is `https://dashscope-intl.aliyuncs.com/api/v1`.\n */\n embeddingBaseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n * It defaults to the `ALIBABA_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * Include usage information in streaming responses.\n * When enabled, token usage will be included in the final chunk.\n *\n * @default true\n */\n includeUsage?: boolean;\n}\n\n/**\n * Create an Alibaba Cloud (Qwen) provider instance.\n */\nexport function createAlibaba(\n options: AlibabaProviderSettings = {},\n): AlibabaProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';\n\n const videoBaseURL =\n withoutTrailingSlash(options.videoBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com';\n\n const embeddingBaseURL =\n withoutTrailingSlash(options.embeddingBaseURL) ??\n 'https://dashscope-intl.aliyuncs.com/api/v1';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'ALIBABA_API_KEY',\n description: 'Alibaba Cloud (DashScope)',\n })}`,\n ...options.headers,\n },\n `ai-sdk/alibaba/${VERSION}`,\n );\n\n const createLanguageModel = (modelId: AlibabaChatModelId) =>\n new 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 createVideoModel = (modelId: AlibabaVideoModelId) =>\n new AlibabaVideoModel(modelId, {\n provider: 'alibaba.video',\n baseURL: videoBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: AlibabaChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Alibaba model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n provider.chatModel = createLanguageModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.video = createVideoModel;\n provider.videoModel = createVideoModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const alibaba = createAlibaba();\n","import {\n getResponseMetadata,\n mapOpenAICompatibleFinishReason,\n prepareTools,\n} from '@ai-sdk/openai-compatible/internal';\nimport {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3GenerateResult,\n type LanguageModelV3StreamPart,\n type LanguageModelV3StreamResult,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\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';\n\n/**\n * Alibaba language model implementation.\n *\n * Implements LanguageModelV3 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 LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\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({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n\n // Build base request arguments\n const baseArgs = {\n model: this.modelId,\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n top_k: topK,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n response_format:\n responseFormat?.type === 'json'\n ? responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n schema: responseFormat.schema,\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n },\n }\n : { type: 'json_object' }\n : undefined,\n\n // 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: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\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<LanguageModelV3Content> = [];\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: {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertAlibabaUsage(response.usage),\n request: { body: JSON.stringify(args) },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\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: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: z.infer<typeof alibabaUsageSchema> | undefined = undefined;\n\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId: string | null = null;\n\n // 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 LanguageModelV3StreamPart\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) {\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 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 }\n\n // Track finish reason\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapOpenAICompatibleFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n },\n\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n\n if (activeText) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n // Finalize any unfinished tool calls on stream end to\n // prevent premature execution from parsable partial JSON.\n for (const toolCall of toolCalls) {\n if (!toolCall.hasFinished) {\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 toolCall.hasFinished = true;\n }\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertAlibabaUsage(usage),\n });\n },\n }),\n ),\n request: { body: JSON.stringify(body) },\n response: { headers: responseHeaders },\n };\n }\n}\n\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\nconst alibabaErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type AlibabaErrorData = z.infer<typeof alibabaErrorDataSchema>;\n\nexport const alibabaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { convertOpenAICompatibleChatUsage } from '@ai-sdk/openai-compatible/internal';\nimport type { LanguageModelV3Usage } 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): LanguageModelV3Usage {\n const baseUsage = convertOpenAICompatibleChatUsage(usage);\n\n const cacheWriteTokens =\n usage?.prompt_tokens_details?.cache_creation_input_tokens ?? 0;\n const noCacheTokens =\n (baseUsage.inputTokens.total ?? 0) -\n (baseUsage.inputTokens.cacheRead ?? 0) -\n cacheWriteTokens;\n\n return {\n ...baseUsage,\n inputTokens: {\n ...baseUsage.inputTokens,\n cacheWrite: cacheWriteTokens,\n noCache: noCacheTokens,\n },\n };\n}\n","import {\n type LanguageModelV3DataContent,\n type LanguageModelV3Prompt,\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: LanguageModelV3DataContent;\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: LanguageModelV3Prompt;\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: messageCacheControl\n ? [{ type: 'text', text, cache_control: messageCacheControl }]\n : text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n const toolResponses = content.filter(\n r => r.type !== 'tool-approval-response',\n );\n\n for (let i = 0; i < toolResponses.length; i++) {\n const toolResponse = toolResponses[i];\n const output = toolResponse.output;\n const isLastPart = i === toolResponses.length - 1;\n\n const partCacheControl =\n cacheControlValidator?.getCacheControl(\n toolResponse.providerOptions,\n ) ?? (isLastPart ? messageCacheControl : undefined);\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: partCacheControl\n ? [\n {\n type: 'text',\n text: contentValue,\n cache_control: partCacheControl,\n },\n ]\n : contentValue,\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type {\n SharedV3ProviderMetadata,\n SharedV3Warning,\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: SharedV3ProviderMetadata | 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: SharedV3Warning[] = [];\n\n getCacheControl(\n providerMetadata: SharedV3ProviderMetadata | 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(): SharedV3Warning[] {\n return this.warnings;\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n UnsupportedFunctionalityError,\n type EmbeddingModelV3,\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 EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\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<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['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,\n },\n )\n .filter(item => item != null);\n\n return {\n warnings: [],\n embeddings: sortedEmbeddings.map(item => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.total_tokens }\n : undefined,\n providerMetadata:\n sparseEmbeddings.length > 0\n ? {\n alibaba: {\n sparseEmbeddings,\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\nconst alibabaTextEmbeddingSparseEmbeddingSchema = z.object({\n index: z.number(),\n value: z.number(),\n token: z.string().nullish(),\n});\n\nconst alibabaTextEmbeddingResponseSchema = z.object({\n output: z.object({\n embeddings: z.array(\n z.object({\n embedding: z.array(z.number()),\n text_index: z.number(),\n sparse_embedding: z\n .array(alibabaTextEmbeddingSparseEmbeddingSchema)\n .nullish(),\n }),\n ),\n }),\n usage: z\n .object({\n total_tokens: z.number(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\nexport type AlibabaEmbeddingModelId =\n | 'text-embedding-v4'\n | 'text-embedding-v3'\n | (string & {});\n\nexport const alibabaEmbeddingModelOptions = z.object({\n /**\n * Differentiates query text from document text for asymmetric retrieval tasks.\n * Defaults to `document`.\n */\n textType: z.enum(['query', 'document']).optional(),\n\n /**\n * The dimension of the output embedding vectors. Defaults to 1024.\n *\n * `text-embedding-v4` also supports 1536 and 2048 dimensions.\n */\n dimension: z.number().optional(),\n\n /**\n * The output vector type. Defaults to `dense`.\n *\n * Sparse-only output is not supported by the AI SDK embedding interface,\n * which requires dense number arrays.\n */\n outputType: z.enum(['dense', 'sparse', 'dense&sparse']).optional(),\n});\n\nexport type AlibabaEmbeddingModelOptions = z.infer<\n typeof alibabaEmbeddingModelOptions\n>;\n","import {\n AISDKError,\n type Experimental_VideoModelV3,\n type Experimental_VideoModelV3File,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n type FetchFunction,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n type Resolvable,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { AlibabaVideoModelId } from './alibaba-video-settings';\n\nexport type AlibabaVideoModelOptions = {\n /** Negative prompt to specify what to avoid (max 500 chars). */\n negativePrompt?: string | null;\n /** URL to audio file for audio-video sync (WAV/MP3, 3-30s, max 15MB). */\n audioUrl?: string | null;\n /** Enable prompt extension/rewriting for better generation. Defaults to true. */\n promptExtend?: boolean | null;\n /** Shot type: 'single' for single-shot or 'multi' for multi-shot narrative. */\n shotType?: 'single' | 'multi' | null;\n /** Whether to add watermark to generated video. Defaults to false. */\n watermark?: boolean | null;\n /** Enable audio generation (for I2V/R2V models). */\n audio?: boolean | null;\n /**\n * Reference URLs for reference-to-video mode.\n * Array of URLs to images (0-5) and/or videos (0-3), max 5 total.\n * Use character identifiers (character1, character2) in prompts to reference them.\n */\n referenceUrls?: string[] | null;\n /**\n * Explicit media array for reference-to-video mode (wan2.7 models).\n * Overrides the automatic mapping from `inputReferences` and `frameImages`.\n * Use `Image 1`, `Video 1`, etc. in prompts to reference media items\n * (images and videos are counted separately, in array order).\n */\n media?: Array<{\n type: 'reference_image' | 'reference_video' | 'first_frame';\n /** Public URL, or a `data:{mime};base64,{data}` URI for images. */\n url: string;\n /** URL to an audio file used as voice reference for this media item. */\n referenceVoice?: string | null;\n }> | null;\n /**\n * Aspect ratio (wan2.7 text-to-video and reference-to-video models).\n */\n ratio?: '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | null;\n /** Polling interval in milliseconds. Defaults to 5000 (5 seconds). */\n pollIntervalMs?: number | null;\n /** Maximum wait time in milliseconds for video generation. Defaults to 600000 (10 minutes). */\n pollTimeoutMs?: number | null;\n [key: string]: unknown;\n};\n\nconst alibabaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n negativePrompt: z.string().nullish(),\n audioUrl: z.string().nullish(),\n promptExtend: z.boolean().nullish(),\n shotType: z.enum(['single', 'multi']).nullish(),\n watermark: z.boolean().nullish(),\n audio: z.boolean().nullish(),\n referenceUrls: z.array(z.string()).nullish(),\n media: z\n .array(\n z.object({\n type: z.enum([\n 'reference_image',\n 'reference_video',\n 'first_frame',\n ]),\n url: z.string(),\n referenceVoice: z.string().nullish(),\n }),\n )\n .nullish(),\n ratio: z.enum(['16:9', '9:16', '1:1', '4:3', '3:4']).nullish(),\n pollIntervalMs: z.number().positive().nullish(),\n pollTimeoutMs: z.number().positive().nullish(),\n })\n .passthrough(),\n ),\n);\n\ninterface AlibabaVideoModelConfig {\n provider: string;\n baseURL: string;\n headers: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// DashScope native API error format (different from OpenAI-compatible endpoint)\nconst alibabaVideoErrorSchema = z.object({\n code: z.string().nullish(),\n message: z.string(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: alibabaVideoErrorSchema,\n errorToMessage: data => data.message,\n});\n\nconst alibabaVideoCreateTaskSchema = z.object({\n output: z\n .object({\n task_status: z.string(),\n task_id: z.string(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\nconst alibabaVideoTaskStatusSchema = z.object({\n output: z\n .object({\n task_id: z.string(),\n task_status: z.string(),\n video_url: z.string().nullish(),\n submit_time: z.string().nullish(),\n scheduled_time: z.string().nullish(),\n end_time: z.string().nullish(),\n orig_prompt: z.string().nullish(),\n actual_prompt: z.string().nullish(),\n code: z.string().nullish(),\n message: z.string().nullish(),\n })\n .nullish(),\n usage: z\n .object({\n duration: z.number().nullish(),\n output_video_duration: z.number().nullish(),\n SR: z.number().nullish(),\n size: z.string().nullish(),\n })\n .nullish(),\n request_id: z.string().nullish(),\n});\n\ntype AlibabaVideoTaskStatusResponse = z.infer<\n typeof alibabaVideoTaskStatusSchema\n>;\n\nfunction detectMode(modelId: string): 't2v' | 'i2v' | 'r2v' {\n if (modelId.includes('-i2v')) return 'i2v';\n if (modelId.includes('-r2v')) return 'r2v';\n return 't2v';\n}\n\n// wan2.7 models use a different protocol than earlier wan models:\n// resolution tiers + ratio instead of size, input.media instead of\n// input.reference_urls (R2V), and no shot_type or audio parameters.\nfunction isWan27Model(modelId: string): boolean {\n return modelId.startsWith('wan2.7');\n}\n\n// Maps SDK \"WIDTHxHEIGHT\" resolutions to Alibaba resolution tiers.\nconst resolutionTierMap: Record<string, string> = {\n '1280x720': '720P',\n '720x1280': '720P',\n '960x960': '720P',\n '1088x832': '720P',\n '832x1088': '720P',\n '1920x1080': '1080P',\n '1080x1920': '1080P',\n '1440x1440': '1080P',\n '1632x1248': '1080P',\n '1248x1632': '1080P',\n '832x480': '480P',\n '480x832': '480P',\n '624x624': '480P',\n};\n\nconst supportedRatios = new Set(['16:9', '9:16', '1:1', '4:3', '3:4']);\n\nfunction deriveRatioFromResolution(\n resolution: `${number}x${number}`,\n): string | undefined {\n const [width, height] = resolution.split('x').map(Number);\n if (\n !Number.isInteger(width) ||\n !Number.isInteger(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n let a = width;\n let b = height;\n while (b !== 0) {\n [a, b] = [b, a % b];\n }\n const ratio = `${width / a}:${height / a}`;\n return supportedRatios.has(ratio) ? ratio : undefined;\n}\n\nfunction fileToImageString(file: Experimental_VideoModelV3File): string {\n if (file.type === 'url') {\n return file.url;\n }\n return typeof file.data === 'string'\n ? file.data\n : convertUint8ArrayToBase64(file.data);\n}\n\nfunction getFirstFrameImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return options.frameImages?.find(frame => frame.frameType === 'first_frame')\n ?.image;\n}\n\nfunction resolveStartImage(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n): Experimental_VideoModelV3File | undefined {\n return getFirstFrameImage(options) ?? options.image;\n}\n\nfunction isVideoUrl(url: string): boolean {\n return /\\.(mp4|mov)([?#]|$)/i.test(url);\n}\n\n// Builds the wan2.7 input.media array from inputReferences and frameImages.\nfunction resolveMedia(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): Array<Record<string, unknown>> | undefined {\n if (alibabaOptions?.media != null && alibabaOptions.media.length > 0) {\n return alibabaOptions.media.map(item => ({\n type: item.type,\n url: item.url,\n ...(item.referenceVoice != null\n ? { reference_voice: item.referenceVoice }\n : {}),\n }));\n }\n\n const media: Array<Record<string, unknown>> = [];\n\n for (const reference of options.inputReferences ?? []) {\n if (reference.type === 'url') {\n media.push({\n type: isVideoUrl(reference.url) ? 'reference_video' : 'reference_image',\n url: reference.url,\n });\n } else if (reference.mediaType.startsWith('image/')) {\n media.push({\n type: 'reference_image',\n url: convertImageModelFileToDataUri(reference),\n });\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references for videos. ' +\n 'Non-URL video reference was skipped.',\n });\n }\n }\n\n const firstFrame = getFirstFrameImage(options);\n if (firstFrame != null) {\n media.push({\n type: 'first_frame',\n url: convertImageModelFileToDataUri(firstFrame),\n });\n }\n\n return media.length > 0 ? media : undefined;\n}\n\nfunction resolveReferenceUrls(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n alibabaOptions: AlibabaVideoModelOptions | undefined,\n warnings: SharedV3Warning[],\n): string[] | undefined {\n if (options.frameImages != null && options.frameImages.length > 0) {\n return undefined;\n }\n\n if (options.inputReferences != null && options.inputReferences.length > 0) {\n const urls: string[] = [];\n\n for (const reference of options.inputReferences) {\n if (reference.type === 'url') {\n urls.push(reference.url);\n } else {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba reference-to-video requires URL references. ' +\n 'Non-URL reference was skipped.',\n });\n }\n }\n\n return urls.length > 0 ? urls : undefined;\n }\n\n return alibabaOptions?.referenceUrls ?? undefined;\n}\n\nexport class AlibabaVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: AlibabaVideoModelId,\n private readonly config: AlibabaVideoModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const warnings: SharedV3Warning[] = [];\n const mode = detectMode(this.modelId);\n\n const alibabaOptions = (await parseProviderOptions({\n provider: 'alibaba',\n providerOptions: options.providerOptions,\n schema: alibabaVideoModelOptionsSchema,\n })) as AlibabaVideoModelOptions | undefined;\n\n // Build input object\n const input: Record<string, unknown> = {};\n\n if (options.prompt != null) {\n input.prompt = options.prompt;\n }\n\n if (alibabaOptions?.negativePrompt != null) {\n input.negative_prompt = alibabaOptions.negativePrompt;\n }\n\n if (alibabaOptions?.audioUrl != null) {\n input.audio_url = alibabaOptions.audioUrl;\n }\n\n const startImage = resolveStartImage(options);\n const wan27 = isWan27Model(this.modelId);\n // wan2.7 T2V and R2V take an explicit aspect ratio (I2V follows the input image)\n const supportsRatio = wan27 && mode !== 'i2v';\n\n // Handle image input for I2V mode\n if (mode === 'i2v' && startImage != null) {\n input.img_url = fileToImageString(startImage);\n }\n\n // Handle references for R2V mode\n if (mode === 'r2v') {\n if (wan27) {\n // wan2.7: input.media\n const media = resolveMedia(options, alibabaOptions, warnings);\n if (media != null) {\n input.media = media;\n }\n } else {\n // wan2.6: legacy protocol with input.reference_urls\n const referenceUrls = resolveReferenceUrls(\n options,\n alibabaOptions,\n warnings,\n );\n if (referenceUrls != null && referenceUrls.length > 0) {\n input.reference_urls = referenceUrls;\n }\n }\n }\n\n const lastFrame = options.frameImages?.find(\n frame => frame.frameType === 'last_frame',\n )?.image;\n\n if (lastFrame != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'frameImages',\n details:\n 'This model does not support last_frame. ' +\n 'The last frame image was ignored.',\n });\n }\n\n if (\n options.inputReferences != null &&\n options.inputReferences.length > 0 &&\n mode !== 'r2v'\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'inputReferences',\n details:\n 'Alibaba only supports inputReferences (reference-to-video) on ' +\n 'reference-to-video models. The reference images were ignored.',\n });\n }\n\n // Build parameters object\n const parameters: Record<string, unknown> = {};\n\n if (options.duration != null) {\n parameters.duration = options.duration;\n }\n\n if (options.seed != null) {\n parameters.seed = options.seed;\n }\n\n // Resolution / Size mapping\n if (options.resolution != null) {\n if (mode === 'i2v' || wan27) {\n // I2V and wan2.7 models use \"720P\" / \"1080P\" format\n const resolutionTier =\n resolutionTierMap[options.resolution] || options.resolution;\n if (wan27 && resolutionTier !== '720P' && resolutionTier !== '1080P') {\n warnings.push({\n type: 'unsupported',\n feature: 'resolution',\n details:\n 'wan2.7 models only support 720P and 1080P ' +\n `resolutions. The resolution \"${options.resolution}\" was ignored.`,\n });\n } else {\n parameters.resolution = resolutionTier;\n }\n } else {\n // wan2.6 T2V and R2V use \"WIDTH*HEIGHT\" format for the size parameter\n // Convert \"WIDTHxHEIGHT\" (SDK standard) to \"WIDTH*HEIGHT\" (Alibaba API)\n parameters.size = options.resolution.replace('x', '*');\n }\n }\n\n // wan2.7 T2V and R2V support an explicit aspect ratio parameter\n if (supportsRatio) {\n const ratio =\n alibabaOptions?.ratio ??\n options.aspectRatio ??\n (options.resolution != null\n ? deriveRatioFromResolution(options.resolution)\n : undefined);\n if (ratio != null) {\n parameters.ratio = ratio;\n }\n }\n\n // Provider-specific parameters\n if (alibabaOptions?.promptExtend != null) {\n parameters.prompt_extend = alibabaOptions.promptExtend;\n }\n if (alibabaOptions?.shotType != null) {\n if (wan27) {\n // wan2.7 removed shot_type; shot structure is described in the prompt\n warnings.push({\n type: 'unsupported',\n feature: 'shotType',\n details:\n 'wan2.7 models do not support the shotType option. ' +\n 'Describe the shot structure in the prompt instead.',\n });\n } else {\n parameters.shot_type = alibabaOptions.shotType;\n }\n }\n if (alibabaOptions?.watermark != null) {\n parameters.watermark = alibabaOptions.watermark;\n }\n const audio = options.generateAudio ?? alibabaOptions?.audio;\n if (audio != null) {\n if (wan27) {\n // wan2.7 does not have an audio parameter (audio is always generated)\n warnings.push({\n type: 'unsupported',\n feature: 'generateAudio',\n details:\n 'wan2.7 models always generate audio. ' +\n 'The audio option was ignored.',\n });\n } else {\n parameters.audio = audio;\n }\n }\n\n // Warn about unsupported standard options\n if (options.aspectRatio && !supportsRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'Alibaba video models use explicit size/resolution dimensions. Use the resolution option or providerOptions.alibaba for size control.',\n });\n }\n if (options.fps) {\n warnings.push({\n type: 'unsupported',\n feature: 'fps',\n details: 'Alibaba video models do not support custom FPS.',\n });\n }\n if (options.n != null && options.n > 1) {\n warnings.push({\n type: 'unsupported',\n feature: 'n',\n details:\n 'Alibaba video models only support generating 1 video per call.',\n });\n }\n\n // Step 1: Create task\n const { value: createResponse } = await postJsonToApi({\n url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n {\n 'X-DashScope-Async': 'enable',\n },\n ),\n body: {\n model: this.modelId,\n input,\n parameters,\n },\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoCreateTaskSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const taskId = createResponse.output?.task_id;\n if (!taskId) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No task_id returned from Alibaba API. Response: ${JSON.stringify(createResponse)}`,\n });\n }\n\n // Step 2: Poll for task completion\n const pollIntervalMs = alibabaOptions?.pollIntervalMs ?? 5000;\n const pollTimeoutMs = alibabaOptions?.pollTimeoutMs ?? 600000;\n const startTime = Date.now();\n let finalResponse: AlibabaVideoTaskStatusResponse | undefined;\n let responseHeaders: Record<string, string> | undefined;\n\n while (true) {\n await delay(pollIntervalMs, { abortSignal: options.abortSignal });\n\n if (Date.now() - startTime > pollTimeoutMs) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_TIMEOUT',\n message: `Video generation timed out after ${pollTimeoutMs}ms`,\n });\n }\n\n const { value: statusResponse, responseHeaders: pollHeaders } =\n await getFromApi({\n url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,\n headers: combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n ),\n successfulResponseHandler: createJsonResponseHandler(\n alibabaVideoTaskStatusSchema,\n ),\n failedResponseHandler: alibabaVideoFailedResponseHandler,\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n responseHeaders = pollHeaders;\n const taskStatus = statusResponse.output?.task_status;\n\n if (taskStatus === 'SUCCEEDED') {\n finalResponse = statusResponse;\n break;\n }\n\n if (taskStatus === 'FAILED' || taskStatus === 'CANCELED') {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_FAILED',\n message: `Video generation ${taskStatus.toLowerCase()}. Task ID: ${taskId}. ${statusResponse.output?.message ?? ''}`,\n });\n }\n\n // Continue polling for PENDING, RUNNING, UNKNOWN statuses\n }\n\n const videoUrl = finalResponse?.output?.video_url;\n if (!videoUrl) {\n throw new AISDKError({\n name: 'ALIBABA_VIDEO_GENERATION_ERROR',\n message: `No video URL in response. Task ID: ${taskId}`,\n });\n }\n\n return {\n videos: [\n {\n type: 'url',\n url: videoUrl,\n mediaType: 'video/mp4',\n },\n ],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n alibaba: {\n taskId,\n videoUrl,\n ...(finalResponse?.output?.actual_prompt\n ? { actualPrompt: finalResponse.output.actual_prompt }\n : {}),\n ...(finalResponse?.usage\n ? {\n usage: {\n duration: finalResponse.usage.duration,\n outputVideoDuration:\n finalResponse.usage.output_video_duration,\n resolution: finalResponse.usage.SR,\n size: finalResponse.usage.size,\n },\n }\n : {}),\n },\n },\n };\n }\n}\n","// 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":";AAAA;AAAA,EAIE;AAAA,OAEK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACZP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OASK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,KAAAA,UAAS;;;ACzBlB,SAAS,SAAS;AA+BX,IAAM,8BAA8B,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlD,gBAAgB,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAKrC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO/C,mBAAmB,EAAE,QAAQ,EAAE,SAAS;AAC1C,CAAC;;;ACnDD,SAAS,sCAAsC;AAC/C,SAAS,KAAAC,UAAS;AAElB,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,OAAOA,GAAE,OAAO;AAAA,IACd,SAASA,GAAE,OAAO;AAAA,IAClB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC3B,CAAC;AACH,CAAC;AAIM,IAAM,+BAA+B,+BAA+B;AAAA,EACzE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK,MAAM;AACrC,CAAC;;;AChBD,SAAS,wCAAwC;AAgB1C,SAAS,oBACd,OACsB;AAlBxB;AAmBE,QAAM,YAAY,iCAAiC,KAAK;AAExD,QAAM,oBACJ,0CAAO,0BAAP,mBAA8B,gCAA9B,YAA6D;AAC/D,QAAM,kBACH,eAAU,YAAY,UAAtB,YAA+B,OAC/B,eAAU,YAAY,cAAtB,YAAmC,KACpC;AAEF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,GAAG,UAAU;AAAA,MACb,YAAY;AAAA,MACZ,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;ACpCA;AAAA,EAGE;AAAA,OACK;AACP,SAAS,uBAAuB;AAIhC,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AACF,GAGW;AACT,SAAO,gBAAgB,MACnB,KAAK,SAAS,IACd,QAAQ,SAAS,WAAW,gBAAgB,IAAkB,CAAC;AACrE;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAGsB;AA3BtB;AA4BE,QAAM,WAA8B,CAAC;AAErC,aAAW,EAAE,MAAM,SAAS,GAAG,QAAQ,KAAK,QAAQ;AAClD,UAAM,sBAAsB,+DAAuB;AAAA,MACjD,QAAQ;AAAA;AAGV,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,YAAI,qBAAqB;AACvB,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,mBAAS,KAAK,EAAE,MAAM,UAAU,QAAQ,CAAC;AAAA,QAC3C;AACA;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,CAAC,MAAM,UAAU;AAzDhD,gBAAAC;AA0DY,kBAAM,aAAa,UAAU,QAAQ,SAAS;AAC9C,kBAAM,oBACJA,MAAA,+DAAuB,gBAAgB,KAAK,qBAA5C,OAAAA,MACC,aAAa,sBAAsB;AAEtC,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,kBACX,GAAI,mBACA,EAAE,eAAe,iBAAiB,IAClC,CAAC;AAAA,gBACP;AAAA,cACF;AAAA,cAEA,KAAK,QAAQ;AACX,oBAAI,KAAK,UAAU,WAAW,QAAQ,GAAG;AACvC,wBAAM,YACJ,KAAK,cAAc,YACf,eACA,KAAK;AAEX,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW;AAAA,sBACT,KAAK,eAAe,EAAE,MAAM,KAAK,MAAM,UAAU,CAAC;AAAA,oBACpD;AAAA,oBACA,GAAI,mBACA,EAAE,eAAe,iBAAiB,IAClC,CAAC;AAAA,kBACP;AAAA,gBACF,OAAO;AACL,wBAAM,IAAI,8BAA8B;AAAA,oBACtC,eAAe;AAAA,kBACjB,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,YAAI,OAAO;AACX,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,sBAAQ,KAAK;AACb;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,KAAK;AAAA,gBACtC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAGhB,sBAAQ,KAAK;AACb;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,sBACL,CAAC,EAAE,MAAM,QAAQ,MAAM,eAAe,oBAAoB,CAAC,IAC3D,QAAQ;AAAA,UACZ,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,gBAAgB,QAAQ;AAAA,UAC5B,OAAK,EAAE,SAAS;AAAA,QAClB;AAEA,iBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,gBAAM,eAAe,cAAc,CAAC;AACpC,gBAAM,SAAS,aAAa;AAC5B,gBAAM,aAAa,MAAM,cAAc,SAAS;AAEhD,gBAAM,oBACJ,oEAAuB;AAAA,YACrB,aAAa;AAAA,gBADf,YAEM,aAAa,sBAAsB;AAE3C,cAAI;AACJ,kBAAQ,OAAO,MAAM;AAAA,YACnB,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,OAAO;AACtB;AAAA,YACF,KAAK;AACH,8BAAe,YAAO,WAAP,YAAiB;AAChC;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,6BAAe,KAAK,UAAU,OAAO,KAAK;AAC1C;AAAA,UACJ;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,aAAa;AAAA,YAC3B,SAAS,mBACL;AAAA,cACE;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,eAAe;AAAA,cACjB;AAAA,YACF,IACA;AAAA,UACN,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACpMA,IAAM,wBAAwB;AAE9B,SAAS,gBACP,kBACiC;AAXnC;AAYE,QAAMC,WAAU,qDAAkB;AAElC,QAAM,qBAAoB,KAAAA,YAAA,gBAAAA,SAAS,iBAAT,YAAyBA,YAAA,gBAAAA,SAAS;AAI5D,SAAO;AACT;AAEO,IAAM,wBAAN,MAA4B;AAAA,EAA5B;AACL,SAAQ,kBAAkB;AAC1B,SAAQ,WAA8B,CAAC;AAAA;AAAA,EAEvC,gBACE,kBACiC;AACjC,UAAM,oBAAoB,gBAAgB,gBAAgB;AAE1D,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,IACT;AAEA,SAAK;AACL,QAAI,KAAK,kBAAkB,uBAAuB;AAChD,WAAK,SAAS,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,gDAAgD,qBAAqB;AAAA,MAChF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,cAAiC;AAC/B,WAAO,KAAK;AAAA,EACd;AACF;;;ALHO,IAAM,uBAAN,MAAsD;AAAA,EAM3D,YAAY,SAA6B,QAAuB;AALhE,SAAS,uBAAuB;AAchC,SAAS,gBAA0C;AAAA,MACjD,WAAW,CAAC,iBAAiB;AAAA,IAC/B;AAVE,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+B;AAlFjC;AAmFI,UAAM,WAA8B,CAAC;AAErC,UAAM,wBAAwB,IAAI,sBAAsB;AAExD,UAAM,iBAAiB,MAAM,qBAAqB;AAAA,MAChD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,QAAI,oBAAoB,MAAM;AAC5B,eAAS,KAAK,EAAE,MAAM,eAAe,SAAS,mBAAmB,CAAC;AAAA,IACpE;AAGA,UAAM,WAAW;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,kBACE,iDAAgB,UAAS,SACrB,eAAe,UAAU,OACvB;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,UACX,QAAQ,eAAe;AAAA,UACvB,OAAM,oBAAe,SAAf,YAAuB;AAAA,UAC7B,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF,IACA,EAAE,MAAM,cAAc,IACxB;AAAA;AAAA,MAGN,IAAI,iDAAgB,mBAAkB,OAClC,EAAE,iBAAiB,eAAe,eAAe,IACjD,CAAC;AAAA,MACL,IAAI,iDAAgB,mBAAkB,OAClC,EAAE,iBAAiB,eAAe,eAAe,IACjD,CAAC;AAAA;AAAA,MAGL,UAAU,6BAA6B;AAAA,QACrC;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,aAAa,EAAE,OAAO,WAAW,CAAC;AAEtC,aAAS,KAAK,GAAG,sBAAsB,YAAY,CAAC;AAEpD,WAAO;AAAA,MACL,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,OAAO;AAAA,QACP,aAAa;AAAA,QACb,GAAI,gBAAgB,SACpB,iDAAgB,uBAAsB,SAClC,EAAE,qBAAqB,eAAe,kBAAkB,IACxD,CAAC;AAAA,MACP;AAAA,MACA,UAAU,CAAC,GAAG,UAAU,GAAG,YAAY;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACwC;AAlK5C;AAmKI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAErD,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAM,cAAc;AAAA,MACtB,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,eAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,SAAS,SAAS,QAAQ,CAAC;AACjC,UAAM,UAAyC,CAAC;AAGhD,UAAM,OAAO,OAAO,QAAQ;AAC5B,QAAI,QAAQ,QAAQ,KAAK,SAAS,GAAG;AACnC,cAAQ,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,IACrC;AAGA,UAAM,YAAY,OAAO,QAAQ;AACjC,QAAI,aAAa,QAAQ,UAAU,SAAS,GAAG;AAC7C,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,QAAQ,cAAc,MAAM;AACrC,iBAAW,YAAY,OAAO,QAAQ,YAAY;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS,SAAS;AAAA,UAC5B,OAAO,SAAS,SAAS;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc;AAAA,QACZ,SAAS,gCAAgC,OAAO,aAAa;AAAA,QAC7D,MAAK,YAAO,kBAAP,YAAwB;AAAA,MAC/B;AAAA,MACA,OAAO,oBAAoB,SAAS,KAAK;AAAA,MACzC,SAAS,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE;AAAA,MACtC,UAAU;AAAA,QACR,GAAG,oBAAoB,QAAQ;AAAA,QAC/B,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACrD,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,gBAAgB,KAAK,OAAO,eACxB,EAAE,eAAe,KAAK,IACtB;AAAA,IACN;AAEA,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,MAAM,cAAc;AAAA,MAC/D,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,eAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAGD,QAAI,eAA4C;AAAA,MAC9C,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AACA,QAAI,QAAwD;AAE5D,QAAI,eAAe;AACnB,QAAI,aAAa;AACjB,QAAI,oBAAmC;AAGvC,UAAM,YAKD,CAAC;AAEN,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAGF;AAAA,UACA,MAAM,YAAY;AAChB,uBAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACvD;AAAA,UAEA,UAAU,OAAO,YAAY;AAzRvC;AA2RY,gBAAI,QAAQ,kBAAkB;AAC5B,yBAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,MAAM,SAAS,CAAC;AAAA,YAC9D;AAGA,gBAAI,CAAC,MAAM,SAAS;AAClB,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,CAAC;AACxD;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,cAAc;AAChB,6BAAe;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB,KAAK;AAAA,cAC9B,CAAC;AAAA,YACH;AAGA,gBAAI,MAAM,SAAS,MAAM;AACvB,sBAAQ,MAAM;AAAA,YAChB;AAGA,gBAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B;AAAA,YACF;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAC9B,kBAAM,QAAQ,OAAO;AAGrB,gBACE,MAAM,qBAAqB,QAC3B,MAAM,kBAAkB,SAAS,GACjC;AACA,kBAAI,qBAAqB,MAAM;AAE7B,oBAAI,YAAY;AACd,6BAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,IAAI,CAAC;AAChD,+BAAa;AAAA,gBACf;AAEA,oCAAoB,WAAW;AAC/B,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AAAA,cACH;AAEA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO,MAAM;AAAA,cACf,CAAC;AAAA,YACH;AAGA,gBAAI,MAAM,WAAW,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAErD,kBAAI,qBAAqB,MAAM;AAC7B,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AAEA,kBAAI,CAAC,YAAY;AACf,2BAAW,QAAQ,EAAE,MAAM,cAAc,IAAI,IAAI,CAAC;AAClD,6BAAa;AAAA,cACf;AAEA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO,MAAM;AAAA,cACf,CAAC;AAAA,YACH;AAGA,gBAAI,MAAM,cAAc,MAAM;AAE5B,kBAAI,qBAAqB,MAAM;AAC7B,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI;AAAA,gBACN,CAAC;AACD,oCAAoB;AAAA,cACtB;AACA,kBAAI,YAAY;AACd,2BAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,IAAI,CAAC;AAChD,6BAAa;AAAA,cACf;AAEA,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,sBAAM,SAAQ,mBAAc,UAAd,YAAuB,UAAU;AAG/C,oBAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,sBAAI,cAAc,MAAM,MAAM;AAC5B,0BAAM,IAAI,yBAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,wBAAI,mBAAc,aAAd,mBAAwB,SAAQ,MAAM;AACxC,0BAAM,IAAI,yBAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,cAAc;AAAA,oBAClB,UAAU,cAAc,SAAS;AAAA,kBACnC,CAAC;AAED,4BAAU,KAAK,IAAI;AAAA,oBACjB,IAAI,cAAc;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,sBACR,MAAM,cAAc,SAAS;AAAA,sBAC7B,YAAW,mBAAc,SAAS,cAAvB,YAAoC;AAAA,oBACjD;AAAA,oBACA,aAAa;AAAA,kBACf;AAEA,wBAAMC,YAAW,UAAU,KAAK;AAGhC,sBAAIA,UAAS,SAAS,UAAU,SAAS,GAAG;AAC1C,+BAAW,QAAQ;AAAA,sBACjB,MAAM;AAAA,sBACN,IAAIA,UAAS;AAAA,sBACb,OAAOA,UAAS,SAAS;AAAA,oBAC3B,CAAC;AAAA,kBACH;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAGA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAS,aAChB,cAAc,SAAS;AAEzB,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,SAAS;AAAA,oBACb,OAAO,cAAc,SAAS;AAAA,kBAChC,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAGA,gBAAI,OAAO,iBAAiB,MAAM;AAChC,6BAAe;AAAA,gBACb,SAAS,gCAAgC,OAAO,aAAa;AAAA,gBAC7D,KAAK,OAAO;AAAA,cACd;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAChB,gBAAI,qBAAqB,MAAM;AAC7B,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,cACN,CAAC;AAAA,YACH;AAEA,gBAAI,YAAY;AACd,yBAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,IAAI,CAAC;AAAA,YAClD;AAIA,uBAAW,YAAY,WAAW;AAChC,kBAAI,CAAC,SAAS,aAAa;AACzB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI,SAAS;AAAA,gBACf,CAAC;AAED,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,YAAY,SAAS;AAAA,kBACrB,UAAU,SAAS,SAAS;AAAA,kBAC5B,OAAO,SAAS,SAAS;AAAA,gBAC3B,CAAC;AACD,yBAAS,cAAc;AAAA,cACzB;AAAA,YACF;AAEA,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO,oBAAoB,KAAK;AAAA,YAClC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE;AAAA,MACtC,UAAU,EAAE,SAAS,gBAAgB;AAAA,IACvC;AAAA,EACF;AACF;AAMA,IAAM,qBAAqBC,GAAE,OAAO;AAAA,EAClC,eAAeA,GAAE,OAAO;AAAA,EACxB,mBAAmBA,GAAE,OAAO;AAAA,EAC5B,cAAcA,GAAE,OAAO;AAAA,EACvB,uBAAuBA,GACpB,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAClC,6BAA6BA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAClD,CAAC,EACA,QAAQ;AAAA,EACX,2BAA2BA,GACxB,OAAO;AAAA,IACN,kBAAkBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,CAAC,EACA,QAAQ;AACb,CAAC;AAED,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EACzC,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,OAAO;AAAA,QAChB,MAAMA,GAAE,QAAQ,WAAW,EAAE,QAAQ;AAAA,QACrC,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,QACtC,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,IAAIA,GAAE,OAAO;AAAA,YACb,MAAMA,GAAE,QAAQ,UAAU;AAAA,YAC1B,UAAUA,GAAE,OAAO;AAAA,cACjB,MAAMA,GAAE,OAAO;AAAA,cACf,WAAWA,GAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAClC,OAAOA,GAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,OAAO,mBAAmB,QAAQ;AACpC,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,QACd,MAAMA,GAAE,KAAK,CAAC,WAAW,CAAC,EAAE,QAAQ;AAAA,QACpC,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,QACtC,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA;AAAA,YAC1B,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,MAAMA,GAAE,QAAQ,UAAU,EAAE,QAAQ;AAAA,YACpC,UAAUA,GACP,OAAO;AAAA,cACN,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,cACzB,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,YAChC,CAAC,EACA,QAAQ;AAAA,UACb,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAClC,OAAOA,GAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,OAAO,mBAAmB,QAAQ;AAAA;AACpC,CAAC;;;AM3kBD;AAAA,EACE;AAAA,EACA,iCAAAC;AAAA,OAEK;AACP;AAAA,EACE,kBAAAC;AAAA,EACA,kCAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,iBAAAC;AAAA,OACK;AACP,SAAS,KAAAC,UAAS;;;ACZlB,SAAS,KAAAC,UAAS;AAOX,IAAM,+BAA+BA,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,UAAUA,GAAE,KAAK,CAAC,SAAS,UAAU,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjD,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/B,YAAYA,GAAE,KAAK,CAAC,SAAS,UAAU,cAAc,CAAC,EAAE,SAAS;AACnE,CAAC;;;ADRD,IAAM,wCAAwCC,gCAA+B;AAAA,EAC3E,aAAaC,GAAE,OAAO;AAAA,IACpB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,SAASA,GAAE,OAAO;AAAA,IAClB,YAAYA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACjC,CAAC;AAAA,EACD,gBAAgB,UAAQ,KAAK;AAC/B,CAAC;AAEM,IAAM,wBAAN,MAAwD;AAAA,EAQ7D,YAAY,SAAkC,QAAuB;AAPrE,SAAS,uBAAuB;AAEhC,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AAK/B,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AACA,QAAI,OAAO,SAAS,KAAK,sBAAsB;AAC7C,YAAM,IAAI,mCAAmC;AAAA,QAC3C,UAAU,KAAK;AAAA,QACf,SAAS,KAAK;AAAA,QACd,sBAAsB,KAAK;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,iBAAiB,MAAMC,sBAAqB;AAAA,MAChD,UAAU;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAGD,SAAI,iDAAgB,gBAAe,UAAU;AAC3C,YAAM,IAAIC,+BAA8B;AAAA,QACtC,eAAe;AAAA,QACf,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF,IAAI,MAAMC,eAAc;AAAA,MACtB,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,OAAO;AAAA,MACtD,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ,OAAO;AAAA,UACL,OAAO;AAAA,QACT;AAAA,QACA,YAAY;AAAA,UACV,WAAW,iDAAgB;AAAA,UAC3B,WAAW,iDAAgB;AAAA,UAC3B,aAAa,iDAAgB;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,mBAAmB,SAAS,OAAO,WAAW;AAAA,MAClD,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE;AAAA,IAC7B;AACA,UAAM,mBAAmB,iBACtB;AAAA,MAAI,UACH,KAAK,oBAAoB,OACrB,SACA;AAAA,QACE,WAAW,KAAK;AAAA,QAChB,iBAAiB,KAAK;AAAA,MACxB;AAAA,IACN,EACC,OAAO,UAAQ,QAAQ,IAAI;AAE9B,WAAO;AAAA,MACL,UAAU,CAAC;AAAA,MACX,YAAY,iBAAiB,IAAI,UAAQ,KAAK,SAAS;AAAA,MACvD,OAAO,SAAS,QACZ,EAAE,QAAQ,SAAS,MAAM,aAAa,IACtC;AAAA,MACJ,kBACE,iBAAiB,SAAS,IACtB;AAAA,QACE,SAAS;AAAA,UACP;AAAA,QACF;AAAA,MACF,IACA;AAAA,MACN,UAAU,EAAE,SAAS,iBAAiB,MAAM,SAAS;AAAA,IACvD;AAAA,EACF;AACF;AAEA,IAAM,4CAA4CL,GAAE,OAAO;AAAA,EACzD,OAAOA,GAAE,OAAO;AAAA,EAChB,OAAOA,GAAE,OAAO;AAAA,EAChB,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAC5B,CAAC;AAED,IAAM,qCAAqCA,GAAE,OAAO;AAAA,EAClD,QAAQA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE;AAAA,MACZA,GAAE,OAAO;AAAA,QACP,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,QAC7B,YAAYA,GAAE,OAAO;AAAA,QACrB,kBAAkBA,GACf,MAAM,yCAAyC,EAC/C,QAAQ;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACD,OAAOA,GACJ,OAAO;AAAA,IACN,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC,EACA,QAAQ;AACb,CAAC;;;AEhKD;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE,kBAAAM;AAAA,EACA;AAAA,EACA;AAAA,EACA,kCAAAC;AAAA,EACA,6BAAAC;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA,wBAAAC;AAAA,EACA,iBAAAC;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAAC,UAAS;AA8ClB,IAAM,iCAAiC;AAAA,EAAW,MAChD;AAAA,IACEA,GACG,OAAO;AAAA,MACN,gBAAgBA,GAAE,OAAO,EAAE,QAAQ;AAAA,MACnC,UAAUA,GAAE,OAAO,EAAE,QAAQ;AAAA,MAC7B,cAAcA,GAAE,QAAQ,EAAE,QAAQ;AAAA,MAClC,UAAUA,GAAE,KAAK,CAAC,UAAU,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC9C,WAAWA,GAAE,QAAQ,EAAE,QAAQ;AAAA,MAC/B,OAAOA,GAAE,QAAQ,EAAE,QAAQ;AAAA,MAC3B,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC3C,OAAOA,GACJ;AAAA,QACCA,GAAE,OAAO;AAAA,UACP,MAAMA,GAAE,KAAK;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UACD,KAAKA,GAAE,OAAO;AAAA,UACd,gBAAgBA,GAAE,OAAO,EAAE,QAAQ;AAAA,QACrC,CAAC;AAAA,MACH,EACC,QAAQ;AAAA,MACX,OAAOA,GAAE,KAAK,CAAC,QAAQ,QAAQ,OAAO,OAAO,KAAK,CAAC,EAAE,QAAQ;AAAA,MAC7D,gBAAgBA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;AAAA,MAC9C,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;AAAA,IAC/C,CAAC,EACA,YAAY;AAAA,EACjB;AACF;AAaA,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EACvC,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACzB,SAASA,GAAE,OAAO;AAAA,EAClB,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;AAED,IAAM,oCAAoCJ,gCAA+B;AAAA,EACvE,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B,CAAC;AAED,IAAM,+BAA+BI,GAAE,OAAO;AAAA,EAC5C,QAAQA,GACL,OAAO;AAAA,IACN,aAAaA,GAAE,OAAO;AAAA,IACtB,SAASA,GAAE,OAAO;AAAA,EACpB,CAAC,EACA,QAAQ;AAAA,EACX,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;AAED,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EAC5C,QAAQA,GACL,OAAO;AAAA,IACN,SAASA,GAAE,OAAO;AAAA,IAClB,aAAaA,GAAE,OAAO;AAAA,IACtB,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC9B,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAChC,gBAAgBA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACnC,UAAUA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC7B,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAChC,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAClC,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC9B,CAAC,EACA,QAAQ;AAAA,EACX,OAAOA,GACJ,OAAO;AAAA,IACN,UAAUA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC7B,uBAAuBA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC1C,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACvB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC3B,CAAC,EACA,QAAQ;AAAA,EACX,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;AAMD,SAAS,WAAW,SAAwC;AAC1D,MAAI,QAAQ,SAAS,MAAM,EAAG,QAAO;AACrC,MAAI,QAAQ,SAAS,MAAM,EAAG,QAAO;AACrC,SAAO;AACT;AAKA,SAAS,aAAa,SAA0B;AAC9C,SAAO,QAAQ,WAAW,QAAQ;AACpC;AAGA,IAAM,oBAA4C;AAAA,EAChD,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACb;AAEA,IAAM,kBAAkB,oBAAI,IAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO,KAAK,CAAC;AAErE,SAAS,0BACP,YACoB;AACpB,QAAM,CAAC,OAAO,MAAM,IAAI,WAAW,MAAM,GAAG,EAAE,IAAI,MAAM;AACxD,MACE,CAAC,OAAO,UAAU,KAAK,KACvB,CAAC,OAAO,UAAU,MAAM,KACxB,SAAS,KACT,UAAU,GACV;AACA,WAAO;AAAA,EACT;AACA,MAAI,IAAI;AACR,MAAI,IAAI;AACR,SAAO,MAAM,GAAG;AACd,KAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAAA,EACpB;AACA,QAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,SAAS,CAAC;AACxC,SAAO,gBAAgB,IAAI,KAAK,IAAI,QAAQ;AAC9C;AAEA,SAAS,kBAAkB,MAA6C;AACtE,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,KAAK;AAAA,EACd;AACA,SAAO,OAAO,KAAK,SAAS,WACxB,KAAK,OACL,0BAA0B,KAAK,IAAI;AACzC;AAEA,SAAS,mBACP,SAC2C;AAlO7C;AAmOE,UAAO,mBAAQ,gBAAR,mBAAqB,KAAK,WAAS,MAAM,cAAc,mBAAvD,mBACH;AACN;AAEA,SAAS,kBACP,SAC2C;AAzO7C;AA0OE,UAAO,wBAAmB,OAAO,MAA1B,YAA+B,QAAQ;AAChD;AAEA,SAAS,WAAW,KAAsB;AACxC,SAAO,uBAAuB,KAAK,GAAG;AACxC;AAGA,SAAS,aACP,SACA,gBACA,UAC4C;AAtP9C;AAuPE,OAAI,iDAAgB,UAAS,QAAQ,eAAe,MAAM,SAAS,GAAG;AACpE,WAAO,eAAe,MAAM,IAAI,WAAS;AAAA,MACvC,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,GAAI,KAAK,kBAAkB,OACvB,EAAE,iBAAiB,KAAK,eAAe,IACvC,CAAC;AAAA,IACP,EAAE;AAAA,EACJ;AAEA,QAAM,QAAwC,CAAC;AAE/C,aAAW,cAAa,aAAQ,oBAAR,YAA2B,CAAC,GAAG;AACrD,QAAI,UAAU,SAAS,OAAO;AAC5B,YAAM,KAAK;AAAA,QACT,MAAM,WAAW,UAAU,GAAG,IAAI,oBAAoB;AAAA,QACtD,KAAK,UAAU;AAAA,MACjB,CAAC;AAAA,IACH,WAAW,UAAU,UAAU,WAAW,QAAQ,GAAG;AACnD,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,KAAK,+BAA+B,SAAS;AAAA,MAC/C,CAAC;AAAA,IACH,OAAO;AACL,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,aAAa,mBAAmB,OAAO;AAC7C,MAAI,cAAc,MAAM;AACtB,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,KAAK,+BAA+B,UAAU;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAEA,SAAS,qBACP,SACA,gBACA,UACsB;AAxSxB;AAySE,MAAI,QAAQ,eAAe,QAAQ,QAAQ,YAAY,SAAS,GAAG;AACjE,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,mBAAmB,QAAQ,QAAQ,gBAAgB,SAAS,GAAG;AACzE,UAAM,OAAiB,CAAC;AAExB,eAAW,aAAa,QAAQ,iBAAiB;AAC/C,UAAI,UAAU,SAAS,OAAO;AAC5B,aAAK,KAAK,UAAU,GAAG;AAAA,MACzB,OAAO;AACL,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QAEJ,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,KAAK,SAAS,IAAI,OAAO;AAAA,EAClC;AAEA,UAAO,sDAAgB,kBAAhB,YAAiC;AAC1C;AAEO,IAAM,oBAAN,MAA6D;AAAA,EAQlE,YACW,SACQ,QACjB;AAFS;AACQ;AATnB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAAA,EASzB;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAM,WACJ,SACuE;AAnV3E;AAoVI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,WAA8B,CAAC;AACrC,UAAM,OAAO,WAAW,KAAK,OAAO;AAEpC,UAAM,iBAAkB,MAAMF,sBAAqB;AAAA,MACjD,UAAU;AAAA,MACV,iBAAiB,QAAQ;AAAA,MACzB,QAAQ;AAAA,IACV,CAAC;AAGD,UAAM,QAAiC,CAAC;AAExC,QAAI,QAAQ,UAAU,MAAM;AAC1B,YAAM,SAAS,QAAQ;AAAA,IACzB;AAEA,SAAI,iDAAgB,mBAAkB,MAAM;AAC1C,YAAM,kBAAkB,eAAe;AAAA,IACzC;AAEA,SAAI,iDAAgB,aAAY,MAAM;AACpC,YAAM,YAAY,eAAe;AAAA,IACnC;AAEA,UAAM,aAAa,kBAAkB,OAAO;AAC5C,UAAM,QAAQ,aAAa,KAAK,OAAO;AAEvC,UAAM,gBAAgB,SAAS,SAAS;AAGxC,QAAI,SAAS,SAAS,cAAc,MAAM;AACxC,YAAM,UAAU,kBAAkB,UAAU;AAAA,IAC9C;AAGA,QAAI,SAAS,OAAO;AAClB,UAAI,OAAO;AAET,cAAM,QAAQ,aAAa,SAAS,gBAAgB,QAAQ;AAC5D,YAAI,SAAS,MAAM;AACjB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF,OAAO;AAEL,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,YAAI,iBAAiB,QAAQ,cAAc,SAAS,GAAG;AACrD,gBAAM,iBAAiB;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAY,mBAAQ,gBAAR,mBAAqB;AAAA,MACrC,WAAS,MAAM,cAAc;AAAA,UADb,mBAEf;AAEH,QAAI,aAAa,MAAM;AACrB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAEA,QACE,QAAQ,mBAAmB,QAC3B,QAAQ,gBAAgB,SAAS,KACjC,SAAS,OACT;AACA,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MAEJ,CAAC;AAAA,IACH;AAGA,UAAM,aAAsC,CAAC;AAE7C,QAAI,QAAQ,YAAY,MAAM;AAC5B,iBAAW,WAAW,QAAQ;AAAA,IAChC;AAEA,QAAI,QAAQ,QAAQ,MAAM;AACxB,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAGA,QAAI,QAAQ,cAAc,MAAM;AAC9B,UAAI,SAAS,SAAS,OAAO;AAE3B,cAAM,iBACJ,kBAAkB,QAAQ,UAAU,KAAK,QAAQ;AACnD,YAAI,SAAS,mBAAmB,UAAU,mBAAmB,SAAS;AACpE,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SACE,0EACgC,QAAQ,UAAU;AAAA,UACtD,CAAC;AAAA,QACH,OAAO;AACL,qBAAW,aAAa;AAAA,QAC1B;AAAA,MACF,OAAO;AAGL,mBAAW,OAAO,QAAQ,WAAW,QAAQ,KAAK,GAAG;AAAA,MACvD;AAAA,IACF;AAGA,QAAI,eAAe;AACjB,YAAM,SACJ,4DAAgB,UAAhB,YACA,QAAQ,gBADR,YAEC,QAAQ,cAAc,OACnB,0BAA0B,QAAQ,UAAU,IAC5C;AACN,UAAI,SAAS,MAAM;AACjB,mBAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAGA,SAAI,iDAAgB,iBAAgB,MAAM;AACxC,iBAAW,gBAAgB,eAAe;AAAA,IAC5C;AACA,SAAI,iDAAgB,aAAY,MAAM;AACpC,UAAI,OAAO;AAET,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QAEJ,CAAC;AAAA,MACH,OAAO;AACL,mBAAW,YAAY,eAAe;AAAA,MACxC;AAAA,IACF;AACA,SAAI,iDAAgB,cAAa,MAAM;AACrC,iBAAW,YAAY,eAAe;AAAA,IACxC;AACA,UAAM,SAAQ,aAAQ,kBAAR,YAAyB,iDAAgB;AACvD,QAAI,SAAS,MAAM;AACjB,UAAI,OAAO;AAET,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SACE;AAAA,QAEJ,CAAC;AAAA,MACH,OAAO;AACL,mBAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAGA,QAAI,QAAQ,eAAe,CAAC,eAAe;AACzC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,KAAK;AACf,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,KAAK,QAAQ,QAAQ,IAAI,GAAG;AACtC,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAGA,UAAM,EAAE,OAAO,eAAe,IAAI,MAAMC,eAAc;AAAA,MACpD,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAASJ;AAAA,QACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,QACjC,QAAQ;AAAA,QACR;AAAA,UACE,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,2BAA2BE;AAAA,QACzB;AAAA,MACF;AAAA,MACA,uBAAuB;AAAA,MACvB,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,UAAS,oBAAe,WAAf,mBAAuB;AACtC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,mDAAmD,KAAK,UAAU,cAAc,CAAC;AAAA,MAC5F,CAAC;AAAA,IACH;AAGA,UAAM,kBAAiB,sDAAgB,mBAAhB,YAAkC;AACzD,UAAM,iBAAgB,sDAAgB,kBAAhB,YAAiC;AACvD,UAAM,YAAY,KAAK,IAAI;AAC3B,QAAI;AACJ,QAAI;AAEJ,WAAO,MAAM;AACX,YAAM,MAAM,gBAAgB,EAAE,aAAa,QAAQ,YAAY,CAAC;AAEhE,UAAI,KAAK,IAAI,IAAI,YAAY,eAAe;AAC1C,cAAM,IAAI,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,oCAAoC,aAAa;AAAA,QAC5D,CAAC;AAAA,MACH;AAEA,YAAM,EAAE,OAAO,gBAAgB,iBAAiB,YAAY,IAC1D,MAAM,WAAW;AAAA,QACf,KAAK,GAAG,KAAK,OAAO,OAAO,iBAAiB,MAAM;AAAA,QAClD,SAASF;AAAA,UACP,MAAM,QAAQ,KAAK,OAAO,OAAO;AAAA,UACjC,QAAQ;AAAA,QACV;AAAA,QACA,2BAA2BE;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuB;AAAA,QACvB,aAAa,QAAQ;AAAA,QACrB,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAEH,wBAAkB;AAClB,YAAM,cAAa,oBAAe,WAAf,mBAAuB;AAE1C,UAAI,eAAe,aAAa;AAC9B,wBAAgB;AAChB;AAAA,MACF;AAEA,UAAI,eAAe,YAAY,eAAe,YAAY;AACxD,cAAM,IAAI,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,oBAAoB,WAAW,YAAY,CAAC,cAAc,MAAM,MAAK,0BAAe,WAAf,mBAAuB,YAAvB,YAAkC,EAAE;AAAA,QACpH,CAAC;AAAA,MACH;AAAA,IAGF;AAEA,UAAM,YAAW,oDAAe,WAAf,mBAAuB;AACxC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,sCAAsC,MAAM;AAAA,MACvD,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,kBAAkB;AAAA,QAChB,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA,KAAI,oDAAe,WAAf,mBAAuB,iBACvB,EAAE,cAAc,cAAc,OAAO,cAAc,IACnD,CAAC;AAAA,UACL,IAAI,+CAAe,SACf;AAAA,YACE,OAAO;AAAA,cACL,UAAU,cAAc,MAAM;AAAA,cAC9B,qBACE,cAAc,MAAM;AAAA,cACtB,YAAY,cAAc,MAAM;AAAA,cAChC,MAAM,cAAc,MAAM;AAAA,YAC5B;AAAA,UACF,IACA,CAAC;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACjpBO,IAAM,UACX,OACI,WACA;;;AVuHC,SAAS,cACd,UAAmC,CAAC,GACnB;AA9HnB;AA+HE,QAAM,WACJ,0BAAqB,QAAQ,OAAO,MAApC,YACA;AAEF,QAAM,gBACJ,0BAAqB,QAAQ,YAAY,MAAzC,YACA;AAEF,QAAM,oBACJ,0BAAqB,QAAQ,gBAAgB,MAA7C,YACA;AAEF,QAAM,aAAa,MACjB;AAAA,IACE;AAAA,MACE,eAAe,UAAU,WAAW;AAAA,QAClC,QAAQ,QAAQ;AAAA,QAChB,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,MACF,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,kBAAkB,OAAO;AAAA,EAC3B;AAEF,QAAM,sBAAsB,CAAC,YAA6B;AAxJ5D,QAAAI;AAyJI,eAAI,qBAAqB,SAAS;AAAA,MAChC,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,eAAcA,MAAA,QAAQ,iBAAR,OAAAA,MAAwB;AAAA,IACxC,CAAC;AAAA;AAEH,QAAM,uBAAuB,CAAC,YAC5B,IAAI,sBAAsB,SAAS;AAAA,IACjC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,mBAAmB,CAAC,YACxB,IAAI,kBAAkB,SAAS;AAAA,IAC7B,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAA6B;AACtD,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAEA,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,YAAY;AACrB,WAAS,YAAY;AACrB,WAAS,iBAAiB;AAC1B,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAC9B,WAAS,QAAQ;AACjB,WAAS,aAAa;AAEtB,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAEO,IAAM,UAAU,cAAc;","names":["z","z","_a","alibaba","toolCall","z","UnsupportedFunctionalityError","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","createJsonErrorResponseHandler","z","parseProviderOptions","UnsupportedFunctionalityError","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","_a"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/alibaba",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.37",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@ai-sdk/openai-compatible": "2.0.
|
|
29
|
-
"@ai-sdk/provider": "3.0.
|
|
30
|
-
"@ai-sdk/provider-utils": "4.0.
|
|
28
|
+
"@ai-sdk/openai-compatible": "2.0.59",
|
|
29
|
+
"@ai-sdk/provider": "3.0.14",
|
|
30
|
+
"@ai-sdk/provider-utils": "4.0.38"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "20.17.24",
|
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
createEventSourceResponseHandler,
|
|
20
20
|
createJsonResponseHandler,
|
|
21
21
|
generateId,
|
|
22
|
-
isParsableJson,
|
|
23
22
|
parseProviderOptions,
|
|
24
23
|
postJsonToApi,
|
|
25
24
|
type ParseResult,
|
|
@@ -426,23 +425,6 @@ export class AlibabaLanguageModel implements LanguageModelV3 {
|
|
|
426
425
|
});
|
|
427
426
|
}
|
|
428
427
|
|
|
429
|
-
// Check if already complete (some providers send full tool call at once)
|
|
430
|
-
if (isParsableJson(toolCall.function.arguments)) {
|
|
431
|
-
controller.enqueue({
|
|
432
|
-
type: 'tool-input-end',
|
|
433
|
-
id: toolCall.id,
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
controller.enqueue({
|
|
437
|
-
type: 'tool-call',
|
|
438
|
-
toolCallId: toolCall.id,
|
|
439
|
-
toolName: toolCall.function.name,
|
|
440
|
-
input: toolCall.function.arguments,
|
|
441
|
-
});
|
|
442
|
-
|
|
443
|
-
toolCall.hasFinished = true;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
428
|
continue;
|
|
447
429
|
}
|
|
448
430
|
|
|
@@ -464,23 +446,6 @@ export class AlibabaLanguageModel implements LanguageModelV3 {
|
|
|
464
446
|
delta: toolCallDelta.function.arguments,
|
|
465
447
|
});
|
|
466
448
|
}
|
|
467
|
-
|
|
468
|
-
// Check if tool call is now complete
|
|
469
|
-
if (isParsableJson(toolCall.function.arguments)) {
|
|
470
|
-
controller.enqueue({
|
|
471
|
-
type: 'tool-input-end',
|
|
472
|
-
id: toolCall.id,
|
|
473
|
-
});
|
|
474
|
-
|
|
475
|
-
controller.enqueue({
|
|
476
|
-
type: 'tool-call',
|
|
477
|
-
toolCallId: toolCall.id,
|
|
478
|
-
toolName: toolCall.function.name,
|
|
479
|
-
input: toolCall.function.arguments,
|
|
480
|
-
});
|
|
481
|
-
|
|
482
|
-
toolCall.hasFinished = true;
|
|
483
|
-
}
|
|
484
449
|
}
|
|
485
450
|
}
|
|
486
451
|
|
|
@@ -505,6 +470,25 @@ export class AlibabaLanguageModel implements LanguageModelV3 {
|
|
|
505
470
|
controller.enqueue({ type: 'text-end', id: '0' });
|
|
506
471
|
}
|
|
507
472
|
|
|
473
|
+
// Finalize any unfinished tool calls on stream end to
|
|
474
|
+
// prevent premature execution from parsable partial JSON.
|
|
475
|
+
for (const toolCall of toolCalls) {
|
|
476
|
+
if (!toolCall.hasFinished) {
|
|
477
|
+
controller.enqueue({
|
|
478
|
+
type: 'tool-input-end',
|
|
479
|
+
id: toolCall.id,
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
controller.enqueue({
|
|
483
|
+
type: 'tool-call',
|
|
484
|
+
toolCallId: toolCall.id,
|
|
485
|
+
toolName: toolCall.function.name,
|
|
486
|
+
input: toolCall.function.arguments,
|
|
487
|
+
});
|
|
488
|
+
toolCall.hasFinished = true;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
508
492
|
controller.enqueue({
|
|
509
493
|
type: 'finish',
|
|
510
494
|
finishReason,
|
|
@@ -167,7 +167,7 @@ export function convertToAlibabaChatMessages({
|
|
|
167
167
|
contentValue = output.value;
|
|
168
168
|
break;
|
|
169
169
|
case 'execution-denied':
|
|
170
|
-
contentValue = output.reason ?? 'Tool execution denied.';
|
|
170
|
+
contentValue = output.reason ?? 'Tool call execution denied.';
|
|
171
171
|
break;
|
|
172
172
|
case 'content':
|
|
173
173
|
case 'json':
|