langchain 0.0.128 → 0.0.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/embeddings/cache_backed.cjs +109 -0
  2. package/dist/embeddings/cache_backed.d.ts +60 -0
  3. package/dist/embeddings/cache_backed.js +102 -0
  4. package/dist/load/import_constants.cjs +1 -0
  5. package/dist/load/import_constants.js +1 -0
  6. package/dist/load/import_map.cjs +5 -2
  7. package/dist/load/import_map.d.ts +3 -0
  8. package/dist/load/import_map.js +3 -0
  9. package/dist/schema/runnable.cjs +177 -22
  10. package/dist/schema/runnable.d.ts +89 -0
  11. package/dist/schema/runnable.js +175 -21
  12. package/dist/schema/storage.cjs +10 -0
  13. package/dist/schema/storage.d.ts +10 -0
  14. package/dist/schema/storage.js +6 -0
  15. package/dist/storage/encoder_backed.cjs +66 -0
  16. package/dist/storage/encoder_backed.d.ts +18 -0
  17. package/dist/storage/encoder_backed.js +62 -0
  18. package/dist/storage/in_memory.cjs +44 -0
  19. package/dist/storage/in_memory.d.ts +9 -0
  20. package/dist/storage/in_memory.js +40 -0
  21. package/dist/storage/ioredis.cjs +110 -0
  22. package/dist/storage/ioredis.d.ts +22 -0
  23. package/dist/storage/ioredis.js +106 -0
  24. package/dist/vectorstores/zep.cjs +101 -23
  25. package/dist/vectorstores/zep.d.ts +32 -2
  26. package/dist/vectorstores/zep.js +101 -23
  27. package/embeddings/cache_backed.cjs +1 -0
  28. package/embeddings/cache_backed.d.ts +1 -0
  29. package/embeddings/cache_backed.js +1 -0
  30. package/package.json +33 -1
  31. package/schema/storage.cjs +1 -0
  32. package/schema/storage.d.ts +1 -0
  33. package/schema/storage.js +1 -0
  34. package/storage/in_memory.cjs +1 -0
  35. package/storage/in_memory.d.ts +1 -0
  36. package/storage/in_memory.js +1 -0
  37. package/storage/ioredis.cjs +1 -0
  38. package/storage/ioredis.d.ts +1 -0
  39. package/storage/ioredis.js +1 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CacheBackedEmbeddings = void 0;
