langchain 0.0.165 → 0.0.167

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 (100) hide show
  1. package/dist/cache/momento.cjs +7 -7
  2. package/dist/cache/momento.d.ts +1 -1
  3. package/dist/cache/momento.js +1 -1
  4. package/dist/document_loaders/fs/unstructured.cjs +40 -0
  5. package/dist/document_loaders/fs/unstructured.d.ts +27 -0
  6. package/dist/document_loaders/fs/unstructured.js +40 -0
  7. package/dist/embeddings/bedrock.cjs +43 -22
  8. package/dist/embeddings/bedrock.d.ts +11 -4
  9. package/dist/embeddings/bedrock.js +43 -22
  10. package/dist/experimental/chat_models/anthropic_functions.cjs +34 -2
  11. package/dist/experimental/chat_models/anthropic_functions.d.ts +15 -5
  12. package/dist/experimental/chat_models/anthropic_functions.js +34 -2
  13. package/dist/llms/yandex.cjs +100 -0
  14. package/dist/llms/yandex.d.ts +40 -0
  15. package/dist/llms/yandex.js +96 -0
  16. package/dist/load/import_constants.cjs +3 -0
  17. package/dist/load/import_constants.js +3 -0
  18. package/dist/load/import_map.cjs +6 -2
  19. package/dist/load/import_map.d.ts +4 -0
  20. package/dist/load/import_map.js +4 -0
  21. package/dist/prompts/chat.cjs +19 -2
  22. package/dist/prompts/chat.d.ts +1 -0
  23. package/dist/prompts/chat.js +19 -2
  24. package/dist/retrievers/multi_vector.d.ts +3 -3
  25. package/dist/retrievers/parent_document.cjs +6 -16
  26. package/dist/retrievers/parent_document.d.ts +5 -12
  27. package/dist/retrievers/parent_document.js +6 -16
  28. package/dist/retrievers/self_query/base.cjs +4 -1
  29. package/dist/retrievers/self_query/base.d.ts +3 -2
  30. package/dist/retrievers/self_query/base.js +4 -1
  31. package/dist/retrievers/self_query/index.cjs +2 -2
  32. package/dist/retrievers/self_query/index.d.ts +2 -0
  33. package/dist/retrievers/self_query/index.js +2 -2
  34. package/dist/runnables/remote.cjs +225 -0
  35. package/dist/runnables/remote.d.ts +28 -0
  36. package/dist/runnables/remote.js +221 -0
  37. package/dist/schema/index.cjs +1 -1
  38. package/dist/schema/index.d.ts +1 -1
  39. package/dist/schema/index.js +1 -1
  40. package/dist/schema/runnable/base.cjs +4 -4
  41. package/dist/schema/runnable/base.d.ts +9 -7
  42. package/dist/schema/runnable/base.js +4 -4
  43. package/dist/schema/runnable/remote.cjs +225 -0
  44. package/dist/schema/runnable/remote.d.ts +28 -0
  45. package/dist/schema/runnable/remote.js +221 -0
  46. package/dist/schema/storage.d.ts +28 -1
  47. package/dist/storage/encoder_backed.cjs +14 -2
  48. package/dist/storage/encoder_backed.d.ts +2 -0
  49. package/dist/storage/encoder_backed.js +12 -1
  50. package/dist/storage/in_memory.cjs +1 -1
  51. package/dist/storage/in_memory.js +1 -1
  52. package/dist/storage/ioredis.cjs +4 -4
  53. package/dist/storage/ioredis.js +4 -4
  54. package/dist/storage/vercel_kv.cjs +146 -0
  55. package/dist/storage/vercel_kv.d.ts +46 -0
  56. package/dist/storage/vercel_kv.js +142 -0
  57. package/dist/stores/doc/in_memory.cjs +13 -0
  58. package/dist/stores/doc/in_memory.d.ts +6 -1
  59. package/dist/stores/doc/in_memory.js +13 -0
  60. package/dist/stores/message/momento.cjs +11 -11
  61. package/dist/stores/message/momento.d.ts +1 -1
  62. package/dist/stores/message/momento.js +1 -1
  63. package/dist/util/time.cjs +14 -0
  64. package/dist/util/time.d.ts +6 -0
  65. package/dist/util/time.js +10 -0
  66. package/dist/vectorstores/cassandra.cjs +4 -2
  67. package/dist/vectorstores/cassandra.js +4 -2
  68. package/dist/vectorstores/elasticsearch.cjs +3 -1
  69. package/dist/vectorstores/elasticsearch.js +3 -1
  70. package/dist/vectorstores/momento_vector_index.cjs +292 -0
  71. package/dist/vectorstores/momento_vector_index.d.ts +135 -0
  72. package/dist/vectorstores/momento_vector_index.js +265 -0
  73. package/dist/vectorstores/neo4j_vector.cjs +578 -0
  74. package/dist/vectorstores/neo4j_vector.d.ts +61 -0
  75. package/dist/vectorstores/neo4j_vector.js +548 -0
  76. package/dist/vectorstores/supabase.cjs +37 -8
  77. package/dist/vectorstores/supabase.d.ts +28 -1
  78. package/dist/vectorstores/supabase.js +37 -8
  79. package/llms/yandex.cjs +1 -0
  80. package/llms/yandex.d.ts +1 -0
  81. package/llms/yandex.js +1 -0
  82. package/package.json +73 -3
  83. package/runnables/remote.cjs +1 -0
  84. package/runnables/remote.d.ts +1 -0
  85. package/runnables/remote.js +1 -0
  86. package/storage/encoder_backed.cjs +1 -0
  87. package/storage/encoder_backed.d.ts +1 -0
  88. package/storage/encoder_backed.js +1 -0
  89. package/storage/vercel_kv.cjs +1 -0
  90. package/storage/vercel_kv.d.ts +1 -0
  91. package/storage/vercel_kv.js +1 -0
  92. package/util/time.cjs +1 -0
  93. package/util/time.d.ts +1 -0
  94. package/util/time.js +1 -0
  95. package/vectorstores/momento_vector_index.cjs +1 -0
  96. package/vectorstores/momento_vector_index.d.ts +1 -0
  97. package/vectorstores/momento_vector_index.js +1 -0
  98. package/vectorstores/neo4j_vector.cjs +1 -0
  99. package/vectorstores/neo4j_vector.d.ts +1 -0
  100. package/vectorstores/neo4j_vector.js +1 -0
