@langchain/core 0.1.63 → 0.2.0
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/callbacks/base.cjs +9 -1
- package/dist/callbacks/base.d.ts +3 -0
- package/dist/callbacks/base.js +9 -1
- package/dist/callbacks/manager.cjs +51 -0
- package/dist/callbacks/manager.js +51 -0
- package/dist/document_loaders/base.cjs +24 -0
- package/dist/document_loaders/base.d.ts +28 -0
- package/dist/document_loaders/base.js +20 -0
- package/dist/documents/transformers.d.ts +1 -1
- package/dist/indexing/base.cjs +270 -0
- package/dist/indexing/base.d.ts +114 -0
- package/dist/indexing/base.js +261 -0
- package/dist/indexing/index.cjs +18 -0
- package/dist/indexing/index.d.ts +2 -0
- package/dist/indexing/index.js +2 -0
- package/dist/indexing/record_manager.cjs +18 -0
- package/dist/indexing/record_manager.d.ts +64 -0
- package/dist/indexing/record_manager.js +14 -0
- package/dist/language_models/chat_models.cjs +21 -3
- package/dist/language_models/chat_models.d.ts +9 -0
- package/dist/language_models/chat_models.js +21 -3
- package/dist/runnables/base.cjs +39 -14
- package/dist/runnables/base.d.ts +4 -4
- package/dist/runnables/base.js +39 -14
- package/dist/runnables/passthrough.cjs +1 -0
- package/dist/runnables/passthrough.d.ts +1 -1
- package/dist/runnables/passthrough.js +1 -0
- package/dist/runnables/remote.cjs +60 -48
- package/dist/runnables/remote.d.ts +6 -2
- package/dist/runnables/remote.js +61 -49
- package/dist/utils/stream.cjs +27 -11
- package/dist/utils/stream.d.ts +6 -1
- package/dist/utils/stream.js +27 -11
- package/document_loaders/base.cjs +1 -0
- package/document_loaders/base.d.cts +1 -0
- package/document_loaders/base.d.ts +1 -0
- package/document_loaders/base.js +1 -0
- package/indexing.cjs +1 -0
- package/indexing.d.cts +1 -0
- package/indexing.d.ts +1 -0
- package/indexing.js +1 -0
- package/package.json +27 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Serializable } from "../load/serializable.js";
|
|
2
|
+
export declare const UUIDV5_NAMESPACE = "10f90ea3-90a4-4962-bf75-83a0f3c1c62a";
|
|
3
|
+
export type UpdateOptions = {
|
|
4
|
+
groupIds?: (string | null)[];
|
|
5
|
+
timeAtLeast?: number;
|
|
6
|
+
};
|
|
7
|
+
export type ListKeyOptions = {
|
|
8
|
+
before?: number;
|
|
9
|
+
after?: number;
|
|
10
|
+
groupIds?: (string | null)[];
|
|
11
|
+
limit?: number;
|
|
12
|
+
};
|
|
13
|
+
export interface RecordManagerInterface {
|
|
14
|
+
/**
|
|
15
|
+
* Creates schema in the record manager.
|
|
16
|
+
* @returns Promise
|
|
17
|
+
*/
|
|
18
|
+
createSchema(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns current time from the record manager.
|
|
21
|
+
* @returns Current time
|
|
22
|
+
*/
|
|
23
|
+
getTime(): Promise<number>;
|
|
24
|
+
/**
|
|
25
|
+
* Updates keys in the record manager.
|
|
26
|
+
* @param keys List of keys to update
|
|
27
|
+
* @param groupIds List of groupIds to update
|
|
28
|
+
* @param timeAtLeast Update only if current time is at least this value
|
|
29
|
+
* @returns Promise
|
|
30
|
+
* @throws Error if timeAtLeast is provided and current time is less than timeAtLeast
|
|
31
|
+
* @throws Error if number of keys does not match number of groupIds
|
|
32
|
+
*/
|
|
33
|
+
update(keys: string[], updateOptions: UpdateOptions): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if keys exist in the record manager.
|
|
36
|
+
* @param keys List of keys to check
|
|
37
|
+
* @returns List of booleans indicating if key exists in same order as provided keys
|
|
38
|
+
*/
|
|
39
|
+
exists(keys: string[]): Promise<boolean[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Lists keys from the record manager.
|
|
42
|
+
* @param before List keys before this timestamp
|
|
43
|
+
* @param after List keys after this timestamp
|
|
44
|
+
* @param groupIds List keys with these groupIds
|
|
45
|
+
* @param limit Limit the number of keys returned
|
|
46
|
+
* @returns List of keys
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
listKeys(options: ListKeyOptions): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Deletes keys from the record manager.
|
|
52
|
+
* @param keys List of keys to delete
|
|
53
|
+
*/
|
|
54
|
+
deleteKeys(keys: string[]): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
export declare abstract class RecordManager extends Serializable implements RecordManagerInterface {
|
|
57
|
+
lc_namespace: string[];
|
|
58
|
+
abstract createSchema(): Promise<void>;
|
|
59
|
+
abstract getTime(): Promise<number>;
|
|
60
|
+
abstract update(keys: string[], updateOptions?: UpdateOptions): Promise<void>;
|
|
61
|
+
abstract exists(keys: string[]): Promise<boolean[]>;
|
|
62
|
+
abstract listKeys(options?: ListKeyOptions): Promise<string[]>;
|
|
63
|
+
abstract deleteKeys(keys: string[]): Promise<void>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Serializable } from "../load/serializable.js";
|
|
2
|
+
// Arbitrary value, used for generating namespaced UUIDs.
|
|
3
|
+
export const UUIDV5_NAMESPACE = "10f90ea3-90a4-4962-bf75-83a0f3c1c62a";
|
|
4
|
+
export class RecordManager extends Serializable {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
Object.defineProperty(this, "lc_namespace", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: ["langchain", "recordmanagers"]
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -70,7 +70,11 @@ class BaseChatModel extends base_js_1.BaseLanguageModel {
|
|
|
70
70
|
const prompt = BaseChatModel._convertInputToPromptValue(input);
|
|
71
71
|
const messages = prompt.toChatMessages();
|
|
72
72
|
const [runnableConfig, callOptions] = this._separateRunnableConfigFromCallOptions(options);
|
|
73
|
-
const
|
|
73
|
+
const inheritableMetadata = {
|
|
74
|
+
...runnableConfig.metadata,
|
|
75
|
+
...this.getLsParams(callOptions),
|
|
76
|
+
};
|
|
77
|
+
const callbackManager_ = await manager_js_1.CallbackManager.configure(runnableConfig.callbacks, this.callbacks, runnableConfig.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
74
78
|
const extra = {
|
|
75
79
|
options: callOptions,
|
|
76
80
|
invocation_params: this?.invocationParams(callOptions),
|
|
@@ -103,11 +107,21 @@ class BaseChatModel extends base_js_1.BaseLanguageModel {
|
|
|
103
107
|
})));
|
|
104
108
|
}
|
|
105
109
|
}
|
|
110
|
+
getLsParams(options) {
|
|
111
|
+
return {
|
|
112
|
+
ls_model_type: "chat",
|
|
113
|
+
ls_stop: options.stop,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
106
116
|
/** @ignore */
|
|
107
117
|
async _generateUncached(messages, parsedOptions, handledOptions) {
|
|
108
118
|
const baseMessages = messages.map((messageList) => messageList.map(index_js_1.coerceMessageLikeToMessage));
|
|
119
|
+
const inheritableMetadata = {
|
|
120
|
+
...handledOptions.metadata,
|
|
121
|
+
...this.getLsParams(parsedOptions),
|
|
122
|
+
};
|
|
109
123
|
// create callback manager and start run
|
|
110
|
-
const callbackManager_ = await manager_js_1.CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags,
|
|
124
|
+
const callbackManager_ = await manager_js_1.CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
111
125
|
const extra = {
|
|
112
126
|
options: parsedOptions,
|
|
113
127
|
invocation_params: this?.invocationParams(parsedOptions),
|
|
@@ -164,8 +178,12 @@ class BaseChatModel extends base_js_1.BaseLanguageModel {
|
|
|
164
178
|
}
|
|
165
179
|
async _generateCached({ messages, cache, llmStringKey, parsedOptions, handledOptions, }) {
|
|
166
180
|
const baseMessages = messages.map((messageList) => messageList.map(index_js_1.coerceMessageLikeToMessage));
|
|
181
|
+
const inheritableMetadata = {
|
|
182
|
+
...handledOptions.metadata,
|
|
183
|
+
...this.getLsParams(parsedOptions),
|
|
184
|
+
};
|
|
167
185
|
// create callback manager and start run
|
|
168
|
-
const callbackManager_ = await manager_js_1.CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags,
|
|
186
|
+
const callbackManager_ = await manager_js_1.CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
169
187
|
const extra = {
|
|
170
188
|
options: parsedOptions,
|
|
171
189
|
invocation_params: this?.invocationParams(parsedOptions),
|
|
@@ -35,6 +35,14 @@ export type BaseChatModelCallOptions = BaseLanguageModelCallOptions;
|
|
|
35
35
|
* @returns A TransformStream instance that encodes chat message chunks.
|
|
36
36
|
*/
|
|
37
37
|
export declare function createChatMessageChunkEncoderStream(): TransformStream<BaseMessageChunk, any>;
|
|
38
|
+
export type LangSmithParams = {
|
|
39
|
+
ls_provider?: string;
|
|
40
|
+
ls_model_name?: string;
|
|
41
|
+
ls_model_type: "chat";
|
|
42
|
+
ls_temperature?: number;
|
|
43
|
+
ls_max_tokens?: number;
|
|
44
|
+
ls_stop?: Array<string>;
|
|
45
|
+
};
|
|
38
46
|
interface ChatModelGenerateCachedParameters<T extends BaseChatModel<CallOptions>, CallOptions extends BaseChatModelCallOptions = BaseChatModelCallOptions> {
|
|
39
47
|
messages: BaseMessageLike[][];
|
|
40
48
|
cache: BaseCache<Generation[]>;
|
|
@@ -70,6 +78,7 @@ export declare abstract class BaseChatModel<CallOptions extends BaseChatModelCal
|
|
|
70
78
|
invoke(input: BaseLanguageModelInput, options?: CallOptions): Promise<OutputMessageType>;
|
|
71
79
|
_streamResponseChunks(_messages: BaseMessage[], _options: this["ParsedCallOptions"], _runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
|
|
72
80
|
_streamIterator(input: BaseLanguageModelInput, options?: CallOptions): AsyncGenerator<OutputMessageType>;
|
|
81
|
+
protected getLsParams(options: this["ParsedCallOptions"]): LangSmithParams;
|
|
73
82
|
/** @ignore */
|
|
74
83
|
_generateUncached(messages: BaseMessageLike[][], parsedOptions: this["ParsedCallOptions"], handledOptions: RunnableConfig): Promise<LLMResult>;
|
|
75
84
|
_generateCached({ messages, cache, llmStringKey, parsedOptions, handledOptions, }: ChatModelGenerateCachedParameters<typeof this>): Promise<LLMResult & {
|
|
@@ -66,7 +66,11 @@ export class BaseChatModel extends BaseLanguageModel {
|
|
|
66
66
|
const prompt = BaseChatModel._convertInputToPromptValue(input);
|
|
67
67
|
const messages = prompt.toChatMessages();
|
|
68
68
|
const [runnableConfig, callOptions] = this._separateRunnableConfigFromCallOptions(options);
|
|
69
|
-
const
|
|
69
|
+
const inheritableMetadata = {
|
|
70
|
+
...runnableConfig.metadata,
|
|
71
|
+
...this.getLsParams(callOptions),
|
|
72
|
+
};
|
|
73
|
+
const callbackManager_ = await CallbackManager.configure(runnableConfig.callbacks, this.callbacks, runnableConfig.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
70
74
|
const extra = {
|
|
71
75
|
options: callOptions,
|
|
72
76
|
invocation_params: this?.invocationParams(callOptions),
|
|
@@ -99,11 +103,21 @@ export class BaseChatModel extends BaseLanguageModel {
|
|
|
99
103
|
})));
|
|
100
104
|
}
|
|
101
105
|
}
|
|
106
|
+
getLsParams(options) {
|
|
107
|
+
return {
|
|
108
|
+
ls_model_type: "chat",
|
|
109
|
+
ls_stop: options.stop,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
102
112
|
/** @ignore */
|
|
103
113
|
async _generateUncached(messages, parsedOptions, handledOptions) {
|
|
104
114
|
const baseMessages = messages.map((messageList) => messageList.map(coerceMessageLikeToMessage));
|
|
115
|
+
const inheritableMetadata = {
|
|
116
|
+
...handledOptions.metadata,
|
|
117
|
+
...this.getLsParams(parsedOptions),
|
|
118
|
+
};
|
|
105
119
|
// create callback manager and start run
|
|
106
|
-
const callbackManager_ = await CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags,
|
|
120
|
+
const callbackManager_ = await CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
107
121
|
const extra = {
|
|
108
122
|
options: parsedOptions,
|
|
109
123
|
invocation_params: this?.invocationParams(parsedOptions),
|
|
@@ -160,8 +174,12 @@ export class BaseChatModel extends BaseLanguageModel {
|
|
|
160
174
|
}
|
|
161
175
|
async _generateCached({ messages, cache, llmStringKey, parsedOptions, handledOptions, }) {
|
|
162
176
|
const baseMessages = messages.map((messageList) => messageList.map(coerceMessageLikeToMessage));
|
|
177
|
+
const inheritableMetadata = {
|
|
178
|
+
...handledOptions.metadata,
|
|
179
|
+
...this.getLsParams(parsedOptions),
|
|
180
|
+
};
|
|
163
181
|
// create callback manager and start run
|
|
164
|
-
const callbackManager_ = await CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags,
|
|
182
|
+
const callbackManager_ = await CallbackManager.configure(handledOptions.callbacks, this.callbacks, handledOptions.tags, this.tags, inheritableMetadata, this.metadata, { verbose: this.verbose });
|
|
165
183
|
const extra = {
|
|
166
184
|
options: parsedOptions,
|
|
167
185
|
invocation_params: this?.invocationParams(parsedOptions),
|
package/dist/runnables/base.cjs
CHANGED
|
@@ -168,7 +168,11 @@ class Runnable extends serializable_js_1.Serializable {
|
|
|
168
168
|
async stream(input, options) {
|
|
169
169
|
// Buffer the first streamed chunk to allow for initial errors
|
|
170
170
|
// to surface immediately.
|
|
171
|
-
const
|
|
171
|
+
const config = (0, config_js_1.ensureConfig)(options);
|
|
172
|
+
const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
|
|
173
|
+
generator: this._streamIterator(input, config),
|
|
174
|
+
config,
|
|
175
|
+
});
|
|
172
176
|
await wrappedGenerator.setup;
|
|
173
177
|
return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
174
178
|
}
|
|
@@ -450,13 +454,13 @@ class Runnable extends serializable_js_1.Serializable {
|
|
|
450
454
|
await runnableStreamConsumePromise;
|
|
451
455
|
}
|
|
452
456
|
}
|
|
453
|
-
|
|
457
|
+
streamEvents(input, options, streamOptions) {
|
|
458
|
+
const stream = this._streamEvents(input, options, streamOptions);
|
|
454
459
|
if (options.encoding === "text/event-stream") {
|
|
455
|
-
|
|
456
|
-
yield* (0, wrappers_js_1.convertToHttpEventStream)(stream);
|
|
460
|
+
return (0, wrappers_js_1.convertToHttpEventStream)(stream);
|
|
457
461
|
}
|
|
458
462
|
else {
|
|
459
|
-
|
|
463
|
+
return stream_js_1.IterableReadableStream.fromAsyncGenerator(stream);
|
|
460
464
|
}
|
|
461
465
|
}
|
|
462
466
|
async *_streamEvents(input, options, streamOptions) {
|
|
@@ -740,11 +744,16 @@ class RunnableBinding extends Runnable {
|
|
|
740
744
|
generator, options) {
|
|
741
745
|
yield* this.bound.transform(generator, await this._mergeConfig((0, config_js_1.ensureConfig)(options), this.kwargs));
|
|
742
746
|
}
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
747
|
+
streamEvents(input, options, streamOptions) {
|
|
748
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
749
|
+
const outerThis = this;
|
|
750
|
+
const generator = async function* () {
|
|
751
|
+
yield* outerThis.bound.streamEvents(input, {
|
|
752
|
+
...(await outerThis._mergeConfig((0, config_js_1.ensureConfig)(options), outerThis.kwargs)),
|
|
753
|
+
version: options.version,
|
|
754
|
+
}, streamOptions);
|
|
755
|
+
};
|
|
756
|
+
return stream_js_1.IterableReadableStream.fromAsyncGenerator(generator());
|
|
748
757
|
}
|
|
749
758
|
static isRunnableBinding(
|
|
750
759
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1292,7 +1301,11 @@ class RunnableMap extends Runnable {
|
|
|
1292
1301
|
async function* generator() {
|
|
1293
1302
|
yield input;
|
|
1294
1303
|
}
|
|
1295
|
-
const
|
|
1304
|
+
const config = (0, config_js_1.ensureConfig)(options);
|
|
1305
|
+
const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
|
|
1306
|
+
generator: this.transform(generator(), config),
|
|
1307
|
+
config,
|
|
1308
|
+
});
|
|
1296
1309
|
await wrappedGenerator.setup;
|
|
1297
1310
|
return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1298
1311
|
}
|
|
@@ -1460,7 +1473,11 @@ class RunnableLambda extends Runnable {
|
|
|
1460
1473
|
async function* generator() {
|
|
1461
1474
|
yield input;
|
|
1462
1475
|
}
|
|
1463
|
-
const
|
|
1476
|
+
const config = (0, config_js_1.ensureConfig)(options);
|
|
1477
|
+
const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
|
|
1478
|
+
generator: this.transform(generator(), config),
|
|
1479
|
+
config,
|
|
1480
|
+
});
|
|
1464
1481
|
await wrappedGenerator.setup;
|
|
1465
1482
|
return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1466
1483
|
}
|
|
@@ -1664,7 +1681,11 @@ class RunnableAssign extends Runnable {
|
|
|
1664
1681
|
async function* generator() {
|
|
1665
1682
|
yield input;
|
|
1666
1683
|
}
|
|
1667
|
-
const
|
|
1684
|
+
const config = (0, config_js_1.ensureConfig)(options);
|
|
1685
|
+
const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
|
|
1686
|
+
generator: this.transform(generator(), config),
|
|
1687
|
+
config,
|
|
1688
|
+
});
|
|
1668
1689
|
await wrappedGenerator.setup;
|
|
1669
1690
|
return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1670
1691
|
}
|
|
@@ -1732,7 +1753,11 @@ class RunnablePick extends Runnable {
|
|
|
1732
1753
|
async function* generator() {
|
|
1733
1754
|
yield input;
|
|
1734
1755
|
}
|
|
1735
|
-
const
|
|
1756
|
+
const config = (0, config_js_1.ensureConfig)(options);
|
|
1757
|
+
const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
|
|
1758
|
+
generator: this.transform(generator(), config),
|
|
1759
|
+
config,
|
|
1760
|
+
});
|
|
1736
1761
|
await wrappedGenerator.setup;
|
|
1737
1762
|
return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1738
1763
|
}
|
package/dist/runnables/base.d.ts
CHANGED
|
@@ -198,11 +198,11 @@ export declare abstract class Runnable<RunInput = any, RunOutput = any, CallOpti
|
|
|
198
198
|
*/
|
|
199
199
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
200
200
|
version: "v1";
|
|
201
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
201
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<StreamEvent>;
|
|
202
202
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
203
203
|
version: "v1";
|
|
204
204
|
encoding: "text/event-stream";
|
|
205
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
205
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
|
|
206
206
|
_streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
207
207
|
version: "v1";
|
|
208
208
|
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<StreamEvent>;
|
|
@@ -263,11 +263,11 @@ export declare class RunnableBinding<RunInput, RunOutput, CallOptions extends Ru
|
|
|
263
263
|
transform(generator: AsyncGenerator<RunInput>, options: Partial<CallOptions>): AsyncGenerator<RunOutput>;
|
|
264
264
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
265
265
|
version: "v1";
|
|
266
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
266
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<StreamEvent>;
|
|
267
267
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
268
268
|
version: "v1";
|
|
269
269
|
encoding: "text/event-stream";
|
|
270
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
270
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
|
|
271
271
|
static isRunnableBinding(thing: any): thing is RunnableBinding<any, any, any>;
|
|
272
272
|
/**
|
|
273
273
|
* Bind lifecycle listeners to a Runnable, returning a new Runnable.
|
package/dist/runnables/base.js
CHANGED
|
@@ -161,7 +161,11 @@ export class Runnable extends Serializable {
|
|
|
161
161
|
async stream(input, options) {
|
|
162
162
|
// Buffer the first streamed chunk to allow for initial errors
|
|
163
163
|
// to surface immediately.
|
|
164
|
-
const
|
|
164
|
+
const config = ensureConfig(options);
|
|
165
|
+
const wrappedGenerator = new AsyncGeneratorWithSetup({
|
|
166
|
+
generator: this._streamIterator(input, config),
|
|
167
|
+
config,
|
|
168
|
+
});
|
|
165
169
|
await wrappedGenerator.setup;
|
|
166
170
|
return IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
167
171
|
}
|
|
@@ -443,13 +447,13 @@ export class Runnable extends Serializable {
|
|
|
443
447
|
await runnableStreamConsumePromise;
|
|
444
448
|
}
|
|
445
449
|
}
|
|
446
|
-
|
|
450
|
+
streamEvents(input, options, streamOptions) {
|
|
451
|
+
const stream = this._streamEvents(input, options, streamOptions);
|
|
447
452
|
if (options.encoding === "text/event-stream") {
|
|
448
|
-
|
|
449
|
-
yield* convertToHttpEventStream(stream);
|
|
453
|
+
return convertToHttpEventStream(stream);
|
|
450
454
|
}
|
|
451
455
|
else {
|
|
452
|
-
|
|
456
|
+
return IterableReadableStream.fromAsyncGenerator(stream);
|
|
453
457
|
}
|
|
454
458
|
}
|
|
455
459
|
async *_streamEvents(input, options, streamOptions) {
|
|
@@ -732,11 +736,16 @@ export class RunnableBinding extends Runnable {
|
|
|
732
736
|
generator, options) {
|
|
733
737
|
yield* this.bound.transform(generator, await this._mergeConfig(ensureConfig(options), this.kwargs));
|
|
734
738
|
}
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
739
|
+
streamEvents(input, options, streamOptions) {
|
|
740
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
741
|
+
const outerThis = this;
|
|
742
|
+
const generator = async function* () {
|
|
743
|
+
yield* outerThis.bound.streamEvents(input, {
|
|
744
|
+
...(await outerThis._mergeConfig(ensureConfig(options), outerThis.kwargs)),
|
|
745
|
+
version: options.version,
|
|
746
|
+
}, streamOptions);
|
|
747
|
+
};
|
|
748
|
+
return IterableReadableStream.fromAsyncGenerator(generator());
|
|
740
749
|
}
|
|
741
750
|
static isRunnableBinding(
|
|
742
751
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1280,7 +1289,11 @@ export class RunnableMap extends Runnable {
|
|
|
1280
1289
|
async function* generator() {
|
|
1281
1290
|
yield input;
|
|
1282
1291
|
}
|
|
1283
|
-
const
|
|
1292
|
+
const config = ensureConfig(options);
|
|
1293
|
+
const wrappedGenerator = new AsyncGeneratorWithSetup({
|
|
1294
|
+
generator: this.transform(generator(), config),
|
|
1295
|
+
config,
|
|
1296
|
+
});
|
|
1284
1297
|
await wrappedGenerator.setup;
|
|
1285
1298
|
return IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1286
1299
|
}
|
|
@@ -1447,7 +1460,11 @@ export class RunnableLambda extends Runnable {
|
|
|
1447
1460
|
async function* generator() {
|
|
1448
1461
|
yield input;
|
|
1449
1462
|
}
|
|
1450
|
-
const
|
|
1463
|
+
const config = ensureConfig(options);
|
|
1464
|
+
const wrappedGenerator = new AsyncGeneratorWithSetup({
|
|
1465
|
+
generator: this.transform(generator(), config),
|
|
1466
|
+
config,
|
|
1467
|
+
});
|
|
1451
1468
|
await wrappedGenerator.setup;
|
|
1452
1469
|
return IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1453
1470
|
}
|
|
@@ -1647,7 +1664,11 @@ export class RunnableAssign extends Runnable {
|
|
|
1647
1664
|
async function* generator() {
|
|
1648
1665
|
yield input;
|
|
1649
1666
|
}
|
|
1650
|
-
const
|
|
1667
|
+
const config = ensureConfig(options);
|
|
1668
|
+
const wrappedGenerator = new AsyncGeneratorWithSetup({
|
|
1669
|
+
generator: this.transform(generator(), config),
|
|
1670
|
+
config,
|
|
1671
|
+
});
|
|
1651
1672
|
await wrappedGenerator.setup;
|
|
1652
1673
|
return IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1653
1674
|
}
|
|
@@ -1714,7 +1735,11 @@ export class RunnablePick extends Runnable {
|
|
|
1714
1735
|
async function* generator() {
|
|
1715
1736
|
yield input;
|
|
1716
1737
|
}
|
|
1717
|
-
const
|
|
1738
|
+
const config = ensureConfig(options);
|
|
1739
|
+
const wrappedGenerator = new AsyncGeneratorWithSetup({
|
|
1740
|
+
generator: this.transform(generator(), config),
|
|
1741
|
+
config,
|
|
1742
|
+
});
|
|
1718
1743
|
await wrappedGenerator.setup;
|
|
1719
1744
|
return IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
|
|
1720
1745
|
}
|
|
@@ -27,7 +27,7 @@ type RunnablePassthroughFunc<RunInput = any> = ((input: RunInput) => void) | ((i
|
|
|
27
27
|
* );
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
|
-
export declare class RunnablePassthrough<RunInput> extends Runnable<RunInput, RunInput> {
|
|
30
|
+
export declare class RunnablePassthrough<RunInput = any> extends Runnable<RunInput, RunInput> {
|
|
31
31
|
static lc_name(): string;
|
|
32
32
|
lc_namespace: string[];
|
|
33
33
|
lc_serializable: boolean;
|
|
@@ -405,58 +405,70 @@ class RemoteRunnable extends base_js_1.Runnable {
|
|
|
405
405
|
}
|
|
406
406
|
await runManager?.handleChainEnd(runLog?.state.final_output);
|
|
407
407
|
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
408
|
+
_streamEvents(input, options, streamOptions) {
|
|
409
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
410
|
+
const outerThis = this;
|
|
411
|
+
const generator = async function* () {
|
|
412
|
+
const [config, kwargs] = outerThis._separateRunnableConfigFromCallOptions(options);
|
|
413
|
+
const callbackManager_ = await (0, config_js_1.getCallbackManagerForConfig)(options);
|
|
414
|
+
const runManager = await callbackManager_?.handleChainStart(outerThis.toJSON(), (0, base_js_1._coerceToDict)(input, "input"), undefined, undefined, undefined, undefined, options?.runName);
|
|
415
|
+
// The type is in camelCase but the API only accepts snake_case.
|
|
416
|
+
const camelCaseStreamOptions = {
|
|
417
|
+
include_names: streamOptions?.includeNames,
|
|
418
|
+
include_types: streamOptions?.includeTypes,
|
|
419
|
+
include_tags: streamOptions?.includeTags,
|
|
420
|
+
exclude_names: streamOptions?.excludeNames,
|
|
421
|
+
exclude_types: streamOptions?.excludeTypes,
|
|
422
|
+
exclude_tags: streamOptions?.excludeTags,
|
|
423
|
+
};
|
|
424
|
+
const events = [];
|
|
425
|
+
try {
|
|
426
|
+
const response = await outerThis.post("/stream_events", {
|
|
427
|
+
input,
|
|
428
|
+
config: removeCallbacks(config),
|
|
429
|
+
kwargs,
|
|
430
|
+
...camelCaseStreamOptions,
|
|
431
|
+
diff: false,
|
|
432
|
+
});
|
|
433
|
+
const { body, ok } = response;
|
|
434
|
+
if (!ok) {
|
|
435
|
+
throw new Error(`${response.status} Error: ${await response.text()}`);
|
|
436
|
+
}
|
|
437
|
+
if (!body) {
|
|
438
|
+
throw new Error("Could not begin remote stream events. Please check the given URL and try again.");
|
|
439
|
+
}
|
|
440
|
+
const runnableStream = (0, event_source_parse_js_1.convertEventStreamToIterableReadableDataStream)(body);
|
|
441
|
+
for await (const log of runnableStream) {
|
|
442
|
+
const chunk = revive(JSON.parse(log));
|
|
443
|
+
const event = {
|
|
444
|
+
event: chunk.event,
|
|
445
|
+
name: chunk.name,
|
|
446
|
+
run_id: chunk.run_id,
|
|
447
|
+
tags: chunk.tags,
|
|
448
|
+
metadata: chunk.metadata,
|
|
449
|
+
data: chunk.data,
|
|
450
|
+
};
|
|
451
|
+
yield event;
|
|
452
|
+
events.push(event);
|
|
453
|
+
}
|
|
436
454
|
}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
const runnableStream = (0, event_source_parse_js_1.convertEventStreamToIterableReadableDataStream)(body);
|
|
441
|
-
for await (const log of runnableStream) {
|
|
442
|
-
const chunk = revive(JSON.parse(log));
|
|
443
|
-
const event = {
|
|
444
|
-
event: chunk.event,
|
|
445
|
-
name: chunk.name,
|
|
446
|
-
run_id: chunk.run_id,
|
|
447
|
-
tags: chunk.tags,
|
|
448
|
-
metadata: chunk.metadata,
|
|
449
|
-
data: chunk.data,
|
|
450
|
-
};
|
|
451
|
-
yield event;
|
|
452
|
-
events.push(event);
|
|
455
|
+
catch (err) {
|
|
456
|
+
await runManager?.handleChainError(err);
|
|
457
|
+
throw err;
|
|
453
458
|
}
|
|
459
|
+
await runManager?.handleChainEnd(events);
|
|
460
|
+
};
|
|
461
|
+
return generator();
|
|
462
|
+
}
|
|
463
|
+
streamEvents(input, options, streamOptions) {
|
|
464
|
+
if (options?.version !== "v1") {
|
|
465
|
+
throw new Error(`Only version "v1" of the events schema is currently supported.`);
|
|
454
466
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
throw err;
|
|
467
|
+
if (options.encoding !== undefined) {
|
|
468
|
+
throw new Error("Special encodings are not supported for this runnable.");
|
|
458
469
|
}
|
|
459
|
-
|
|
470
|
+
const eventStream = this._streamEvents(input, options, streamOptions);
|
|
471
|
+
return stream_js_1.IterableReadableStream.fromAsyncGenerator(eventStream);
|
|
460
472
|
}
|
|
461
473
|
}
|
|
462
474
|
exports.RemoteRunnable = RemoteRunnable;
|
|
@@ -2,6 +2,7 @@ import { Runnable, RunnableBatchOptions } from "./base.js";
|
|
|
2
2
|
import { type RunnableConfig } from "./config.js";
|
|
3
3
|
import { CallbackManagerForChainRun } from "../callbacks/manager.js";
|
|
4
4
|
import { RunLogPatch, type LogStreamCallbackHandlerInput, type StreamEvent } from "../tracers/log_stream.js";
|
|
5
|
+
import { IterableReadableStream } from "../utils/stream.js";
|
|
5
6
|
type RemoteRunnableOptions = {
|
|
6
7
|
timeout?: number;
|
|
7
8
|
headers?: Record<string, unknown>;
|
|
@@ -27,12 +28,15 @@ export declare class RemoteRunnable<RunInput, RunOutput, CallOptions extends Run
|
|
|
27
28
|
batch(inputs: RunInput[], options?: Partial<CallOptions> | Partial<CallOptions>[], batchOptions?: RunnableBatchOptions): Promise<(RunOutput | Error)[]>;
|
|
28
29
|
_streamIterator(input: RunInput, options?: Partial<CallOptions>): AsyncGenerator<RunOutput>;
|
|
29
30
|
streamLog(input: RunInput, options?: Partial<CallOptions>, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<RunLogPatch>;
|
|
31
|
+
_streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
32
|
+
version: "v1";
|
|
33
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose"> | undefined): AsyncGenerator<StreamEvent>;
|
|
30
34
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
31
35
|
version: "v1";
|
|
32
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
36
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<StreamEvent>;
|
|
33
37
|
streamEvents(input: RunInput, options: Partial<CallOptions> & {
|
|
34
38
|
version: "v1";
|
|
35
39
|
encoding: "text/event-stream";
|
|
36
|
-
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">):
|
|
40
|
+
}, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
|
|
37
41
|
}
|
|
38
42
|
export {};
|