@langchain/core 0.2.0-rc.0 → 0.2.1

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 (134) 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/callbacks/tests/callbacks.test.d.ts +1 -0
  7. package/dist/callbacks/tests/callbacks.test.js +492 -0
  8. package/dist/callbacks/tests/manager.int.test.d.ts +1 -0
  9. package/dist/callbacks/tests/manager.int.test.js +29 -0
  10. package/dist/callbacks/tests/run_collector.test.d.ts +1 -0
  11. package/dist/callbacks/tests/run_collector.test.js +58 -0
  12. package/dist/chat_history.cjs +13 -0
  13. package/dist/chat_history.d.ts +9 -0
  14. package/dist/chat_history.js +13 -0
  15. package/dist/language_models/base.cjs +3 -0
  16. package/dist/language_models/base.js +3 -0
  17. package/dist/language_models/chat_models.cjs +21 -3
  18. package/dist/language_models/chat_models.d.ts +11 -2
  19. package/dist/language_models/chat_models.js +21 -3
  20. package/dist/language_models/tests/chat_models.test.d.ts +1 -0
  21. package/dist/language_models/tests/chat_models.test.js +154 -0
  22. package/dist/language_models/tests/count_tokens.test.d.ts +1 -0
  23. package/dist/language_models/tests/count_tokens.test.js +19 -0
  24. package/dist/language_models/tests/llms.test.d.ts +1 -0
  25. package/dist/language_models/tests/llms.test.js +39 -0
  26. package/dist/messages/tests/base_message.test.d.ts +1 -0
  27. package/dist/messages/tests/base_message.test.js +97 -0
  28. package/dist/output_parsers/openai_tools/tests/json_output_tools_parser.test.d.ts +1 -0
  29. package/dist/output_parsers/openai_tools/tests/json_output_tools_parser.test.js +81 -0
  30. package/dist/output_parsers/tests/json.test.d.ts +1 -0
  31. package/dist/output_parsers/tests/json.test.js +427 -0
  32. package/dist/output_parsers/tests/output_parser.test.d.ts +1 -0
  33. package/dist/output_parsers/tests/output_parser.test.js +78 -0
  34. package/dist/output_parsers/tests/string.test.d.ts +1 -0
  35. package/dist/output_parsers/tests/string.test.js +68 -0
  36. package/dist/output_parsers/tests/structured.test.d.ts +1 -0
  37. package/dist/output_parsers/tests/structured.test.js +166 -0
  38. package/dist/output_parsers/tests/xml.test.d.ts +1 -0
  39. package/dist/output_parsers/tests/xml.test.js +81 -0
  40. package/dist/prompts/tests/chat.mustache.test.d.ts +1 -0
  41. package/dist/prompts/tests/chat.mustache.test.js +61 -0
  42. package/dist/prompts/tests/chat.test.d.ts +1 -0
  43. package/dist/prompts/tests/chat.test.js +507 -0
  44. package/dist/prompts/tests/few_shot.test.d.ts +1 -0
  45. package/dist/prompts/tests/few_shot.test.js +224 -0
  46. package/dist/prompts/tests/pipeline.test.d.ts +1 -0
  47. package/dist/prompts/tests/pipeline.test.js +101 -0
  48. package/dist/prompts/tests/prompt.mustache.test.d.ts +1 -0
  49. package/dist/prompts/tests/prompt.mustache.test.js +85 -0
  50. package/dist/prompts/tests/prompt.test.d.ts +1 -0
  51. package/dist/prompts/tests/prompt.test.js +78 -0
  52. package/dist/prompts/tests/structured.test.d.ts +1 -0
  53. package/dist/prompts/tests/structured.test.js +37 -0
  54. package/dist/prompts/tests/template.test.d.ts +1 -0
  55. package/dist/prompts/tests/template.test.js +24 -0
  56. package/dist/runnables/base.cjs +174 -19
  57. package/dist/runnables/base.d.ts +47 -28
  58. package/dist/runnables/base.js +174 -19
  59. package/dist/runnables/history.cjs +87 -32
  60. package/dist/runnables/history.d.ts +1 -1
  61. package/dist/runnables/history.js +87 -32
  62. package/dist/runnables/iter.cjs +46 -0
  63. package/dist/runnables/iter.d.ts +5 -0
  64. package/dist/runnables/iter.js +39 -0
  65. package/dist/runnables/passthrough.cjs +1 -0
  66. package/dist/runnables/passthrough.d.ts +1 -1
  67. package/dist/runnables/passthrough.js +1 -0
  68. package/dist/runnables/remote.cjs +60 -48
  69. package/dist/runnables/remote.d.ts +8 -4
  70. package/dist/runnables/remote.js +61 -49
  71. package/dist/runnables/tests/runnable.test.d.ts +1 -0
  72. package/dist/runnables/tests/runnable.test.js +491 -0
  73. package/dist/runnables/tests/runnable_binding.test.d.ts +1 -0
  74. package/dist/runnables/tests/runnable_binding.test.js +46 -0
  75. package/dist/runnables/tests/runnable_branch.test.d.ts +1 -0
  76. package/dist/runnables/tests/runnable_branch.test.js +116 -0
  77. package/dist/runnables/tests/runnable_graph.test.d.ts +1 -0
  78. package/dist/runnables/tests/runnable_graph.test.js +84 -0
  79. package/dist/runnables/tests/runnable_history.test.d.ts +1 -0
  80. package/dist/runnables/tests/runnable_history.test.js +177 -0
  81. package/dist/runnables/tests/runnable_interface.test.d.ts +1 -0
  82. package/dist/runnables/tests/runnable_interface.test.js +209 -0
  83. package/dist/runnables/tests/runnable_map.test.d.ts +1 -0
  84. package/dist/runnables/tests/runnable_map.test.js +238 -0
  85. package/dist/runnables/tests/runnable_passthrough.test.d.ts +1 -0
  86. package/dist/runnables/tests/runnable_passthrough.test.js +96 -0
  87. package/dist/runnables/tests/runnable_remote.int.test.d.ts +1 -0
  88. package/dist/runnables/tests/runnable_remote.int.test.js +138 -0
  89. package/dist/runnables/tests/runnable_remote.test.d.ts +1 -0
  90. package/dist/runnables/tests/runnable_remote.test.js +200 -0
  91. package/dist/runnables/tests/runnable_retry.test.d.ts +1 -0
  92. package/dist/runnables/tests/runnable_retry.test.js +125 -0
  93. package/dist/runnables/tests/runnable_stream_events.test.d.ts +1 -0
  94. package/dist/runnables/tests/runnable_stream_events.test.js +1013 -0
  95. package/dist/runnables/tests/runnable_stream_events_v2.test.d.ts +1 -0
  96. package/dist/runnables/tests/runnable_stream_events_v2.test.js +973 -0
  97. package/dist/runnables/tests/runnable_stream_log.test.d.ts +1 -0
  98. package/dist/runnables/tests/runnable_stream_log.test.js +282 -0
  99. package/dist/runnables/tests/runnable_tracing.int.test.d.ts +1 -0
  100. package/dist/runnables/tests/runnable_tracing.int.test.js +37 -0
  101. package/dist/runnables/tests/runnable_with_fallbacks.test.d.ts +1 -0
  102. package/dist/runnables/tests/runnable_with_fallbacks.test.js +36 -0
  103. package/dist/runnables/utils.d.ts +1 -1
  104. package/dist/singletons/index.cjs +1 -1
  105. package/dist/singletons/index.d.ts +2 -2
  106. package/dist/singletons/index.js +1 -1
  107. package/dist/singletons/tests/async_local_storage.test.d.ts +1 -0
  108. package/dist/singletons/tests/async_local_storage.test.js +120 -0
  109. package/dist/structured_query/tests/utils.test.d.ts +1 -0
  110. package/dist/structured_query/tests/utils.test.js +47 -0
  111. package/dist/tracers/event_stream.cjs +493 -0
  112. package/dist/tracers/event_stream.d.ts +137 -0
  113. package/dist/tracers/event_stream.js +489 -0
  114. package/dist/tracers/log_stream.d.ts +2 -77
  115. package/dist/tracers/tests/langchain_tracer.int.test.d.ts +1 -0
  116. package/dist/tracers/tests/langchain_tracer.int.test.js +74 -0
  117. package/dist/tracers/tests/tracer.test.d.ts +1 -0
  118. package/dist/tracers/tests/tracer.test.js +378 -0
  119. package/dist/utils/stream.cjs +27 -11
  120. package/dist/utils/stream.d.ts +6 -1
  121. package/dist/utils/stream.js +27 -11
  122. package/dist/utils/testing/tests/chatfake.test.d.ts +1 -0
  123. package/dist/utils/testing/tests/chatfake.test.js +112 -0
  124. package/dist/utils/tests/async_caller.test.d.ts +1 -0
  125. package/dist/utils/tests/async_caller.test.js +27 -0
  126. package/dist/utils/tests/enviroment.test.d.ts +1 -0
  127. package/dist/utils/tests/enviroment.test.js +6 -0
  128. package/dist/utils/tests/function_calling.test.d.ts +1 -0
  129. package/dist/utils/tests/function_calling.test.js +107 -0
  130. package/dist/utils/tests/math_utils.test.d.ts +1 -0
  131. package/dist/utils/tests/math_utils.test.js +139 -0
  132. package/dist/utils/tests/polyfill_stream.test.d.ts +1 -0
  133. package/dist/utils/tests/polyfill_stream.test.js +15 -0
  134. package/package.json +7 -7