7
+ const object_hash_1 = __importDefault(require("object-hash"));
8
+ const encoder_backed_js_1 = require("../storage/encoder_backed.cjs");
9
+ const base_js_1 = require("./base.cjs");
10
+ /**
11
+ * Interface for caching results from embedding models.
12
+ *
13
+ * The interface allows works with any store that implements
14
+ * the abstract store interface accepting keys of type str and values of list of
15
+ * floats.
16
+ *
17
+ * If need be, the interface can be extended to accept other implementations
18
+ * of the value serializer and deserializer, as well as the key encoder.
19
+ */
20
+ class CacheBackedEmbeddings extends base_js_1.Embeddings {
21
+ constructor(fields) {
22
+ super(fields);
23
+ Object.defineProperty(this, "underlyingEmbeddings", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: void 0
28
+ });
29
+ Object.defineProperty(this, "documentEmbeddingStore", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: void 0
34
+ });
35
+ this.underlyingEmbeddings = fields.underlyingEmbeddings;
36
+ this.documentEmbeddingStore = fields.documentEmbeddingStore;
37
+ }
38
+ /**
39
+ * Embed query text.
40
+ *
41
+ * This method does not support caching at the moment.
42
+ *
43
+ * Support for caching queries is easy to implement, but might make
44
+ * sense to hold off to see the most common patterns.
45
+ *
46
+ * If the cache has an eviction policy, we may need to be a bit more careful
47
+ * about sharing the cache between documents and queries. Generally,
48
+ * one is OK evicting query caches, but document caches should be kept.
49
+ *
50
+ * @param document The text to embed.
51
+ * @returns The embedding for the given text.
52
+ */
53
+ async embedQuery(document) {
54
+ return this.underlyingEmbeddings.embedQuery(document);
55
+ }
56
+ /**
57
+ * Embed a list of texts.
58
+ *
59
+ * The method first checks the cache for the embeddings.
60
+ * If the embeddings are not found, the method uses the underlying embedder
61
+ * to embed the documents and stores the results in the cache.
62
+ *
63
+ * @param documents
64
+ * @returns A list of embeddings for the given texts.
65
+ */
66
+ async embedDocuments(documents) {
67
+ const vectors = await this.documentEmbeddingStore.mget(documents);
68
+ const missingIndicies = [];
69
+ const missingDocuments = [];
70
+ for (let i = 0; i < vectors.length; i += 1) {
71
+ if (vectors[i] === undefined) {
72
+ missingIndicies.push(i);
73
+ missingDocuments.push(documents[i]);
74
+ }
75
+ }
76
+ if (missingDocuments.length) {
77
+ const missingVectors = await this.underlyingEmbeddings.embedDocuments(missingDocuments);
78
+ const keyValuePairs = missingDocuments.map((document, i) => [document, missingVectors[i]]);
79
+ await this.documentEmbeddingStore.mset(keyValuePairs);
80
+ for (let i = 0; i < missingIndicies.length; i += 1) {
81
+ vectors[missingIndicies[i]] = missingVectors[i];
82
+ }
83
+ }
84
+ return vectors;
85
+ }
86
+ /**
87
+ * Create a new CacheBackedEmbeddings instance from another embeddings instance
88
+ * and a storage instance.
89
+ * @param underlyingEmbeddings Embeddings used to populate the cache for new documents.
90
+ * @param documentEmbeddingStore Stores raw document embedding values. Keys are hashes of the document content.
91
+ * @param options.namespace Optional namespace for store keys.
92
+ * @returns A new CacheBackedEmbeddings instance.
93
+ */
94
+ static fromBytesStore(underlyingEmbeddings, documentEmbeddingStore, options) {
95
+ const encoder = new TextEncoder();
96
+ const decoder = new TextDecoder();
97
+ const encoderBackedStore = new encoder_backed_js_1.EncoderBackedStore({
98
+ store: documentEmbeddingStore,
99
+ keyEncoder: (key) => (options?.namespace ?? "") + (0, object_hash_1.default)(key),
100
+ valueSerializer: (value) => encoder.encode(JSON.stringify(value)),
101
+ valueDeserializer: (serializedValue) => JSON.parse(decoder.decode(serializedValue)),
102
+ });
103
+ return new this({
104
+ underlyingEmbeddings,
105
+ documentEmbeddingStore: encoderBackedStore,
106
+ });
107
+ }
108
+ }
109
+ exports.CacheBackedEmbeddings = CacheBackedEmbeddings;
@@ -0,0 +1,60 @@
1
+ import { BaseStore } from "../schema/storage.js";
2
+ import { AsyncCallerParams } from "../util/async_caller.js";
3
+ import { Embeddings } from "./base.js";
4
+ export interface CacheBackedEmbeddingsFields extends AsyncCallerParams {
5
+ underlyingEmbeddings: Embeddings;
6
+ documentEmbeddingStore: BaseStore<string, number[]>;
7
+ }
8
+ /**
9
+ * Interface for caching results from embedding models.
10
+ *
11
+ * The interface allows works with any store that implements
12
+ * the abstract store interface accepting keys of type str and values of list of
13
+ * floats.
14
+ *
15
+ * If need be, the interface can be extended to accept other implementations
16
+ * of the value serializer and deserializer, as well as the key encoder.
17
+ */
18
+ export declare class CacheBackedEmbeddings extends Embeddings {
19
+ protected underlyingEmbeddings: Embeddings;
20
+ protected documentEmbeddingStore: BaseStore<string, number[]>;
21
+ constructor(fields: CacheBackedEmbeddingsFields);
22
+ /**
23
+ * Embed query text.
24
+ *
25
+ * This method does not support caching at the moment.
26
+ *
27
+ * Support for caching queries is easy to implement, but might make
28
+ * sense to hold off to see the most common patterns.
29
+ *
30
+ * If the cache has an eviction policy, we may need to be a bit more careful
31
+ * about sharing the cache between documents and queries. Generally,
32
+ * one is OK evicting query caches, but document caches should be kept.
33
+ *
34
+ * @param document The text to embed.
35
+ * @returns The embedding for the given text.
36
+ */
37
+ embedQuery(document: string): Promise<number[]>;
38
+ /**
39
+ * Embed a list of texts.
40
+ *
41
+ * The method first checks the cache for the embeddings.
42
+ * If the embeddings are not found, the method uses the underlying embedder
43
+ * to embed the documents and stores the results in the cache.
44
+ *
45
+ * @param documents
46
+ * @returns A list of embeddings for the given texts.
47
+ */
48
+ embedDocuments(documents: string[]): Promise<number[][]>;
49
+ /**
50
+ * Create a new CacheBackedEmbeddings instance from another embeddings instance
51
+ * and a storage instance.
52
+ * @param underlyingEmbeddings Embeddings used to populate the cache for new documents.
53
+ * @param documentEmbeddingStore Stores raw document embedding values. Keys are hashes of the document content.
54
+ * @param options.namespace Optional namespace for store keys.
55
+ * @returns A new CacheBackedEmbeddings instance.
56
+ */
57
+ static fromBytesStore(underlyingEmbeddings: Embeddings, documentEmbeddingStore: BaseStore<string, Uint8Array>, options?: {
58
+ namespace?: string;
59
+ }): CacheBackedEmbeddings;
60
+ }
@@ -0,0 +1,102 @@
1
+ import hash from "object-hash";
2
+ import { EncoderBackedStore } from "../storage/encoder_backed.js";
3
+ import { Embeddings } from "./base.js";
4
+ /**
5
+ * Interface for caching results from embedding models.
6
+ *
7
+ * The interface allows works with any store that implements
8
+ * the abstract store interface accepting keys of type str and values of list of
9
+ * floats.
10
+ *
11
+ * If need be, the interface can be extended to accept other implementations
12
+ * of the value serializer and deserializer, as well as the key encoder.
13
+ */
14
+ export class CacheBackedEmbeddings extends Embeddings {
15
+ constructor(fields) {
16
+ super(fields);
17
+ Object.defineProperty(this, "underlyingEmbeddings", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ Object.defineProperty(this, "documentEmbeddingStore", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: void 0
28
+ });
29
+ this.underlyingEmbeddings = fields.underlyingEmbeddings;
30
+ this.documentEmbeddingStore = fields.documentEmbeddingStore;
31
+ }
32
+ /**
33
+ * Embed query text.
34
+ *
35
+ * This method does not support caching at the moment.
36
+ *
37
+ * Support for caching queries is easy to implement, but might make
38
+ * sense to hold off to see the most common patterns.
39
+ *
40
+ * If the cache has an eviction policy, we may need to be a bit more careful
41
+ * about sharing the cache between documents and queries. Generally,
42
+ * one is OK evicting query caches, but document caches should be kept.
43
+ *
44
+ * @param document The text to embed.
45
+ * @returns The embedding for the given text.
46
+ */
47
+ async embedQuery(document) {
48
+ return this.underlyingEmbeddings.embedQuery(document);
49
+ }
50
+ /**
51
+ * Embed a list of texts.
52
+ *
53
+ * The method first checks the cache for the embeddings.
54
+ * If the embeddings are not found, the method uses the underlying embedder
55
+ * to embed the documents and stores the results in the cache.
56
+ *
57
+ * @param documents
58
+ * @returns A list of embeddings for the given texts.
59
+ */
60
+ async embedDocuments(documents) {
61
+ const vectors = await this.documentEmbeddingStore.mget(documents);
62
+ const missingIndicies = [];
63
+ const missingDocuments = [];
64
+ for (let i = 0; i < vectors.length; i += 1) {
65
+ if (vectors[i] === undefined) {
66
+ missingIndicies.push(i);
67
+ missingDocuments.push(documents[i]);
68
+ }
69
+ }
70
+ if (missingDocuments.length) {
71
+ const missingVectors = await this.underlyingEmbeddings.embedDocuments(missingDocuments);
72
+ const keyValuePairs = missingDocuments.map((document, i) => [document, missingVectors[i]]);
73
+ await this.documentEmbeddingStore.mset(keyValuePairs);
74
+ for (let i = 0; i < missingIndicies.length; i += 1) {
75
+ vectors[missingIndicies[i]] = missingVectors[i];
76
+ }
77
+ }
78
+ return vectors;
79
+ }
80
+ /**
81
+ * Create a new CacheBackedEmbeddings instance from another embeddings instance
82
+ * and a storage instance.
83
+ * @param underlyingEmbeddings Embeddings used to populate the cache for new documents.
84
+ * @param documentEmbeddingStore Stores raw document embedding values. Keys are hashes of the document content.
85
+ * @param options.namespace Optional namespace for store keys.
86
+ * @returns A new CacheBackedEmbeddings instance.
87
+ */
88
+ static fromBytesStore(underlyingEmbeddings, documentEmbeddingStore, options) {
89
+ const encoder = new TextEncoder();
90
+ const decoder = new TextDecoder();
91
+ const encoderBackedStore = new EncoderBackedStore({
92
+ store: documentEmbeddingStore,
93
+ keyEncoder: (key) => (options?.namespace ?? "") + hash(key),
94
+ valueSerializer: (value) => encoder.encode(JSON.stringify(value)),
95
+ valueDeserializer: (serializedValue) => JSON.parse(decoder.decode(serializedValue)),
96
+ });
97
+ return new this({
98
+ underlyingEmbeddings,
99
+ documentEmbeddingStore: encoderBackedStore,
100
+ });
101
+ }
102
+ }
@@ -112,5 +112,6 @@ exports.optionalImportEntrypoints = [
112
112
  "langchain/stores/message/upstash_redis",
113
113
  "langchain/stores/message/planetscale",
114
114
  "langchain/stores/message/xata",
115
+ "langchain/storage/ioredis",
115
116
  "langchain/experimental/multimodal_embeddings/googlevertexai",
116
117
  ];
