@aihubmix/ai-sdk-provider 2.0.4 → 2.0.6

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/aihubmix-provider.ts","../src/tool/code-interpreter.ts","../src/tool/file-search.ts","../src/tool/image-generation.ts","../src/tool/web-search.ts","../src/tool/web-search-preview.ts","../src/aihubmix-tools.ts"],"sourcesContent":["export { aihubmix, createAihubmix } from './aihubmix-provider';\nexport type {\n AihubmixProvider,\n AihubmixProviderSettings,\n AihubmixChatProviderOptions,\n AihubmixResponsesProviderOptions,\n} from './aihubmix-provider';\nexport {\n aihubmixChatProviderOptionsSchema,\n aihubmixResponsesProviderOptionsSchema,\n} from './aihubmix-provider';\n","import {\n OpenAIChatLanguageModel,\n OpenAICompletionLanguageModel,\n OpenAIEmbeddingModel,\n OpenAIImageModel,\n OpenAIResponsesLanguageModel,\n OpenAITranscriptionModel,\n OpenAISpeechModel,\n} from '@ai-sdk/openai/internal';\nimport { AnthropicMessagesLanguageModel } from '@ai-sdk/anthropic/internal';\nimport { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';\nimport {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n ImageModelV3,\n TranscriptionModelV3,\n SpeechModelV3,\n TranscriptionModelV3CallOptions,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n zodSchema,\n lazySchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { aihubmixTools } from './aihubmix-tools';\n\n/**\n * OpenAI Chat 语言模型的 Provider Options Schema\n * 与 Vercel AI SDK 的 openaiChatLanguageModelOptions 保持一致\n */\nexport const aihubmixChatProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * 修改指定 token 出现在生成内容中的概率\n * 接受一个 JSON 对象,将 token ID(字符串形式)映射到 -100 到 100 之间的偏差值\n */\n logitBias: z.record(z.string(), z.number()).optional(),\n\n /**\n * 返回 token 的对数概率\n * 设置为 true 返回生成 token 的对数概率\n * 设置为数字返回前 n 个 token 的对数概率\n */\n logprobs: z.union([z.boolean(), z.number()]).optional(),\n\n /**\n * 是否启用并行工具调用,默认为 true\n */\n parallelToolCalls: z.boolean().optional(),\n\n /**\n * 代表终端用户的唯一标识符,帮助 OpenAI 监控和检测滥用行为\n */\n user: z.string().optional(),\n\n /**\n * 推理模型的推理强度,默认为 `medium`\n */\n reasoningEffort: z\n .enum(['none', 'minimal', 'low', 'medium', 'high', 'xhigh'])\n .optional(),\n\n /**\n * 生成的最大完成 token 数,适用于推理模型\n */\n maxCompletionTokens: z.number().optional(),\n\n /**\n * 是否在 Responses API 中启用持久化\n */\n store: z.boolean().optional(),\n\n /**\n * 与请求关联的元数据\n */\n metadata: z.record(z.string().max(64), z.string().max(512)).optional(),\n\n /**\n * 预测模式的参数\n */\n prediction: z.record(z.string(), z.any()).optional(),\n\n /**\n * 请求的服务层级\n * - 'auto': 默认服务层级\n * - 'flex': 50% 更便宜但延迟更高(仅限 o3, o4-mini, gpt-5)\n * - 'priority': 更快处理(需要企业版)\n * - 'default': 标准定价和性能\n */\n serviceTier: z.enum(['auto', 'flex', 'priority', 'default']).optional(),\n\n /**\n * 是否使用严格的 JSON schema 验证\n * @default true\n */\n strictJsonSchema: z.boolean().optional(),\n\n /**\n * 控制模型响应的详细程度\n * 较低的值会产生更简洁的响应,较高的值会产生更详细的响应\n */\n textVerbosity: z.enum(['low', 'medium', 'high']).optional(),\n\n /**\n * 提示缓存的缓存键\n */\n promptCacheKey: z.string().optional(),\n\n /**\n * 提示缓存的保留策略\n * - 'in_memory': 默认,标准提示缓存行为\n * - '24h': 扩展提示缓存,保持缓存前缀最多 24 小时\n */\n promptCacheRetention: z.enum(['in_memory', '24h']).optional(),\n\n /**\n * 用于帮助检测违反使用政策用户的稳定标识符\n */\n safetyIdentifier: z.string().optional(),\n\n /**\n * 覆盖此模型的系统消息模式\n * - 'system': 使用 'system' 角色(大多数模型的默认值)\n * - 'developer': 使用 'developer' 角色(推理模型使用)\n * - 'remove': 完全移除系统消息\n */\n systemMessageMode: z.enum(['system', 'developer', 'remove']).optional(),\n\n /**\n * 强制将此模型视为推理模型\n * 适用于自定义 baseURL 的\"隐形\"推理模型\n */\n forceReasoning: z.boolean().optional(),\n }),\n ),\n);\n\n/**\n * OpenAI Responses API 的 Provider Options Schema\n */\nexport const aihubmixResponsesProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * OpenAI 对话的 ID,用于继续对话\n */\n conversation: z.string().nullish(),\n\n /**\n * 响应中包含的额外字段\n */\n include: z\n .array(\n z.enum([\n 'reasoning.encrypted_content',\n 'file_search_call.results',\n 'message.output_text.logprobs',\n ]),\n )\n .nullish(),\n\n /**\n * 模型的指令\n */\n instructions: z.string().nullish(),\n\n /**\n * 返回 token 的对数概率\n */\n logprobs: z\n .union([z.boolean(), z.number().min(1).max(20)])\n .optional(),\n\n /**\n * 内置工具调用的最大总数\n */\n maxToolCalls: z.number().nullish(),\n\n /**\n * 与生成关联的额外元数据\n */\n metadata: z.any().nullish(),\n\n /**\n * 是否使用并行工具调用,默认为 true\n */\n parallelToolCalls: z.boolean().nullish(),\n\n /**\n * 上一个响应的 ID,用于继续对话\n */\n previousResponseId: z.string().nullish(),\n\n /**\n * 提示缓存键\n */\n promptCacheKey: z.string().nullish(),\n\n /**\n * 提示缓存保留策略\n */\n promptCacheRetention: z.enum(['in_memory', '24h']).nullish(),\n\n /**\n * 推理模型的推理强度\n */\n reasoningEffort: z.string().nullish(),\n\n /**\n * 控制推理摘要输出\n */\n reasoningSummary: z.string().nullish(),\n\n /**\n * 安全监控的标识符\n */\n safetyIdentifier: z.string().nullish(),\n\n /**\n * 请求的服务层级\n */\n serviceTier: z.enum(['auto', 'flex', 'priority', 'default']).nullish(),\n\n /**\n * 是否存储生成内容,默认为 true\n */\n store: z.boolean().nullish(),\n\n /**\n * 是否使用严格的 JSON schema 验证\n */\n strictJsonSchema: z.boolean().nullish(),\n\n /**\n * 控制模型响应的详细程度\n */\n textVerbosity: z.enum(['low', 'medium', 'high']).nullish(),\n\n /**\n * 输出截断控制\n */\n truncation: z.enum(['auto', 'disabled']).nullish(),\n\n /**\n * 代表终端用户的唯一标识符\n */\n user: z.string().nullish(),\n\n /**\n * 系统消息模式\n */\n systemMessageMode: z.enum(['system', 'developer', 'remove']).optional(),\n\n /**\n * 强制将模型视为推理模型\n */\n forceReasoning: z.boolean().optional(),\n }),\n ),\n);\n\n// Provider Options 类型推断\nexport type AihubmixChatProviderOptions = InferSchema<\n typeof aihubmixChatProviderOptionsSchema\n>;\n\nexport type AihubmixResponsesProviderOptions = InferSchema<\n typeof aihubmixResponsesProviderOptionsSchema\n>;\n\n// OpenAI Provider 设置类型(保持向后兼容)\ntype OpenAIProviderSettings = AihubmixChatProviderOptions;\n\n\nexport interface AihubmixProvider extends ProviderV3 {\n (deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;\n\n readonly specificationVersion: 'v3';\n\n languageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n chat(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n responses(deploymentId: string): LanguageModelV3;\n\n completion(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n embedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n embeddingModel(modelId: string): EmbeddingModelV3;\n\n image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV3;\n\n imageModel(modelId: string): ImageModelV3;\n\n textEmbedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n textEmbeddingModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n transcription(deploymentId: string): TranscriptionModelV3;\n\n speech(deploymentId: string): SpeechModelV3;\n\n speechModel(deploymentId: string): SpeechModelV3;\n\n tools: typeof aihubmixTools;\n}\nexport interface AihubmixProviderSettings {\n apiKey?: string;\n fetch?: FetchFunction;\n compatibility?: 'strict' | 'compatible';\n}\n\nclass AihubmixTranscriptionModel extends OpenAITranscriptionModel {\n async doGenerate(options: TranscriptionModelV3CallOptions) {\n // 根据MIME类型设置正确的文件扩展名\n if (options.mediaType) {\n const mimeTypeMap: Record<string, string> = {\n 'audio/mpeg': 'mp3',\n 'audio/mp3': 'mp3',\n 'audio/wav': 'wav',\n 'audio/flac': 'flac',\n 'audio/m4a': 'm4a',\n 'audio/mp4': 'mp4',\n 'audio/ogg': 'ogg',\n 'audio/webm': 'webm',\n 'audio/oga': 'oga',\n 'audio/mpga': 'mpga',\n };\n \n const extension = mimeTypeMap[options.mediaType];\n if (extension) {\n // 重写getArgs方法来设置正确的文件名\n const originalGetArgs = (this as any).getArgs;\n (this as any).getArgs = async function(args: any) {\n const result = await originalGetArgs.call(this, args);\n if (result.formData) {\n // 找到file字段并修改文件名\n const fileEntry = result.formData.get('file');\n if (fileEntry && typeof fileEntry === 'object' && 'name' in fileEntry) {\n // 创建新的 File 对象,设置正确的文件名\n try {\n const newFile = new File([fileEntry], `audio.${extension}`, { \n type: options.mediaType \n });\n result.formData.set('file', newFile);\n } catch (error) {\n console.log('Failed to create new File object:', error);\n // 如果创建新 File 对象失败,尝试其他方法\n // 在 Node.js 环境中,可能需要使用 Buffer 或其他方式\n if (fileEntry && typeof fileEntry === 'object' && 'arrayBuffer' in fileEntry) {\n try {\n const arrayBuffer = await (fileEntry as any).arrayBuffer();\n const newFile = new File([arrayBuffer], `audio.${extension}`, { \n type: options.mediaType \n });\n result.formData.set('file', newFile);\n console.log('Created new file from arrayBuffer with name:', `audio.${extension}`);\n } catch (bufferError) {\n console.log('Failed to create file from arrayBuffer:', bufferError);\n }\n }\n }\n }\n }\n return result;\n };\n }\n }\n \n return super.doGenerate(options);\n }\n}\n\n// 自定义 OpenAI 聊天模型类,修复空工具时的 tool_choice 问题\nclass AihubmixOpenAIChatLanguageModel extends OpenAIChatLanguageModel {\n constructor(modelId: string, settings: any) {\n super(modelId, {\n ...settings,\n fetch: AihubmixOpenAIChatLanguageModel.createCustomFetch(settings.fetch),\n });\n }\n\n private static createCustomFetch(originalFetch?: any) {\n return async (url: string, options: any) => {\n // 拦截请求并修复 tool_choice 问题\n if (options?.body) {\n try {\n const body = JSON.parse(options.body);\n if (body.tools && Array.isArray(body.tools) && body.tools.length === 0 && body.tool_choice) {\n delete body.tool_choice;\n options.body = JSON.stringify(body);\n }\n } catch (error) {\n // 如果解析失败,继续使用原始请求\n }\n }\n \n return originalFetch ? originalFetch(url, options) : fetch(url, options);\n };\n }\n}export function createAihubmix(\n options: AihubmixProviderSettings = {},\n): AihubmixProvider {\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AIHUBMIX_API_KEY',\n description: 'Aihubmix',\n })}`,\n 'APP-Code': 'WHVL9885',\n 'Content-Type': 'application/json',\n });\n\n const getTranscriptionHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AIHUBMIX_API_KEY',\n description: 'Aihubmix',\n })}`,\n 'APP-Code': 'WHVL9885',\n });\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseURL = 'https://aihubmix.com/v1';\n return `${baseURL}${path}`;\n };\n\n const createChatModel = (\n deploymentName: string,\n settings: OpenAIProviderSettings = {},\n ) => {\n const headers = getHeaders();\n if (deploymentName.startsWith('claude-')) {\n return new AnthropicMessagesLanguageModel(deploymentName, {\n provider: 'aihubmix.chat',\n baseURL: url({ path: '', modelId: deploymentName }),\n headers: {\n ...headers,\n 'x-api-key': headers['Authorization'].split(' ')[1],\n },\n supportedUrls: () => ({\n 'image/*': [/^https?:\\/\\/.*$/],\n }),\n });\n }\n if (\n (deploymentName.startsWith('gemini') ||\n deploymentName.startsWith('imagen')) &&\n !deploymentName.endsWith('-nothink') &&\n !deploymentName.endsWith('-search')\n ) {\n return new GoogleGenerativeAILanguageModel(\n deploymentName,\n {\n provider: 'aihubmix.chat',\n baseURL: 'https://aihubmix.com/gemini/v1beta',\n headers: {\n ...headers,\n 'x-goog-api-key': headers['Authorization'].split(' ')[1],\n },\n generateId: () => `aihubmix-${Date.now()}`,\n supportedUrls: () => ({}),\n },\n );\n }\n\n if (deploymentName === \"gpt-5-pro\" || deploymentName === \"gpt-5-codex\") {\n\t\t\treturn new OpenAIResponsesLanguageModel(deploymentName, {\n\t\t\t\tprovider: 'aihubmix.chat',\n\t\t\t\turl,\n\t\t\t\theaders: getHeaders,\n\t\t\t\tfetch: options.fetch,\n\t\t\t\tfileIdPrefixes: ['file-'],\n\t\t\t});\n\t\t}\n\n return new AihubmixOpenAIChatLanguageModel(deploymentName, {\n provider: 'aihubmix.chat',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const createCompletionModel = (\n modelId: string,\n settings: any = {},\n ) =>\n new OpenAICompletionLanguageModel(modelId, {\n provider: 'aihubmix.completion',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (\n modelId: string,\n settings: any = {},\n ) => {\n return new OpenAIEmbeddingModel(modelId, {\n provider: 'aihubmix.embeddings',\n headers: getHeaders,\n url,\n fetch: options.fetch,\n });\n };\n\n const createResponsesModel = (modelId: string) =>\n new OpenAIResponsesLanguageModel(modelId, {\n provider: 'aihubmix.responses',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n fileIdPrefixes: ['file-'],\n });\n\n const createImageModel = (\n modelId: string,\n settings: any = {},\n ) => {\n return new OpenAIImageModel(modelId, {\n provider: 'aihubmix.image',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const createTranscriptionModel = (modelId: string) =>\n new AihubmixTranscriptionModel(modelId, {\n provider: 'aihubmix.transcription',\n url,\n headers: getTranscriptionHeaders,\n fetch: options.fetch,\n });\n const createSpeechModel = (modelId: string) =>\n new OpenAISpeechModel(modelId, {\n provider: 'aihubmix.speech',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const providerFn = function (\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Aihubmix model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(deploymentId, settings);\n };\n\n // 创建带有所有必需属性的 provider 对象\n const provider = Object.assign(providerFn, {\n specificationVersion: 'v3' as const,\n languageModel: createChatModel,\n chat: createChatModel,\n completion: createCompletionModel,\n responses: createResponsesModel,\n embedding: createEmbeddingModel,\n embeddingModel: createEmbeddingModel,\n textEmbedding: createEmbeddingModel,\n textEmbeddingModel: createEmbeddingModel,\n image: createImageModel,\n imageModel: createImageModel,\n transcription: createTranscriptionModel,\n transcriptionModel: createTranscriptionModel,\n speech: createSpeechModel,\n speechModel: createSpeechModel,\n tools: aihubmixTools,\n });\n\n return provider as AihubmixProvider;\n}\n\nexport const aihubmix = createAihubmix();\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const codeInterpreterInputSchema = z.object({\n code: z.string().nullish(),\n containerId: z.string(),\n});\n\nexport const codeInterpreterOutputSchema = z.object({\n outputs: z\n .array(\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('logs'), logs: z.string() }),\n z.object({ type: z.literal('image'), url: z.string() }),\n ]),\n )\n .nullish(),\n});\n\nexport const codeInterpreterArgsSchema = z.object({\n container: z\n .union([\n z.string(),\n z.object({\n fileIds: z.array(z.string()).optional(),\n }),\n ])\n .optional(),\n});\n\ntype CodeInterpreterArgs = {\n /**\n * The code interpreter container.\n * Can be a container ID\n * or an object that specifies uploaded file IDs to make available to your code.\n */\n container?: string | { fileIds?: string[] };\n};\n\nexport const codeInterpreterToolFactory =\n createProviderToolFactoryWithOutputSchema<\n {\n /**\n * The code to run, or null if not available.\n */\n code?: string | null;\n\n /**\n * The ID of the container used to run the code.\n */\n containerId: string;\n },\n {\n /**\n * The outputs generated by the code interpreter, such as logs or images.\n * Can be null if no outputs are available.\n */\n outputs?: Array<\n | {\n type: 'logs';\n\n /**\n * The logs output from the code interpreter.\n */\n logs: string;\n }\n | {\n type: 'image';\n\n /**\n * The URL of the image output from the code interpreter.\n */\n url: string;\n }\n > | null;\n },\n CodeInterpreterArgs\n >({\n id: 'aihubmix.code_interpreter',\n inputSchema: codeInterpreterInputSchema,\n outputSchema: codeInterpreterOutputSchema,\n });\n\nexport const codeInterpreter = (\n args: CodeInterpreterArgs = {}, // default\n) => {\n return codeInterpreterToolFactory(args);\n};\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\n/**\n * A filter used to compare a specified attribute key to a given value using a defined comparison operation.\n */\nexport type OpenAIResponsesFileSearchToolComparisonFilter = {\n /**\n * The key to compare against the value.\n */\n key: string;\n\n /**\n * Specifies the comparison operator: eq, ne, gt, gte, lt, lte.\n */\n type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';\n\n /**\n * The value to compare against the attribute key; supports string, number, or boolean types.\n */\n value: string | number | boolean;\n};\n\n/**\n * Combine multiple filters using and or or.\n */\nexport type OpenAIResponsesFileSearchToolCompoundFilter = {\n /**\n * Type of operation: and or or.\n */\n type: 'and' | 'or';\n\n /**\n * Array of filters to combine. Items can be ComparisonFilter or CompoundFilter.\n */\n filters: Array<\n | OpenAIResponsesFileSearchToolComparisonFilter\n | OpenAIResponsesFileSearchToolCompoundFilter\n >;\n};\n\nconst comparisonFilterSchema = z.object({\n key: z.string(),\n type: z.enum(['eq', 'ne', 'gt', 'gte', 'lt', 'lte']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nconst compoundFilterSchema: z.ZodType<any> = z.object({\n type: z.enum(['and', 'or']),\n filters: z.array(\n z.union([comparisonFilterSchema, z.lazy(() => compoundFilterSchema)]),\n ),\n});\n\nexport const fileSearchArgsSchema = z.object({\n vectorStoreIds: z.array(z.string()),\n maxNumResults: z.number().optional(),\n ranking: z\n .object({\n ranker: z.string().optional(),\n scoreThreshold: z.number().optional(),\n })\n .optional(),\n filters: z.union([comparisonFilterSchema, compoundFilterSchema]).optional(),\n});\n\nexport const fileSearchOutputSchema = z.object({\n queries: z.array(z.string()),\n results: z\n .array(\n z.object({\n attributes: z.record(z.string(), z.unknown()),\n fileId: z.string(),\n filename: z.string(),\n score: z.number(),\n text: z.string(),\n }),\n )\n .nullable(),\n});\n\nexport const fileSearch = createProviderToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The search query to execute.\n */\n queries: string[];\n\n /**\n * The results of the file search tool call.\n */\n results:\n | null\n | {\n /**\n * Set of 16 key-value pairs that can be attached to an object.\n * This can be useful for storing additional information about the object\n * in a structured format, and querying for objects via API or the dashboard.\n * Keys are strings with a maximum length of 64 characters.\n * Values are strings with a maximum length of 512 characters, booleans, or numbers.\n */\n attributes: Record<string, unknown>;\n\n /**\n * The unique ID of the file.\n */\n fileId: string;\n\n /**\n * The name of the file.\n */\n filename: string;\n\n /**\n * The relevance score of the file - a value between 0 and 1.\n */\n score: number;\n\n /**\n * The text that was retrieved from the file.\n */\n text: string;\n }[];\n },\n {\n /**\n * List of vector store IDs to search through.\n */\n vectorStoreIds: string[];\n\n /**\n * Maximum number of search results to return. Defaults to 10.\n */\n maxNumResults?: number;\n\n /**\n * Ranking options for the search.\n */\n ranking?: {\n /**\n * The ranker to use for the file search.\n */\n ranker?: string;\n\n /**\n * The score threshold for the file search, a number between 0 and 1.\n * Numbers closer to 1 will attempt to return only the most relevant results,\n * but may return fewer results.\n */\n scoreThreshold?: number;\n };\n\n /**\n * A filter to apply.\n */\n filters?:\n | OpenAIResponsesFileSearchToolComparisonFilter\n | OpenAIResponsesFileSearchToolCompoundFilter;\n }\n>({\n id: 'aihubmix.file_search',\n inputSchema: z.object({}),\n outputSchema: fileSearchOutputSchema,\n});\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const imageGenerationArgsSchema = z\n .object({\n background: z.enum(['auto', 'opaque', 'transparent']).optional(),\n inputFidelity: z.enum(['low', 'high']).optional(),\n inputImageMask: z\n .object({\n fileId: z.string().optional(),\n imageUrl: z.string().optional(),\n })\n .optional(),\n model: z.string().optional(),\n moderation: z.enum(['auto']).optional(),\n outputCompression: z.number().int().min(0).max(100).optional(),\n outputFormat: z.enum(['png', 'jpeg', 'webp']).optional(),\n quality: z.enum(['auto', 'low', 'medium', 'high']).optional(),\n size: z.enum(['1024x1024', '1024x1536', '1536x1024', 'auto']).optional(),\n })\n .strict();\n\nexport const imageGenerationOutputSchema = z.object({\n result: z.string(),\n});\n\ntype ImageGenerationArgs = {\n /**\n * Background type for the generated image. Default is 'auto'.\n */\n background?: 'auto' | 'opaque' | 'transparent';\n\n /**\n * Input fidelity for the generated image. Default is 'low'.\n */\n inputFidelity?: 'low' | 'high';\n\n /**\n * Optional mask for inpainting.\n * Contains image_url (string, optional) and file_id (string, optional).\n */\n inputImageMask?: {\n /**\n * File ID for the mask image.\n */\n fileId?: string;\n\n /**\n * Base64-encoded mask image.\n */\n imageUrl?: string;\n };\n\n /**\n * The image generation model to use. Default: gpt-image-1.\n */\n model?: string;\n\n /**\n * Moderation level for the generated image. Default: auto.\n */\n moderation?: 'auto';\n\n /**\n * Compression level for the output image. Default: 100.\n */\n outputCompression?: number;\n\n /**\n * The output format of the generated image. One of png, webp, or jpeg.\n * Default: png\n */\n outputFormat?: 'png' | 'jpeg' | 'webp';\n\n /**\n * The quality of the generated image.\n * One of low, medium, high, or auto. Default: auto.\n */\n quality?: 'auto' | 'low' | 'medium' | 'high';\n\n /**\n * The size of the generated image.\n * One of 1024x1024, 1024x1536, 1536x1024, or auto.\n * Default: auto.\n */\n size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024';\n};\n\nconst imageGenerationToolFactory =\n createProviderToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The generated image encoded in base64.\n */\n result: string;\n },\n ImageGenerationArgs\n >({\n id: 'aihubmix.image_generation',\n inputSchema: z.object({}),\n outputSchema: imageGenerationOutputSchema,\n });\n\nexport const imageGeneration = (\n args: ImageGenerationArgs = {}, // default\n) => {\n return imageGenerationToolFactory(args);\n};\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const webSearchArgsSchema = z.object({\n filters: z\n .object({\n allowedDomains: z.array(z.string()).optional(),\n })\n .optional(),\n\n searchContextSize: z.enum(['low', 'medium', 'high']).optional(),\n\n userLocation: z\n .object({\n type: z.literal('approximate'),\n country: z.string().optional(),\n city: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n});\n\nexport const webSearchToolFactory = createProviderToolFactory<\n {\n // Web search doesn't take input parameters - it's controlled by the prompt\n },\n {\n /**\n * Filters for the search.\n */\n filters?: {\n /**\n * Allowed domains for the search.\n * If not provided, all domains are allowed.\n * Subdomains of the provided domains are allowed as well.\n */\n allowedDomains?: string[];\n };\n\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize?: 'low' | 'medium' | 'high';\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation?: {\n /**\n * Type of location (always 'approximate')\n */\n type: 'approximate';\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country?: string;\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city?: string;\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region?: string;\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone?: string;\n };\n }\n>({\n id: 'aihubmix.web_search',\n inputSchema: z.object({\n action: z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('search'),\n query: z.string().nullish(),\n }),\n z.object({\n type: z.literal('open_page'),\n url: z.string(),\n }),\n z.object({\n type: z.literal('find'),\n url: z.string(),\n pattern: z.string(),\n }),\n ])\n .nullish(),\n }),\n});\n\nexport const webSearch = (\n args: Parameters<typeof webSearchToolFactory>[0] = {}, // default\n) => {\n return webSearchToolFactory(args);\n};\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\n// Args validation schema\nexport const webSearchPreviewArgsSchema = z.object({\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize: z.enum(['low', 'medium', 'high']).optional(),\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation: z\n .object({\n /**\n * Type of location (always 'approximate')\n */\n type: z.literal('approximate'),\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country: z.string().optional(),\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city: z.string().optional(),\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region: z.string().optional(),\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone: z.string().optional(),\n })\n .optional(),\n});\n\nexport const webSearchPreview = createProviderToolFactory<\n {\n // Web search doesn't take input parameters - it's controlled by the prompt\n },\n {\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize?: 'low' | 'medium' | 'high';\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation?: {\n /**\n * Type of location (always 'approximate')\n */\n type: 'approximate';\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country?: string;\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city?: string;\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region?: string;\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone?: string;\n };\n }\n>({\n id: 'aihubmix.web_search_preview',\n inputSchema: z.object({\n action: z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('search'),\n query: z.string().nullish(),\n }),\n z.object({\n type: z.literal('open_page'),\n url: z.string(),\n }),\n z.object({\n type: z.literal('find'),\n url: z.string(),\n pattern: z.string(),\n }),\n ])\n .nullish(),\n }),\n});\n","import { codeInterpreter } from './tool/code-interpreter';\nimport { fileSearch } from './tool/file-search';\nimport { imageGeneration } from './tool/image-generation';\nimport { webSearch } from './tool/web-search';\nimport { webSearchPreview } from './tool/web-search-preview';\n\nexport const aihubmixTools = {\n /**\n * The Code Interpreter tool allows models to write and run Python code in a\n * sandboxed environment to solve complex problems in domains like data analysis,\n * coding, and math.\n *\n * @param container - The container to use for the code interpreter.\n *\n * Must have name `code_interpreter`.\n */\n codeInterpreter,\n\n /**\n * File search is a tool available in the Responses API. It enables models to\n * retrieve information in a knowledge base of previously uploaded files through\n * semantic and keyword search.\n *\n * Must have name `file_search`.\n *\n * @param vectorStoreIds - The vector store IDs to use for the file search.\n * @param maxNumResults - The maximum number of results to return.\n * @param ranking - The ranking options to use for the file search.\n * @param filters - The filters to use for the file search.\n */\n fileSearch,\n\n /**\n * The image generation tool allows you to generate images using a text prompt,\n * and optionally image inputs. It leverages the GPT Image model,\n * and automatically optimizes text inputs for improved performance.\n *\n * Must have name `image_generation`.\n *\n * @param size - Image dimensions (e.g., 1024x1024, 1024x1536)\n * @param quality - Rendering quality (e.g. low, medium, high)\n * @param format - File output format\n * @param compression - Compression level (0-100%) for JPEG and WebP formats\n * @param background - Transparent or opaque\n */\n imageGeneration,\n\n /**\n * Web search allows models to access up-to-date information from the internet\n * and provide answers with sourced citations.\n *\n * Must have name `web_search_preview`.\n *\n * @param searchContextSize - The search context size to use for the web search.\n * @param userLocation - The user location to use for the web search.\n *\n * @deprecated Use `webSearch` instead.\n */\n webSearchPreview,\n\n /**\n * Web search allows models to access up-to-date information from the internet\n * and provide answers with sourced citations.\n *\n * Must have name `web_search`.\n *\n * @param filters - The filters to use for the web search.\n * @param searchContextSize - The search context size to use for the web search.\n * @param userLocation - The user location to use for the web search.\n */\n webSearch,\n};\n"],"mappings":"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","names":["import_internal","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/aihubmix-provider.ts","../src/tool/code-interpreter.ts","../src/tool/file-search.ts","../src/tool/image-generation.ts","../src/tool/web-search.ts","../src/tool/web-search-preview.ts","../src/aihubmix-tools.ts"],"sourcesContent":["export { aihubmix, createAihubmix } from './aihubmix-provider';\nexport type {\n AihubmixProvider,\n AihubmixProviderSettings,\n} from './aihubmix-provider';\n","import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n OpenAICompatibleImageModel,\n} from '@ai-sdk/openai-compatible';\nimport {\n OpenAIResponsesLanguageModel,\n OpenAITranscriptionModel,\n OpenAISpeechModel,\n} from '@ai-sdk/openai/internal';\nimport { AnthropicMessagesLanguageModel } from '@ai-sdk/anthropic/internal';\nimport { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';\nimport {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n ImageModelV3,\n TranscriptionModelV3,\n SpeechModelV3,\n TranscriptionModelV3CallOptions,\n} from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { aihubmixTools } from './aihubmix-tools';\n\n// OpenAI Provider 设置类型\ninterface OpenAIProviderSettings {\n [key: string]: unknown;\n}\n\n\nexport interface AihubmixProvider extends ProviderV3 {\n (deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;\n\n readonly specificationVersion: 'v3';\n\n languageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n chat(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n responses(deploymentId: string): LanguageModelV3;\n\n completion(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV3;\n\n embedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n embeddingModel(modelId: string): EmbeddingModelV3;\n\n image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV3;\n\n imageModel(modelId: string): ImageModelV3;\n\n textEmbedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n textEmbeddingModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV3;\n\n transcription(deploymentId: string): TranscriptionModelV3;\n\n speech(deploymentId: string): SpeechModelV3;\n\n speechModel(deploymentId: string): SpeechModelV3;\n\n tools: typeof aihubmixTools;\n}\nexport interface AihubmixProviderSettings {\n apiKey?: string;\n fetch?: FetchFunction;\n compatibility?: 'strict' | 'compatible';\n}\n\nclass AihubmixTranscriptionModel extends OpenAITranscriptionModel {\n async doGenerate(options: TranscriptionModelV3CallOptions) {\n // 根据MIME类型设置正确的文件扩展名\n if (options.mediaType) {\n const mimeTypeMap: Record<string, string> = {\n 'audio/mpeg': 'mp3',\n 'audio/mp3': 'mp3',\n 'audio/wav': 'wav',\n 'audio/flac': 'flac',\n 'audio/m4a': 'm4a',\n 'audio/mp4': 'mp4',\n 'audio/ogg': 'ogg',\n 'audio/webm': 'webm',\n 'audio/oga': 'oga',\n 'audio/mpga': 'mpga',\n };\n \n const extension = mimeTypeMap[options.mediaType];\n if (extension) {\n // 重写getArgs方法来设置正确的文件名\n const originalGetArgs = (this as any).getArgs;\n (this as any).getArgs = async function(args: any) {\n const result = await originalGetArgs.call(this, args);\n if (result.formData) {\n // 找到file字段并修改文件名\n const fileEntry = result.formData.get('file');\n if (fileEntry && typeof fileEntry === 'object' && 'name' in fileEntry) {\n // 创建新的 File 对象,设置正确的文件名\n try {\n const newFile = new File([fileEntry], `audio.${extension}`, { \n type: options.mediaType \n });\n result.formData.set('file', newFile);\n } catch (error) {\n console.log('Failed to create new File object:', error);\n // 如果创建新 File 对象失败,尝试其他方法\n // 在 Node.js 环境中,可能需要使用 Buffer 或其他方式\n if (fileEntry && typeof fileEntry === 'object' && 'arrayBuffer' in fileEntry) {\n try {\n const arrayBuffer = await (fileEntry as any).arrayBuffer();\n const newFile = new File([arrayBuffer], `audio.${extension}`, { \n type: options.mediaType \n });\n result.formData.set('file', newFile);\n console.log('Created new file from arrayBuffer with name:', `audio.${extension}`);\n } catch (bufferError) {\n console.log('Failed to create file from arrayBuffer:', bufferError);\n }\n }\n }\n }\n }\n return result;\n };\n }\n }\n \n return super.doGenerate(options);\n }\n}\n\n// 修复空工具时的 tool_choice 问题\nfunction transformRequestBody(body: Record<string, any>): Record<string, any> {\n if (body.tools && Array.isArray(body.tools) && body.tools.length === 0 && body.tool_choice) {\n const { tool_choice, ...rest } = body;\n return rest;\n }\n return body;\n}export function createAihubmix(\n options: AihubmixProviderSettings = {},\n): AihubmixProvider {\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AIHUBMIX_API_KEY',\n description: 'Aihubmix',\n })}`,\n 'APP-Code': 'WHVL9885',\n 'Content-Type': 'application/json',\n });\n\n const getTranscriptionHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'AIHUBMIX_API_KEY',\n description: 'Aihubmix',\n })}`,\n 'APP-Code': 'WHVL9885',\n });\n\n const url = ({ path, modelId }: { path: string; modelId: string }) => {\n const baseURL = 'https://aihubmix.com/v1';\n return `${baseURL}${path}`;\n };\n\n const createChatModel = (\n deploymentName: string,\n settings: OpenAIProviderSettings = {},\n ) => {\n const headers = getHeaders();\n if (deploymentName.startsWith('claude-')) {\n const { Authorization, ...restHeaders } = headers;\n return new AnthropicMessagesLanguageModel(deploymentName, {\n provider: 'aihubmix.chat',\n baseURL: url({ path: '', modelId: deploymentName }),\n headers: {\n ...restHeaders,\n 'x-api-key': Authorization.split(' ')[1],\n },\n supportedUrls: () => ({\n 'image/*': [/^https?:\\/\\/.*$/],\n }),\n });\n }\n if (\n (deploymentName.startsWith('gemini') ||\n deploymentName.startsWith('imagen')) &&\n !deploymentName.endsWith('-nothink') &&\n !deploymentName.endsWith('-search')\n ) {\n const { Authorization, ...restHeaders } = headers;\n return new GoogleGenerativeAILanguageModel(\n deploymentName,\n {\n provider: 'aihubmix.chat',\n baseURL: 'https://aihubmix.com/gemini/v1beta',\n headers: {\n ...restHeaders,\n 'x-goog-api-key': Authorization.split(' ')[1],\n },\n generateId: () => `aihubmix-${Date.now()}`,\n supportedUrls: () => ({}),\n },\n );\n }\n\n return new OpenAICompatibleChatLanguageModel(deploymentName, {\n provider: 'aihubmix.chat',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n supportsStructuredOutputs: true,\n transformRequestBody,\n });\n };\n\n const createCompletionModel = (\n modelId: string,\n settings: any = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, {\n provider: 'aihubmix.completion',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n includeUsage: true,\n });\n\n const createEmbeddingModel = (\n modelId: string,\n settings: any = {},\n ) => {\n return new OpenAICompatibleEmbeddingModel(modelId, {\n provider: 'aihubmix.embeddings',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const createResponsesModel = (modelId: string) =>\n new OpenAIResponsesLanguageModel(modelId, {\n provider: 'aihubmix.responses',\n url,\n headers: getHeaders,\n });\n\n const createImageModel = (\n modelId: string,\n settings: any = {},\n ) => {\n return new OpenAICompatibleImageModel(modelId, {\n provider: 'aihubmix.image',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const createTranscriptionModel = (modelId: string) =>\n new AihubmixTranscriptionModel(modelId, {\n provider: 'aihubmix.transcription',\n url,\n headers: getTranscriptionHeaders,\n fetch: options.fetch,\n });\n const createSpeechModel = (modelId: string) =>\n new OpenAISpeechModel(modelId, {\n provider: 'aihubmix.speech',\n url,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const providerFn = function (\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Aihubmix model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(deploymentId, settings);\n };\n\n // 创建带有所有必需属性的 provider 对象\n const provider = Object.assign(providerFn, {\n specificationVersion: 'v3' as const,\n languageModel: createChatModel,\n chat: createChatModel,\n completion: createCompletionModel,\n responses: createResponsesModel,\n embedding: createEmbeddingModel,\n embeddingModel: createEmbeddingModel,\n textEmbedding: createEmbeddingModel,\n textEmbeddingModel: createEmbeddingModel,\n image: createImageModel,\n imageModel: createImageModel,\n transcription: createTranscriptionModel,\n transcriptionModel: createTranscriptionModel,\n speech: createSpeechModel,\n speechModel: createSpeechModel,\n tools: aihubmixTools,\n });\n\n return provider as AihubmixProvider;\n}\n\nexport const aihubmix = createAihubmix();\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const codeInterpreterInputSchema = z.object({\n code: z.string().nullish(),\n containerId: z.string(),\n});\n\nexport const codeInterpreterOutputSchema = z.object({\n outputs: z\n .array(\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('logs'), logs: z.string() }),\n z.object({ type: z.literal('image'), url: z.string() }),\n ]),\n )\n .nullish(),\n});\n\nexport const codeInterpreterArgsSchema = z.object({\n container: z\n .union([\n z.string(),\n z.object({\n fileIds: z.array(z.string()).optional(),\n }),\n ])\n .optional(),\n});\n\ntype CodeInterpreterArgs = {\n /**\n * The code interpreter container.\n * Can be a container ID\n * or an object that specifies uploaded file IDs to make available to your code.\n */\n container?: string | { fileIds?: string[] };\n};\n\nexport const codeInterpreterToolFactory =\n createProviderToolFactoryWithOutputSchema<\n {\n /**\n * The code to run, or null if not available.\n */\n code?: string | null;\n\n /**\n * The ID of the container used to run the code.\n */\n containerId: string;\n },\n {\n /**\n * The outputs generated by the code interpreter, such as logs or images.\n * Can be null if no outputs are available.\n */\n outputs?: Array<\n | {\n type: 'logs';\n\n /**\n * The logs output from the code interpreter.\n */\n logs: string;\n }\n | {\n type: 'image';\n\n /**\n * The URL of the image output from the code interpreter.\n */\n url: string;\n }\n > | null;\n },\n CodeInterpreterArgs\n >({\n id: 'aihubmix.code_interpreter',\n inputSchema: codeInterpreterInputSchema,\n outputSchema: codeInterpreterOutputSchema,\n });\n\nexport const codeInterpreter = (\n args: CodeInterpreterArgs = {}, // default\n) => {\n return codeInterpreterToolFactory(args);\n};\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\n/**\n * A filter used to compare a specified attribute key to a given value using a defined comparison operation.\n */\nexport type OpenAIResponsesFileSearchToolComparisonFilter = {\n /**\n * The key to compare against the value.\n */\n key: string;\n\n /**\n * Specifies the comparison operator: eq, ne, gt, gte, lt, lte.\n */\n type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';\n\n /**\n * The value to compare against the attribute key; supports string, number, or boolean types.\n */\n value: string | number | boolean;\n};\n\n/**\n * Combine multiple filters using and or or.\n */\nexport type OpenAIResponsesFileSearchToolCompoundFilter = {\n /**\n * Type of operation: and or or.\n */\n type: 'and' | 'or';\n\n /**\n * Array of filters to combine. Items can be ComparisonFilter or CompoundFilter.\n */\n filters: Array<\n | OpenAIResponsesFileSearchToolComparisonFilter\n | OpenAIResponsesFileSearchToolCompoundFilter\n >;\n};\n\nconst comparisonFilterSchema = z.object({\n key: z.string(),\n type: z.enum(['eq', 'ne', 'gt', 'gte', 'lt', 'lte']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nconst compoundFilterSchema: z.ZodType<any> = z.object({\n type: z.enum(['and', 'or']),\n filters: z.array(\n z.union([comparisonFilterSchema, z.lazy(() => compoundFilterSchema)]),\n ),\n});\n\nexport const fileSearchArgsSchema = z.object({\n vectorStoreIds: z.array(z.string()),\n maxNumResults: z.number().optional(),\n ranking: z\n .object({\n ranker: z.string().optional(),\n scoreThreshold: z.number().optional(),\n })\n .optional(),\n filters: z.union([comparisonFilterSchema, compoundFilterSchema]).optional(),\n});\n\nexport const fileSearchOutputSchema = z.object({\n queries: z.array(z.string()),\n results: z\n .array(\n z.object({\n attributes: z.record(z.string(), z.unknown()),\n fileId: z.string(),\n filename: z.string(),\n score: z.number(),\n text: z.string(),\n }),\n )\n .nullable(),\n});\n\nexport const fileSearch = createProviderToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The search query to execute.\n */\n queries: string[];\n\n /**\n * The results of the file search tool call.\n */\n results:\n | null\n | {\n /**\n * Set of 16 key-value pairs that can be attached to an object.\n * This can be useful for storing additional information about the object\n * in a structured format, and querying for objects via API or the dashboard.\n * Keys are strings with a maximum length of 64 characters.\n * Values are strings with a maximum length of 512 characters, booleans, or numbers.\n */\n attributes: Record<string, unknown>;\n\n /**\n * The unique ID of the file.\n */\n fileId: string;\n\n /**\n * The name of the file.\n */\n filename: string;\n\n /**\n * The relevance score of the file - a value between 0 and 1.\n */\n score: number;\n\n /**\n * The text that was retrieved from the file.\n */\n text: string;\n }[];\n },\n {\n /**\n * List of vector store IDs to search through.\n */\n vectorStoreIds: string[];\n\n /**\n * Maximum number of search results to return. Defaults to 10.\n */\n maxNumResults?: number;\n\n /**\n * Ranking options for the search.\n */\n ranking?: {\n /**\n * The ranker to use for the file search.\n */\n ranker?: string;\n\n /**\n * The score threshold for the file search, a number between 0 and 1.\n * Numbers closer to 1 will attempt to return only the most relevant results,\n * but may return fewer results.\n */\n scoreThreshold?: number;\n };\n\n /**\n * A filter to apply.\n */\n filters?:\n | OpenAIResponsesFileSearchToolComparisonFilter\n | OpenAIResponsesFileSearchToolCompoundFilter;\n }\n>({\n id: 'aihubmix.file_search',\n inputSchema: z.object({}),\n outputSchema: fileSearchOutputSchema,\n});\n","import { createProviderToolFactoryWithOutputSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const imageGenerationArgsSchema = z\n .object({\n background: z.enum(['auto', 'opaque', 'transparent']).optional(),\n inputFidelity: z.enum(['low', 'high']).optional(),\n inputImageMask: z\n .object({\n fileId: z.string().optional(),\n imageUrl: z.string().optional(),\n })\n .optional(),\n model: z.string().optional(),\n moderation: z.enum(['auto']).optional(),\n outputCompression: z.number().int().min(0).max(100).optional(),\n outputFormat: z.enum(['png', 'jpeg', 'webp']).optional(),\n quality: z.enum(['auto', 'low', 'medium', 'high']).optional(),\n size: z.enum(['1024x1024', '1024x1536', '1536x1024', 'auto']).optional(),\n })\n .strict();\n\nexport const imageGenerationOutputSchema = z.object({\n result: z.string(),\n});\n\ntype ImageGenerationArgs = {\n /**\n * Background type for the generated image. Default is 'auto'.\n */\n background?: 'auto' | 'opaque' | 'transparent';\n\n /**\n * Input fidelity for the generated image. Default is 'low'.\n */\n inputFidelity?: 'low' | 'high';\n\n /**\n * Optional mask for inpainting.\n * Contains image_url (string, optional) and file_id (string, optional).\n */\n inputImageMask?: {\n /**\n * File ID for the mask image.\n */\n fileId?: string;\n\n /**\n * Base64-encoded mask image.\n */\n imageUrl?: string;\n };\n\n /**\n * The image generation model to use. Default: gpt-image-1.\n */\n model?: string;\n\n /**\n * Moderation level for the generated image. Default: auto.\n */\n moderation?: 'auto';\n\n /**\n * Compression level for the output image. Default: 100.\n */\n outputCompression?: number;\n\n /**\n * The output format of the generated image. One of png, webp, or jpeg.\n * Default: png\n */\n outputFormat?: 'png' | 'jpeg' | 'webp';\n\n /**\n * The quality of the generated image.\n * One of low, medium, high, or auto. Default: auto.\n */\n quality?: 'auto' | 'low' | 'medium' | 'high';\n\n /**\n * The size of the generated image.\n * One of 1024x1024, 1024x1536, 1536x1024, or auto.\n * Default: auto.\n */\n size?: 'auto' | '1024x1024' | '1024x1536' | '1536x1024';\n};\n\nconst imageGenerationToolFactory =\n createProviderToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The generated image encoded in base64.\n */\n result: string;\n },\n ImageGenerationArgs\n >({\n id: 'aihubmix.image_generation',\n inputSchema: z.object({}),\n outputSchema: imageGenerationOutputSchema,\n });\n\nexport const imageGeneration = (\n args: ImageGenerationArgs = {}, // default\n) => {\n return imageGenerationToolFactory(args);\n};\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const webSearchArgsSchema = z.object({\n filters: z\n .object({\n allowedDomains: z.array(z.string()).optional(),\n })\n .optional(),\n\n searchContextSize: z.enum(['low', 'medium', 'high']).optional(),\n\n userLocation: z\n .object({\n type: z.literal('approximate'),\n country: z.string().optional(),\n city: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n});\n\nexport const webSearchToolFactory = createProviderToolFactory<\n {\n // Web search doesn't take input parameters - it's controlled by the prompt\n },\n {\n /**\n * Filters for the search.\n */\n filters?: {\n /**\n * Allowed domains for the search.\n * If not provided, all domains are allowed.\n * Subdomains of the provided domains are allowed as well.\n */\n allowedDomains?: string[];\n };\n\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize?: 'low' | 'medium' | 'high';\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation?: {\n /**\n * Type of location (always 'approximate')\n */\n type: 'approximate';\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country?: string;\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city?: string;\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region?: string;\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone?: string;\n };\n }\n>({\n id: 'aihubmix.web_search',\n inputSchema: z.object({\n action: z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('search'),\n query: z.string().nullish(),\n }),\n z.object({\n type: z.literal('open_page'),\n url: z.string(),\n }),\n z.object({\n type: z.literal('find'),\n url: z.string(),\n pattern: z.string(),\n }),\n ])\n .nullish(),\n }),\n});\n\nexport const webSearch = (\n args: Parameters<typeof webSearchToolFactory>[0] = {}, // default\n) => {\n return webSearchToolFactory(args);\n};\n","import { createProviderToolFactory } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\n// Args validation schema\nexport const webSearchPreviewArgsSchema = z.object({\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize: z.enum(['low', 'medium', 'high']).optional(),\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation: z\n .object({\n /**\n * Type of location (always 'approximate')\n */\n type: z.literal('approximate'),\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country: z.string().optional(),\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city: z.string().optional(),\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region: z.string().optional(),\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone: z.string().optional(),\n })\n .optional(),\n});\n\nexport const webSearchPreview = createProviderToolFactory<\n {\n // Web search doesn't take input parameters - it's controlled by the prompt\n },\n {\n /**\n * Search context size to use for the web search.\n * - high: Most comprehensive context, highest cost, slower response\n * - medium: Balanced context, cost, and latency (default)\n * - low: Least context, lowest cost, fastest response\n */\n searchContextSize?: 'low' | 'medium' | 'high';\n\n /**\n * User location information to provide geographically relevant search results.\n */\n userLocation?: {\n /**\n * Type of location (always 'approximate')\n */\n type: 'approximate';\n /**\n * Two-letter ISO country code (e.g., 'US', 'GB')\n */\n country?: string;\n /**\n * City name (free text, e.g., 'Minneapolis')\n */\n city?: string;\n /**\n * Region name (free text, e.g., 'Minnesota')\n */\n region?: string;\n /**\n * IANA timezone (e.g., 'America/Chicago')\n */\n timezone?: string;\n };\n }\n>({\n id: 'aihubmix.web_search_preview',\n inputSchema: z.object({\n action: z\n .discriminatedUnion('type', [\n z.object({\n type: z.literal('search'),\n query: z.string().nullish(),\n }),\n z.object({\n type: z.literal('open_page'),\n url: z.string(),\n }),\n z.object({\n type: z.literal('find'),\n url: z.string(),\n pattern: z.string(),\n }),\n ])\n .nullish(),\n }),\n});\n","import { codeInterpreter } from './tool/code-interpreter';\nimport { fileSearch } from './tool/file-search';\nimport { imageGeneration } from './tool/image-generation';\nimport { webSearch } from './tool/web-search';\nimport { webSearchPreview } from './tool/web-search-preview';\n\nexport const aihubmixTools = {\n /**\n * The Code Interpreter tool allows models to write and run Python code in a\n * sandboxed environment to solve complex problems in domains like data analysis,\n * coding, and math.\n *\n * @param container - The container to use for the code interpreter.\n *\n * Must have name `code_interpreter`.\n */\n codeInterpreter,\n\n /**\n * File search is a tool available in the Responses API. It enables models to\n * retrieve information in a knowledge base of previously uploaded files through\n * semantic and keyword search.\n *\n * Must have name `file_search`.\n *\n * @param vectorStoreIds - The vector store IDs to use for the file search.\n * @param maxNumResults - The maximum number of results to return.\n * @param ranking - The ranking options to use for the file search.\n * @param filters - The filters to use for the file search.\n */\n fileSearch,\n\n /**\n * The image generation tool allows you to generate images using a text prompt,\n * and optionally image inputs. It leverages the GPT Image model,\n * and automatically optimizes text inputs for improved performance.\n *\n * Must have name `image_generation`.\n *\n * @param size - Image dimensions (e.g., 1024x1024, 1024x1536)\n * @param quality - Rendering quality (e.g. low, medium, high)\n * @param format - File output format\n * @param compression - Compression level (0-100%) for JPEG and WebP formats\n * @param background - Transparent or opaque\n */\n imageGeneration,\n\n /**\n * Web search allows models to access up-to-date information from the internet\n * and provide answers with sourced citations.\n *\n * Must have name `web_search_preview`.\n *\n * @param searchContextSize - The search context size to use for the web search.\n * @param userLocation - The user location to use for the web search.\n *\n * @deprecated Use `webSearch` instead.\n */\n webSearchPreview,\n\n /**\n * Web search allows models to access up-to-date information from the internet\n * and provide answers with sourced citations.\n *\n * Must have name `web_search`.\n *\n * @param filters - The filters to use for the web search.\n * @param searchContextSize - The search context size to use for the web search.\n * @param userLocation - The user location to use for the web search.\n */\n webSearch,\n};\n"],"mappings":"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","names":["import_internal","import_provider_utils","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod"]}
package/dist/index.mjs CHANGED
@@ -1,21 +1,18 @@
1
1
  // src/aihubmix-provider.ts