@@ -170,12 +170,12 @@ export class Runnable extends Serializable {
170
170
  * @returns A promise that resolves to the output values.
171
171
  */
172
172
  async _batchWithConfig(func, inputs, options, batchOptions) {
173
- const configs = this._getOptionsList((options ?? {}), inputs.length);
174
- const callbackManagers = await Promise.all(configs.map(getCallbackMangerForConfig));
175
- const runManagers = await Promise.all(callbackManagers.map((callbackManager, i) => callbackManager?.handleChainStart(this.toJSON(), _coerceToDict(inputs[i], "input"), undefined, configs[i].runType, undefined, undefined, configs[i].runName)));
173
+ const optionsList = this._getOptionsList(options ?? {}, inputs.length);
174
+ const callbackManagers = await Promise.all(optionsList.map(getCallbackMangerForConfig));
175
+ const runManagers = await Promise.all(callbackManagers.map((callbackManager, i) => callbackManager?.handleChainStart(this.toJSON(), _coerceToDict(inputs[i], "input"), undefined, optionsList[i].runType, undefined, undefined, optionsList[i].runName)));
176
176
  let outputs;
177
177
  try {
178
- outputs = await func(inputs, configs, runManagers, batchOptions);
178
+ outputs = await func(inputs, optionsList, runManagers, batchOptions);
179
179
  }
180
180
  catch (e) {
181
181
  await Promise.all(runManagers.map((runManager) => runManager?.handleChainError(e)));
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoteRunnable = void 0;
4
+ const base_js_1 = require("./base.cjs");
5
+ const stream_js_1 = require("../../util/stream.cjs");
6
+ const event_source_parse_js_1 = require("../../util/event-source-parse.cjs");
7
+ const document_js_1 = require("../../document.cjs");
8
+ const index_js_1 = require("../index.cjs");
9
+ const base_js_2 = require("../../prompts/base.cjs");
10
+ const chat_js_1 = require("../../prompts/chat.cjs");
11
+ function isSuperset(set, subset) {
12
+ for (const elem of subset) {
13
+ if (!set.has(elem)) {
14
+ return false;
15
+ }
16
+ }
17
+ return true;
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ function revive(obj) {
21
+ if (Array.isArray(obj))
22
+ return obj.map(revive);
23
+ if (typeof obj === "object") {
24
+ const keysArr = Object.keys(obj);
25
+ const keys = new Set(keysArr);
26
+ if (isSuperset(keys, new Set(["page_content", "metadata"])))
27
+ return new document_js_1.Document({
28
+ pageContent: obj.page_content,
29
+ metadata: obj.metadata,
30
+ });
31
+ if (isSuperset(keys, new Set(["content", "type", "is_chunk"]))) {
32
+ if (!obj.is_chunk) {
33
+ if (obj.type === "human") {
34
+ return new index_js_1.HumanMessage({
35
+ content: obj.content,
36
+ });
37
+ }
38
+ if (obj.type === "system") {
39
+ return new index_js_1.SystemMessage({
40
+ content: obj.content,
41
+ });
42
+ }
43
+ if (obj.type === "chat") {
44
+ return new index_js_1.ChatMessage({
45
+ content: obj.content,
46
+ role: obj.role,
47
+ });
48
+ }
49
+ if (obj.type === "function") {
50
+ return new index_js_1.FunctionMessage({
51
+ content: obj.content,
52
+ name: obj.name,
53
+ });
54
+ }
55
+ if (obj.type === "ai") {
56
+ return new index_js_1.AIMessage({
57
+ content: obj.content,
58
+ });
59
+ }
60
+ }
61
+ else {
62
+ if (obj.type === "human") {
63
+ return new index_js_1.HumanMessageChunk({
64
+ content: obj.content,
65
+ });
66
+ }
67
+ if (obj.type === "system") {
68
+ return new index_js_1.SystemMessageChunk({
69
+ content: obj.content,
70
+ });
71
+ }
72
+ if (obj.type === "chat") {
73
+ return new index_js_1.ChatMessageChunk({
74
+ content: obj.content,
75
+ role: obj.role,
76
+ });
77
+ }
78
+ if (obj.type === "function") {
79
+ return new index_js_1.FunctionMessageChunk({
80
+ content: obj.content,
81
+ name: obj.name,
82
+ });
83
+ }
84
+ if (obj.type === "ai") {
85
+ return new index_js_1.AIMessageChunk({
86
+ content: obj.content,
87
+ });
88
+ }
89
+ }
90
+ }
91
+ if (isSuperset(keys, new Set(["text"]))) {
92
+ return new base_js_2.StringPromptValue(obj.text);
93
+ }
94
+ if (isSuperset(keys, new Set(["messages"]))) {
95
+ return new chat_js_1.ChatPromptValue({
96
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
+ messages: obj.messages.map((msg) => revive(msg)),
98
+ });
99
+ }
100
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
+ const innerRevive = (key) => [
102
+ key,
103
+ revive(obj[key]),
104
+ ];
105
+ const rtn = Object.fromEntries(keysArr.map(innerRevive));
106
+ return rtn;
107
+ }
108
+ return obj;
109
+ }
110
+ function deserialize(str) {
111
+ const obj = JSON.parse(str);
112
+ return revive(obj);
113
+ }
114
+ function removeCallbacks(options) {
115
+ const rest = { ...options };
116
+ delete rest.callbacks;
117
+ return rest;
118
+ }
119
+ class RemoteRunnable extends base_js_1.Runnable {
120
+ constructor(fields) {
121
+ super(fields);
122
+ Object.defineProperty(this, "url", {
123
+ enumerable: true,
124
+ configurable: true,
125
+ writable: true,
126
+ value: void 0
127
+ });
128
+ Object.defineProperty(this, "options", {
129
+ enumerable: true,
130
+ configurable: true,
131
+ writable: true,
132
+ value: void 0
133
+ });
134
+ Object.defineProperty(this, "lc_namespace", {
135
+ enumerable: true,
136
+ configurable: true,
137
+ writable: true,
138
+ value: ["langchain", "schema", "runnable", "remote"]
139
+ });
140
+ const { url, options } = fields;
141
+ this.url = url.replace(/\/$/, ""); // remove trailing slash
142
+ this.options = options;
143
+ }
144
+ async post(path, body) {
145
+ return await fetch(`${this.url}${path}`, {
146
+ method: "POST",
147
+ body: JSON.stringify(body),
148
+ headers: {
149
+ "Content-Type": "application/json",
150
+ },
151
+ signal: AbortSignal.timeout(this.options?.timeout ?? 5000),
152
+ });
153
+ }
154
+ async invoke(input, options) {
155
+ const [config, kwargs] = this._separateRunnableConfigFromCallOptions(options);
156
+ const response = await this.post("/invoke", {
157
+ input,
158
+ config: removeCallbacks(config),
159
+ kwargs: kwargs ?? {},
160
+ });
161
+ return revive((await response.json()).output);
162
+ }
163
+ async _batch(inputs, options, _, batchOptions) {
164
+ if (batchOptions?.returnExceptions) {
165
+ throw new Error("returnExceptions is not supported for remote clients");
166
+ }
167
+ const configsAndKwargsArray = options?.map((opts) => this._separateRunnableConfigFromCallOptions(opts));
168
+ const [configs, kwargs] = configsAndKwargsArray?.reduce(([pc, pk], [c, k]) => [
169
+ [...pc, c],
170
+ [...pk, k],
171
+ ], [[], []]) ?? [[], []];
172
+ const response = await this.post("/batch", {
173
+ inputs,
174
+ config: (configs ?? [])
175
+ .map(removeCallbacks)
176
+ .map((config) => ({ ...config, ...batchOptions })),
177
+ kwargs,
178
+ });
179
+ const body = await response.json();
180
+ if (!body.output)
181
+ throw new Error("Invalid response from remote runnable");
182
+ return revive(body.output);
183
+ }
184
+ async batch(inputs, options, batchOptions) {
185
+ if (batchOptions?.returnExceptions) {
186
+ throw Error("returnExceptions is not supported for remote clients");
187
+ }
188
+ return this._batchWithConfig(this._batch.bind(this), inputs, options, batchOptions);
189
+ }
190
+ async stream(input, options) {
191
+ const [config, kwargs] = this._separateRunnableConfigFromCallOptions(options);
192
+ const response = await this.post("/stream", {
193
+ input,
194
+ config,
195
+ kwargs,
196
+ });
197
+ if (!response.ok) {
198
+ const json = await response.json();
199
+ const error = new Error(`RemoteRunnable call failed with status code ${response.status}: ${json.message}`);
200
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
201
+ error.response = response;
202
+ throw error;
203
+ }
204
+ const { body } = response;
205
+ if (!body) {
206
+ throw new Error("Could not begin remote stream. Please check the given URL and try again.");
207
+ }
208
+ const stream = new ReadableStream({
209
+ async start(controller) {
210
+ const enqueueLine = (0, event_source_parse_js_1.getMessages)((msg) => {
211
+ if (msg.data)
212
+ controller.enqueue(deserialize(msg.data));
213
+ });
214
+ const onLine = (line, fieldLength, flush) => {
215
+ enqueueLine(line, fieldLength, flush);
216
+ if (flush)
217
+ controller.close();
218
+ };
219
+ await (0, event_source_parse_js_1.getBytes)(body, (0, event_source_parse_js_1.getLines)(onLine));
220
+ },
221
+ });
222
+ return stream_js_1.IterableReadableStream.fromReadableStream(stream);
223
+ }
224
+ }
225
+ exports.RemoteRunnable = RemoteRunnable;
@@ -0,0 +1,28 @@
1
+ import { Runnable, RunnableBatchOptions } from "./base.js";
2
+ import { RunnableConfig } from "./config.js";
3
+ import { IterableReadableStream } from "../../util/stream.js";
4
+ import { CallbackManagerForChainRun } from "../../callbacks/manager.js";
5
+ type RemoteRunnableOptions = {
6
+ timeout?: number;
7
+ };
8
+ export declare class RemoteRunnable<RunInput, RunOutput, CallOptions extends RunnableConfig> extends Runnable<RunInput, RunOutput, CallOptions> {
9
+ private url;
10
+ private options?;
11
+ lc_namespace: string[];
12
+ constructor(fields: {
13
+ url: string;
14
+ options?: RemoteRunnableOptions;
15
+ });
16
+ private post;
17
+ invoke(input: RunInput, options?: Partial<CallOptions>): Promise<RunOutput>;
18
+ _batch(inputs: RunInput[], options?: Partial<CallOptions>[], _?: (CallbackManagerForChainRun | undefined)[], batchOptions?: RunnableBatchOptions): Promise<(RunOutput | Error)[]>;
19
+ batch(inputs: RunInput[], options?: Partial<CallOptions> | Partial<CallOptions>[], batchOptions?: RunnableBatchOptions & {
20
+ returnExceptions?: false;
21
+ }): Promise<RunOutput[]>;
22
+ batch(inputs: RunInput[], options?: Partial<CallOptions> | Partial<CallOptions>[], batchOptions?: RunnableBatchOptions & {
23
+ returnExceptions: true;
24
+ }): Promise<(RunOutput | Error)[]>;
25
+ batch(inputs: RunInput[], options?: Partial<CallOptions> | Partial<CallOptions>[], batchOptions?: RunnableBatchOptions): Promise<(RunOutput | Error)[]>;
26
+ stream(input: RunInput, options?: Partial<CallOptions>): Promise<IterableReadableStream<RunOutput>>;
27
+ }
28
+ export {};
@@ -0,0 +1,221 @@
1
+ import { Runnable } from "./base.js";
2
+ import { IterableReadableStream } from "../../util/stream.js";
3
+ import { getBytes, getLines, getMessages, } from "../../util/event-source-parse.js";
4
+ import { Document } from "../../document.js";
5
+ import { AIMessage, AIMessageChunk, ChatMessage, ChatMessageChunk, FunctionMessage, FunctionMessageChunk, HumanMessage, HumanMessageChunk, SystemMessage, SystemMessageChunk, } from "../index.js";
6
+ import { StringPromptValue } from "../../prompts/base.js";
7
+ import { ChatPromptValue } from "../../prompts/chat.js";
8
+ function isSuperset(set, subset) {
9
+ for (const elem of subset) {
10
+ if (!set.has(elem)) {
11
+ return false;
12
+ }
13
+ }
14
+ return true;
15
+ }
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ function revive(obj) {
18
+ if (Array.isArray(obj))
19
+ return obj.map(revive);
20
+ if (typeof obj === "object") {
21
+ const keysArr = Object.keys(obj);
22
+ const keys = new Set(keysArr);
23
+ if (isSuperset(keys, new Set(["page_content", "metadata"])))
24
+ return new Document({
25
+ pageContent: obj.page_content,
26
+ metadata: obj.metadata,
27
+ });
28
+ if (isSuperset(keys, new Set(["content", "type", "is_chunk"]))) {
29
+ if (!obj.is_chunk) {
30
+ if (obj.type === "human") {
31
+ return new HumanMessage({
32
+ content: obj.content,
33
+ });
34
+ }
35
+ if (obj.type === "system") {
36
+ return new SystemMessage({
37
+ content: obj.content,
38
+ });
39
+ }
40
+ if (obj.type === "chat") {
41
+ return new ChatMessage({
42
+ content: obj.content,
43
+ role: obj.role,
44
+ });
45
+ }
46
+ if (obj.type === "function") {
47
+ return new FunctionMessage({
48
+ content: obj.content,
49
+ name: obj.name,
50
+ });
51
+ }
52
+ if (obj.type === "ai") {
53
+ return new AIMessage({
54
+ content: obj.content,
55
+ });
56
+ }
57
+ }
58
+ else {
59
+ if (obj.type === "human") {
60
+ return new HumanMessageChunk({
61
+ content: obj.content,
62
+ });
63
+ }
64
+ if (obj.type === "system") {
65
+ return new SystemMessageChunk({
66
+ content: obj.content,
67
+ });
68
+ }
69
+ if (obj.type === "chat") {
70
+ return new ChatMessageChunk({
71
+ content: obj.content,
72
+ role: obj.role,
73
+ });
74
+ }
75
+ if (obj.type === "function") {
76
+ return new FunctionMessageChunk({
77
+ content: obj.content,
78
+ name: obj.name,
79
+ });
80
+ }
81
+ if (obj.type === "ai") {
82
+ return new AIMessageChunk({
83
+ content: obj.content,
84
+ });
85
+ }
86
+ }
87
+ }
88
+ if (isSuperset(keys, new Set(["text"]))) {
89
+ return new StringPromptValue(obj.text);
90
+ }
91
+ if (isSuperset(keys, new Set(["messages"]))) {
92
+ return new ChatPromptValue({
93
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
+ messages: obj.messages.map((msg) => revive(msg)),
95
+ });
96
+ }
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ const innerRevive = (key) => [
99
+ key,
100
+ revive(obj[key]),
101
+ ];
102
+ const rtn = Object.fromEntries(keysArr.map(innerRevive));
103
+ return rtn;
104
+ }
105
+ return obj;
106
+ }
107
+ function deserialize(str) {
108
+ const obj = JSON.parse(str);
109
+ return revive(obj);
110
+ }
111
+ function removeCallbacks(options) {
112
+ const rest = { ...options };
113
+ delete rest.callbacks;
114
+ return rest;
115
+ }
116
+ export class RemoteRunnable extends Runnable {
117
+ constructor(fields) {
118
+ super(fields);
119
+ Object.defineProperty(this, "url", {
120
+ enumerable: true,
121
+ configurable: true,
122
+ writable: true,
123
+ value: void 0
124
+ });
125
+ Object.defineProperty(this, "options", {
126
+ enumerable: true,
127
+ configurable: true,
128
+ writable: true,
129
+ value: void 0
130
+ });
131
+ Object.defineProperty(this, "lc_namespace", {
132
+ enumerable: true,
133
+ configurable: true,
134
+ writable: true,
135
+ value: ["langchain", "schema", "runnable", "remote"]
136
+ });
137
+ const { url, options } = fields;
138
+ this.url = url.replace(/\/$/, ""); // remove trailing slash
139
+ this.options = options;
140
+ }
141
+ async post(path, body) {
142
+ return await fetch(`${this.url}${path}`, {
143
+ method: "POST",
144
+ body: JSON.stringify(body),
145
+ headers: {
146
+ "Content-Type": "application/json",
147
+ },
148
+ signal: AbortSignal.timeout(this.options?.timeout ?? 5000),
149
+ });
150
+ }
151
+ async invoke(input, options) {
152
+ const [config, kwargs] = this._separateRunnableConfigFromCallOptions(options);
153
+ const response = await this.post("/invoke", {
154
+ input,
155
+ config: removeCallbacks(config),
156
+ kwargs: kwargs ?? {},
157
+ });
158
+ return revive((await response.json()).output);
159
+ }
160
+ async _batch(inputs, options, _, batchOptions) {
161
+ if (batchOptions?.returnExceptions) {
162
+ throw new Error("returnExceptions is not supported for remote clients");
163
+ }
164
+ const configsAndKwargsArray = options?.map((opts) => this._separateRunnableConfigFromCallOptions(opts));
165
+ const [configs, kwargs] = configsAndKwargsArray?.reduce(([pc, pk], [c, k]) => [
166
+ [...pc, c],
167
+ [...pk, k],
168
+ ], [[], []]) ?? [[], []];
169
+ const response = await this.post("/batch", {
170
+ inputs,
171
+ config: (configs ?? [])
172
+ .map(removeCallbacks)
173
+ .map((config) => ({ ...config, ...batchOptions })),
174
+ kwargs,
175
+ });
176
+ const body = await response.json();
177
+ if (!body.output)
178
+ throw new Error("Invalid response from remote runnable");
179
+ return revive(body.output);
180
+ }
181
+ async batch(inputs, options, batchOptions) {
182
+ if (batchOptions?.returnExceptions) {
183
+ throw Error("returnExceptions is not supported for remote clients");
184
+ }
185
+ return this._batchWithConfig(this._batch.bind(this), inputs, options, batchOptions);
186
+ }
187
+ async stream(input, options) {
188
+ const [config, kwargs] = this._separateRunnableConfigFromCallOptions(options);
189
+ const response = await this.post("/stream", {
190
+ input,
191
+ config,
192
+ kwargs,
193
+ });
194
+ if (!response.ok) {
195
+ const json = await response.json();
196
+ const error = new Error(`RemoteRunnable call failed with status code ${response.status}: ${json.message}`);
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ error.response = response;
199
+ throw error;
200
+ }
201
+ const { body } = response;
202
+ if (!body) {
203
+ throw new Error("Could not begin remote stream. Please check the given URL and try again.");
204
+ }
205
+ const stream = new ReadableStream({
206
+ async start(controller) {
207
+ const enqueueLine = getMessages((msg) => {
208
+ if (msg.data)
209
+ controller.enqueue(deserialize(msg.data));
210
+ });
211
+ const onLine = (line, fieldLength, flush) => {
212
+ enqueueLine(line, fieldLength, flush);
213
+ if (flush)
214
+ controller.close();
215
+ };
216
+ await getBytes(body, getLines(onLine));
217
+ },
218
+ });
219
+ return IterableReadableStream.fromReadableStream(stream);
220
+ }
221
+ }
@@ -1,8 +1,35 @@
1
1
  import { Serializable } from "../load/serializable.js";
2
+ /** @deprecated For backwards compatibility only. Remove on next minor version upgrade. */
3
+ export interface BaseStoreInterface<K, V> {
4
+ /**
5
+ * Method to get multiple values for a set of keys.
6
+ * @param {K[]} keys - An array of keys.
7
+ * @returns {Promise<(V | undefined)[]>} - A Promise that resolves with array of values or undefined if key not found.
8
+ */
9
+ mget(keys: K[]): Promise<(V | undefined)[]>;
10
+ /**
11
+ * Method to set a value for multiple keys.
12
+ * @param {[K, V][]} keyValuePairs - An array of key-value pairs.
13
+ * @returns {Promise<void>} - A Promise that resolves when the operation is complete.
14
+ */
15
+ mset(keyValuePairs: [K, V][]): Promise<void>;
16
+ /**
17
+ * Method to delete multiple keys.
18
+ * @param {K[]} keys - An array of keys to delete.
19
+ * @returns {Promise<void>} - A Promise that resolves when the operation is complete.
20
+ */
21
+ mdelete(keys: K[]): Promise<void>;
22
+ /**
23
+ * Method to yield keys optionally based on a prefix.
24
+ * @param {string} prefix - Optional prefix to filter keys.
25
+ * @returns {AsyncGenerator<K | string>} - An asynchronous generator that yields keys on iteration.
26
+ */
27
+ yieldKeys(prefix?: string): AsyncGenerator<K | string>;
28
+ }
2
29
  /**
3
30
  * Abstract interface for a key-value store.
4
31
  */
5
- export declare abstract class BaseStore<K, V> extends Serializable {
32
+ export declare abstract class BaseStore<K, V> extends Serializable implements BaseStoreInterface<K, V> {
6
33
  /**
7
34
  * Abstract method to get multiple values for a set of keys.
8
35
  * @param {K[]} keys - An array of keys.
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EncoderBackedStore = void 0;
3
+ exports.createDocumentStoreFromByteStore = exports.EncoderBackedStore = void 0;
4
4
  const storage_js_1 = require("../schema/storage.cjs");
5
+ const document_js_1 = require("../document.cjs");
5
6
  /**
6
7
  * Class that provides a layer of abstraction over the base storage,
7
8
  * allowing for the encoding and decoding of keys and values. It extends
@@ -15,7 +16,7 @@ class EncoderBackedStore extends storage_js_1.BaseStore {
15
16
  enumerable: true,
16
17
  configurable: true,
17
18
  writable: true,
18
- value: ["langchain", "storage", "encoder_backed"]
19
+ value: ["langchain", "storage"]
19
20
  });
20
21
  Object.defineProperty(this, "store", {
21
22
  enumerable: true,
@@ -91,3 +92,14 @@ class EncoderBackedStore extends storage_js_1.BaseStore {
91
92
  }
92
93
  }
93
94
  exports.EncoderBackedStore = EncoderBackedStore;
95
+ function createDocumentStoreFromByteStore(store) {
96
+ const encoder = new TextEncoder();
97
+ const decoder = new TextDecoder();
98
+ return new EncoderBackedStore({
99
+ store,
100
+ keyEncoder: (key) => key,
101
+ valueSerializer: (doc) => encoder.encode(JSON.stringify({ pageContent: doc.pageContent, metadata: doc.metadata })),
102
+ valueDeserializer: (bytes) => new document_js_1.Document(JSON.parse(decoder.decode(bytes))),
103
+ });
104
+ }
105
+ exports.createDocumentStoreFromByteStore = createDocumentStoreFromByteStore;
@@ -1,4 +1,5 @@
1
1
  import { BaseStore } from "../schema/storage.js";
2
+ import { Document } from "../document.js";
2
3
  /**
3
4
  * Class that provides a layer of abstraction over the base storage,
4
5
  * allowing for the encoding and decoding of keys and values. It extends
@@ -43,3 +44,4 @@ export declare class EncoderBackedStore<K, V, SerializedType = any> extends Base
43
44
  */
44
45
  yieldKeys(prefix?: string | undefined): AsyncGenerator<string | K>;
45
46
  }
47
+ export declare function createDocumentStoreFromByteStore(store: BaseStore<string, Uint8Array>): EncoderBackedStore<string, Document<Record<string, any>>, Uint8Array>;
@@ -1,4 +1,5 @@
1
1
  import { BaseStore } from "../schema/storage.js";
2
+ import { Document } from "../document.js";
2
3
  /**
3
4
  * Class that provides a layer of abstraction over the base storage,
4
5
  * allowing for the encoding and decoding of keys and values. It extends
@@ -12,7 +13,7 @@ export class EncoderBackedStore extends BaseStore {
12
13
  enumerable: true,
13
14
  configurable: true,
14
15
  writable: true,
15
- value: ["langchain", "storage", "encoder_backed"]
16
+ value: ["langchain", "storage"]
16
17
  });
17
18
  Object.defineProperty(this, "store", {
18
19
  enumerable: true,
@@ -87,3 +88,13 @@ export class EncoderBackedStore extends BaseStore {
87
88
  yield* this.store.yieldKeys(prefix);
88
89
  }
89
90
  }
91
+ export function createDocumentStoreFromByteStore(store) {
92
+ const encoder = new TextEncoder();
93
+ const decoder = new TextDecoder();
94
+ return new EncoderBackedStore({
95
+ store,
96
+ keyEncoder: (key) => key,
97
+ valueSerializer: (doc) => encoder.encode(JSON.stringify({ pageContent: doc.pageContent, metadata: doc.metadata })),
98
+ valueDeserializer: (bytes) => new Document(JSON.parse(decoder.decode(bytes))),
99
+ });
100
+ }
@@ -14,7 +14,7 @@ class InMemoryStore extends storage_js_1.BaseStore {
14
14
  enumerable: true,
15
15
  configurable: true,
16
16
  writable: true,
17
- value: ["langchain", "storage", "in_memory"]
17
+ value: ["langchain", "storage"]
18
18
  });
19
19
  Object.defineProperty(this, "store", {
20
20
  enumerable: true,
@@ -11,7 +11,7 @@ export class InMemoryStore extends BaseStore {
11
11
  enumerable: true,
12
12
  configurable: true,
13
13
  writable: true,
14
- value: ["langchain", "storage", "in_memory"]
14
+ value: ["langchain", "storage"]
15
15
  });
16
16
  Object.defineProperty(this, "store", {
17
17
  enumerable: true,
@@ -14,7 +14,7 @@ class RedisByteStore extends storage_js_1.BaseStore {
14
14
  enumerable: true,
15
15
  configurable: true,
16
16
  writable: true,
17
- value: ["langchain", "storage", "ioredis"]
17
+ value: ["langchain", "storage"]
18
18
  });
19
19
  Object.defineProperty(this, "client", {
20
20
  enumerable: true,
@@ -68,12 +68,12 @@ class RedisByteStore extends storage_js_1.BaseStore {
68
68
  async mget(keys) {
69
69
  const prefixedKeys = keys.map(this._getPrefixedKey.bind(this));
70
70
  const retrievedValues = await this.client.mgetBuffer(prefixedKeys);
71
- return retrievedValues.map((key) => {
72
- if (!key) {
71
+ return retrievedValues.map((value) => {
72
+ if (!value) {
73
73
  return undefined;
74
74
  }
75
75
  else {
76
- return key;
76
+ return value;
77
77
  }
78
78
  });
79
79
  }
@@ -11,7 +11,7 @@ export class RedisByteStore extends BaseStore {
11
11
  enumerable: true,
12
12
  configurable: true,
13
13
  writable: true,
14
- value: ["langchain", "storage", "ioredis"]
14
+ value: ["langchain", "storage"]
15
15
  });
16
16
  Object.defineProperty(this, "client", {
17
17
  enumerable: true,
@@ -65,12 +65,12 @@ export class RedisByteStore extends BaseStore {
65
65
  async mget(keys) {
66
66
  const prefixedKeys = keys.map(this._getPrefixedKey.bind(this));
67
67
  const retrievedValues = await this.client.mgetBuffer(prefixedKeys);
68
- return retrievedValues.map((key) => {
69
- if (!key) {
68
+ return retrievedValues.map((value) => {
69
+ if (!value) {
70
70
  return undefined;
71
71
  }
72
72
  else {
73
- return key;
73
+ return value;
74
74
  }
75
75
  });
76
76
  }