@@ -109,5 +109,6 @@ export const optionalImportEntrypoints = [
109
109
  "langchain/stores/message/upstash_redis",
110
110
  "langchain/stores/message/planetscale",
111
111
  "langchain/stores/message/xata",
112
+ "langchain/storage/ioredis",
112
113
  "langchain/experimental/multimodal_embeddings/googlevertexai",
113
114
  ];
@@ -24,8 +24,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  return result;
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
- exports.cache = exports.retrievers__vespa = exports.retrievers__hyde = exports.retrievers__document_compressors__chain_extract = exports.retrievers__time_weighted = exports.retrievers__parent_document = exports.retrievers__document_compressors = exports.retrievers__contextual_compression = exports.retrievers__databerry = exports.retrievers__remote = exports.output_parsers = exports.callbacks = exports.schema__runnable = exports.schema__retriever = exports.schema__query_constructor = exports.schema__output_parser = exports.schema = exports.chat_models__ollama = exports.chat_models__baiduwenxin = exports.chat_models__anthropic = exports.chat_models__openai = exports.chat_models__base = exports.document_transformers__openai_functions = exports.document_loaders__web__sort_xyz_blockchain = exports.document_loaders__web__serpapi = exports.document_loaders__base = exports.document = exports.memory = exports.text_splitter = exports.vectorstores__xata = exports.vectorstores__vectara = exports.vectorstores__prisma = exports.vectorstores__memory = exports.vectorstores__base = exports.prompts = exports.llms__ollama = exports.llms__aleph_alpha = exports.llms__ai21 = exports.llms__openai = exports.llms__base = exports.embeddings__openai = exports.embeddings__fake = exports.embeddings__base = exports.chains__openai_functions = exports.chains = exports.tools = exports.base_language = exports.agents__toolkits = exports.agents = exports.load__serializable = void 0;
28
- exports.evaluation = exports.experimental__plan_and_execute = exports.experimental__generative_agents = exports.experimental__babyagi = exports.experimental__autogpt = exports.util__math = exports.stores__message__in_memory = exports.stores__file__in_memory = exports.stores__doc__in_memory = void 0;
27
+ exports.retrievers__hyde = exports.retrievers__document_compressors__chain_extract = exports.retrievers__time_weighted = exports.retrievers__parent_document = exports.retrievers__document_compressors = exports.retrievers__contextual_compression = exports.retrievers__databerry = exports.retrievers__remote = exports.output_parsers = exports.callbacks = exports.schema__storage = exports.schema__runnable = exports.schema__retriever = exports.schema__query_constructor = exports.schema__output_parser = exports.schema = exports.chat_models__ollama = exports.chat_models__baiduwenxin = exports.chat_models__anthropic = exports.chat_models__openai = exports.chat_models__base = exports.document_transformers__openai_functions = exports.document_loaders__web__sort_xyz_blockchain = exports.document_loaders__web__serpapi = exports.document_loaders__base = exports.document = exports.memory = exports.text_splitter = exports.vectorstores__xata = exports.vectorstores__vectara = exports.vectorstores__prisma = exports.vectorstores__memory = exports.vectorstores__base = exports.prompts = exports.llms__ollama = exports.llms__aleph_alpha = exports.llms__ai21 = exports.llms__openai = exports.llms__base = exports.embeddings__openai = exports.embeddings__fake = exports.embeddings__cache_backed = exports.embeddings__base = exports.chains__openai_functions = exports.chains = exports.tools = exports.base_language = exports.agents__toolkits = exports.agents = exports.load__serializable = void 0;
28
+ exports.evaluation = exports.experimental__plan_and_execute = exports.experimental__generative_agents = exports.experimental__babyagi = exports.experimental__autogpt = exports.util__math = exports.storage__in_memory = exports.stores__message__in_memory = exports.stores__file__in_memory = exports.stores__doc__in_memory = exports.cache = exports.retrievers__vespa = void 0;
29
29
  exports.load__serializable = __importStar(require("../load/serializable.cjs"));