2
2
  import {
3
- OpenAIChatLanguageModel,
4
- OpenAICompletionLanguageModel,
5
- OpenAIEmbeddingModel,
6
- OpenAIImageModel,
3
+ OpenAICompatibleChatLanguageModel,
4
+ OpenAICompatibleCompletionLanguageModel,
5
+ OpenAICompatibleEmbeddingModel,
6
+ OpenAICompatibleImageModel
7
+ } from "@ai-sdk/openai-compatible";
8
+ import {
7
9
  OpenAIResponsesLanguageModel,
8
10
  OpenAITranscriptionModel,
9
11
  OpenAISpeechModel
10
12
  } from "@ai-sdk/openai/internal";
11
13
  import { AnthropicMessagesLanguageModel } from "@ai-sdk/anthropic/internal";
12
14
  import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
13
- import {
14
- loadApiKey,
15
- zodSchema,
16
- lazySchema
17
- } from "@ai-sdk/provider-utils";
18
- import { z as z6 } from "zod";
15
+ import { loadApiKey } from "@ai-sdk/provider-utils";
19
16
 
20
17
  // src/tool/code-interpreter.ts
21
18
  import { createProviderToolFactoryWithOutputSchema } from "@ai-sdk/provider-utils";
@@ -282,191 +279,6 @@ var aihubmixTools = {
282
279
  };