@@ -6,8 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.RunnablePick = exports.RunnableAssign = exports._coerceToRunnable = exports.RunnableWithFallbacks = exports.RunnableParallel = exports.RunnableLambda = exports.RunnableMap = exports.RunnableSequence = exports.RunnableRetry = exports.RunnableEach = exports.RunnableBinding = exports.Runnable = exports._coerceToDict = void 0;
7
7
  const zod_1 = require("zod");
8
8
  const p_retry_1 = __importDefault(require("p-retry"));
9
+ const uuid_1 = require("uuid");
9
10
  const manager_js_1 = require("../callbacks/manager.cjs");
10
11
  const log_stream_js_1 = require("../tracers/log_stream.cjs");
12
+ const event_stream_js_1 = require("../tracers/event_stream.cjs");
11
13
  const serializable_js_1 = require("../load/serializable.cjs");
12
14
  const stream_js_1 = require("../utils/stream.cjs");
13
15
  const config_js_1 = require("./config.cjs");
@@ -17,6 +19,7 @@ const utils_js_1 = require("./utils.cjs");
17
19
  const index_js_1 = require("../singletons/index.cjs");
18
20
  const graph_js_1 = require("./graph.cjs");
19
21
  const wrappers_js_1 = require("./wrappers.cjs");
22
+ const iter_js_1 = require("./iter.cjs");
20
23
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
24
  function _coerceToDict(value, defaultKey) {
22
25
  return value &&
@@ -167,7 +170,11 @@ class Runnable extends serializable_js_1.Serializable {
167
170
  async stream(input, options) {
168
171
  // Buffer the first streamed chunk to allow for initial errors
169
172
  // to surface immediately.
170
- const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this._streamIterator(input, (0, config_js_1.ensureConfig)(options)));
173
+ const config = (0, config_js_1.ensureConfig)(options);
174
+ const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
175
+ generator: this._streamIterator(input, config),
176
+ config,
177
+ });
171
178
  await wrappedGenerator.setup;
