ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
78 lines (77 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.VectorIndexTextChunkStore = void 0;
const nanoid_1 = require("nanoid");
const embedText_js_1 = require("../model-function/embed-text/embedText.cjs");
class VectorIndexTextChunkStore {
constructor({ index, generateId = nanoid_1.nanoid, embeddingModel, queryFunctionId, upsertFunctionId, }) {
Object.defineProperty(this, "_index", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "generateId", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "embeddingModel", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "queryFunctionId", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "upsertFunctionId", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this._index = index;
this.generateId = generateId;
this.embeddingModel = embeddingModel;
this.queryFunctionId = queryFunctionId;
this.upsertFunctionId = upsertFunctionId;
}
async upsertChunk({ id = this.generateId(), chunk, }, options) {
this.upsertManyChunks({
ids: [id],
chunks: [chunk],
}, options);
}
async upsertManyChunks({ ids, chunks, }, options) {
const { embeddings } = await (0, embedText_js_1.embedTexts)(this.embeddingModel, chunks.map((chunk) => chunk.content), {
functionId: this.upsertFunctionId,
run: options?.run,
});
this._index.upsertMany(embeddings.map((embedding, i) => ({
id: ids?.[i] ?? this.generateId(),
vector: embedding,
data: chunks[i],
})));
}
async retrieveSimilarTextChunks(queryText, options) {
const { embedding } = await (0, embedText_js_1.embedText)(this.embeddingModel, queryText, {
functionId: this.queryFunctionId,
run: options?.run,
});
const queryResult = await this._index.queryByVector({
queryVector: embedding,
maxResults: 1,
similarityThreshold: undefined,
});
return queryResult.map((item) => item.data);
}
get index() {
return this._index.asIndex();
}
}
exports.VectorIndexTextChunkStore = VectorIndexTextChunkStore;