283
280
 
284
281
  // src/aihubmix-provider.ts
285
- var aihubmixChatProviderOptionsSchema = lazySchema(
286
- () => zodSchema(
287
- z6.object({
288
- /**
289
- * 修改指定 token 出现在生成内容中的概率
290
- * 接受一个 JSON 对象,将 token ID(字符串形式)映射到 -100 到 100 之间的偏差值
291
- */
292
- logitBias: z6.record(z6.string(), z6.number()).optional(),
293
- /**
294
- * 返回 token 的对数概率
295
- * 设置为 true 返回生成 token 的对数概率
296
- * 设置为数字返回前 n 个 token 的对数概率
297
- */
298
- logprobs: z6.union([z6.boolean(), z6.number()]).optional(),
299
- /**
300
- * 是否启用并行工具调用,默认为 true
301
- */
302
- parallelToolCalls: z6.boolean().optional(),
303
- /**
304
- * 代表终端用户的唯一标识符,帮助 OpenAI 监控和检测滥用行为
305
- */
306
- user: z6.string().optional(),
307
- /**
308
- * 推理模型的推理强度,默认为 `medium`
309
- */
310
- reasoningEffort: z6.enum(["none", "minimal", "low", "medium", "high", "xhigh"]).optional(),
311
- /**
312
- * 生成的最大完成 token 数,适用于推理模型
313
- */
314
- maxCompletionTokens: z6.number().optional(),
315
- /**
316
- * 是否在 Responses API 中启用持久化
317
- */
318
- store: z6.boolean().optional(),
319
- /**
320
- * 与请求关联的元数据
321
- */
322
- metadata: z6.record(z6.string().max(64), z6.string().max(512)).optional(),
323
- /**
324
- * 预测模式的参数
325
- */
326
- prediction: z6.record(z6.string(), z6.any()).optional(),
327
- /**
328
- * 请求的服务层级
329
- * - 'auto': 默认服务层级
330
- * - 'flex': 50% 更便宜但延迟更高(仅限 o3, o4-mini, gpt-5)
331
- * - 'priority': 更快处理(需要企业版)
332
- * - 'default': 标准定价和性能
333
- */
334
- serviceTier: z6.enum(["auto", "flex", "priority", "default"]).optional(),
335
- /**
336
- * 是否使用严格的 JSON schema 验证
337
- * @default true
338
- */
339
- strictJsonSchema: z6.boolean().optional(),
340
- /**
341
- * 控制模型响应的详细程度
342
- * 较低的值会产生更简洁的响应,较高的值会产生更详细的响应
343
- */
344
- textVerbosity: z6.enum(["low", "medium", "high"]).optional(),
345
- /**
346
- * 提示缓存的缓存键
347
- */
348
- promptCacheKey: z6.string().optional(),
349
- /**
350
- * 提示缓存的保留策略
351
- * - 'in_memory': 默认,标准提示缓存行为
352
- * - '24h': 扩展提示缓存,保持缓存前缀最多 24 小时
353
- */
354
- promptCacheRetention: z6.enum(["in_memory", "24h"]).optional(),
355
- /**
356
- * 用于帮助检测违反使用政策用户的稳定标识符
357
- */
358
- safetyIdentifier: z6.string().optional(),
359
- /**
360
- * 覆盖此模型的系统消息模式
361
- * - 'system': 使用 'system' 角色(大多数模型的默认值)
362
- * - 'developer': 使用 'developer' 角色(推理模型使用)
363
- * - 'remove': 完全移除系统消息
364
- */
365
- systemMessageMode: z6.enum(["system", "developer", "remove"]).optional(),
366
- /**
367
- * 强制将此模型视为推理模型
368
- * 适用于自定义 baseURL 的"隐形"推理模型
369
- */
370
- forceReasoning: z6.boolean().optional()
371
- })
372
- )
373
- );
374
- var aihubmixResponsesProviderOptionsSchema = lazySchema(
375
- () => zodSchema(
376
- z6.object({
377
- /**
378
- * OpenAI 对话的 ID,用于继续对话
379
- */
380
- conversation: z6.string().nullish(),
381
- /**
382
- * 响应中包含的额外字段
383
- */
384
- include: z6.array(
385
- z6.enum([
386
- "reasoning.encrypted_content",
387
- "file_search_call.results",
388
- "message.output_text.logprobs"
389
- ])
390
- ).nullish(),
391
- /**
392
- * 模型的指令
393
- */
394
- instructions: z6.string().nullish(),
395
- /**
396
- * 返回 token 的对数概率
397
- */
398
- logprobs: z6.union([z6.boolean(), z6.number().min(1).max(20)]).optional(),
399
- /**
400
- * 内置工具调用的最大总数
401
- */
402
- maxToolCalls: z6.number().nullish(),
403
- /**
404
- * 与生成关联的额外元数据
405
- */
406
- metadata: z6.any().nullish(),
407
- /**
408
- * 是否使用并行工具调用,默认为 true
409
- */
410
- parallelToolCalls: z6.boolean().nullish(),
411
- /**
412
- * 上一个响应的 ID,用于继续对话
413
- */
414
- previousResponseId: z6.string().nullish(),
415
- /**
416
- * 提示缓存键
417
- */
418
- promptCacheKey: z6.string().nullish(),
419
- /**
420
- * 提示缓存保留策略
421
- */
422
- promptCacheRetention: z6.enum(["in_memory", "24h"]).nullish(),
423
- /**
424
- * 推理模型的推理强度
425
- */
426
- reasoningEffort: z6.string().nullish(),
427
- /**
428
- * 控制推理摘要输出
429
- */
430
- reasoningSummary: z6.string().nullish(),
431
- /**
432
- * 安全监控的标识符
433
- */
434
- safetyIdentifier: z6.string().nullish(),
435
- /**
436
- * 请求的服务层级
437
- */
438
- serviceTier: z6.enum(["auto", "flex", "priority", "default"]).nullish(),
439
- /**
440
- * 是否存储生成内容,默认为 true
441
- */
442
- store: z6.boolean().nullish(),
443
- /**
444
- * 是否使用严格的 JSON schema 验证
445
- */
446
- strictJsonSchema: z6.boolean().nullish(),
447
- /**
448
- * 控制模型响应的详细程度
449
- */
450
- textVerbosity: z6.enum(["low", "medium", "high"]).nullish(),
451
- /**
452
- * 输出截断控制
453
- */
454
- truncation: z6.enum(["auto", "disabled"]).nullish(),
455
- /**
456
- * 代表终端用户的唯一标识符
457
- */
458
- user: z6.string().nullish(),
459
- /**
460
- * 系统消息模式
461
- */
462
- systemMessageMode: z6.enum(["system", "developer", "remove"]).optional(),
463
- /**
464
- * 强制将模型视为推理模型
465
- */
466
- forceReasoning: z6.boolean().optional()
467
- })
468
- )
469
- );
470
282
  var AihubmixTranscriptionModel = class extends OpenAITranscriptionModel {
471
283
  async doGenerate(options) {
472
284
  if (options.mediaType) {
@@ -519,29 +331,13 @@ var AihubmixTranscriptionModel = class extends OpenAITranscriptionModel {
519
331
  return super.doGenerate(options);
520
332
  }
521
333
  };
522
- var AihubmixOpenAIChatLanguageModel = class _AihubmixOpenAIChatLanguageModel extends OpenAIChatLanguageModel {
523
- constructor(modelId, settings) {
524
- super(modelId, {
525
- ...settings,
526
- fetch: _AihubmixOpenAIChatLanguageModel.createCustomFetch(settings.fetch)
527
- });
528
- }
529
- static createCustomFetch(originalFetch) {
530
- return async (url, options) => {
531
- if (options?.body) {
532
- try {
533
- const body = JSON.parse(options.body);
534
- if (body.tools && Array.isArray(body.tools) && body.tools.length === 0 && body.tool_choice) {
535
- delete body.tool_choice;
536
- options.body = JSON.stringify(body);
537
- }
538
- } catch (error) {
539
- }
540
- }
541
- return originalFetch ? originalFetch(url, options) : fetch(url, options);
542
- };
334
+ function transformRequestBody(body) {
335
+ if (body.tools && Array.isArray(body.tools) && body.tools.length === 0 && body.tool_choice) {
336
+ const { tool_choice, ...rest } = body;
337
+ return rest;
543
338
  }
544
- };
339
+ return body;
340
+ }
545
341
  function createAihubmix(options = {}) {
546
342
  const getHeaders = () => ({
547
343
  Authorization: `Bearer ${loadApiKey({
@@ -567,12 +363,13 @@ function createAihubmix(options = {}) {
567
363
  const createChatModel = (deploymentName, settings = {}) => {
568
364
  const headers = getHeaders();
569
365
  if (deploymentName.startsWith("claude-")) {
366
+ const { Authorization, ...restHeaders } = headers;
570
367
  return new AnthropicMessagesLanguageModel(deploymentName, {
571
368
  provider: "aihubmix.chat",
572
369
  baseURL: url({ path: "", modelId: deploymentName }),
573
370
  headers: {
574
- ...headers,
575
- "x-api-key": headers["Authorization"].split(" ")[1]
371
+ ...restHeaders,
372
+ "x-api-key": Authorization.split(" ")[1]
576
373
  },
577
374
  supportedUrls: () => ({
578
375
  "image/*": [/^https?:\/\/.*$/]
@@ -580,59 +377,53 @@ function createAihubmix(options = {}) {
580
377
  });
581
378
  }
582
379
  if ((deploymentName.startsWith("gemini") || deploymentName.startsWith("imagen")) && !deploymentName.endsWith("-nothink") && !deploymentName.endsWith("-search")) {
380
+ const { Authorization, ...restHeaders } = headers;
583
381
  return new GoogleGenerativeAILanguageModel(
584
382
  deploymentName,
585
383
  {
586
384
  provider: "aihubmix.chat",
587
385
  baseURL: "https://aihubmix.com/gemini/v1beta",
588
386
  headers: {
589
- ...headers,
590
- "x-goog-api-key": headers["Authorization"].split(" ")[1]
387
+ ...restHeaders,
388
+ "x-goog-api-key": Authorization.split(" ")[1]
591
389
  },
592
390
  generateId: () => `aihubmix-${Date.now()}`,
593
391
  supportedUrls: () => ({})
594
392
  }
595
393
  );
596
394
  }
597
- if (deploymentName === "gpt-5-pro" || deploymentName === "gpt-5-codex") {
598
- return new OpenAIResponsesLanguageModel(deploymentName, {
599
- provider: "aihubmix.chat",
600
- url,
601
- headers: getHeaders,
602
- fetch: options.fetch,
603
- fileIdPrefixes: ["file-"]
604
- });
605
- }
606
- return new AihubmixOpenAIChatLanguageModel(deploymentName, {
395
+ return new OpenAICompatibleChatLanguageModel(deploymentName, {
607
396
  provider: "aihubmix.chat",
608
397
  url,
609
398
  headers: getHeaders,
610
- fetch: options.fetch
399
+ fetch: options.fetch,
400
+ includeUsage: true,
401
+ supportsStructuredOutputs: true,
402
+ transformRequestBody
611
403
  });
612
404
  };
613
- const createCompletionModel = (modelId, settings = {}) => new OpenAICompletionLanguageModel(modelId, {
405
+ const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel(modelId, {
614
406
  provider: "aihubmix.completion",
615
407
  url,
616
408
  headers: getHeaders,
617
- fetch: options.fetch
409
+ fetch: options.fetch,
410
+ includeUsage: true
618
411
  });
619
412
  const createEmbeddingModel = (modelId, settings = {}) => {
620
- return new OpenAIEmbeddingModel(modelId, {
413
+ return new OpenAICompatibleEmbeddingModel(modelId, {
621
414
  provider: "aihubmix.embeddings",
622
- headers: getHeaders,
623
415
  url,
416
+ headers: getHeaders,
624
417
  fetch: options.fetch
625
418
  });
626
419
  };
627
420
  const createResponsesModel = (modelId) => new OpenAIResponsesLanguageModel(modelId, {
628
421
  provider: "aihubmix.responses",
629
422
  url,
630
- headers: getHeaders,
631
- fetch: options.fetch,
632
- fileIdPrefixes: ["file-"]
423
+ headers: getHeaders
633
424
  });
634
425
  const createImageModel = (modelId, settings = {}) => {
635
- return new OpenAIImageModel(modelId, {
426
+ return new OpenAICompatibleImageModel(modelId, {
636
427
  provider: "aihubmix.image",
637
428
  url,
638
429
  headers: getHeaders,
@@ -682,8 +473,6 @@ function createAihubmix(options = {}) {
682
473
  var aihubmix = createAihubmix();
683
474
  export {
684
475
  aihubmix,
685
- aihubmixChatProviderOptionsSchema,
686
- aihubmixResponsesProviderOptionsSchema,
687
476
  createAihubmix
688
477
  };
689
478
  //# sourceMappingURL=index.mjs.map