UNPKG

mixedbread-ai-provider

Version:

Mixedbread AI Provider for running Mixedbread AI models with Vercel AI SDK

188 lines (181 loc) 6.39 kB
"use strict"; 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, { createMixedbread: () => createMixedbread, mixedbread: () => mixedbread }); module.exports = __toCommonJS(index_exports); // src/mixedbread-provider.ts var import_provider_utils3 = require("@ai-sdk/provider-utils"); // src/mixedbread-embedding-model.ts var import_provider = require("@ai-sdk/provider"); var import_provider_utils2 = require("@ai-sdk/provider-utils"); var import_v43 = require("zod/v4"); // src/mixedbread-error.ts var import_provider_utils = require("@ai-sdk/provider-utils"); var import_v4 = require("zod/v4"); var mixedbreadErrorDataSchema = import_v4.z.object({ error: import_v4.z.object({ code: import_v4.z.string().nullable(), message: import_v4.z.string(), param: import_v4.z.any().nullable(), type: import_v4.z.string() }) }); var mixedbreadFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({ errorSchema: mixedbreadErrorDataSchema, errorToMessage: (data) => data.error.message }); // src/mixedbread-embedding-options.ts var import_v42 = require("zod/v4"); var mixedbreadEmbeddingOptions = import_v42.z.object({ /** * An optional prompt to provide context to the model. Refer to the model's documentation for more information. * A string between 1 and 256 characters. */ prompt: import_v42.z.string().optional(), /** * Option to normalize the embeddings. */ normalized: import_v42.z.boolean().optional(), /** * The desired number of dimensions in the output vectors. Defaults to the model's maximum. * A number between 1 and the model's maximum output dimensions. * Only applicable for Matryoshka-based models. */ dimensions: import_v42.z.number().optional(), /** * The desired format for the embeddings. Defaults to "float". * Options: float, float16, binary, ubinary, int8, uint8, base64. */ encodingFormat: import_v42.z.enum(["float", "float16", "binary", "ubinary", "int8", "uint8", "base64"]).optional() }); // src/mixedbread-embedding-model.ts var MixedbreadEmbeddingModel = class { specificationVersion = "v2"; modelId; config; get provider() { return this.config.provider; } get maxEmbeddingsPerCall() { return 256; } get supportsParallelCalls() { return true; } constructor(modelId, config) { this.modelId = modelId; this.config = config; } async doEmbed({ abortSignal, values, headers, providerOptions }) { const embeddingOptions = await (0, import_provider_utils2.parseProviderOptions)({ provider: "mixedbread", providerOptions, schema: mixedbreadEmbeddingOptions }); if (values.length > this.maxEmbeddingsPerCall) { throw new import_provider.TooManyEmbeddingValuesForCallError({ maxEmbeddingsPerCall: this.maxEmbeddingsPerCall, modelId: this.modelId, provider: this.provider, values }); } const { responseHeaders, value: response, rawValue } = await (0, import_provider_utils2.postJsonToApi)({ abortSignal, body: { input: values, model: this.modelId, prompt: embeddingOptions?.prompt, normalize: embeddingOptions?.normalized, dimensions: embeddingOptions?.dimensions, encoding_format: embeddingOptions?.encodingFormat }, failedResponseHandler: mixedbreadFailedResponseHandler, fetch: this.config.fetch, headers: (0, import_provider_utils2.combineHeaders)(this.config.headers(), headers), successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)( mixedbreadTextEmbeddingResponseSchema ), url: `${this.config.baseURL}/embeddings` }); return { embeddings: response.data.map((item) => item.embedding), usage: response.usage ? { tokens: response.usage.total_tokens } : void 0, response: { headers: responseHeaders, body: rawValue } }; } }; var mixedbreadTextEmbeddingResponseSchema = import_v43.z.object({ data: import_v43.z.array(import_v43.z.object({ embedding: import_v43.z.array(import_v43.z.number()) })), usage: import_v43.z.object({ total_tokens: import_v43.z.number() }).nullish() }); // src/mixedbread-provider.ts function createMixedbread(options = {}) { const baseURL = (0, import_provider_utils3.withoutTrailingSlash)(options.baseURL) ?? "https://api.mixedbread.com/v1"; const getHeaders = () => ({ Authorization: `Bearer ${(0, import_provider_utils3.loadApiKey)({ apiKey: options.apiKey, environmentVariableName: "MIXEDBREAD_API_KEY", description: "Mixedbread" })}`, ...options.headers }); const createEmbeddingModel = (modelId) => new MixedbreadEmbeddingModel(modelId, { provider: "mixedbread.embedding", baseURL, headers: getHeaders, fetch: options.fetch }); const provider = function(modelId) { if (new.target) { throw new Error( "The Mixedbread model function cannot be called with the new keyword." ); } return createEmbeddingModel(modelId); }; provider.textEmbeddingModel = createEmbeddingModel; provider.chat = provider.languageModel = () => { throw new Error("languageModel method is not implemented."); }; provider.imageModel = () => { throw new Error("imageModel method is not implemented."); }; return provider; } var mixedbread = createMixedbread(); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createMixedbread, mixedbread }); //# sourceMappingURL=index.js.map