@aihubmix/ai-sdk-provider 0.0.6 → 1.0.0
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.d.mts +23 -19
- package/dist/index.d.ts +23 -19
- package/dist/index.js +27 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProviderV3, LanguageModelV3, EmbeddingModelV3, ImageModelV3, TranscriptionModelV3, SpeechModelV3 } from '@ai-sdk/provider';
|
|
2
2
|
import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
|
|
3
3
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
4
|
-
import { OpenAIProviderSettings } from '@ai-sdk/openai';
|
|
5
4
|
|
|
6
|
-
declare const webSearchToolFactory: _ai_sdk_provider_utils.
|
|
5
|
+
declare const webSearchToolFactory: _ai_sdk_provider_utils.ProviderToolFactory<{}, {
|
|
7
6
|
/**
|
|
8
7
|
* Filters for the search.
|
|
9
8
|
*/
|
|
@@ -118,7 +117,7 @@ declare const aihubmixTools: {
|
|
|
118
117
|
* @param ranking - The ranking options to use for the file search.
|
|
119
118
|
* @param filters - The filters to use for the file search.
|
|
120
119
|
*/
|
|
121
|
-
fileSearch: _ai_sdk_provider_utils.
|
|
120
|
+
fileSearch: _ai_sdk_provider_utils.ProviderToolFactoryWithOutputSchema<{}, {
|
|
122
121
|
queries: string[];
|
|
123
122
|
results: null | {
|
|
124
123
|
attributes: Record<string, unknown>;
|
|
@@ -176,7 +175,7 @@ declare const aihubmixTools: {
|
|
|
176
175
|
*
|
|
177
176
|
* @deprecated Use `webSearch` instead.
|
|
178
177
|
*/
|
|
179
|
-
webSearchPreview: _ai_sdk_provider_utils.
|
|
178
|
+
webSearchPreview: _ai_sdk_provider_utils.ProviderToolFactory<{}, {
|
|
180
179
|
searchContextSize?: "low" | "medium" | "high";
|
|
181
180
|
userLocation?: {
|
|
182
181
|
type: "approximate";
|
|
@@ -199,20 +198,25 @@ declare const aihubmixTools: {
|
|
|
199
198
|
webSearch: (args?: Parameters<typeof webSearchToolFactory>[0]) => _ai_sdk_provider_utils.Tool<{}, unknown>;
|
|
200
199
|
};
|
|
201
200
|
|
|
202
|
-
interface
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
interface OpenAIProviderSettings {
|
|
202
|
+
[key: string]: unknown;
|
|
203
|
+
}
|
|
204
|
+
interface AihubmixProvider extends ProviderV3 {
|
|
205
|
+
(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
206
|
+
readonly specificationVersion: 'v3';
|
|
207
|
+
languageModel(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
208
|
+
chat(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
209
|
+
responses(deploymentId: string): LanguageModelV3;
|
|
210
|
+
completion(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
211
|
+
embedding(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
212
|
+
embeddingModel(modelId: string): EmbeddingModelV3;
|
|
213
|
+
image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV3;
|
|
214
|
+
imageModel(modelId: string): ImageModelV3;
|
|
215
|
+
textEmbedding(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
216
|
+
textEmbeddingModel(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
217
|
+
transcription(deploymentId: string): TranscriptionModelV3;
|
|
218
|
+
speech(deploymentId: string): SpeechModelV3;
|
|
219
|
+
speechModel(deploymentId: string): SpeechModelV3;
|
|
216
220
|
tools: typeof aihubmixTools;
|
|
217
221
|
}
|
|
218
222
|
interface AihubmixProviderSettings {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProviderV3, LanguageModelV3, EmbeddingModelV3, ImageModelV3, TranscriptionModelV3, SpeechModelV3 } from '@ai-sdk/provider';
|
|
2
2
|
import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
|
|
3
3
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
4
|
-
import { OpenAIProviderSettings } from '@ai-sdk/openai';
|
|
5
4
|
|
|
6
|
-
declare const webSearchToolFactory: _ai_sdk_provider_utils.
|
|
5
|
+
declare const webSearchToolFactory: _ai_sdk_provider_utils.ProviderToolFactory<{}, {
|
|
7
6
|
/**
|
|
8
7
|
* Filters for the search.
|
|
9
8
|
*/
|
|
@@ -118,7 +117,7 @@ declare const aihubmixTools: {
|
|
|
118
117
|
* @param ranking - The ranking options to use for the file search.
|
|
119
118
|
* @param filters - The filters to use for the file search.
|
|
120
119
|
*/
|
|
121
|
-
fileSearch: _ai_sdk_provider_utils.
|
|
120
|
+
fileSearch: _ai_sdk_provider_utils.ProviderToolFactoryWithOutputSchema<{}, {
|
|
122
121
|
queries: string[];
|
|
123
122
|
results: null | {
|
|
124
123
|
attributes: Record<string, unknown>;
|
|
@@ -176,7 +175,7 @@ declare const aihubmixTools: {
|
|
|
176
175
|
*
|
|
177
176
|
* @deprecated Use `webSearch` instead.
|
|
178
177
|
*/
|
|
179
|
-
webSearchPreview: _ai_sdk_provider_utils.
|
|
178
|
+
webSearchPreview: _ai_sdk_provider_utils.ProviderToolFactory<{}, {
|
|
180
179
|
searchContextSize?: "low" | "medium" | "high";
|
|
181
180
|
userLocation?: {
|
|
182
181
|
type: "approximate";
|
|
@@ -199,20 +198,25 @@ declare const aihubmixTools: {
|
|
|
199
198
|
webSearch: (args?: Parameters<typeof webSearchToolFactory>[0]) => _ai_sdk_provider_utils.Tool<{}, unknown>;
|
|
200
199
|
};
|
|
201
200
|
|
|
202
|
-
interface
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
interface OpenAIProviderSettings {
|
|
202
|
+
[key: string]: unknown;
|
|
203
|
+
}
|
|
204
|
+
interface AihubmixProvider extends ProviderV3 {
|
|
205
|
+
(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
206
|
+
readonly specificationVersion: 'v3';
|
|
207
|
+
languageModel(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
208
|
+
chat(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
209
|
+
responses(deploymentId: string): LanguageModelV3;
|
|
210
|
+
completion(deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV3;
|
|
211
|
+
embedding(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
212
|
+
embeddingModel(modelId: string): EmbeddingModelV3;
|
|
213
|
+
image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV3;
|
|
214
|
+
imageModel(modelId: string): ImageModelV3;
|
|
215
|
+
textEmbedding(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
216
|
+
textEmbeddingModel(deploymentId: string, settings?: OpenAIProviderSettings): EmbeddingModelV3;
|
|
217
|
+
transcription(deploymentId: string): TranscriptionModelV3;
|
|
218
|
+
speech(deploymentId: string): SpeechModelV3;
|
|
219
|
+
speechModel(deploymentId: string): SpeechModelV3;
|
|
216
220
|
tools: typeof aihubmixTools;
|
|
217
221
|
}
|
|
218
222
|
interface AihubmixProviderSettings {
|
package/dist/index.js
CHANGED
|
@@ -54,9 +54,8 @@ var codeInterpreterArgsSchema = import_zod.z.object({
|
|
|
54
54
|
})
|
|
55
55
|
]).optional()
|
|
56
56
|
});
|
|
57
|
-
var codeInterpreterToolFactory = (0, import_provider_utils.
|
|
57
|
+
var codeInterpreterToolFactory = (0, import_provider_utils.createProviderToolFactoryWithOutputSchema)({
|
|
58
58
|
id: "aihubmix.code_interpreter",
|
|
59
|
-
name: "code_interpreter",
|
|
60
59
|
inputSchema: codeInterpreterInputSchema,
|
|
61
60
|
outputSchema: codeInterpreterOutputSchema
|
|
62
61
|
});
|
|
@@ -99,9 +98,8 @@ var fileSearchOutputSchema = import_zod2.z.object({
|
|
|
99
98
|
})
|
|
100
99
|
).nullable()
|
|
101
100
|
});
|
|
102
|
-
var fileSearch = (0, import_provider_utils2.
|
|
101
|
+
var fileSearch = (0, import_provider_utils2.createProviderToolFactoryWithOutputSchema)({
|
|
103
102
|
id: "aihubmix.file_search",
|
|
104
|
-
name: "file_search",
|
|
105
103
|
inputSchema: import_zod2.z.object({}),
|
|
106
104
|
outputSchema: fileSearchOutputSchema
|
|
107
105
|
});
|
|
@@ -126,9 +124,8 @@ var imageGenerationArgsSchema = import_zod3.z.object({
|
|
|
126
124
|
var imageGenerationOutputSchema = import_zod3.z.object({
|
|
127
125
|
result: import_zod3.z.string()
|
|
128
126
|
});
|
|
129
|
-
var imageGenerationToolFactory = (0, import_provider_utils3.
|
|
127
|
+
var imageGenerationToolFactory = (0, import_provider_utils3.createProviderToolFactoryWithOutputSchema)({
|
|
130
128
|
id: "aihubmix.image_generation",
|
|
131
|
-
name: "image_generation",
|
|
132
129
|
inputSchema: import_zod3.z.object({}),
|
|
133
130
|
outputSchema: imageGenerationOutputSchema
|
|
134
131
|
});
|
|
@@ -152,9 +149,8 @@ var webSearchArgsSchema = import_zod4.z.object({
|
|
|
152
149
|
timezone: import_zod4.z.string().optional()
|
|
153
150
|
}).optional()
|
|
154
151
|
});
|
|
155
|
-
var webSearchToolFactory = (0, import_provider_utils4.
|
|
152
|
+
var webSearchToolFactory = (0, import_provider_utils4.createProviderToolFactory)({
|
|
156
153
|
id: "aihubmix.web_search",
|
|
157
|
-
name: "web_search",
|
|
158
154
|
inputSchema: import_zod4.z.object({
|
|
159
155
|
action: import_zod4.z.discriminatedUnion("type", [
|
|
160
156
|
import_zod4.z.object({
|
|
@@ -214,9 +210,8 @@ var webSearchPreviewArgsSchema = import_zod5.z.object({
|
|
|
214
210
|
timezone: import_zod5.z.string().optional()
|
|
215
211
|
}).optional()
|
|
216
212
|
});
|
|
217
|
-
var webSearchPreview = (0, import_provider_utils5.
|
|
213
|
+
var webSearchPreview = (0, import_provider_utils5.createProviderToolFactory)({
|
|
218
214
|
id: "aihubmix.web_search_preview",
|
|
219
|
-
name: "web_search_preview",
|
|
220
215
|
inputSchema: import_zod5.z.object({
|
|
221
216
|
action: import_zod5.z.discriminatedUnion("type", [
|
|
222
217
|
import_zod5.z.object({
|
|
@@ -369,6 +364,9 @@ var AihubmixOpenAIChatLanguageModel = class _AihubmixOpenAIChatLanguageModel ext
|
|
|
369
364
|
delete body.tool_choice;
|
|
370
365
|
options.body = JSON.stringify(body);
|
|
371
366
|
}
|
|
367
|
+
if (body.max_tokens !== void 0) {
|
|
368
|
+
console.log("\u{1F50D} [DEBUG] Request max_tokens:", body.max_tokens);
|
|
369
|
+
}
|
|
372
370
|
} catch (error) {
|
|
373
371
|
}
|
|
374
372
|
}
|
|
@@ -483,7 +481,7 @@ function createAihubmix(options = {}) {
|
|
|
483
481
|
headers: getHeaders,
|
|
484
482
|
fetch: options.fetch
|
|
485
483
|
});
|
|
486
|
-
const
|
|
484
|
+
const providerFn = function(deploymentId, settings) {
|
|
487
485
|
if (new.target) {
|
|
488
486
|
throw new Error(
|
|
489
487
|
"The Aihubmix model function cannot be called with the new keyword."
|
|
@@ -491,20 +489,24 @@ function createAihubmix(options = {}) {
|
|
|
491
489
|
}
|
|
492
490
|
return createChatModel(deploymentId, settings);
|
|
493
491
|
};
|
|
494
|
-
provider
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
492
|
+
const provider = Object.assign(providerFn, {
|
|
493
|
+
specificationVersion: "v3",
|
|
494
|
+
languageModel: createChatModel,
|
|
495
|
+
chat: createChatModel,
|
|
496
|
+
completion: createCompletionModel,
|
|
497
|
+
responses: createResponsesModel,
|
|
498
|
+
embedding: createEmbeddingModel,
|
|
499
|
+
embeddingModel: createEmbeddingModel,
|
|
500
|
+
textEmbedding: createEmbeddingModel,
|
|
501
|
+
textEmbeddingModel: createEmbeddingModel,
|
|
502
|
+
image: createImageModel,
|
|
503
|
+
imageModel: createImageModel,
|
|
504
|
+
transcription: createTranscriptionModel,
|
|
505
|
+
transcriptionModel: createTranscriptionModel,
|
|
506
|
+
speech: createSpeechModel,
|
|
507
|
+
speechModel: createSpeechModel,
|
|
508
|
+
tools: aihubmixTools
|
|
509
|
+
});
|
|
508
510
|
return provider;
|
|
509
511
|
}
|
|
510
512
|
var aihubmix = createAihubmix();
|
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} 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 EmbeddingModelV2,\n LanguageModelV2,\n ProviderV2,\n ImageModelV2,\n TranscriptionModelV2,\n SpeechModelV2,\n TranscriptionModelV2CallOptions,\n} from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { aihubmixTools } from './aihubmix-tools';\n\n// 导入设置类型\nimport type { OpenAIProviderSettings } from '@ai-sdk/openai';\n\n\nexport interface AihubmixProvider extends ProviderV2 {\n (deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV2;\n\n languageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n chat(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n responses(deploymentId: string): LanguageModelV2;\n\n completion(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n embedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV2;\n\n imageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): ImageModelV2;\n\n textEmbedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n textEmbeddingModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n transcription(deploymentId: string): TranscriptionModelV2;\n\n speech(deploymentId: string): SpeechModelV2;\n\n speechModel(deploymentId: string): SpeechModelV2;\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: TranscriptionModelV2CallOptions) {\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 console.log('responses request', deploymentName);\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});\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 });\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 provider = 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.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.completion = createCompletionModel;\n provider.responses = createResponsesModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n provider.tools = aihubmixTools;\n\n return provider as AihubmixProvider;\n}\n\nexport const aihubmix = createAihubmix();\n","import { createProviderDefinedToolFactoryWithOutputSchema } 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 createProviderDefinedToolFactoryWithOutputSchema<\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 name: '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 { createProviderDefinedToolFactoryWithOutputSchema } 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 = createProviderDefinedToolFactoryWithOutputSchema<\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 name: 'file_search',\n inputSchema: z.object({}),\n outputSchema: fileSearchOutputSchema,\n});\n","import { createProviderDefinedToolFactoryWithOutputSchema } 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 createProviderDefinedToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The generated image encoded in base64.\n */\n result: string;\n },\n ImageGenerationArgs\n >({\n id: 'aihubmix.image_generation',\n name: '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 { createProviderDefinedToolFactory } 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 = createProviderDefinedToolFactory<\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 name: '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 { createProviderDefinedToolFactory } 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 = createProviderDefinedToolFactory<\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 name: '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"]}
|
|
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 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 { 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// 自定义 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 // 调试:打印 max_tokens 参数\n if (body.max_tokens !== undefined) {\n console.log('🔍 [DEBUG] Request max_tokens:', body.max_tokens);\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 console.log('responses request', deploymentName);\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});\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 });\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_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod"]}
|
package/dist/index.mjs
CHANGED
|
@@ -13,7 +13,7 @@ import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
|
|
|
13
13
|
import { loadApiKey } from "@ai-sdk/provider-utils";
|
|
14
14
|
|
|
15
15
|
// src/tool/code-interpreter.ts
|
|
16
|
-
import {
|
|
16
|
+
import { createProviderToolFactoryWithOutputSchema } from "@ai-sdk/provider-utils";
|
|
17
17
|
import { z } from "zod";
|
|
18
18
|
var codeInterpreterInputSchema = z.object({
|
|
19
19
|
code: z.string().nullish(),
|
|
@@ -35,9 +35,8 @@ var codeInterpreterArgsSchema = z.object({
|
|
|
35
35
|
})
|
|
36
36
|
]).optional()
|
|
37
37
|
});
|
|
38
|
-
var codeInterpreterToolFactory =
|
|
38
|
+
var codeInterpreterToolFactory = createProviderToolFactoryWithOutputSchema({
|
|
39
39
|
id: "aihubmix.code_interpreter",
|
|
40
|
-
name: "code_interpreter",
|
|
41
40
|
inputSchema: codeInterpreterInputSchema,
|
|
42
41
|
outputSchema: codeInterpreterOutputSchema
|
|
43
42
|
});
|
|
@@ -46,7 +45,7 @@ var codeInterpreter = (args = {}) => {
|
|
|
46
45
|
};
|
|
47
46
|
|
|
48
47
|
// src/tool/file-search.ts
|
|
49
|
-
import {
|
|
48
|
+
import { createProviderToolFactoryWithOutputSchema as createProviderToolFactoryWithOutputSchema2 } from "@ai-sdk/provider-utils";
|
|
50
49
|
import { z as z2 } from "zod";
|
|
51
50
|
var comparisonFilterSchema = z2.object({
|
|
52
51
|
key: z2.string(),
|
|
@@ -80,15 +79,14 @@ var fileSearchOutputSchema = z2.object({
|
|
|
80
79
|
})
|
|
81
80
|
).nullable()
|
|
82
81
|
});
|
|
83
|
-
var fileSearch =
|
|
82
|
+
var fileSearch = createProviderToolFactoryWithOutputSchema2({
|
|
84
83
|
id: "aihubmix.file_search",
|
|
85
|
-
name: "file_search",
|
|
86
84
|
inputSchema: z2.object({}),
|
|
87
85
|
outputSchema: fileSearchOutputSchema
|
|
88
86
|
});
|
|
89
87
|
|
|
90
88
|
// src/tool/image-generation.ts
|
|
91
|
-
import {
|
|
89
|
+
import { createProviderToolFactoryWithOutputSchema as createProviderToolFactoryWithOutputSchema3 } from "@ai-sdk/provider-utils";
|
|
92
90
|
import { z as z3 } from "zod";
|
|
93
91
|
var imageGenerationArgsSchema = z3.object({
|
|
94
92
|
background: z3.enum(["auto", "opaque", "transparent"]).optional(),
|
|
@@ -107,9 +105,8 @@ var imageGenerationArgsSchema = z3.object({
|
|
|
107
105
|
var imageGenerationOutputSchema = z3.object({
|
|
108
106
|
result: z3.string()
|
|
109
107
|
});
|
|
110
|
-
var imageGenerationToolFactory =
|
|
108
|
+
var imageGenerationToolFactory = createProviderToolFactoryWithOutputSchema3({
|
|
111
109
|
id: "aihubmix.image_generation",
|
|
112
|
-
name: "image_generation",
|
|
113
110
|
inputSchema: z3.object({}),
|
|
114
111
|
outputSchema: imageGenerationOutputSchema
|
|
115
112
|
});
|
|
@@ -118,7 +115,7 @@ var imageGeneration = (args = {}) => {
|
|
|
118
115
|
};
|
|
119
116
|
|
|
120
117
|
// src/tool/web-search.ts
|
|
121
|
-
import {
|
|
118
|
+
import { createProviderToolFactory } from "@ai-sdk/provider-utils";
|
|
122
119
|
import { z as z4 } from "zod";
|
|
123
120
|
var webSearchArgsSchema = z4.object({
|
|
124
121
|
filters: z4.object({
|
|
@@ -133,9 +130,8 @@ var webSearchArgsSchema = z4.object({
|
|
|
133
130
|
timezone: z4.string().optional()
|
|
134
131
|
}).optional()
|
|
135
132
|
});
|
|
136
|
-
var webSearchToolFactory =
|
|
133
|
+
var webSearchToolFactory = createProviderToolFactory({
|
|
137
134
|
id: "aihubmix.web_search",
|
|
138
|
-
name: "web_search",
|
|
139
135
|
inputSchema: z4.object({
|
|
140
136
|
action: z4.discriminatedUnion("type", [
|
|
141
137
|
z4.object({
|
|
@@ -159,7 +155,7 @@ var webSearch = (args = {}) => {
|
|
|
159
155
|
};
|
|
160
156
|
|
|
161
157
|
// src/tool/web-search-preview.ts
|
|
162
|
-
import {
|
|
158
|
+
import { createProviderToolFactory as createProviderToolFactory2 } from "@ai-sdk/provider-utils";
|
|
163
159
|
import { z as z5 } from "zod";
|
|
164
160
|
var webSearchPreviewArgsSchema = z5.object({
|
|
165
161
|
/**
|
|
@@ -195,9 +191,8 @@ var webSearchPreviewArgsSchema = z5.object({
|
|
|
195
191
|
timezone: z5.string().optional()
|
|
196
192
|
}).optional()
|
|
197
193
|
});
|
|
198
|
-
var webSearchPreview =
|
|
194
|
+
var webSearchPreview = createProviderToolFactory2({
|
|
199
195
|
id: "aihubmix.web_search_preview",
|
|
200
|
-
name: "web_search_preview",
|
|
201
196
|
inputSchema: z5.object({
|
|
202
197
|
action: z5.discriminatedUnion("type", [
|
|
203
198
|
z5.object({
|
|
@@ -350,6 +345,9 @@ var AihubmixOpenAIChatLanguageModel = class _AihubmixOpenAIChatLanguageModel ext
|
|
|
350
345
|
delete body.tool_choice;
|
|
351
346
|
options.body = JSON.stringify(body);
|
|
352
347
|
}
|
|
348
|
+
if (body.max_tokens !== void 0) {
|
|
349
|
+
console.log("\u{1F50D} [DEBUG] Request max_tokens:", body.max_tokens);
|
|
350
|
+
}
|
|
353
351
|
} catch (error) {
|
|
354
352
|
}
|
|
355
353
|
}
|
|
@@ -464,7 +462,7 @@ function createAihubmix(options = {}) {
|
|
|
464
462
|
headers: getHeaders,
|
|
465
463
|
fetch: options.fetch
|
|
466
464
|
});
|
|
467
|
-
const
|
|
465
|
+
const providerFn = function(deploymentId, settings) {
|
|
468
466
|
if (new.target) {
|
|
469
467
|
throw new Error(
|
|
470
468
|
"The Aihubmix model function cannot be called with the new keyword."
|
|
@@ -472,20 +470,24 @@ function createAihubmix(options = {}) {
|
|
|
472
470
|
}
|
|
473
471
|
return createChatModel(deploymentId, settings);
|
|
474
472
|
};
|
|
475
|
-
provider
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
473
|
+
const provider = Object.assign(providerFn, {
|
|
474
|
+
specificationVersion: "v3",
|
|
475
|
+
languageModel: createChatModel,
|
|
476
|
+
chat: createChatModel,
|
|
477
|
+
completion: createCompletionModel,
|
|
478
|
+
responses: createResponsesModel,
|
|
479
|
+
embedding: createEmbeddingModel,
|
|
480
|
+
embeddingModel: createEmbeddingModel,
|
|
481
|
+
textEmbedding: createEmbeddingModel,
|
|
482
|
+
textEmbeddingModel: createEmbeddingModel,
|
|
483
|
+
image: createImageModel,
|
|
484
|
+
imageModel: createImageModel,
|
|
485
|
+
transcription: createTranscriptionModel,
|
|
486
|
+
transcriptionModel: createTranscriptionModel,
|
|
487
|
+
speech: createSpeechModel,
|
|
488
|
+
speechModel: createSpeechModel,
|
|
489
|
+
tools: aihubmixTools
|
|
490
|
+
});
|
|
489
491
|
return provider;
|
|
490
492
|
}
|
|
491
493
|
var aihubmix = createAihubmix();
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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":["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 EmbeddingModelV2,\n LanguageModelV2,\n ProviderV2,\n ImageModelV2,\n TranscriptionModelV2,\n SpeechModelV2,\n TranscriptionModelV2CallOptions,\n} from '@ai-sdk/provider';\nimport { FetchFunction, loadApiKey } from '@ai-sdk/provider-utils';\nimport { aihubmixTools } from './aihubmix-tools';\n\n// 导入设置类型\nimport type { OpenAIProviderSettings } from '@ai-sdk/openai';\n\n\nexport interface AihubmixProvider extends ProviderV2 {\n (deploymentId: string, settings?: OpenAIProviderSettings): LanguageModelV2;\n\n languageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n chat(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n responses(deploymentId: string): LanguageModelV2;\n\n completion(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): LanguageModelV2;\n\n embedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n image(deploymentId: string, settings?: OpenAIProviderSettings): ImageModelV2;\n\n imageModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): ImageModelV2;\n\n textEmbedding(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n textEmbeddingModel(\n deploymentId: string,\n settings?: OpenAIProviderSettings,\n ): EmbeddingModelV2<string>;\n\n transcription(deploymentId: string): TranscriptionModelV2;\n\n speech(deploymentId: string): SpeechModelV2;\n\n speechModel(deploymentId: string): SpeechModelV2;\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: TranscriptionModelV2CallOptions) {\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 console.log('responses request', deploymentName);\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});\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 });\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 provider = 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.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.completion = createCompletionModel;\n provider.responses = createResponsesModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n\n provider.tools = aihubmixTools;\n\n return provider as AihubmixProvider;\n}\n\nexport const aihubmix = createAihubmix();\n","import { createProviderDefinedToolFactoryWithOutputSchema } 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 createProviderDefinedToolFactoryWithOutputSchema<\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 name: '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 { createProviderDefinedToolFactoryWithOutputSchema } 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 = createProviderDefinedToolFactoryWithOutputSchema<\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 name: 'file_search',\n inputSchema: z.object({}),\n outputSchema: fileSearchOutputSchema,\n});\n","import { createProviderDefinedToolFactoryWithOutputSchema } 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 createProviderDefinedToolFactoryWithOutputSchema<\n {},\n {\n /**\n * The generated image encoded in base64.\n */\n result: string;\n },\n ImageGenerationArgs\n >({\n id: 'aihubmix.image_generation',\n name: '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 { createProviderDefinedToolFactory } 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 = createProviderDefinedToolFactory<\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 name: '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 { createProviderDefinedToolFactory } 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 = createProviderDefinedToolFactory<\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 name: '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":["createProviderDefinedToolFactoryWithOutputSchema","z","createProviderDefinedToolFactoryWithOutputSchema","z","z","createProviderDefinedToolFactory","z"]}
|
|
1
|
+
{"version":3,"sources":["../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":["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 { 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// 自定义 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 // 调试:打印 max_tokens 参数\n if (body.max_tokens !== undefined) {\n console.log('🔍 [DEBUG] Request max_tokens:', body.max_tokens);\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 console.log('responses request', deploymentName);\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});\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 });\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":["createProviderToolFactoryWithOutputSchema","z","createProviderToolFactoryWithOutputSchema","z","z","createProviderToolFactory","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aihubmix/ai-sdk-provider",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@ai-sdk/anthropic": "
|
|
35
|
-
"@ai-sdk/google": "
|
|
36
|
-
"@ai-sdk/openai": "
|
|
37
|
-
"@ai-sdk/provider": "
|
|
38
|
-
"@ai-sdk/provider-utils": "
|
|
34
|
+
"@ai-sdk/anthropic": "^3.0.0",
|
|
35
|
+
"@ai-sdk/google": "^3.0.0",
|
|
36
|
+
"@ai-sdk/openai": "^3.0.0",
|
|
37
|
+
"@ai-sdk/provider": "^3.0.0",
|
|
38
|
+
"@ai-sdk/provider-utils": "^4.0.0",
|
|
39
39
|
"zod": "^4.0.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|