172
179
  return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
173
180
  }
@@ -280,11 +287,16 @@ class Runnable extends serializable_js_1.Serializable {
280
287
  const pipe = await (0, stream_js_1.pipeGeneratorWithSetup)(transformer.bind(this), wrapInputForTracing(), async () => callbackManager_?.handleChainStart(this.toJSON(), { input: "" }, config.runId, config.runType, undefined, undefined, config.runName ?? this.getName()), config);
281
288
  delete config.runId;
282
289
  runManager = pipe.setup;
290
+ const isStreamEventsHandler = (handler) => handler.name === "event_stream_tracer";
291
+ const streamEventsHandler = runManager?.handlers.find(isStreamEventsHandler);
292
+ let iterator = pipe.output;
293
+ if (streamEventsHandler !== undefined && runManager !== undefined) {
294
+ iterator = streamEventsHandler.tapOutputIterable(runManager.runId, iterator);
295
+ }
283
296
  const isLogStreamHandler = (handler) => handler.name === "log_stream_tracer";
284
297
  const streamLogHandler = runManager?.handlers.find(isLogStreamHandler);
285
- let iterator = pipe.output;
286
298
  if (streamLogHandler !== undefined && runManager !== undefined) {
287
- iterator = await streamLogHandler.tapOutputIterable(runManager.runId, pipe.output);
299
+ iterator = streamLogHandler.tapOutputIterable(runManager.runId, iterator);
288
300
  }
289
301
  for await (const chunk of iterator) {
290
302
  yield chunk;
@@ -449,19 +461,93 @@ class Runnable extends serializable_js_1.Serializable {
449
461
  await runnableStreamConsumePromise;
450
462
  }
451
463
  }
452
- async *streamEvents(input, options, streamOptions) {
464
+ streamEvents(input, options, streamOptions) {
465
+ let stream;
466
+ if (options.version === "v1") {
467
+ stream = this._streamEventsV1(input, options, streamOptions);
468
+ }
469
+ else if (options.version === "v2") {
470
+ stream = this._streamEventsV2(input, options, streamOptions);
471
+ }
472
+ else {
473
+ throw new Error(`Only versions "v1" and "v2" of the schema are currently supported.`);
474
+ }
453
475
  if (options.encoding === "text/event-stream") {
454
- const stream = await this._streamEvents(input, options, streamOptions);
455
- yield* (0, wrappers_js_1.convertToHttpEventStream)(stream);
476
+ return (0, wrappers_js_1.convertToHttpEventStream)(stream);
456
477
  }
457
478
  else {
458
- yield* this._streamEvents(input, options, streamOptions);
479
+ return stream_js_1.IterableReadableStream.fromAsyncGenerator(stream);
459
480
  }
460
481
  }
461
- async *_streamEvents(input, options, streamOptions) {
462
- if (options.version !== "v1") {
463
- throw new Error(`Only version "v1" of the events schema is currently supported.`);
482
+ async *_streamEventsV2(input, options, streamOptions) {
483
+ const eventStreamer = new event_stream_js_1.EventStreamCallbackHandler({
484
+ ...streamOptions,
485
+ autoClose: false,
486
+ });
487
+ const config = (0, config_js_1.ensureConfig)(options);
488
+ const runId = config.runId ?? (0, uuid_1.v4)();
489
+ config.runId = runId;
490
+ const callbacks = config.callbacks;
491
+ if (callbacks === undefined) {
492
+ config.callbacks = [eventStreamer];
493
+ }
494
+ else if (Array.isArray(callbacks)) {
495
+ config.callbacks = callbacks.concat(eventStreamer);
464
496
  }
497
+ else {
498
+ const copiedCallbacks = callbacks.copy();
499
+ copiedCallbacks.inheritableHandlers.push(eventStreamer);
500
+ // eslint-disable-next-line no-param-reassign
501
+ config.callbacks = copiedCallbacks;
502
+ }
503
+ // Call the runnable in streaming mode,
504
+ // add each chunk to the output stream
505
+ const outerThis = this;
506
+ async function consumeRunnableStream() {
507
+ try {
508
+ const runnableStream = await outerThis.stream(input, config);
509
+ const tappedStream = eventStreamer.tapOutputIterable(runId, runnableStream);
510
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
511
+ for await (const _ of tappedStream) {
512
+ // Just iterate so that the callback handler picks up events
513
+ }
514
+ }
515
+ finally {
516
+ await eventStreamer.writer.close();
517
+ }
518
+ }
519
+ const runnableStreamConsumePromise = consumeRunnableStream();
520
+ let firstEventSent = false;
521
+ let firstEventRunId;
522
+ try {
523
+ for await (const event of eventStreamer) {
524
+ // This is a work-around an issue where the inputs into the
525
+ // chain are not available until the entire input is consumed.
526
+ // As a temporary solution, we'll modify the input to be the input
527
+ // that was passed into the chain.
528
+ if (!firstEventSent) {
529
+ event.data.input = input;
530
+ firstEventSent = true;
531
+ firstEventRunId = event.run_id;
532
+ yield event;
533
+ continue;
534
+ }
535
+ if (event.run_id === firstEventRunId && event.event.endsWith("_end")) {
536
+ // If it's the end event corresponding to the root runnable
537
+ // we dont include the input in the event since it's guaranteed
538
+ // to be included in the first event.
539
+ if (event.data?.input) {
540
+ delete event.data.input;
541
+ }
542
+ }
543
+ yield event;
544
+ }
545
+ }
546
+ finally {
547
+ await runnableStreamConsumePromise;
548
+ }
549
+ }
550
+ async *_streamEventsV1(input, options, streamOptions) {
465
551
  let runLog;
466
552
  let hasEncounteredStartEvent = false;
467
553
  const config = (0, config_js_1.ensureConfig)(options);
@@ -739,11 +825,16 @@ class RunnableBinding extends Runnable {
739
825
  generator, options) {
740
826
  yield* this.bound.transform(generator, await this._mergeConfig((0, config_js_1.ensureConfig)(options), this.kwargs));
741
827
  }
742
- async *streamEvents(input, options, streamOptions) {
743
- yield* this.bound.streamEvents(input, {
744
- ...(await this._mergeConfig((0, config_js_1.ensureConfig)(options), this.kwargs)),
745
- version: options.version,
746
- }, streamOptions);
828
+ streamEvents(input, options, streamOptions) {
829
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
830
+ const outerThis = this;
831
+ const generator = async function* () {
832
+ yield* outerThis.bound.streamEvents(input, {
833
+ ...(await outerThis._mergeConfig((0, config_js_1.ensureConfig)(options), outerThis.kwargs)),
834
+ version: options.version,
835
+ }, streamOptions);
836
+ };
837
+ return stream_js_1.IterableReadableStream.fromAsyncGenerator(generator());
747
838
  }
748
839
  static isRunnableBinding(
749
840
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1291,7 +1382,11 @@ class RunnableMap extends Runnable {
1291
1382
  async function* generator() {
1292
1383
  yield input;
1293
1384
  }
1294
- const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
1385
+ const config = (0, config_js_1.ensureConfig)(options);
1386
+ const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
1387
+ generator: this.transform(generator(), config),
1388
+ config,
1389
+ });
1295
1390
  await wrappedGenerator.setup;
1296
1391
  return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
1297
1392
  }
@@ -1346,6 +1441,44 @@ class RunnableLambda extends Runnable {
1346
1441
  recursionLimit: (childConfig.recursionLimit ?? config_js_1.DEFAULT_RECURSION_LIMIT) - 1,
1347
1442
  });
1348
1443
  }
1444
+ else if ((0, iter_js_1.isAsyncIterable)(output)) {
1445
+ let finalOutput;
1446
+ for await (const chunk of (0, iter_js_1.consumeAsyncIterableInContext)(childConfig, output)) {
1447
+ if (finalOutput === undefined) {
1448
+ finalOutput = chunk;
1449
+ }
1450
+ else {
1451
+ // Make a best effort to gather, for any type that supports concat.
1452
+ try {
1453
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1454
+ finalOutput = (0, stream_js_1.concat)(finalOutput, chunk);
1455
+ }
1456
+ catch (e) {
1457
+ finalOutput = chunk;
1458
+ }
1459
+ }
1460
+ }
1461
+ output = finalOutput;
1462
+ }
1463
+ else if ((0, iter_js_1.isIterator)(output)) {
1464
+ let finalOutput;
1465
+ for (const chunk of (0, iter_js_1.consumeIteratorInContext)(childConfig, output)) {
1466
+ if (finalOutput === undefined) {
1467
+ finalOutput = chunk;
1468
+ }
1469
+ else {
1470
+ // Make a best effort to gather, for any type that supports concat.
1471
+ try {
1472
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1473
+ finalOutput = (0, stream_js_1.concat)(finalOutput, chunk);
1474
+ }
1475
+ catch (e) {
1476
+ finalOutput = chunk;
1477
+ }
1478
+ }
1479
+ }
1480
+ output = finalOutput;
1481
+ }
1349
1482
  resolve(output);
1350
1483
  }
1351
1484
  catch (e) {
@@ -1400,6 +1533,16 @@ class RunnableLambda extends Runnable {
1400
1533
  yield chunk;
1401
1534
  }
1402
1535
  }
1536
+ else if ((0, iter_js_1.isAsyncIterable)(output)) {
1537
+ for await (const chunk of (0, iter_js_1.consumeAsyncIterableInContext)(config, output)) {
1538
+ yield chunk;
1539
+ }
1540
+ }
1541
+ else if ((0, iter_js_1.isIterator)(output)) {
1542
+ for (const chunk of (0, iter_js_1.consumeIteratorInContext)(config, output)) {
1543
+ yield chunk;
1544
+ }
1545
+ }
1403
1546
  else {
1404
1547
  yield output;
1405
1548
  }
@@ -1411,7 +1554,11 @@ class RunnableLambda extends Runnable {
1411
1554
  async function* generator() {
1412
1555
  yield input;
1413
1556
  }
1414
- const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
1557
+ const config = (0, config_js_1.ensureConfig)(options);
1558
+ const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
1559
+ generator: this.transform(generator(), config),
1560
+ config,
1561
+ });
1415
1562
  await wrappedGenerator.setup;
1416
1563
  return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
1417
1564
  }
