UNPKG

@langchain/community

Version:
58 lines (57 loc) 2.06 kB
import { __exportAll } from "../_virtual/_rolldown/runtime.js"; import { RecordManager } from "@langchain/core/indexing"; //#region src/indexes/memory.ts var memory_exports = /* @__PURE__ */ __exportAll({ InMemoryRecordManager: () => InMemoryRecordManager }); var InMemoryRecordManager = class extends RecordManager { lc_namespace = [ "langchain", "recordmanagers", "memory" ]; records; constructor() { super(); this.records = /* @__PURE__ */ new Map(); } async createSchema() { return Promise.resolve(); } async getTime() { return Promise.resolve(Date.now()); } async update(keys, updateOptions) { const updatedAt = await this.getTime(); const { timeAtLeast, groupIds: _groupIds } = updateOptions ?? {}; if (timeAtLeast && updatedAt < timeAtLeast) throw new Error(`Time sync issue with database ${updatedAt} < ${timeAtLeast}`); const groupIds = _groupIds ?? keys.map(() => null); if (groupIds.length !== keys.length) throw new Error(`Number of keys (${keys.length}) does not match number of group_ids ${groupIds.length})`); keys.forEach((key, i) => { const old = this.records.get(key); if (old) old.updatedAt = updatedAt; else this.records.set(key, { updatedAt, groupId: groupIds[i] }); }); } async exists(keys) { return Promise.resolve(keys.map((key) => this.records.has(key))); } async listKeys(options) { const { before, after, limit, groupIds } = options ?? {}; const filteredRecords = Array.from(this.records).filter(([_key, doc]) => { const isBefore = !before || doc.updatedAt <= before; const isAfter = !after || doc.updatedAt >= after; const belongsToGroup = !groupIds || groupIds.includes(doc.groupId); return isBefore && isAfter && belongsToGroup; }); return Promise.resolve(filteredRecords.map(([key]) => key).slice(0, limit ?? filteredRecords.length)); } async deleteKeys(keys) { keys.forEach((key) => this.records.delete(key)); return Promise.resolve(); } }; //#endregion export { InMemoryRecordManager, memory_exports }; //# sourceMappingURL=memory.js.map