@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.
Files changed (42) hide show
  1. package/dist/callbacks/base.cjs +9 -1
  2. package/dist/callbacks/base.d.ts +3 -0
  3. package/dist/callbacks/base.js +9 -1
  4. package/dist/callbacks/manager.cjs +51 -0
  5. package/dist/callbacks/manager.js +51 -0
  6. package/dist/document_loaders/base.cjs +24 -0
  7. package/dist/document_loaders/base.d.ts +28 -0
  8. package/dist/document_loaders/base.js +20 -0
  9. package/dist/documents/transformers.d.ts +1 -1
  10. package/dist/indexing/base.cjs +270 -0
  11. package/dist/indexing/base.d.ts +114 -0
  12. package/dist/indexing/base.js +261 -0
  13. package/dist/indexing/index.cjs +18 -0
  14. package/dist/indexing/index.d.ts +2 -0
  15. package/dist/indexing/index.js +2 -0
  16. package/dist/indexing/record_manager.cjs +18 -0
  17. package/dist/indexing/record_manager.d.ts +64 -0
  18. package/dist/indexing/record_manager.js +14 -0
  19. package/dist/language_models/chat_models.cjs +21 -3
  20. package/dist/language_models/chat_models.d.ts +9 -0
  21. package/dist/language_models/chat_models.js +21 -3
  22. package/dist/runnables/base.cjs +39 -14
  23. package/dist/runnables/base.d.ts +4 -4
  24. package/dist/runnables/base.js +39 -14
  25. package/dist/runnables/passthrough.cjs +1 -0
  26. package/dist/runnables/passthrough.d.ts +1 -1
  27. package/dist/runnables/passthrough.js +1 -0
  28. package/dist/runnables/remote.cjs +60 -48
  29. package/dist/runnables/remote.d.ts +6 -2
  30. package/dist/runnables/remote.js +61 -49
  31. package/dist/utils/stream.cjs +27 -11
  32. package/dist/utils/stream.d.ts +6 -1
  33. package/dist/utils/stream.js +27 -11
  34. package/document_loaders/base.cjs +1 -0
  35. package/document_loaders/base.d.cts +1 -0
  36. package/document_loaders/base.d.ts +1 -0
  37. package/document_loaders/base.js +1 -0
  38. package/indexing.cjs +1 -0
  39. package/indexing.d.cts +1 -0
  40. package/indexing.d.ts +1 -0
  41. package/indexing.js +1 -0
  42. 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 callbackManager_ = await manager_js_1.CallbackManager.configure(runnableConfig.callbacks, this.callbacks, runnableConfig.tags, this.tags, runnableConfig.metadata, this.metadata, { verbose: this.verbose });
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, handledOptions.metadata, this.metadata, { verbose: this.verbose });
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, handledOptions.metadata, this.metadata, { verbose: this.verbose });
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 callbackManager_ = await CallbackManager.configure(runnableConfig.callbacks, this.callbacks, runnableConfig.tags, this.tags, runnableConfig.metadata, this.metadata, { verbose: this.verbose });
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, handledOptions.metadata, this.metadata, { verbose: this.verbose });
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, handledOptions.metadata, this.metadata, { verbose: this.verbose });
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),
@@ -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 wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this._streamIterator(input, (0, config_js_1.ensureConfig)(options)));
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
- async *streamEvents(input, options, streamOptions) {
457
+ streamEvents(input, options, streamOptions) {
458
+ const stream = this._streamEvents(input, options, streamOptions);
454
459
  if (options.encoding === "text/event-stream") {
455
- const stream = await this._streamEvents(input, options, streamOptions);
456
- yield* (0, wrappers_js_1.convertToHttpEventStream)(stream);
460
+ return (0, wrappers_js_1.convertToHttpEventStream)(stream);
457
461
  }
458
462
  else {
459
- yield* this._streamEvents(input, options, streamOptions);
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
- async *streamEvents(input, options, streamOptions) {
744
- yield* this.bound.streamEvents(input, {
745
- ...(await this._mergeConfig((0, config_js_1.ensureConfig)(options), this.kwargs)),
746
- version: options.version,
747
- }, streamOptions);
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 wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
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
  }
@@ -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">): AsyncGenerator<StreamEvent>;
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">): AsyncGenerator<Uint8Array>;
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">): AsyncGenerator<StreamEvent>;
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">): AsyncGenerator<Uint8Array>;
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.
@@ -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 wrappedGenerator = new AsyncGeneratorWithSetup(this._streamIterator(input, ensureConfig(options)));
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
- async *streamEvents(input, options, streamOptions) {
450
+ streamEvents(input, options, streamOptions) {
451
+ const stream = this._streamEvents(input, options, streamOptions);
447
452
  if (options.encoding === "text/event-stream") {
448
- const stream = await this._streamEvents(input, options, streamOptions);
449
- yield* convertToHttpEventStream(stream);
453
+ return convertToHttpEventStream(stream);
450
454
  }
451
455
  else {
452
- yield* this._streamEvents(input, options, streamOptions);
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
- async *streamEvents(input, options, streamOptions) {
736
- yield* this.bound.streamEvents(input, {
737
- ...(await this._mergeConfig(ensureConfig(options), this.kwargs)),
738
- version: options.version,
739
- }, streamOptions);
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 wrappedGenerator = new AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new AsyncGeneratorWithSetup(this.transform(generator(), options));
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 wrappedGenerator = new AsyncGeneratorWithSetup(this.transform(generator(), options));
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
  }
@@ -30,6 +30,7 @@ const config_js_1 = require("./config.cjs");
30
30
  * );
31
31
  * ```
32
32
  */
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
34
  class RunnablePassthrough extends base_js_1.Runnable {
34
35
  static lc_name() {
35
36
  return "RunnablePassthrough";
@@ -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;
@@ -27,6 +27,7 @@ import { ensureConfig } from "./config.js";
27
27
  * );
28
28
  * ```
29
29
  */
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
31
  export class RunnablePassthrough extends Runnable {
31
32
  static lc_name() {
32
33
  return "RunnablePassthrough";
@@ -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
- async *streamEvents(input, options, streamOptions) {
409
- if (options?.version !== "v1") {
410
- throw new Error(`Only version "v1" of the events schema is currently supported.`);
411
- }
412
- const [config, kwargs] = this._separateRunnableConfigFromCallOptions(options);
413
- const callbackManager_ = await (0, config_js_1.getCallbackManagerForConfig)(options);
414
- const runManager = await callbackManager_?.handleChainStart(this.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 this.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()}`);
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
- 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);
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
- catch (err) {
456
- await runManager?.handleChainError(err);
457
- throw err;
467
+ if (options.encoding !== undefined) {
468
+ throw new Error("Special encodings are not supported for this runnable.");
458
469
  }
459
- await runManager?.handleChainEnd(events);
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">): AsyncGenerator<StreamEvent>;
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">): AsyncGenerator<Uint8Array>;
40
+ }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
37
41
  }
38
42
  export {};