30
30
  exports.agents = __importStar(require("../agents/index.cjs"));
31
31
  exports.agents__toolkits = __importStar(require("../agents/toolkits/index.cjs"));
@@ -34,6 +34,7 @@ exports.tools = __importStar(require("../tools/index.cjs"));
34
34
  exports.chains = __importStar(require("../chains/index.cjs"));
35
35
  exports.chains__openai_functions = __importStar(require("../chains/openai_functions/index.cjs"));
36
36
  exports.embeddings__base = __importStar(require("../embeddings/base.cjs"));
37
+ exports.embeddings__cache_backed = __importStar(require("../embeddings/cache_backed.cjs"));
37
38
  exports.embeddings__fake = __importStar(require("../embeddings/fake.cjs"));
38
39
  exports.embeddings__openai = __importStar(require("../embeddings/openai.cjs"));
39
40
  exports.llms__base = __importStar(require("../llms/base.cjs"));
@@ -64,6 +65,7 @@ exports.schema__output_parser = __importStar(require("../schema/output_parser.cj
64
65
  exports.schema__query_constructor = __importStar(require("../schema/query_constructor.cjs"));
65
66
  exports.schema__retriever = __importStar(require("../schema/retriever.cjs"));
66
67
  exports.schema__runnable = __importStar(require("../schema/runnable.cjs"));
68
+ exports.schema__storage = __importStar(require("../schema/storage.cjs"));
67
69
  exports.callbacks = __importStar(require("../callbacks/index.cjs"));
68
70
  exports.output_parsers = __importStar(require("../output_parsers/index.cjs"));
69
71
  exports.retrievers__remote = __importStar(require("../retrievers/remote/index.cjs"));
@@ -79,6 +81,7 @@ exports.cache = __importStar(require("../cache/index.cjs"));
79
81
  exports.stores__doc__in_memory = __importStar(require("../stores/doc/in_memory.cjs"));
80
82
  exports.stores__file__in_memory = __importStar(require("../stores/file/in_memory.cjs"));
81
83
  exports.stores__message__in_memory = __importStar(require("../stores/message/in_memory.cjs"));
84
+ exports.storage__in_memory = __importStar(require("../storage/in_memory.cjs"));
82
85
  exports.util__math = __importStar(require("../util/math.cjs"));
83
86
  exports.experimental__autogpt = __importStar(require("../experimental/autogpt/index.cjs"));
84
87
  exports.experimental__babyagi = __importStar(require("../experimental/babyagi/index.cjs"));
@@ -6,6 +6,7 @@ export * as tools from "../tools/index.js";
6
6
  export * as chains from "../chains/index.js";
7
7
  export * as chains__openai_functions from "../chains/openai_functions/index.js";
8
8
  export * as embeddings__base from "../embeddings/base.js";
9
+ export * as embeddings__cache_backed from "../embeddings/cache_backed.js";
9
10
  export * as embeddings__fake from "../embeddings/fake.js";
10
11
  export * as embeddings__openai from "../embeddings/openai.js";
11
12
  export * as llms__base from "../llms/base.js";
@@ -36,6 +37,7 @@ export * as schema__output_parser from "../schema/output_parser.js";
36
37
  export * as schema__query_constructor from "../schema/query_constructor.js";
37
38
  export * as schema__retriever from "../schema/retriever.js";
38
39
  export * as schema__runnable from "../schema/runnable.js";
40
+ export * as schema__storage from "../schema/storage.js";
39
41
  export * as callbacks from "../callbacks/index.js";
40
42
  export * as output_parsers from "../output_parsers/index.js";
41
43
  export * as retrievers__remote from "../retrievers/remote/index.js";
@@ -51,6 +53,7 @@ export * as cache from "../cache/index.js";
51
53
  export * as stores__doc__in_memory from "../stores/doc/in_memory.js";
52
54
  export * as stores__file__in_memory from "../stores/file/in_memory.js";
53
55
  export * as stores__message__in_memory from "../stores/message/in_memory.js";
56
+ export * as storage__in_memory from "../storage/in_memory.js";
54
57
  export * as util__math from "../util/math.js";
55
58
  export * as experimental__autogpt from "../experimental/autogpt/index.js";
56
59
  export * as experimental__babyagi from "../experimental/babyagi/index.js";
@@ -7,6 +7,7 @@ export * as tools from "../tools/index.js";
7
7
  export * as chains from "../chains/index.js";
8
8
  export * as chains__openai_functions from "../chains/openai_functions/index.js";
9
9
  export * as embeddings__base from "../embeddings/base.js";
10
+ export * as embeddings__cache_backed from "../embeddings/cache_backed.js";
10
11
  export * as embeddings__fake from "../embeddings/fake.js";
11
12
  export * as embeddings__openai from "../embeddings/openai.js";
12
13
  export * as llms__base from "../llms/base.js";
@@ -37,6 +38,7 @@ export * as schema__output_parser from "../schema/output_parser.js";
37
38
  export * as schema__query_constructor from "../schema/query_constructor.js";
38
39
  export * as schema__retriever from "../schema/retriever.js";
39
40
  export * as schema__runnable from "../schema/runnable.js";
41
+ export * as schema__storage from "../schema/storage.js";
40
42
  export * as callbacks from "../callbacks/index.js";
41
43
  export * as output_parsers from "../output_parsers/index.js";
42
44
  export * as retrievers__remote from "../retrievers/remote/index.js";
@@ -52,6 +54,7 @@ export * as cache from "../cache/index.js";
52
54
  export * as stores__doc__in_memory from "../stores/doc/in_memory.js";
53
55
  export * as stores__file__in_memory from "../stores/file/in_memory.js";
54
56
  export * as stores__message__in_memory from "../stores/message/in_memory.js";
57
+ export * as storage__in_memory from "../storage/in_memory.js";
55
58
  export * as util__math from "../util/math.js";
56
59
  export * as experimental__autogpt from "../experimental/autogpt/index.js";
57
60
  export * as experimental__babyagi from "../experimental/babyagi/index.js";