@langchain/community
Version:
Third-party integrations for LangChain.js
102 lines (101 loc) • 3.21 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
let _langchain_core_stores = require("@langchain/core/stores");
let convex_server = require("convex/server");
//#region src/storage/convex.ts
var convex_exports = /* @__PURE__ */ require_runtime.__exportAll({ ConvexKVStore: () => ConvexKVStore });
/**
* Class that extends the BaseStore class to interact with a Convex
* database. It provides methods for getting, setting, and deleting key value pairs,
* as well as yielding keys from the database.
*/
var ConvexKVStore = class extends _langchain_core_stores.BaseStore {
lc_namespace = [
"langchain",
"storage",
"convex"
];
ctx;
table;
index;
keyField;
valueField;
upsert;
lookup;
deleteMany;
constructor(config) {
super(config);
this.ctx = config.ctx;
this.table = config.table ?? "cache";
this.index = config.index ?? "byKey";
this.keyField = config.keyField ?? "key";
this.valueField = config.valueField ?? "value";
this.upsert = config.upsert ?? (0, convex_server.makeFunctionReference)("langchain/db:upsert");
this.lookup = config.lookup ?? (0, convex_server.makeFunctionReference)("langchain/db:lookup");
this.deleteMany = config.deleteMany ?? (0, convex_server.makeFunctionReference)("langchain/db:deleteMany");
}
/**
* Gets multiple keys from the Convex database.
* @param keys Array of keys to be retrieved.
* @returns An array of retrieved values.
*/
async mget(keys) {
return await Promise.all(keys.map(async (key) => {
const found = await this.ctx.runQuery(this.lookup, {
table: this.table,
index: this.index,
keyField: this.keyField,
key
});
return found.length > 0 ? found[0][this.valueField] : void 0;
}));
}
/**
* Sets multiple keys in the Convex database.
* @param keyValuePairs Array of key-value pairs to be set.
* @returns Promise that resolves when all keys have been set.
*/
async mset(keyValuePairs) {
const PAGE_SIZE = 16;
for (let i = 0; i < keyValuePairs.length; i += PAGE_SIZE) await Promise.all(keyValuePairs.slice(i, i + PAGE_SIZE).map(([key, value]) => this.ctx.runMutation(this.upsert, {
table: this.table,
index: this.index,
keyField: this.keyField,
key,
document: {
[this.keyField]: key,
[this.valueField]: value
}
})));
}
/**
* Deletes multiple keys from the Convex database.
* @param keys Array of keys to be deleted.
* @returns Promise that resolves when all keys have been deleted.
*/
async mdelete(keys) {
await Promise.all(keys.map((key) => this.ctx.runMutation(this.deleteMany, {
table: this.table,
index: this.index,
keyField: this.keyField,
key
})));
}
/**
* Yields keys from the Convex database.
* @param prefix Optional prefix to filter the keys.
* @returns An AsyncGenerator that yields keys from the Convex database.
*/
async *yieldKeys(_prefix) {
throw new Error("yieldKeys not implemented yet for ConvexKVStore");
}
};
//#endregion
exports.ConvexKVStore = ConvexKVStore;
Object.defineProperty(exports, "convex_exports", {
enumerable: true,
get: function() {
return convex_exports;
}
});
//# sourceMappingURL=convex.cjs.map