@@ -1615,7 +1762,11 @@ class RunnableAssign extends Runnable {
1615
1762
  async function* generator() {
1616
1763
  yield input;
1617
1764
  }
1618
- const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
1765
+ const config = (0, config_js_1.ensureConfig)(options);
1766
+ const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
1767
+ generator: this.transform(generator(), config),
1768
+ config,
1769
+ });
1619
1770
  await wrappedGenerator.setup;
1620
1771
  return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
1621
1772
  }
@@ -1683,7 +1834,11 @@ class RunnablePick extends Runnable {
1683
1834
  async function* generator() {
1684
1835
  yield input;
1685
1836
  }
1686
- const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup(this.transform(generator(), options));
1837
+ const config = (0, config_js_1.ensureConfig)(options);
1838
+ const wrappedGenerator = new stream_js_1.AsyncGeneratorWithSetup({
1839
+ generator: this.transform(generator(), config),
1840
+ config,
1841
+ });
1687
1842
  await wrappedGenerator.setup;
1688
1843
  return stream_js_1.IterableReadableStream.fromAsyncGenerator(wrappedGenerator);
1689
1844
  }
@@ -1,6 +1,7 @@
1
1
  import type { RunnableInterface, RunnableBatchOptions } from "./types.js";
2
2
  import { CallbackManagerForChainRun } from "../callbacks/manager.js";
