@aihubmix/ai-sdk-provider
Version:
> **🎉 10% discount!** Added app-code; this way, requesting all models through ai-sdk offers a 10% discount.
236 lines (232 loc) • 8.15 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
aihubmix: () => aihubmix,
createAihubmix: () => createAihubmix
});
module.exports = __toCommonJS(index_exports);
// src/aihubmix-provider.ts
var import_internal = require("@ai-sdk/openai/internal");
var import_internal2 = require("@ai-sdk/anthropic/internal");
var import_internal3 = require("@ai-sdk/google/internal");
var import_provider_utils = require("@ai-sdk/provider-utils");
// src/aihubmix-tools.ts
var import_zod = require("zod");
var WebSearchPreviewParameters = import_zod.z.object({});
function webSearchPreviewTool({
searchContextSize,
userLocation
} = {}) {
return {
type: "provider-defined",
id: "aihubmix.web_search_preview",
args: {
searchContextSize,
userLocation
},
parameters: WebSearchPreviewParameters
};
}
var aihubmixTools = {
webSearchPreview: webSearchPreviewTool
};
// src/aihubmix-provider.ts
var AihubmixTranscriptionModel = class extends import_internal.OpenAITranscriptionModel {
async doGenerate(options) {
if (options.mediaType) {
const mimeTypeMap = {
"audio/mpeg": "mp3",
"audio/mp3": "mp3",
"audio/wav": "wav",
"audio/flac": "flac",
"audio/m4a": "m4a",
"audio/mp4": "mp4",
"audio/ogg": "ogg",
"audio/webm": "webm",
"audio/oga": "oga",
"audio/mpga": "mpga"
};
const extension = mimeTypeMap[options.mediaType];
if (extension) {
const originalGetArgs = this.getArgs;
this.getArgs = async function(args) {
const result = await originalGetArgs.call(this, args);
if (result.formData) {
const fileEntry = result.formData.get("file");
if (fileEntry && typeof fileEntry === "object" && "name" in fileEntry) {
try {
const newFile = new File([fileEntry], `audio.${extension}`, {
type: options.mediaType
});
result.formData.set("file", newFile);
} catch (error) {
console.log("Failed to create new File object:", error);
if (fileEntry && typeof fileEntry === "object" && "arrayBuffer" in fileEntry) {
try {
const arrayBuffer = await fileEntry.arrayBuffer();
const newFile = new File([arrayBuffer], `audio.${extension}`, {
type: options.mediaType
});
result.formData.set("file", newFile);
console.log("Created new file from arrayBuffer with name:", `audio.${extension}`);
} catch (bufferError) {
console.log("Failed to create file from arrayBuffer:", bufferError);
}
}
}
}
}
return result;
};
}
}
return super.doGenerate(options);
}
};
function createAihubmix(options = {}) {
const getHeaders = () => ({
Authorization: `Bearer ${(0, import_provider_utils.loadApiKey)({
apiKey: options.apiKey,
environmentVariableName: "AIHUBMIX_API_KEY",
description: "Aihubmix"
})}`,
"APP-Code": "WHVL9885",
"Content-Type": "application/json"
});
const getTranscriptionHeaders = () => ({
Authorization: `Bearer ${(0, import_provider_utils.loadApiKey)({
apiKey: options.apiKey,
environmentVariableName: "AIHUBMIX_API_KEY",
description: "Aihubmix"
})}`,
"APP-Code": "WHVL9885"
});
const url = ({ path, modelId }) => {
const baseURL = "https://aihubmix.com/v1";
return `${baseURL}${path}`;
};
const createChatModel = (deploymentName, settings = {}) => {
const headers = getHeaders();
if (deploymentName.startsWith("claude-")) {
return new import_internal2.AnthropicMessagesLanguageModel(deploymentName, {
provider: "aihubmix.chat",
baseURL: url({ path: "", modelId: deploymentName }),
headers: {
...headers,
"x-api-key": headers["Authorization"].split(" ")[1]
},
supportedUrls: () => ({
"image/*": [/^https?:\/\/.*$/]
})
});
}
if ((deploymentName.startsWith("gemini") || deploymentName.startsWith("imagen")) && !deploymentName.endsWith("-nothink") && !deploymentName.endsWith("-search")) {
return new import_internal3.GoogleGenerativeAILanguageModel(
deploymentName,
{
provider: "aihubmix.chat",
baseURL: "https://aihubmix.com/gemini/v1beta",
headers: {
...headers,
"x-goog-api-key": headers["Authorization"].split(" ")[1]
},
generateId: () => `aihubmix-${Date.now()}`,
supportedUrls: () => ({})
}
);
}
return new import_internal.OpenAIChatLanguageModel(deploymentName, {
provider: "aihubmix.chat",
url,
headers: getHeaders,
fetch: options.fetch
});
};
const createCompletionModel = (modelId, settings = {}) => new import_internal.OpenAICompletionLanguageModel(modelId, {
provider: "aihubmix.completion",
url,
headers: getHeaders,
fetch: options.fetch
});
const createEmbeddingModel = (modelId, settings = {}) => {
return new import_internal.OpenAIEmbeddingModel(modelId, {
provider: "aihubmix.embeddings",
headers: getHeaders,
url,
fetch: options.fetch
});
};
const createResponsesModel = (modelId) => new import_internal.OpenAIResponsesLanguageModel(modelId, {
provider: "aihubmix.responses",
url,
headers: getHeaders
});
const createImageModel = (modelId, settings = {}) => {
return new import_internal.OpenAIImageModel(modelId, {
provider: "aihubmix.image",
url,
headers: getHeaders,
fetch: options.fetch
});
};
const createTranscriptionModel = (modelId) => new AihubmixTranscriptionModel(modelId, {
provider: "aihubmix.transcription",
url,
headers: getTranscriptionHeaders,
fetch: options.fetch
});
const createSpeechModel = (modelId) => new import_internal.OpenAISpeechModel(modelId, {
provider: "aihubmix.speech",
url,
headers: getHeaders,
fetch: options.fetch
});
const provider = function(deploymentId, settings) {
if (new.target) {
throw new Error(
"The Aihubmix model function cannot be called with the new keyword."
);
}
return createChatModel(deploymentId, settings);
};
provider.languageModel = createChatModel;
provider.chat = createChatModel;
provider.completion = createCompletionModel;
provider.responses = createResponsesModel;
provider.embedding = createEmbeddingModel;
provider.textEmbedding = createEmbeddingModel;
provider.textEmbeddingModel = createEmbeddingModel;
provider.image = createImageModel;
provider.imageModel = createImageModel;
provider.transcription = createTranscriptionModel;
provider.transcriptionModel = createTranscriptionModel;
provider.speech = createSpeechModel;
provider.speechModel = createSpeechModel;
provider.tools = aihubmixTools;
return provider;
}
var aihubmix = createAihubmix();
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
aihubmix,
createAihubmix
});
//# sourceMappingURL=index.js.map