@untiny/qwen-ai-provider 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/qwen-provider.ts","../src/chat/qwen-chat-language-model.ts","../src/qwen-error.ts","../src/get-response-metadata.ts","../src/map-qwen-finish-reason.ts","../src/chat/convert-qwen-chat-usage.ts","../src/chat/convert-to-qwen-chat-messages.ts","../src/chat/qwen-chat-api.ts","../src/chat/qwen-chat-prepare-tools.ts","../src/completion/qwen-completion-language-model.ts","../src/completion/convert-qwen-completion-usage.ts","../src/completion/convert-to-qwen-completion-prompt.ts","../src/completion/qwen-completion-api.ts","../src/embedding/qwen-embedding-model.ts","../src/embedding/qwen-embedding-api.ts","../src/embedding/qwen-embedding-options.ts","../src/version.ts"],"sourcesContent":["import { EmbeddingModelV3, ImageModelV3, LanguageModelV3, NoSuchModelError, ProviderV3 } from '@ai-sdk/provider'\nimport { FetchFunction, loadApiKey, VERSION, withoutTrailingSlash, withUserAgentSuffix } from '@ai-sdk/provider-utils'\nimport { QwenChatLanguageModel } from './chat/qwen-chat-language-model'\nimport { QwenChatModeId } from './chat/qwen-chat-options'\nimport { QwenCompletionLanguageModel } from './completion/qwen-completion-language-model'\nimport { QwenCompletionModelId } from './completion/qwen-completion-options'\nimport { QwenEmbeddingModel } from './embedding/qwen-embedding-model'\nimport { QwenEmbeddingModelId } from './embedding/qwen-embedding-options'\n\nexport interface QwenProvider extends ProviderV3 {\n (modelId: QwenChatModeId): LanguageModelV3\n\n /**\n * 创建文本生成模型。\n * @param modelId 用于文本生成的模型 ID。\n */\n languageModel(modelId: QwenChatModeId): LanguageModelV3\n\n /**\n * 创建文本生成模型。\n * @param modelId 用于文本生成的模型 ID。\n */\n chat(modelId: QwenChatModeId): LanguageModelV3\n\n completion(modelId: QwenCompletionModelId): LanguageModelV3\n\n /**\n * 创建文本嵌入模型。\n * @param modelId 用于文本嵌入的模型 ID。\n */\n embedding(modelId: QwenEmbeddingModelId): EmbeddingModelV3\n\n /**\n * 创建文本嵌入模型。\n * @param modelId 用于文本嵌入的模型 ID。\n */\n embeddingModel: (modelId: QwenEmbeddingModelId) => EmbeddingModelV3\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: QwenEmbeddingModelId): EmbeddingModelV3\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: QwenEmbeddingModelId): EmbeddingModelV3\n\n imageModel(modelId: string): ImageModelV3\n}\n\nexport interface QwenProviderSettings {\n /**\n * 对 API 调用使用不同的 URL 前缀,例如使用代理服务器。\n * 默认前缀是\"https://dashscope.aliyuncs.com/compatible-mode/v1\"。\n */\n baseURL?: string\n\n /**\n * 使用“Authorization”标头发送的 API 密钥。\n * 它默认为“DASHSCOPE_API_KEY”环境变量。\n */\n apiKey?: string\n\n /**\n * 要包含在请求中的自定义标头。\n */\n headers?: Record<string, string>\n\n /**\n * 自定义获取实现。您可以将其用作拦截请求的中间件,或者提供自定义的获取实现,例如测试。\n */\n fetch?: FetchFunction\n}\n\n/** 创建 Qwen AI 提供程序实例。 */\nexport function createQwen(options?: QwenProviderSettings): QwenProvider {\n const baseURL = withoutTrailingSlash(options?.baseURL) ?? 'https://dashscope.aliyuncs.com/compatible-mode/v1'\n\n const getHeaders = () => {\n const apiKey = loadApiKey({\n apiKey: options?.apiKey,\n environmentVariableName: 'DASHSCOPE_API_KEY',\n description: 'Qwen API key',\n })\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${apiKey}`,\n ...options?.headers,\n },\n `ai-sdk/qwen/${VERSION}`,\n )\n }\n\n const createChatModel = (modelId: QwenChatModeId) => {\n return new QwenChatLanguageModel(modelId, {\n provider: 'qwen.chat',\n baseURL,\n headers: getHeaders,\n fetch: options?.fetch,\n url: ({ path }) => `${baseURL}${path}`,\n })\n }\n\n const createCompletionModel = (modelId: QwenCompletionModelId) => {\n return new QwenCompletionLanguageModel(modelId, {\n provider: `qwen.completion`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options?.fetch,\n })\n }\n\n const createEmbeddingModel = (modelId: QwenEmbeddingModelId) => {\n return new QwenEmbeddingModel(modelId, {\n provider: `qwen.embedding`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options?.fetch,\n })\n }\n\n const provider = (modelId: QwenChatModeId) => {\n if (new.target) {\n throw new Error('The Qwen model function cannot be called with the new keyword.')\n }\n\n return createChatModel(modelId)\n }\n\n provider.specificationVersion = 'v3' as const\n provider.languageModel = createChatModel\n provider.chat = createChatModel\n provider.completion = createCompletionModel\n provider.embedding = createEmbeddingModel\n provider.embeddingModel = createEmbeddingModel\n provider.textEmbedding = createEmbeddingModel\n provider.textEmbeddingModel = createEmbeddingModel\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' })\n }\n\n return provider\n}\n\nexport const qwen = createQwen()\n","import {\n InvalidResponseDataError,\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from '@ai-sdk/provider'\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n generateId,\n isParsableJson,\n ParseResult,\n postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { QwenChatModeId } from '@/chat/qwen-chat-options'\nimport { qwenFailedResponseHandler } from '@/qwen-error'\nimport { getResponseMetadata } from '../get-response-metadata'\nimport { mapQwenFinishReason } from '../map-qwen-finish-reason'\nimport { convertQwenChatUsage } from './convert-qwen-chat-usage'\nimport { convertToQwenChatMessages } from './convert-to-qwen-chat-messages'\nimport {\n QwenChatChunk,\n QwenChatRequest,\n QwenChatResponse,\n qwenChatChunkSchema,\n qwenChatResponseSchema,\n} from './qwen-chat-api'\nimport { prepareChatTools } from './qwen-chat-prepare-tools'\n\ntype QwenChatConfig = {\n provider: string\n baseURL: string\n headers: () => Record<string, string | undefined>\n url: (options: { modelId: string; path: string }) => string\n fetch?: FetchFunction\n}\n\nexport class QwenChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3'\n\n readonly modelId: QwenChatModeId\n\n readonly supportedUrls = {\n 'image/*': [/^https?:\\/\\/.*$/],\n }\n\n private readonly config: QwenChatConfig\n\n constructor(modelId: QwenChatModeId, config: QwenChatConfig) {\n this.modelId = modelId\n this.config = config\n }\n\n get provider(): string {\n return this.config.provider\n }\n\n private async getArgs(options: LanguageModelV3CallOptions): Promise<{\n warnings: SharedV3Warning[]\n args: QwenChatRequest\n }> {\n const { messages, warnings } = convertToQwenChatMessages(options)\n\n const args: QwenChatRequest = {\n model: this.modelId,\n messages,\n max_tokens: options.maxOutputTokens,\n temperature: options.temperature,\n stop: options.stopSequences,\n top_p: options.topP,\n top_k: options.topK,\n presence_penalty: options.presencePenalty,\n frequency_penalty: options.frequencyPenalty,\n seed: options.seed,\n }\n\n if (options.responseFormat?.type === 'json') {\n if (options.responseFormat.schema != null) {\n args.response_format = {\n type: 'json_schema',\n json_schema: {\n schema: options.responseFormat.schema,\n name: options.responseFormat.name ?? 'response',\n description: options.responseFormat.description,\n },\n }\n } else {\n args.response_format = { type: 'json_object' }\n }\n }\n\n const { tools, toolChoice, toolWarnings } = prepareChatTools({\n tools: options.tools,\n toolChoice: options.toolChoice,\n })\n args.tools = tools\n args.tool_choice = toolChoice\n warnings.push(...toolWarnings)\n\n return { warnings, args }\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n const { warnings, args: body } = await this.getArgs(options)\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: qwenFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(qwenChatResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n })\n\n const choice = response.choices[0]\n const content: Array<LanguageModelV3Content> = []\n\n // reasoning content (before text):\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 // text content:\n const text = choice.message.content\n if (text != null && text.length > 0) {\n content.push({ type: 'text', text })\n }\n\n // tool calls:\n for (const toolCall of choice.message.tool_calls ?? []) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n })\n }\n\n return {\n content,\n finishReason: {\n unified: mapQwenFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: convertQwenChatUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n providerMetadata: {\n qwen: {},\n },\n }\n }\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n const { warnings, args } = await this.getArgs(options)\n\n const body: QwenChatRequest = {\n ...args,\n stream: true,\n stream_options: {\n include_usage: true,\n },\n }\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: qwenFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(qwenChatChunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n })\n\n const toolCalls: Array<{\n id: string\n type: 'function'\n function: {\n name: string\n arguments: string\n }\n hasFinished: boolean\n }> = []\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n }\n let usage: QwenChatResponse['usage'] | undefined\n let isFirstChunk = true\n let isActiveReasoning = false\n let isActiveText = false\n let textId: string | undefined\n let reasoningId: string | undefined\n\n return {\n stream: response.pipeThrough(\n new TransformStream<ParseResult<QwenChatChunk>, LanguageModelV3StreamPart>({\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 failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined }\n controller.enqueue({ type: 'error', error: chunk.error })\n return\n }\n const value = chunk.value\n\n // handle error chunks:\n if ('object' in value) {\n finishReason = { unified: 'error', raw: undefined }\n controller.enqueue({\n type: 'error',\n error: value.message,\n })\n return\n }\n\n if (isFirstChunk) {\n isFirstChunk = false\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n })\n }\n\n if (value.usage != null) {\n usage = value.usage\n }\n\n const choice = value.choices[0]\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapQwenFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n }\n }\n\n if (choice?.delta == null) {\n return\n }\n\n const delta = choice.delta\n\n // enqueue reasoning before text deltas:\n const reasoningContent = delta.reasoning_content\n if (reasoningContent) {\n if (!isActiveReasoning) {\n reasoningId = generateId()\n controller.enqueue({\n type: 'reasoning-start',\n id: reasoningId as string,\n })\n isActiveReasoning = true\n }\n\n controller.enqueue({\n type: 'reasoning-delta',\n id: reasoningId as string,\n delta: reasoningContent,\n })\n }\n\n if (delta.content) {\n if (!isActiveText) {\n textId = generateId()\n controller.enqueue({ type: 'text-start', id: textId as string })\n isActiveText = true\n }\n\n // end reasoning when text starts:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: reasoningId as string,\n })\n isActiveReasoning = false\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: textId as string,\n delta: delta.content,\n })\n }\n\n if (delta.tool_calls != null) {\n // end reasoning when tool calls start:\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: reasoningId as string,\n })\n isActiveReasoning = false\n }\n\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index\n\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 if (toolCall.function?.name != null && toolCall.function?.arguments != null) {\n // send delta if the argument text has already 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 tool call is complete\n // (some providers send the full tool call in one chunk):\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 ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n })\n toolCall.hasFinished = true\n }\n }\n\n continue\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index]\n\n if (toolCall.hasFinished) {\n continue\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments += toolCallDelta.function?.arguments ?? ''\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n })\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\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 ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n })\n toolCall.hasFinished = true\n }\n }\n }\n },\n\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: 'reasoning-end', id: reasoningId as string })\n }\n\n if (isActiveText) {\n controller.enqueue({ type: 'text-end', id: textId as string })\n }\n\n // go through all tool calls and send the ones that are not finished\n for (const toolCall of toolCalls.filter((toolCall) => !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 ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n })\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertQwenChatUsage(usage),\n providerMetadata: {\n qwen: {},\n },\n })\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n }\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils'\nimport z from 'zod'\n\nexport const qwenErrorDataSchema = z.object({\n object: z.literal('error'),\n message: z.string(),\n type: z.string(),\n param: z.string().nullable(),\n code: z.string().nullable(),\n})\n\nexport type QwenErrorData = z.infer<typeof qwenErrorDataSchema>\n\nexport const qwenFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: qwenErrorDataSchema,\n errorToMessage: (data) => data.message,\n})\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null\n created?: number | undefined | null\n model?: string | undefined | null\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n }\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider'\n\nexport function mapQwenFinishReason(finishReason: string | null | undefined): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n return 'stop'\n case 'length':\n return 'length'\n case 'content_filter':\n return 'content-filter'\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls'\n default:\n return 'other'\n }\n}\n","import { LanguageModelV3Usage } from '@ai-sdk/provider'\nimport { QwenChatResponse } from './qwen-chat-api'\n\nexport function convertQwenChatUsage(usage: QwenChatResponse['usage'] | undefined | null): LanguageModelV3Usage {\n if (!usage) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n }\n }\n\n const promptTokens = usage.prompt_tokens ?? 0\n const completionTokens = usage.completion_tokens ?? 0\n const cachedTokens = usage.prompt_tokens_details?.cached_tokens ?? 0\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cachedTokens,\n cacheRead: cachedTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: undefined,\n reasoning: undefined,\n },\n raw: usage,\n }\n}\n","import {\n LanguageModelV3CallOptions,\n LanguageModelV3FilePart,\n LanguageModelV3ReasoningPart,\n LanguageModelV3TextPart,\n LanguageModelV3ToolApprovalResponsePart,\n LanguageModelV3ToolCallPart,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider'\nimport { convertToBase64 } from '@ai-sdk/provider-utils'\nimport {\n ChatAssistantMessage,\n ChatContent,\n ChatMessage,\n ChatSystemMessage,\n ChatToolMessage,\n ChatUserMessage,\n} from './qwen-chat-api'\n\nfunction contentToAssistantMessage(\n content: Array<\n | LanguageModelV3TextPart\n | LanguageModelV3FilePart\n | LanguageModelV3ReasoningPart\n | LanguageModelV3ToolCallPart\n | LanguageModelV3ToolResultPart\n >,\n): ChatAssistantMessage {\n const message: ChatAssistantMessage = {\n role: 'assistant',\n content: '',\n }\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n message.content += part.text\n break\n }\n case 'tool-call': {\n message.tool_calls ??= []\n message.tool_calls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n index: message.tool_calls.length,\n })\n break\n }\n }\n }\n return message\n}\n\nfunction contentToSystemMessage(content: string): ChatSystemMessage {\n return { role: 'system', content }\n}\n\nfunction contentToToolMessage(\n content: Array<LanguageModelV3ToolResultPart | LanguageModelV3ToolApprovalResponsePart>,\n): ChatToolMessage[] {\n const messages: ChatToolMessage[] = []\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue\n }\n const output = toolResponse.output\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: contentValue,\n })\n }\n return messages\n}\n\nfunction contentToUserMessage(content: Array<LanguageModelV3TextPart | LanguageModelV3FilePart>): ChatUserMessage {\n if (content.length === 1 && content[0].type === 'text') {\n return {\n role: 'user',\n content: content[0].text,\n }\n }\n\n const contents: ChatContent = []\n for (const part of content) {\n if (part.type === 'text') {\n contents.push({ type: 'text', text: part.text })\n } else if (part.mediaType.startsWith('image/')) {\n const data: string = part.data instanceof URL ? part.data.toString() : convertToBase64(part.data)\n const url = data.startsWith('http') || data.startsWith('data:') ? data : `data:${part.mediaType};base64,${data}`\n contents.push({\n type: 'image_url',\n image_url: { url },\n })\n } else if (part.mediaType.startsWith('audio/')) {\n const data: string = part.data instanceof URL ? part.data.toString() : convertToBase64(part.data)\n const url = data.startsWith('http') || data.startsWith('data:') ? data : `data:${part.mediaType};base64,${data}`\n switch (part.mediaType) {\n case 'audio/wav': {\n contents.push({\n type: 'input_audio',\n input_audio: {\n data: url,\n format: 'wav',\n },\n })\n break\n }\n case 'audio/mp3':\n case 'audio/mpeg': {\n contents.push({\n type: 'input_audio',\n input_audio: {\n data: url,\n format: 'mp3',\n },\n })\n break\n }\n\n default: {\n throw new UnsupportedFunctionalityError({\n functionality: `audio content parts with media type ${part.mediaType}`,\n })\n }\n }\n } else {\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n })\n }\n }\n return {\n role: 'user',\n content: contents,\n }\n}\n\nexport function convertToQwenChatMessages<T extends Pick<LanguageModelV3CallOptions, 'prompt'>>(\n options: T,\n): {\n messages: ChatMessage[]\n warnings: SharedV3Warning[]\n} {\n const messages: ChatMessage[] = []\n const warnings: SharedV3Warning[] = []\n\n for (const { role, content } of options.prompt) {\n switch (role) {\n case 'system': {\n messages.push(contentToSystemMessage(content))\n break\n }\n case 'user': {\n messages.push(contentToUserMessage(content))\n break\n }\n case 'assistant': {\n messages.push(contentToAssistantMessage(content))\n break\n }\n case 'tool': {\n messages.push(...contentToToolMessage(content))\n break\n }\n default: {\n const _exhaustiveCheck: never = role\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`)\n }\n }\n }\n\n return { messages, warnings }\n}\n","import { JSONSchema7 } from '@ai-sdk/provider'\nimport { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils'\nimport z from 'zod'\nimport { qwenErrorDataSchema } from '@/qwen-error'\n\nexport interface ChatTextContent {\n type: 'text'\n text: string\n}\n\nexport interface ChatImageUrlContent {\n type: 'image_url'\n image_url: {\n url: string\n }\n}\n\nexport interface ChatInputAudioContent {\n type: 'input_audio'\n input_audio: {\n data: string\n format: 'mp3' | 'wav' | (string & {})\n }\n}\n\nexport type ChatContent = string | Array<ChatTextContent | ChatImageUrlContent | ChatInputAudioContent> | null\n\nexport interface ChatSystemMessage {\n role: 'system'\n content: string\n}\n\nexport interface ChatUserMessage {\n role: 'user'\n content: ChatContent\n}\n\nexport interface ChatAssistantMessage {\n role: 'assistant'\n content?: string | null | undefined\n partial?: boolean\n tool_calls?: Array<ChatAssistantToolCall>\n}\n\nexport interface ChatAssistantToolCall {\n id: string\n type: 'function'\n index: number\n function: {\n name: string\n arguments: string\n }\n}\n\nexport interface ChatToolMessage {\n role: 'tool'\n content: string\n tool_call_id: string\n}\n\nexport type ChatMessage = ChatSystemMessage | ChatUserMessage | ChatAssistantMessage | ChatToolMessage\n\nexport type ChatToolChoice = 'none' | 'auto' | 'required' | { type: 'function'; function: { name: string } }\n\nexport interface ChatToolFunction {\n /** 工具名称 */\n name: string\n /** 工具描述信息,帮助模型判断何时以及如何调用该工具 */\n description: string\n /** 工具的参数描述,需要是一个合法的JSON Schema */\n parameters: JSONSchema7\n /** 是否开启严格模式,开启后模型将严格按照参数描述调用工具,不允许返回不符合参数描述的结果 */\n strict?: boolean\n}\n\nexport interface ChatTool {\n type: 'function'\n function: ChatToolFunction\n}\n\nexport interface ChatStreamOptions {\n /** 是否在响应的最后一个数据块包含Token消耗信息 */\n include_usage: boolean\n}\n\nexport interface ChatResponseTextFormat {\n /** 响应文本格式 */\n type: 'text'\n}\n\nexport interface ChatResponseJsonObjectFormat {\n /** 响应JSON对象格式 */\n type: 'json_object'\n}\n\nexport interface ChatResponseJsonSchemaFormat {\n /** 响应JSON Schema格式 */\n type: 'json_schema'\n json_schema: {\n name?: string\n description?: string\n schema?: JSONSchema7\n }\n}\n\nexport type ChatResponseFormat = ChatResponseTextFormat | ChatResponseJsonObjectFormat | ChatResponseJsonSchemaFormat\n\nexport interface QwenChatRequest {\n model: string\n messages: Array<ChatMessage>\n /** 是否以流式输出方式回复 */\n stream?: boolean | undefined\n /** 流式输出的配置项 */\n stream_options?: ChatStreamOptions | undefined\n /** 最大输出 */\n max_tokens?: number | undefined\n temperature?: number | undefined\n stop?: Array<string> | undefined\n top_p?: number | undefined\n top_k?: number | undefined\n presence_penalty?: number | undefined\n frequency_penalty?: number | undefined\n response_format?: ChatResponseFormat | undefined\n seed?: number | undefined\n tools?: Array<ChatTool> | undefined\n tool_choice?: ChatToolChoice | undefined\n}\n\nexport const qwenChatUsageSchema = z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n prompt_tokens_details: z\n .object({\n cached_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish()\n\nexport const qwenChatResponseSchema = lazySchema(() =>\n zodSchema(\n 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 finish_reason: z.string().nullish(),\n index: z.number(),\n message: z.object({\n role: z.literal('assistant').nullish(),\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n tool_calls: z.array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n ),\n }),\n }),\n ),\n usage: qwenChatUsageSchema,\n }),\n ),\n)\nexport type QwenChatResponse = InferSchema<typeof qwenChatResponseSchema>\n\nexport const qwenChatChunkSchema = lazySchema(() =>\n zodSchema(\n z.union([\n 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(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: qwenChatUsageSchema,\n }),\n qwenErrorDataSchema,\n ]),\n ),\n)\nexport type QwenChatChunk = InferSchema<typeof qwenChatChunkSchema>\n","import { LanguageModelV3CallOptions, SharedV3Warning, UnsupportedFunctionalityError } from '@ai-sdk/provider'\nimport { ChatTool, ChatToolChoice } from './qwen-chat-api'\n\nexport function prepareChatTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools']\n toolChoice?: LanguageModelV3CallOptions['toolChoice']\n}): {\n tools?: ChatTool[]\n toolChoice?: ChatToolChoice\n toolWarnings: Array<SharedV3Warning>\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined\n\n const toolWarnings: SharedV3Warning[] = []\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings }\n }\n\n const chatTools: ChatTool[] = []\n\n for (const tool of tools) {\n if (tool.type === 'function') {\n chatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description ?? '',\n parameters: tool.inputSchema,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n },\n })\n } else {\n toolWarnings.push({\n type: 'unsupported',\n feature: `tool type: ${tool.type}`,\n })\n }\n }\n\n if (toolChoice == null) {\n return { tools: chatTools, toolChoice: undefined, toolWarnings }\n }\n\n const type = toolChoice.type\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: chatTools, toolChoice: type, toolWarnings }\n case 'tool':\n return {\n tools: chatTools,\n toolChoice: {\n type: 'function',\n function: {\n name: toolChoice.toolName,\n },\n },\n toolWarnings,\n }\n default: {\n const _exhaustiveCheck: never = type\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n })\n }\n }\n}\n","import {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3ProviderMetadata,\n SharedV3Warning,\n} from '@ai-sdk/provider'\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n ParseResult,\n postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { getResponseMetadata } from '@/get-response-metadata'\nimport { mapQwenFinishReason } from '@/map-qwen-finish-reason'\nimport { qwenFailedResponseHandler } from '../qwen-error'\nimport { convertQwenCompletionUsage } from './convert-qwen-completion-usage'\nimport { convertToQwenCompletionPrompt } from './convert-to-qwen-completion-prompt'\nimport {\n QwenCompletionChunk,\n QwenCompletionRequest,\n QwenCompletionResponse,\n qwenCompletionChunkSchema,\n qwenCompletionResponseSchema,\n} from './qwen-completion-api'\nimport { QwenCompletionModelId } from './qwen-completion-options'\n\ntype QwenCompletionConfig = {\n provider: string\n headers: () => Record<string, string | undefined>\n url: (options: { modelId: string; path: string }) => string\n fetch?: FetchFunction\n}\n\nexport class QwenCompletionLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3'\n\n readonly modelId: QwenCompletionModelId\n\n private readonly config: QwenCompletionConfig\n\n constructor(modelId: QwenCompletionModelId, config: QwenCompletionConfig) {\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 // No URLs are supported for completion models.\n }\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n stopSequences: userStopSequences,\n responseFormat,\n tools,\n toolChoice,\n seed,\n }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = []\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' })\n }\n\n if (tools?.length) {\n warnings.push({ type: 'unsupported', feature: 'tools' })\n }\n\n if (toolChoice != null) {\n warnings.push({ type: 'unsupported', feature: 'toolChoice' })\n }\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported',\n feature: 'responseFormat',\n details: 'JSON response format is not supported.',\n })\n }\n\n const { prompt: completionPrompt, stopSequences } = convertToQwenCompletionPrompt({ prompt })\n\n const stop = [...(stopSequences ?? []), ...(userStopSequences ?? [])]\n\n const args: QwenCompletionRequest = {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n presence_penalty: presencePenalty,\n seed,\n\n // prompt:\n prompt: completionPrompt,\n\n // stop sequences:\n stop: stop.length > 0 ? stop : undefined,\n }\n\n return { args, warnings }\n }\n\n async doGenerate(options: LanguageModelV3CallOptions): 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.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: qwenFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(qwenCompletionResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n })\n\n const choice = response.choices[0]\n\n const providerMetadata: SharedV3ProviderMetadata = { qwen: {} }\n\n return {\n content: [{ type: 'text', text: choice.text }],\n usage: convertQwenCompletionUsage(response.usage),\n finishReason: {\n unified: mapQwenFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n request: { body: args },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n providerMetadata,\n warnings,\n }\n }\n\n async doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs(options)\n\n const body = {\n ...args,\n stream: true,\n\n stream_options: {\n include_usage: true,\n },\n }\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: qwenFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(qwenCompletionChunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n })\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n }\n const providerMetadata: SharedV3ProviderMetadata = { qwen: {} }\n let usage: QwenCompletionResponse['usage'] | undefined\n let isFirstChunk = true\n\n return {\n stream: response.pipeThrough(\n new TransformStream<ParseResult<QwenCompletionChunk>, LanguageModelV3StreamPart>({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings })\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue })\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined }\n controller.enqueue({ type: 'error', error: chunk.error })\n return\n }\n\n const value = chunk.value\n\n // handle error chunks:\n if ('object' in value) {\n finishReason = { unified: 'error', raw: undefined }\n controller.enqueue({ type: 'error', error: value.message })\n return\n }\n\n if (isFirstChunk) {\n isFirstChunk = false\n\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n })\n\n controller.enqueue({ type: 'text-start', id: '0' })\n }\n\n if (value.usage != null) {\n usage = value.usage\n }\n\n const choice = value.choices[0]\n\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapQwenFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n }\n }\n\n if (choice?.text != null && choice.text.length > 0) {\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: choice.text,\n })\n }\n },\n\n flush(controller) {\n if (!isFirstChunk) {\n controller.enqueue({ type: 'text-end', id: '0' })\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n providerMetadata,\n usage: convertQwenCompletionUsage(usage),\n })\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n }\n }\n}\n","import { LanguageModelV3Usage } from '@ai-sdk/provider'\nimport { QwenCompletionResponse } from './qwen-completion-api'\n\nexport function convertQwenCompletionUsage(\n usage: QwenCompletionResponse['usage'] | undefined | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n }\n }\n\n const promptTokens = usage.prompt_tokens ?? 0\n const completionTokens = usage.completion_tokens ?? 0\n\n return {\n inputTokens: {\n total: usage.prompt_tokens ?? undefined,\n noCache: promptTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: usage.completion_tokens ?? undefined,\n text: completionTokens,\n reasoning: undefined,\n },\n raw: usage,\n }\n}\n","import { InvalidPromptError, LanguageModelV3Prompt, UnsupportedFunctionalityError } from '@ai-sdk/provider'\n\nexport function convertToQwenCompletionPrompt({\n prompt,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV3Prompt\n user?: string\n assistant?: string\n}): {\n prompt: string\n stopSequences?: string[]\n} {\n // transform to a chat message format:\n let text = ''\n\n // if first message is a system message, add it to the text:\n if (prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`\n prompt = prompt.slice(1)\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: `Unexpected system message in prompt: ${content}`,\n prompt,\n })\n }\n\n case 'user': {\n const userMessage = content\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .filter(Boolean)\n .join('')\n\n text += `${user}:\\n${userMessage}\\n\\n`\n break\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call messages',\n })\n }\n default: {\n return ''\n }\n }\n })\n .join('')\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`\n break\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool messages',\n })\n }\n\n default: {\n const _exhaustiveCheck: never = role\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`)\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`\n\n return {\n prompt: text,\n stopSequences: [`\\n${user}:`],\n }\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils'\nimport { z } from 'zod'\nimport { ChatStreamOptions } from '@/chat/qwen-chat-api'\nimport { qwenErrorDataSchema } from '../qwen-error'\n\nexport interface QwenCompletionRequest {\n model: string\n prompt: string\n /** 是否以流式输出方式回复 */\n stream?: boolean | undefined\n /** 流式输出的配置项 */\n stream_options?: ChatStreamOptions | undefined\n /** 最大输出 */\n max_tokens?: number | undefined\n temperature?: number | undefined\n stop?: Array<string> | undefined\n top_p?: number | undefined\n presence_penalty?: number | undefined\n seed?: number | undefined\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const qwenCompletionResponseSchema = lazySchema(() =>\n zodSchema(\n 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 text: z.string(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n }),\n ),\n)\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const qwenCompletionChunkSchema = lazySchema(() =>\n zodSchema(\n z.union([\n 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 text: z.string(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n }),\n qwenErrorDataSchema,\n ]),\n ),\n)\n\nexport type QwenCompletionChunk = InferSchema<typeof qwenCompletionChunkSchema>\n\nexport type QwenCompletionResponse = InferSchema<typeof qwenCompletionResponseSchema>\n","import { EmbeddingModelV3, TooManyEmbeddingValuesForCallError } from '@ai-sdk/provider'\nimport {\n combineHeaders,\n createJsonResponseHandler,\n FetchFunction,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { qwenFailedResponseHandler } from '../qwen-error'\nimport { qwenTextEmbeddingResponseSchema } from './qwen-embedding-api'\nimport { QwenEmbeddingModelId, qwenEmbeddingProviderOptions } from './qwen-embedding-options'\n\ninterface QwenEmbeddingConfig {\n provider: string\n url: (options: { modelId: string; path: string }) => string\n headers: () => Record<string, string | undefined>\n fetch?: FetchFunction\n}\n\nexport class QwenEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3'\n readonly modelId: QwenEmbeddingModelId\n readonly maxEmbeddingsPerCall = 2048\n readonly supportsParallelCalls = true\n\n private readonly config: QwenEmbeddingConfig\n\n get provider(): string {\n return this.config.provider\n }\n\n constructor(modelId: QwenEmbeddingModelId, config: QwenEmbeddingConfig) {\n this.modelId = modelId\n this.config = config\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>> {\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 // Parse provider options\n const qwenOptions =\n (await parseProviderOptions({\n provider: 'qwen',\n providerOptions,\n schema: qwenEmbeddingProviderOptions,\n })) ?? {}\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/embeddings',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n input: values,\n encoding_format: 'float',\n dimensions: qwenOptions.dimensions,\n },\n failedResponseHandler: qwenFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(qwenTextEmbeddingResponseSchema),\n abortSignal,\n fetch: this.config.fetch,\n })\n\n return {\n warnings: [],\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage ? { tokens: response.usage.prompt_tokens } : undefined,\n response: { headers: responseHeaders, body: rawValue },\n }\n }\n}\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils'\nimport { z } from 'zod'\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nexport const qwenTextEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n data: z.array(z.object({ embedding: z.array(z.number()) })),\n usage: z.object({ prompt_tokens: z.number() }).nullish(),\n }),\n ),\n)\n\nexport type QwenTextEmbeddingResponse = InferSchema<typeof qwenTextEmbeddingResponseSchema>\n","import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils'\nimport z from 'zod'\n\nexport type QwenEmbeddingModelId = 'text-embedding-v4' | (string & {})\n\nexport const qwenEmbeddingProviderOptions = lazySchema(() =>\n zodSchema(\n z.object({\n /**\nThe number of dimensions the resulting output embeddings should have.\nOnly supported in text-embedding-3 and later models.\n */\n dimensions: z.number().optional(),\n }),\n ),\n)\n\nexport type QwenEmbeddingProviderOptions = InferSchema<typeof qwenEmbeddingProviderOptions>\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","UnsupportedFunctionalityError","toolCall","combineHeaders","createEventSourceResponseHandler","createJsonResponseHandler","postJsonToApi","UnsupportedFunctionalityError","lazySchema","zodSchema","z","lazySchema","zodSchema","z","postJsonToApi","combineHeaders","createJsonResponseHandler","createEventSourceResponseHandler","combineHeaders","createJsonResponseHandler","postJsonToApi","lazySchema","zodSchema","z","lazySchema","zodSchema","z","postJsonToApi","combineHeaders","createJsonResponseHandler","VERSION"]}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@untiny/qwen-ai-provider",
3
+ "version": "0.0.1",
4
+ "description": "Vercel AI Provider v6 for running Qwen AI models",
5
+ "author": "untiny <untiny@ooix.cn>",
6
+ "license": "Apache-2.0",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.mjs",
10
+ "types": "./dist/index.d.ts",
11
+ "files": [
12
+ "dist/**/*",
13
+ "CHANGELOG.md",
14
+ "README.md"
15
+ ],
16
+ "exports": {
17
+ "./package.json": "./package.json",
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.mjs",
21
+ "require": "./dist/index.js"
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "@ai-sdk/provider": "^3.0.0",
26
+ "@ai-sdk/provider-utils": "^4.0.1"
27
+ },
28
+ "devDependencies": {
29
+ "@ai-sdk/test-server": "^1.0.0",
30
+ "@biomejs/biome": "^2.3.10",
31
+ "@types/node": "^20.19.27",
32
+ "del-cli": "^7.0.0",
33
+ "tsup": "^8.5.1",
34
+ "typescript": "^5.9.3",
35
+ "vite-tsconfig-paths": "^6.0.3",
36
+ "vitest": "^4.0.16",
37
+ "zod": "^4.1.8"
38
+ },
39
+ "peerDependencies": {
40
+ "zod": "^3.25.76 || ^4.1.8"
41
+ },
42
+ "engines": {
43
+ "node": ">=22"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "homepage": "https://github.com/untiny/qwen-ai-provider",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/untiny/qwen-ai-provider.git"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/untiny/qwen-ai-provider/issues"
55
+ },
56
+ "keywords": [
57
+ "ai",
58
+ "qwen"
59
+ ],
60
+ "scripts": {
61
+ "build": "pnpm clean && tsup",
62
+ "build:watch": "pnpm clean && tsup --watch",
63
+ "clean": "del-cli dist *.tsbuildinfo",
64
+ "lint": "biome lint --write",
65
+ "type-check": "tsc --build",
66
+ "check": "biome check --write",
67
+ "test": "pnpm test:node && pnpm test:edge",
68
+ "test:update": "pnpm test:node -u",
69
+ "test:watch": "vitest --config vitest.node.config.js",
70
+ "test:edge": "vitest --config vitest.edge.config.js --run",
71
+ "test:node": "vitest --config vitest.node.config.js --run"
72
+ }
73
+ }