3
- import { LogStreamCallbackHandler, LogStreamCallbackHandlerInput, RunLogPatch, StreamEvent } from "../tracers/log_stream.js";
3
+ import { LogStreamCallbackHandler, LogStreamCallbackHandlerInput, RunLogPatch } from "../tracers/log_stream.js";
4
+ import { EventStreamCallbackHandlerInput, StreamEvent } from "../tracers/event_stream.js";
4
5
  import { Serializable } from "../load/serializable.js";
5
6
  import { IterableReadableStream } from "../utils/stream.js";
6
7
  import { RunnableConfig } from "./config.js";
@@ -179,33 +180,51 @@ export declare abstract class Runnable<RunInput = any, RunOutput = any, CallOpti
179
180
  * chains. Metadata fields have been omitted from the table for brevity.
180
181
  * Chain definitions have been included after the table.
181
182
  *
182
- * | event | name | chunk | input | output |
183
- * |----------------------|------------------|------------------------------------|-----------------------------------------------|-------------------------------------------------|
184
- * | on_llm_start | [model name] | | {'input': 'hello'} | |
185
- * | on_llm_stream | [model name] | 'Hello' OR AIMessageChunk("hello") | | |
186
- * | on_llm_end | [model name] | | 'Hello human!' |
187
- * | on_chain_start | format_docs | | | |
188
- * | on_chain_stream | format_docs | "hello world!, goodbye world!" | | |
189
- * | on_chain_end | format_docs | | [Document(...)] | "hello world!, goodbye world!" |
190
- * | on_tool_start | some_tool | | {"x": 1, "y": "2"} | |
191
- * | on_tool_stream | some_tool | {"x": 1, "y": "2"} | | |
192
- * | on_tool_end | some_tool | | | {"x": 1, "y": "2"} |
193
- * | on_retriever_start | [retriever name] | | {"query": "hello"} | |
194
- * | on_retriever_chunk | [retriever name] | {documents: [...]} | | |
195
- * | on_retriever_end | [retriever name] | | {"query": "hello"} | {documents: [...]} |
196
- * | on_prompt_start | [template_name] | | {"question": "hello"} | |
197
- * | on_prompt_end | [template_name] | | {"question": "hello"} | ChatPromptValue(messages: [SystemMessage, ...]) |
183
+ * **ATTENTION** This reference table is for the V2 version of the schema.
184
+ *
185
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
186
+ * | event | name | chunk | input | output |
187
+ * +======================+==================+=================================+===============================================+=================================================+
188
+ * | on_chat_model_start | [model name] | | {"messages": [[SystemMessage, HumanMessage]]} | |
189
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
190
+ * | on_chat_model_stream | [model name] | AIMessageChunk(content="hello") | | |
191
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
192
+ * | on_chat_model_end | [model name] | | {"messages": [[SystemMessage, HumanMessage]]} | AIMessageChunk(content="hello world") |
193
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
194
+ * | on_llm_start | [model name] | | {'input': 'hello'} | |
195
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
196
+ * | on_llm_stream | [model name] | 'Hello' | | |
197
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
198
+ * | on_llm_end | [model name] | | 'Hello human!' | |
199
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
200
+ * | on_chain_start | format_docs | | | |
201
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
202
+ * | on_chain_stream | format_docs | "hello world!, goodbye world!" | | |
203
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
204
+ * | on_chain_end | format_docs | | [Document(...)] | "hello world!, goodbye world!" |
205
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
206
+ * | on_tool_start | some_tool | | {"x": 1, "y": "2"} | |
207
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
208
+ * | on_tool_end | some_tool | | | {"x": 1, "y": "2"} |
209
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
210
+ * | on_retriever_start | [retriever name] | | {"query": "hello"} | |
211
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
212
+ * | on_retriever_end | [retriever name] | | {"query": "hello"} | [Document(...), ..] |
213
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
214
+ * | on_prompt_start | [template_name] | | {"question": "hello"} | |
215
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
216
+ * | on_prompt_end | [template_name] | | {"question": "hello"} | ChatPromptValue(messages: [SystemMessage, ...]) |
217
+ * +----------------------+------------------+---------------------------------+-----------------------------------------------+-------------------------------------------------+
198
218
  */
