langchain 0.0.165 → 0.0.166
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.
- package/dist/cache/momento.cjs +7 -7
- package/dist/cache/momento.d.ts +1 -1
- package/dist/cache/momento.js +1 -1
- package/dist/document_loaders/fs/unstructured.cjs +40 -0
- package/dist/document_loaders/fs/unstructured.d.ts +27 -0
- package/dist/document_loaders/fs/unstructured.js +40 -0
- package/dist/experimental/chat_models/anthropic_functions.cjs +34 -2
- package/dist/experimental/chat_models/anthropic_functions.d.ts +15 -5
- package/dist/experimental/chat_models/anthropic_functions.js +34 -2
- package/dist/load/import_constants.cjs +1 -0
- package/dist/load/import_constants.js +1 -0
- package/dist/load/import_map.cjs +3 -1
- package/dist/load/import_map.d.ts +2 -0
- package/dist/load/import_map.js +2 -0
- package/dist/prompts/chat.cjs +19 -2
- package/dist/prompts/chat.d.ts +1 -0
- package/dist/prompts/chat.js +19 -2
- package/dist/retrievers/self_query/base.cjs +4 -1
- package/dist/retrievers/self_query/base.d.ts +3 -2
- package/dist/retrievers/self_query/base.js +4 -1
- package/dist/retrievers/self_query/index.cjs +2 -2
- package/dist/retrievers/self_query/index.d.ts +2 -0
- package/dist/retrievers/self_query/index.js +2 -2
- package/dist/runnables/remote.cjs +225 -0
- package/dist/runnables/remote.d.ts +28 -0
- package/dist/runnables/remote.js +221 -0
- package/dist/schema/index.cjs +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/runnable/base.cjs +4 -4
- package/dist/schema/runnable/base.d.ts +9 -7
- package/dist/schema/runnable/base.js +4 -4
- package/dist/schema/runnable/remote.cjs +225 -0
- package/dist/schema/runnable/remote.d.ts +28 -0
- package/dist/schema/runnable/remote.js +221 -0
- package/dist/stores/message/momento.cjs +11 -11
- package/dist/stores/message/momento.d.ts +1 -1
- package/dist/stores/message/momento.js +1 -1
- package/dist/util/time.cjs +14 -0
- package/dist/util/time.d.ts +6 -0
- package/dist/util/time.js +10 -0
- package/dist/vectorstores/momento_vector_index.cjs +292 -0
- package/dist/vectorstores/momento_vector_index.d.ts +135 -0
- package/dist/vectorstores/momento_vector_index.js +265 -0
- package/dist/vectorstores/supabase.cjs +37 -8
- package/dist/vectorstores/supabase.d.ts +28 -1
- package/dist/vectorstores/supabase.js +37 -8
- package/package.json +36 -3
- package/runnables/remote.cjs +1 -0
- package/runnables/remote.d.ts +1 -0
- package/runnables/remote.js +1 -0
- package/util/time.cjs +1 -0
- package/util/time.d.ts +1 -0
- package/util/time.js +1 -0
- package/vectorstores/momento_vector_index.cjs +1 -0
- package/vectorstores/momento_vector_index.d.ts +1 -0
- package/vectorstores/momento_vector_index.js +1 -0
|
@@ -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
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MomentoChatMessageHistory = void 0;
|
|
4
4
|
/* eslint-disable no-instanceof/no-instanceof */
|
|
5
|
-
const
|
|
5
|
+
const sdk_core_1 = require("@gomomento/sdk-core");
|
|
6
6
|
const index_js_1 = require("../../schema/index.cjs");
|
|
7
7
|
const utils_js_1 = require("./utils.cjs");
|
|
8
8
|
const momento_js_1 = require("../../util/momento.cjs");
|
|
@@ -50,8 +50,8 @@ class MomentoChatMessageHistory extends index_js_1.BaseListChatMessageHistory {
|
|
|
50
50
|
this.validateTtlSeconds(props.sessionTtl);
|
|
51
51
|
this.sessionTtl =
|
|
52
52
|
props.sessionTtl !== undefined
|
|
53
|
-
?
|
|
54
|
-
:
|
|
53
|
+
? sdk_core_1.CollectionTtl.of(props.sessionTtl)
|
|
54
|
+
: sdk_core_1.CollectionTtl.fromCacheTtl();
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Create a new chat message history backed by Momento.
|
|
@@ -80,7 +80,7 @@ class MomentoChatMessageHistory extends index_js_1.BaseListChatMessageHistory {
|
|
|
80
80
|
*/
|
|
81
81
|
validateTtlSeconds(ttlSeconds) {
|
|
82
82
|
if (ttlSeconds !== undefined && ttlSeconds <= 0) {
|
|
83
|
-
throw new
|
|
83
|
+
throw new sdk_core_1.InvalidArgumentError("ttlSeconds must be positive.");
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
@@ -90,15 +90,15 @@ class MomentoChatMessageHistory extends index_js_1.BaseListChatMessageHistory {
|
|
|
90
90
|
async getMessages() {
|
|
91
91
|
const fetchResponse = await this.client.listFetch(this.cacheName, this.sessionId);
|
|
92
92
|
let messages = [];
|
|
93
|
-
if (fetchResponse instanceof
|
|
93
|
+
if (fetchResponse instanceof sdk_core_1.CacheListFetch.Hit) {
|
|
94
94
|
messages = fetchResponse
|
|
95
95
|
.valueList()
|
|
96
96
|
.map((serializedStoredMessage) => JSON.parse(serializedStoredMessage));
|
|
97
97
|
}
|
|
98
|
-
else if (fetchResponse instanceof
|
|
98
|
+
else if (fetchResponse instanceof sdk_core_1.CacheListFetch.Miss) {
|
|
99
99
|
// pass
|
|
100
100
|
}
|
|
101
|
-
else if (fetchResponse instanceof
|
|
101
|
+
else if (fetchResponse instanceof sdk_core_1.CacheListFetch.Error) {
|
|
102
102
|
throw fetchResponse.innerException();
|
|
103
103
|
}
|
|
104
104
|
else {
|
|
@@ -114,10 +114,10 @@ class MomentoChatMessageHistory extends index_js_1.BaseListChatMessageHistory {
|
|
|
114
114
|
async addMessage(message) {
|
|
115
115
|
const messageToAdd = JSON.stringify((0, utils_js_1.mapChatMessagesToStoredMessages)([message])[0]);
|
|
116
116
|
const pushResponse = await this.client.listPushBack(this.cacheName, this.sessionId, messageToAdd, { ttl: this.sessionTtl });
|
|
117
|
-
if (pushResponse instanceof
|
|
117
|
+
if (pushResponse instanceof sdk_core_1.CacheListPushBack.Success) {
|
|
118
118
|
// pass
|
|
119
119
|
}
|
|
120
|
-
else if (pushResponse instanceof
|
|
120
|
+
else if (pushResponse instanceof sdk_core_1.CacheListPushBack.Error) {
|
|
121
121
|
throw pushResponse.innerException();
|
|
122
122
|
}
|
|
123
123
|
else {
|
|
@@ -130,10 +130,10 @@ class MomentoChatMessageHistory extends index_js_1.BaseListChatMessageHistory {
|
|
|
130
130
|
*/
|
|
131
131
|
async clear() {
|
|
132
132
|
const deleteResponse = await this.client.delete(this.cacheName, this.sessionId);
|
|
133
|
-
if (deleteResponse instanceof
|
|
133
|
+
if (deleteResponse instanceof sdk_core_1.CacheDelete.Success) {
|
|
134
134
|
// pass
|
|
135
135
|
}
|
|
136
|
-
else if (deleteResponse instanceof
|
|
136
|
+
else if (deleteResponse instanceof sdk_core_1.CacheDelete.Error) {
|
|
137
137
|
throw deleteResponse.innerException();
|
|
138
138
|
}
|
|
139
139
|
else {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-instanceof/no-instanceof */
|
|
2
|
-
import { CacheDelete, CacheListFetch, CacheListPushBack, InvalidArgumentError, CollectionTtl, } from "@gomomento/sdk";
|
|
2
|
+
import { CacheDelete, CacheListFetch, CacheListPushBack, InvalidArgumentError, CollectionTtl, } from "@gomomento/sdk-core";
|
|
3
3
|
import { BaseListChatMessageHistory, } from "../../schema/index.js";
|
|
4
4
|
import { mapChatMessagesToStoredMessages, mapStoredMessagesToChatMessages, } from "./utils.js";
|
|
5
5
|
import { ensureCacheExists } from "../../util/momento.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sleep = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Sleep for a given amount of time.
|
|
6
|
+
* @param ms - The number of milliseconds to sleep for. Defaults to 1000.
|
|
7
|
+
* @returns A promise that resolves when the sleep is complete.
|
|
8
|
+
*/
|
|
9
|
+
async function sleep(ms = 1000) {
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
setTimeout(resolve, ms);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
exports.sleep = sleep;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sleep for a given amount of time.
|
|
3
|
+
* @param ms - The number of milliseconds to sleep for. Defaults to 1000.
|
|
4
|
+
* @returns A promise that resolves when the sleep is complete.
|
|
5
|
+
*/
|
|
6
|
+
export async function sleep(ms = 1000) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
setTimeout(resolve, ms);
|
|
9
|
+
});
|
|
10
|
+
}
|