voyage-ai-provider
Version:
Voyage AI Provider for running Voyage AI models with Vercel AI SDK
153 lines (147 loc) • 5.08 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 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