stores.cjs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.InMemoryStore = exports.BaseStore = void 0;
  4. const serializable_js_1 = require("./load/serializable.cjs");
  5. /**
  6. * Abstract interface for a key-value store.
  7. */
  8. class BaseStore extends serializable_js_1.Serializable {
  9. }
  10. exports.BaseStore = BaseStore;
  11. /**
  12. * In-memory implementation of the BaseStore using a dictionary. Used for
  13. * storing key-value pairs in memory.
  14. * @example
  15. * ```typescript
  16. * const store = new InMemoryStore<BaseMessage>();
  17. * await store.mset(
  18. * Array.from({ length: 5 }).map((_, index) => [
  19. * `message:id:${index}`,
  20. * index % 2 === 0
  21. * ? new AIMessage("ai stuff...")
  22. * : new HumanMessage("human stuff..."),
  23. * ]),
  24. * );
  25. *
  26. * const retrievedMessages = await store.mget(["message:id:0", "message:id:1"]);
  27. * await store.mdelete(await store.yieldKeys("message:id:").toArray());
  28. * ```
  29. */
  30. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  31. class InMemoryStore extends BaseStore {
  32. constructor() {
  33. super(...arguments);
  34. Object.defineProperty(this, "lc_namespace", {
  35. enumerable: true,
  36. configurable: true,
  37. writable: true,
  38. value: ["langchain", "storage"]
  39. });
  40. Object.defineProperty(this, "store", {
  41. enumerable: true,
  42. configurable: true,
  43. writable: true,
  44. value: {}
  45. });
  46. }
  47. /**
  48. * Retrieves the values associated with the given keys from the store.
  49. * @param keys Keys to retrieve values for.
  50. * @returns Array of values associated with the given keys.
  51. */
  52. async mget(keys) {
  53. return keys.map((key) => this.store[key]);
  54. }
  55. /**
  56. * Sets the values for the given keys in the store.
  57. * @param keyValuePairs Array of key-value pairs to set in the store.
  58. * @returns Promise that resolves when all key-value pairs have been set.
  59. */
  60. async mset(keyValuePairs) {
  61. for (const [key, value] of keyValuePairs) {
  62. this.store[key] = value;
  63. }
  64. }
  65. /**
  66. * Deletes the given keys and their associated values from the store.
  67. * @param keys Keys to delete from the store.
  68. * @returns Promise that resolves when all keys have been deleted.
  69. */
  70. async mdelete(keys) {
  71. for (const key of keys) {
  72. delete this.store[key];
  73. }
  74. }
  75. /**
  76. * Asynchronous generator that yields keys from the store. If a prefix is
  77. * provided, it only yields keys that start with the prefix.
  78. * @param prefix Optional prefix to filter keys.
  79. * @returns AsyncGenerator that yields keys from the store.
  80. */
  81. async *yieldKeys(prefix) {
  82. const keys = Object.keys(this.store);
  83. for (const key of keys) {
  84. if (prefix === undefined || key.startsWith(prefix)) {
  85. yield key;
  86. }
  87. }
  88. }
  89. }
  90. exports.InMemoryStore = InMemoryStore;