199
219
  streamEvents(input: RunInput, options: Partial<CallOptions> & {
200
- version: "v1";
201
- }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<StreamEvent>;
220
+ version: "v1" | "v2";
221
+ }, streamOptions?: Omit<EventStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<StreamEvent>;
202
222
  streamEvents(input: RunInput, options: Partial<CallOptions> & {
203
- version: "v1";
223
+ version: "v1" | "v2";
204
224
  encoding: "text/event-stream";
205
- }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<Uint8Array>;
206
- _streamEvents(input: RunInput, options: Partial<CallOptions> & {
207
- version: "v1";
208
- }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<StreamEvent>;
225
+ }, streamOptions?: Omit<EventStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
226
+ private _streamEventsV2;
227
+ private _streamEventsV1;
209
228
  static isRunnable(thing: any): thing is Runnable;
210
229
  /**
211
230
  * Bind lifecycle listeners to a Runnable, returning a new Runnable.
@@ -262,12 +281,12 @@ export declare class RunnableBinding<RunInput, RunOutput, CallOptions extends Ru
262
281
  stream(input: RunInput, options?: Partial<CallOptions> | undefined): Promise<IterableReadableStream<RunOutput>>;
263
282
  transform(generator: AsyncGenerator<RunInput>, options: Partial<CallOptions>): AsyncGenerator<RunOutput>;
264
283
  streamEvents(input: RunInput, options: Partial<CallOptions> & {
265
- version: "v1";
266
- }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<StreamEvent>;
284
+ version: "v1" | "v2";
285
+ }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<StreamEvent>;
267
286
  streamEvents(input: RunInput, options: Partial<CallOptions> & {
268
- version: "v1";
287
+ version: "v1" | "v2";
269
288
  encoding: "text/event-stream";
270
- }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): AsyncGenerator<Uint8Array>;
289
+ }, streamOptions?: Omit<LogStreamCallbackHandlerInput, "autoClose">): IterableReadableStream<Uint8Array>;
271
290
  static isRunnableBinding(thing: any): thing is RunnableBinding<any, any, any>;
272
291
  /**
273
292
  * Bind lifecycle listeners to a Runnable, returning a new Runnable.