UNPKG

voyage-ai-provider

Version:

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

153 lines (147 loc) 5.08 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 src_exports = {}; __export(src_exports, { createVoyage: () => createVoyage, voyage: () => voyage }); module.exports = __toCommonJS(src_exports); // src/voyage-provider.ts var import_provider_utils3 = require("@ai-sdk/provider-utils"); // src/voyage-embedding-model.ts var import_provider = require("@ai-sdk/provider"); var import_provider_utils2 = require("@ai-sdk/provider-utils"); var import_zod2 = require("zod"); // src/voyage-error.ts var import_provider_utils = require("@ai-sdk/provider-utils"); var import_zod = require("zod"); var voyageErrorDataSchema = import_zod.z.object({ error: import_zod.z.object({ code: import_zod.z.string().nullable(), message: import_zod.z.string(), param: import_zod.z.any().nullable(), type: import_zod.z.string() }) }); var voyageFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({ errorSchema: voyageErrorDataSchema, errorToMessage: (data) => data.error.message }); // src/voyage-embedding-model.ts var VoyageEmbeddingModel = class { specificationVersion = "v1"; modelId; config; settings; get provider() { return this.config.provider; } get maxEmbeddingsPerCall() { return 128; } get supportsParallelCalls() { return false; } constructor(modelId, settings, config) { this.modelId = modelId; this.settings = settings; this.config = config; } async doEmbed({ abortSignal, values }) { if (values.length > this.maxEmbeddingsPerCall) { throw new import_provider.TooManyEmbeddingValuesForCallError({ maxEmbeddingsPerCall: this.maxEmbeddingsPerCall, modelId: this.modelId, provider: this.provider, values }); } const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({ abortSignal, body: { input: values, model: this.modelId, input_type: this.settings.inputType, truncation: this.settings.truncation, output_dimension: this.settings.outputDimension, output_dtype: this.settings.outputDtype }, failedResponseHandler: voyageFailedResponseHandler, fetch: this.config.fetch, headers: this.config.headers(), successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)( voyageTextEmbeddingResponseSchema ), url: `${this.config.baseURL}/embeddings` }); return { embeddings: response.data.map((item) => item.embedding), usage: response.usage ? { tokens: response.usage.total_tokens } : void 0, rawResponse: { headers: responseHeaders } }; } }; var voyageTextEmbeddingResponseSchema = import_zod2.z.object({ data: import_zod2.z.array(import_zod2.z.object({ embedding: import_zod2.z.array(import_zod2.z.number()) })), usage: import_zod2.z.object({ total_tokens: import_zod2.z.number() }).nullish() }); // src/voyage-provider.ts function createVoyage(options = {}) { const baseURL = (0, import_provider_utils3.withoutTrailingSlash)(options.baseURL) ?? "https://api.voyageai.com/v1"; const getHeaders = () => ({ Authorization: `Bearer ${(0, import_provider_utils3.loadApiKey)({ apiKey: options.apiKey, environmentVariableName: "VOYAGE_API_KEY", description: "Voyage" })}`, ...options.headers }); const createEmbeddingModel = (modelId, settings = {}) => new VoyageEmbeddingModel(modelId, settings, { provider: "voyage.embedding", baseURL, headers: getHeaders, fetch: options.fetch }); const provider = function(modelId, settings) { if (new.target) { throw new Error( "The Voyage model function cannot be called with the new keyword." ); } return createEmbeddingModel(modelId, settings); }; provider.embedding = createEmbeddingModel; provider.textEmbedding = createEmbeddingModel; provider.textEmbeddingModel = createEmbeddingModel; provider.chat = provider.languageModel = () => { throw new Error("languageModel method is not implemented."); }; return provider; } var voyage = createVoyage(); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { createVoyage, voyage }); //# sourceMappingURL=index.cjs.map