@langchain/core 0.1.6 → 0.1.8

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.
@@ -547,11 +547,6 @@ class CallbackManager extends BaseCallbackManager {
547
547
  if (tracingV2Enabled) {
548
548
  callbackManager.addHandler(await (0, initialize_js_1.getTracingV2CallbackHandler)(), true);
549
549
  }
550
- else {
551
- const session = (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_PROJECT") &&
552
- (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_SESSION");
553
- callbackManager.addHandler(await (0, initialize_js_1.getTracingCallbackHandler)(session), true);
554
- }
555
550
  }
556
551
  }
557
552
  if (inheritableTags || localTags) {
@@ -1,7 +1,7 @@
1
1
  import { v4 as uuidv4 } from "uuid";
2
2
  import { BaseCallbackHandler, } from "./base.js";
3
3
  import { ConsoleCallbackHandler } from "../tracers/console.js";
4
- import { getTracingCallbackHandler, getTracingV2CallbackHandler, } from "../tracers/initialize.js";
4
+ import { getTracingV2CallbackHandler } from "../tracers/initialize.js";
5
5
  import { getBufferString } from "../messages/index.js";
6
6
  import { getEnvironmentVariable } from "../utils/env.js";
7
7
  import { LangChainTracer, } from "../tracers/tracer_langchain.js";
@@ -538,11 +538,6 @@ export class CallbackManager extends BaseCallbackManager {
538
538
  if (tracingV2Enabled) {
539
539
  callbackManager.addHandler(await getTracingV2CallbackHandler(), true);
540
540
  }
541
- else {
542
- const session = getEnvironmentVariable("LANGCHAIN_PROJECT") &&
543
- getEnvironmentVariable("LANGCHAIN_SESSION");
544
- callbackManager.addHandler(await getTracingCallbackHandler(session), true);
545
- }
546
541
  }
547
542
  }
548
543
  if (inheritableTags || localTags) {
@@ -163,4 +163,13 @@ export declare abstract class BaseLanguageModel<RunOutput = any, CallOptions ext
163
163
  */
164
164
  static deserialize(_data: SerializedLLM): Promise<BaseLanguageModel>;
165
165
  }
166
+ /**
167
+ * Shared interface for token usage
168
+ * return type from LLM calls.
169
+ */
170
+ export interface TokenUsage {
171
+ completionTokens?: number;
172
+ promptTokens?: number;
173
+ totalTokens?: number;
174
+ }
166
175
  export {};
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  return result;
25
25
  };
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
- exports.vectorstores = exports.utils__types = exports.utils__tiktoken = exports.utils__testing = exports.utils__stream = exports.utils__math = exports.utils__json_schema = exports.utils__json_patch = exports.utils__hash = exports.utils__env = exports.utils__chunk_array = exports.utils__async_caller = exports.tracers__tracer_langchain = exports.tracers__tracer_langchain_v1 = exports.tracers__run_collector = exports.tracers__log_stream = exports.tracers__initialize = exports.tracers__console = exports.tracers__base = exports.tools = exports.stores = exports.retrievers = exports.runnables = exports.prompt_values = exports.prompts = exports.outputs = exports.output_parsers = exports.messages = exports.memory = exports.load__serializable = exports.language_models__llms = exports.language_models__chat_models = exports.language_models__base = exports.example_selectors = exports.embeddings = exports.documents = exports.chat_history = exports.callbacks__promises = exports.callbacks__manager = exports.callbacks__base = exports.caches = exports.agents = void 0;
27
+ exports.vectorstores = exports.utils__types = exports.utils__tiktoken = exports.utils__testing = exports.utils__stream = exports.utils__math = exports.utils__json_schema = exports.utils__json_patch = exports.utils__hash = exports.utils__env = exports.utils__chunk_array = exports.utils__async_caller = exports.tracers__tracer_langchain_v1 = exports.tracers__tracer_langchain = exports.tracers__run_collector = exports.tracers__log_stream = exports.tracers__initialize = exports.tracers__console = exports.tracers__base = exports.tools = exports.stores = exports.retrievers = exports.runnables = exports.prompt_values = exports.prompts = exports.outputs = exports.output_parsers = exports.messages = exports.memory = exports.load__serializable = exports.language_models__llms = exports.language_models__chat_models = exports.language_models__base = exports.example_selectors = exports.embeddings = exports.documents = exports.chat_history = exports.callbacks__promises = exports.callbacks__manager = exports.callbacks__base = exports.caches = exports.agents = void 0;
28
28
  exports.agents = __importStar(require("../agents.cjs"));
29
29
  exports.caches = __importStar(require("../caches.cjs"));
30
30
  exports.callbacks__base = __importStar(require("../callbacks/base.cjs"));
@@ -53,8 +53,8 @@ exports.tracers__console = __importStar(require("../tracers/console.cjs"));
53
53
  exports.tracers__initialize = __importStar(require("../tracers/initialize.cjs"));
54
54
  exports.tracers__log_stream = __importStar(require("../tracers/log_stream.cjs"));
55
55
  exports.tracers__run_collector = __importStar(require("../tracers/run_collector.cjs"));
56
- exports.tracers__tracer_langchain_v1 = __importStar(require("../tracers/tracer_langchain_v1.cjs"));
57
56
  exports.tracers__tracer_langchain = __importStar(require("../tracers/tracer_langchain.cjs"));
57
+ exports.tracers__tracer_langchain_v1 = __importStar(require("../tracers/tracer_langchain_v1.cjs"));
58
58
  exports.utils__async_caller = __importStar(require("../utils/async_caller.cjs"));
59
59
  exports.utils__chunk_array = __importStar(require("../utils/chunk_array.cjs"));
60
60
  exports.utils__env = __importStar(require("../utils/env.cjs"));
@@ -26,8 +26,8 @@ export * as tracers__console from "../tracers/console.js";
26
26
  export * as tracers__initialize from "../tracers/initialize.js";
27
27
  export * as tracers__log_stream from "../tracers/log_stream.js";
28
28
  export * as tracers__run_collector from "../tracers/run_collector.js";
29
- export * as tracers__tracer_langchain_v1 from "../tracers/tracer_langchain_v1.js";
30
29
  export * as tracers__tracer_langchain from "../tracers/tracer_langchain.js";
30
+ export * as tracers__tracer_langchain_v1 from "../tracers/tracer_langchain_v1.js";
31
31
  export * as utils__async_caller from "../utils/async_caller.js";
32
32
  export * as utils__chunk_array from "../utils/chunk_array.js";
33
33
  export * as utils__env from "../utils/env.js";
@@ -27,8 +27,8 @@ export * as tracers__console from "../tracers/console.js";
27
27
  export * as tracers__initialize from "../tracers/initialize.js";
28
28
  export * as tracers__log_stream from "../tracers/log_stream.js";
29
29
  export * as tracers__run_collector from "../tracers/run_collector.js";
30
- export * as tracers__tracer_langchain_v1 from "../tracers/tracer_langchain_v1.js";
31
30
  export * as tracers__tracer_langchain from "../tracers/tracer_langchain.js";
31
+ export * as tracers__tracer_langchain_v1 from "../tracers/tracer_langchain_v1.js";
32
32
  export * as utils__async_caller from "../utils/async_caller.js";
33
33
  export * as utils__chunk_array from "../utils/chunk_array.js";
34
34
  export * as utils__env from "../utils/env.js";
@@ -216,9 +216,8 @@ class Runnable extends serializable_js_1.Serializable {
216
216
  let finalOutput;
217
217
  let finalOutputSupported = true;
218
218
  const callbackManager_ = await (0, config_js_1.getCallbackManagerForConfig)(options);
219
- const inputGeneratorWithSetup = new stream_js_1.AsyncGeneratorWithSetup(inputGenerator, async () => callbackManager_?.handleChainStart(this.toJSON(), { input: "" }, undefined, options?.runType, undefined, undefined, options?.runName ?? this.getName()));
220
219
  async function* wrapInputForTracing() {
221
- for await (const chunk of inputGeneratorWithSetup) {
220
+ for await (const chunk of inputGenerator) {
222
221
  if (finalInputSupported) {
223
222
  if (finalInput === undefined) {
224
223
  finalInput = chunk;
@@ -237,9 +236,11 @@ class Runnable extends serializable_js_1.Serializable {
237
236
  yield chunk;
238
237
  }
239
238
  }
239
+ let runManager;
240
240
  try {
241
- const outputIterator = transformer(wrapInputForTracing(), inputGeneratorWithSetup.setup, options);
242
- for await (const chunk of outputIterator) {
241
+ const pipe = await (0, stream_js_1.pipeGeneratorWithSetup)(transformer, wrapInputForTracing(), async () => callbackManager_?.handleChainStart(this.toJSON(), { input: "" }, undefined, options?.runType, undefined, undefined, options?.runName ?? this.getName()), options);
242
+ runManager = pipe.setup;
243
+ for await (const chunk of pipe.output) {
243
244
  yield chunk;
244
245
  if (finalOutputSupported) {
245
246
  if (finalOutput === undefined) {
@@ -259,13 +260,11 @@ class Runnable extends serializable_js_1.Serializable {
259
260
  }
260
261
  }
261
262
  catch (e) {
262
- const runManager = await inputGeneratorWithSetup.setup;
263
263
  await runManager?.handleChainError(e, undefined, undefined, undefined, {
264
264
  inputs: _coerceToDict(finalInput, "input"),
265
265
  });
266
266
  throw e;
267
267
  }
268
- const runManager = await inputGeneratorWithSetup.setup;
269
268
  await runManager?.handleChainEnd(finalOutput ?? {}, undefined, undefined, undefined, { inputs: _coerceToDict(finalInput, "input") });
270
269
  }
271
270
  _patchConfig(config = {}, callbackManager = undefined, recursionLimit = undefined) {
@@ -1006,12 +1005,11 @@ class RunnableMap extends Runnable {
1006
1005
  await runManager?.handleChainEnd(output);
1007
1006
  return output;
1008
1007
  }
1009
- async *_transform(generator, runManagerPromise, options) {
1008
+ async *_transform(generator, runManager, options) {
1010
1009
  // shallow copy steps to ignore changes while iterating
1011
1010
  const steps = { ...this.steps };
1012
1011
  // each step gets a copy of the input iterator
1013
1012
  const inputCopies = (0, stream_js_1.atee)(generator, Object.keys(steps).length);
1014
- const runManager = await runManagerPromise;
1015
1013
  // start the first iteration of each output iterator
1016
1014
  const tasks = new Map(Object.entries(steps).map(([key, runnable], i) => {
1017
1015
  const gen = runnable.transform(inputCopies[i], this._patchConfig(options, runManager?.getChild(`map:key:${key}`)));
@@ -1081,7 +1079,7 @@ class RunnableLambda extends Runnable {
1081
1079
  async invoke(input, options) {
1082
1080
  return this._callWithConfig(this._invoke, input, options);
1083
1081
  }
1084
- async *_transform(generator, runManagerPromise, config) {
1082
+ async *_transform(generator, runManager, config) {
1085
1083
  let finalChunk;
1086
1084
  for await (const chunk of generator) {
1087
1085
  if (finalChunk === undefined) {
@@ -1103,7 +1101,6 @@ class RunnableLambda extends Runnable {
1103
1101
  if (config?.recursionLimit === 0) {
1104
1102
  throw new Error("Recursion limit reached.");
1105
1103
  }
1106
- const runManager = await runManagerPromise;
1107
1104
  const stream = await output.stream(finalChunk, this._patchConfig(config, runManager?.getChild(), (config?.recursionLimit ?? config_js_1.DEFAULT_RECURSION_LIMIT) - 1));
1108
1105
  for await (const chunk of stream) {
1109
1106
  yield chunk;
@@ -1283,12 +1280,11 @@ class RunnableAssign extends Runnable {
1283
1280
  ...mapperResult,
1284
1281
  };
1285
1282
  }
1286
- async *_transform(generator, runManagerPromise, options) {
1283
+ async *_transform(generator, runManager, options) {
1287
1284
  // collect mapper keys
1288
1285
  const mapperKeys = this.mapper.getStepsKeys();
1289
1286
  // create two input gens, one for the mapper, one for the input
1290
1287
  const [forPassthrough, forMapper] = (0, stream_js_1.atee)(generator);
1291
- const runManager = await runManagerPromise;
1292
1288
  // create mapper output gen
1293
1289
  const mapperOutput = this.mapper.transform(forMapper, this._patchConfig(options, runManager?.getChild()));
1294
1290
  // start the mapper
@@ -137,7 +137,7 @@ export declare abstract class Runnable<RunInput = any, RunOutput = any, CallOpti
137
137
  * Output values, with callbacks.
138
138
  * Use this to implement `stream()` or `transform()` in Runnable subclasses.
139
139
  */
140
- protected _transformStreamWithConfig<I extends RunInput, O extends RunOutput>(inputGenerator: AsyncGenerator<I>, transformer: (generator: AsyncGenerator<I>, runManager?: Promise<CallbackManagerForChainRun | undefined>, options?: Partial<CallOptions>) => AsyncGenerator<O>, options?: CallOptions & {
140
+ protected _transformStreamWithConfig<I extends RunInput, O extends RunOutput>(inputGenerator: AsyncGenerator<I>, transformer: (generator: AsyncGenerator<I>, runManager?: CallbackManagerForChainRun, options?: Partial<CallOptions>) => AsyncGenerator<O>, options?: CallOptions & {
141
141
  runType?: string;
142
142
  }): AsyncGenerator<O>;
143
143
  _patchConfig(config?: Partial<CallOptions>, callbackManager?: CallbackManager | undefined, recursionLimit?: number | undefined): Partial<CallOptions>;
@@ -402,7 +402,7 @@ export declare class RunnableMap<RunInput = any, RunOutput extends Record<string
402
402
  });
403
403
  static from<RunInput, RunOutput extends Record<string, any> = Record<string, any>>(steps: RunnableMapLike<RunInput, RunOutput>): RunnableMap<RunInput, RunOutput>;
404
404
  invoke(input: RunInput, options?: Partial<RunnableConfig>): Promise<RunOutput>;
405
- _transform(generator: AsyncGenerator<RunInput>, runManagerPromise?: Promise<CallbackManagerForChainRun | undefined>, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
405
+ _transform(generator: AsyncGenerator<RunInput>, runManager?: CallbackManagerForChainRun, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
406
406
  transform(generator: AsyncGenerator<RunInput>, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
407
407
  stream(input: RunInput, options?: Partial<RunnableConfig>): Promise<IterableReadableStream<RunOutput>>;
408
408
  }
@@ -419,7 +419,7 @@ export declare class RunnableLambda<RunInput, RunOutput> extends Runnable<RunInp
419
419
  static from<RunInput, RunOutput>(func: RunnableFunc<RunInput, RunOutput | Runnable<RunInput, RunOutput>>): RunnableLambda<RunInput, RunOutput>;
420
420
  _invoke(input: RunInput, config?: Partial<RunnableConfig>, runManager?: CallbackManagerForChainRun): Promise<RunOutput>;
421
421
  invoke(input: RunInput, options?: Partial<RunnableConfig>): Promise<RunOutput>;
422
- _transform(generator: AsyncGenerator<RunInput>, runManagerPromise?: Promise<CallbackManagerForChainRun | undefined>, config?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
422
+ _transform(generator: AsyncGenerator<RunInput>, runManager?: CallbackManagerForChainRun, config?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
423
423
  transform(generator: AsyncGenerator<RunInput>, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
424
424
  stream(input: RunInput, options?: Partial<RunnableConfig>): Promise<IterableReadableStream<RunOutput>>;
425
425
  }
@@ -462,7 +462,7 @@ export declare class RunnableAssign<RunInput extends Record<string, any> = Recor
462
462
  mapper: RunnableMap<RunInput>;
463
463
  constructor(fields: RunnableMap<RunInput> | RunnableAssignFields<RunInput>);
464
464
  invoke(input: RunInput, options?: Partial<CallOptions>): Promise<RunOutput>;
465
- _transform(generator: AsyncGenerator<RunInput>, runManagerPromise?: Promise<CallbackManagerForChainRun | undefined>, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
465
+ _transform(generator: AsyncGenerator<RunInput>, runManager?: CallbackManagerForChainRun, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
466
466
  transform(generator: AsyncGenerator<RunInput>, options?: Partial<RunnableConfig>): AsyncGenerator<RunOutput>;
467
467
  stream(input: RunInput, options?: Partial<RunnableConfig>): Promise<IterableReadableStream<RunOutput>>;
468
468
  }
@@ -2,7 +2,7 @@ import pRetry from "p-retry";
2
2
  import { CallbackManager, } from "../callbacks/manager.js";
3
3
  import { LogStreamCallbackHandler, RunLogPatch, } from "../tracers/log_stream.js";
4
4
  import { Serializable } from "../load/serializable.js";
5
- import { IterableReadableStream, concat, atee, AsyncGeneratorWithSetup, } from "../utils/stream.js";
5
+ import { IterableReadableStream, concat, atee, pipeGeneratorWithSetup, } from "../utils/stream.js";
6
6
  import { DEFAULT_RECURSION_LIMIT, getCallbackManagerForConfig, mergeConfigs, } from "./config.js";
7
7
  import { AsyncCaller } from "../utils/async_caller.js";
8
8
  import { RootListenersTracer } from "../tracers/root_listener.js";
@@ -210,9 +210,8 @@ export class Runnable extends Serializable {
210
210
  let finalOutput;
211
211
  let finalOutputSupported = true;
212
212
  const callbackManager_ = await getCallbackManagerForConfig(options);
213
- const inputGeneratorWithSetup = new AsyncGeneratorWithSetup(inputGenerator, async () => callbackManager_?.handleChainStart(this.toJSON(), { input: "" }, undefined, options?.runType, undefined, undefined, options?.runName ?? this.getName()));
214
213
  async function* wrapInputForTracing() {
215
- for await (const chunk of inputGeneratorWithSetup) {
214
+ for await (const chunk of inputGenerator) {
216
215
  if (finalInputSupported) {
217
216
  if (finalInput === undefined) {
218
217
  finalInput = chunk;
@@ -231,9 +230,11 @@ export class Runnable extends Serializable {
231
230
  yield chunk;
232
231
  }
233
232
  }
233
+ let runManager;
234
234
  try {
235
- const outputIterator = transformer(wrapInputForTracing(), inputGeneratorWithSetup.setup, options);
236
- for await (const chunk of outputIterator) {
235
+ const pipe = await pipeGeneratorWithSetup(transformer, wrapInputForTracing(), async () => callbackManager_?.handleChainStart(this.toJSON(), { input: "" }, undefined, options?.runType, undefined, undefined, options?.runName ?? this.getName()), options);
236
+ runManager = pipe.setup;
237
+ for await (const chunk of pipe.output) {
237
238
  yield chunk;
238
239
  if (finalOutputSupported) {
239
240
  if (finalOutput === undefined) {
@@ -253,13 +254,11 @@ export class Runnable extends Serializable {
253
254
  }
254
255
  }
255
256
  catch (e) {
256
- const runManager = await inputGeneratorWithSetup.setup;
257
257
  await runManager?.handleChainError(e, undefined, undefined, undefined, {
258
258
  inputs: _coerceToDict(finalInput, "input"),
259
259
  });
260
260
  throw e;
261
261
  }
262
- const runManager = await inputGeneratorWithSetup.setup;
263
262
  await runManager?.handleChainEnd(finalOutput ?? {}, undefined, undefined, undefined, { inputs: _coerceToDict(finalInput, "input") });
264
263
  }
265
264
  _patchConfig(config = {}, callbackManager = undefined, recursionLimit = undefined) {
@@ -995,12 +994,11 @@ export class RunnableMap extends Runnable {
995
994
  await runManager?.handleChainEnd(output);
996
995
  return output;
997
996
  }
998
- async *_transform(generator, runManagerPromise, options) {
997
+ async *_transform(generator, runManager, options) {
999
998
  // shallow copy steps to ignore changes while iterating
1000
999
  const steps = { ...this.steps };
1001
1000
  // each step gets a copy of the input iterator
1002
1001
  const inputCopies = atee(generator, Object.keys(steps).length);
1003
- const runManager = await runManagerPromise;
1004
1002
  // start the first iteration of each output iterator
1005
1003
  const tasks = new Map(Object.entries(steps).map(([key, runnable], i) => {
1006
1004
  const gen = runnable.transform(inputCopies[i], this._patchConfig(options, runManager?.getChild(`map:key:${key}`)));
@@ -1069,7 +1067,7 @@ export class RunnableLambda extends Runnable {
1069
1067
  async invoke(input, options) {
1070
1068
  return this._callWithConfig(this._invoke, input, options);
1071
1069
  }
1072
- async *_transform(generator, runManagerPromise, config) {
1070
+ async *_transform(generator, runManager, config) {
1073
1071
  let finalChunk;
1074
1072
  for await (const chunk of generator) {
1075
1073
  if (finalChunk === undefined) {
@@ -1091,7 +1089,6 @@ export class RunnableLambda extends Runnable {
1091
1089
  if (config?.recursionLimit === 0) {
1092
1090
  throw new Error("Recursion limit reached.");
1093
1091
  }
1094
- const runManager = await runManagerPromise;
1095
1092
  const stream = await output.stream(finalChunk, this._patchConfig(config, runManager?.getChild(), (config?.recursionLimit ?? DEFAULT_RECURSION_LIMIT) - 1));
1096
1093
  for await (const chunk of stream) {
1097
1094
  yield chunk;
@@ -1267,12 +1264,11 @@ export class RunnableAssign extends Runnable {
1267
1264
  ...mapperResult,
1268
1265
  };
1269
1266
  }
1270
- async *_transform(generator, runManagerPromise, options) {
1267
+ async *_transform(generator, runManager, options) {
1271
1268
  // collect mapper keys
1272
1269
  const mapperKeys = this.mapper.getStepsKeys();
1273
1270
  // create two input gens, one for the mapper, one for the input
1274
1271
  const [forPassthrough, forMapper] = atee(generator);
1275
- const runManager = await runManagerPromise;
1276
1272
  // create mapper output gen
1277
1273
  const mapperOutput = this.mapper.transform(forMapper, this._patchConfig(options, runManager?.getChild()));
1278
1274
  // start the mapper
@@ -84,7 +84,7 @@ class RunnableBranch extends base_js_1.Runnable {
84
84
  *
85
85
  * @example
86
86
  * ```ts
87
- * import { RunnableBranch } from "langchain/schema/runnable";
87
+ * import { RunnableBranch } from "@langchain/core/runnables";
88
88
  *
89
89
  * const branch = RunnableBranch.from([
90
90
  * [(x: number) => x > 0, (x: number) => x + 1],
@@ -73,7 +73,7 @@ export declare class RunnableBranch<RunInput = any, RunOutput = any> extends Run
73
73
  *
74
74
  * @example
75
75
  * ```ts
76
- * import { RunnableBranch } from "langchain/schema/runnable";
76
+ * import { RunnableBranch } from "@langchain/core/runnables";
77
77
  *
78
78
  * const branch = RunnableBranch.from([
79
79
  * [(x: number) => x > 0, (x: number) => x + 1],
@@ -81,7 +81,7 @@ export class RunnableBranch extends Runnable {
81
81
  *
82
82
  * @example
83
83
  * ```ts
84
- * import { RunnableBranch } from "langchain/schema/runnable";
84
+ * import { RunnableBranch } from "@langchain/core/runnables";
85
85
  *
86
86
  * const branch = RunnableBranch.from([
87
87
  * [(x: number) => x > 0, (x: number) => x + 1],
@@ -81,9 +81,7 @@ class RunnablePassthrough extends base_js_1.Runnable {
81
81
  * });
82
82
  * ```
83
83
  */
84
- static assign(
85
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- mapping) {
84
+ static assign(mapping) {
87
85
  return new base_js_1.RunnableAssign(new base_js_1.RunnableMap({ steps: mapping }));
88
86
  }
89
87
  }
@@ -60,5 +60,5 @@ export declare class RunnablePassthrough<RunInput> extends Runnable<RunInput, Ru
60
60
  * });
61
61
  * ```
62
62
  */
63
- static assign(mapping: RunnableMapLike<Record<string, unknown>, Record<string, unknown>>): RunnableAssign<Record<string, unknown>, Record<string, unknown>>;
63
+ static assign<RunInput extends Record<string, unknown>, RunOutput extends Record<string, unknown>>(mapping: RunnableMapLike<RunInput, RunOutput>): RunnableAssign<RunInput, RunInput & RunOutput>;
64
64
  }
@@ -78,9 +78,7 @@ export class RunnablePassthrough extends Runnable {
78
78
  * });
79
79
  * ```
80
80
  */
81
- static assign(
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- mapping) {
81
+ static assign(mapping) {
84
82
  return new RunnableAssign(new RunnableMap({ steps: mapping }));
85
83
  }
86
84
  }
@@ -8,6 +8,13 @@ function _coerceToDict(value, defaultKey) {
8
8
  ? value
9
9
  : { [defaultKey]: value };
10
10
  }
11
+ function stripNonAlphanumeric(input) {
12
+ return input.replace(/[-:.]/g, "");
13
+ }
14
+ function convertToDottedOrderFormat(epoch, runId) {
15
+ return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}000Z`) +
16
+ runId);
17
+ }
11
18
  class BaseTracer extends base_js_1.BaseCallbackHandler {
12
19
  constructor(_fields) {
13
20
  super(...arguments);
@@ -25,15 +32,31 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
25
32
  parentRun.child_runs.push(childRun);
26
33
  }
27
34
  async _startTrace(run) {
28
- if (run.parent_run_id !== undefined) {
29
- const parentRun = this.runMap.get(run.parent_run_id);
35
+ const currentDottedOrder = convertToDottedOrderFormat(run.start_time, run.id);
36
+ const storedRun = { ...run };
37
+ if (storedRun.parent_run_id !== undefined) {
38
+ const parentRun = this.runMap.get(storedRun.parent_run_id);
30
39
  if (parentRun) {
31
- this._addChildRun(parentRun, run);
32
- parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
40
+ this._addChildRun(parentRun, storedRun);
41
+ parentRun.child_execution_order = Math.max(parentRun.child_execution_order, storedRun.child_execution_order);
42
+ storedRun.trace_id = parentRun.trace_id;
43
+ if (parentRun.dotted_order !== undefined) {
44
+ storedRun.dotted_order = [
45
+ parentRun.dotted_order,
46
+ currentDottedOrder,
47
+ ].join(".");
48
+ }
49
+ else {
50
+ console.warn(`Parent run with UUID ${storedRun.parent_run_id} not found.`);
51
+ }
33
52
  }
34
53
  }
35
- this.runMap.set(run.id, run);
36
- await this.onRunCreate?.(run);
54
+ else {
55
+ storedRun.trace_id = storedRun.id;
56
+ storedRun.dotted_order = currentDottedOrder;
57
+ }
58
+ this.runMap.set(storedRun.id, storedRun);
59
+ await this.onRunCreate?.(storedRun);
37
60
  }
38
61
  async _endTrace(run) {
39
62
  const parentRun = run.parent_run_id !== undefined && this.runMap.get(run.parent_run_id);
@@ -18,6 +18,8 @@ export interface Run extends BaseRun {
18
18
  time: string;
19
19
  kwargs?: Record<string, unknown>;
20
20
  }>;
21
+ trace_id?: string;
22
+ dotted_order?: string;
21
23
  }
22
24
  export interface AgentRun extends Run {
23
25
  actions: AgentAction[];
@@ -5,6 +5,13 @@ function _coerceToDict(value, defaultKey) {
5
5
  ? value
6
6
  : { [defaultKey]: value };
7
7
  }
8
+ function stripNonAlphanumeric(input) {
9
+ return input.replace(/[-:.]/g, "");
10
+ }
11
+ function convertToDottedOrderFormat(epoch, runId) {
12
+ return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}000Z`) +
13
+ runId);
14
+ }
8
15
  export class BaseTracer extends BaseCallbackHandler {
9
16
  constructor(_fields) {
10
17
  super(...arguments);
@@ -22,15 +29,31 @@ export class BaseTracer extends BaseCallbackHandler {
22
29
  parentRun.child_runs.push(childRun);
23
30
  }
24
31
  async _startTrace(run) {
25
- if (run.parent_run_id !== undefined) {
26
- const parentRun = this.runMap.get(run.parent_run_id);
32
+ const currentDottedOrder = convertToDottedOrderFormat(run.start_time, run.id);
33
+ const storedRun = { ...run };
34
+ if (storedRun.parent_run_id !== undefined) {
35
+ const parentRun = this.runMap.get(storedRun.parent_run_id);
27
36
  if (parentRun) {
28
- this._addChildRun(parentRun, run);
29
- parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
37
+ this._addChildRun(parentRun, storedRun);
38
+ parentRun.child_execution_order = Math.max(parentRun.child_execution_order, storedRun.child_execution_order);
39
+ storedRun.trace_id = parentRun.trace_id;
40
+ if (parentRun.dotted_order !== undefined) {
41
+ storedRun.dotted_order = [
42
+ parentRun.dotted_order,
43
+ currentDottedOrder,
44
+ ].join(".");
45
+ }
46
+ else {
47
+ console.warn(`Parent run with UUID ${storedRun.parent_run_id} not found.`);
48
+ }
30
49
  }
31
50
  }
32
- this.runMap.set(run.id, run);
33
- await this.onRunCreate?.(run);
51
+ else {
52
+ storedRun.trace_id = storedRun.id;
53
+ storedRun.dotted_order = currentDottedOrder;
54
+ }
55
+ this.runMap.set(storedRun.id, storedRun);
56
+ await this.onRunCreate?.(storedRun);
34
57
  }
35
58
  async _endTrace(run) {
36
59
  const parentRun = run.parent_run_id !== undefined && this.runMap.get(run.parent_run_id);
@@ -4,6 +4,8 @@ exports.getTracingV2CallbackHandler = exports.getTracingCallbackHandler = void 0
4
4
  const tracer_langchain_js_1 = require("./tracer_langchain.cjs");
5
5
  const tracer_langchain_v1_js_1 = require("./tracer_langchain_v1.cjs");
6
6
  /**
7
+ * @deprecated Use the V2 handler instead.
8
+ *
7
9
  * Function that returns an instance of `LangChainTracerV1`. If a session
8
10
  * is provided, it loads that session into the tracer; otherwise, it loads
9
11
  * a default session.
@@ -1,6 +1,8 @@
1
1
  import { LangChainTracer } from "./tracer_langchain.js";
2
2
  import { LangChainTracerV1 } from "./tracer_langchain_v1.js";
3
3
  /**
4
+ * @deprecated Use the V2 handler instead.
5
+ *
4
6
  * Function that returns an instance of `LangChainTracerV1`. If a session
5
7
  * is provided, it loads that session into the tracer; otherwise, it loads
6
8
  * a default session.
@@ -1,6 +1,8 @@
1
1
  import { LangChainTracer } from "./tracer_langchain.js";
2
2
  import { LangChainTracerV1 } from "./tracer_langchain_v1.js";
3
3
  /**
4
+ * @deprecated Use the V2 handler instead.
5
+ *
4
6
  * Function that returns an instance of `LangChainTracerV1`. If a session
5
7
  * is provided, it loads that session into the tracer; otherwise, it loads
6
8
  * a default session.
@@ -4,6 +4,7 @@ exports.LangChainTracerV1 = void 0;
4
4
  const index_js_1 = require("../messages/index.cjs");
5
5
  const env_js_1 = require("../utils/env.cjs");
6
6
  const base_js_1 = require("./base.cjs");
7
+ /** @deprecated Use LangChainTracer instead. */
7
8
  class LangChainTracerV1 extends base_js_1.BaseTracer {
8
9
  constructor() {
9
10
  super();
@@ -42,6 +42,7 @@ export type TracerSessionCreate = BaseTracerSession;
42
42
  export interface TracerSessionV1 extends BaseTracerSession {
43
43
  id: number;
44
44
  }
45
+ /** @deprecated Use LangChainTracer instead. */
45
46
  export declare class LangChainTracerV1 extends BaseTracer {
46
47
  name: string;
47
48
  protected endpoint: string;
@@ -1,6 +1,7 @@
1
1
  import { getBufferString } from "../messages/index.js";
2
2
  import { getEnvironmentVariable } from "../utils/env.js";
3
3
  import { BaseTracer } from "./base.js";
4
+ /** @deprecated Use LangChainTracer instead. */
4
5
  export class LangChainTracerV1 extends BaseTracer {
5
6
  constructor() {
6
7
  super();
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsyncGeneratorWithSetup = exports.concat = exports.atee = exports.IterableReadableStream = void 0;
3
+ exports.pipeGeneratorWithSetup = exports.AsyncGeneratorWithSetup = exports.concat = exports.atee = exports.IterableReadableStream = void 0;
4
4
  /*
5
5
  * Support async iterator syntax for ReadableStreams in all environments.
6
6
  * Source: https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
@@ -210,3 +210,9 @@ class AsyncGeneratorWithSetup {
210
210
  }
211
211
  }
212
212
  exports.AsyncGeneratorWithSetup = AsyncGeneratorWithSetup;
213
+ async function pipeGeneratorWithSetup(to, generator, startSetup, ...args) {
214
+ const gen = new AsyncGeneratorWithSetup(generator, startSetup);
215
+ const setup = await gen.setup;
216
+ return { output: to(gen, setup, ...args), setup };
217
+ }
218
+ exports.pipeGeneratorWithSetup = pipeGeneratorWithSetup;
@@ -29,3 +29,7 @@ export declare class AsyncGeneratorWithSetup<S = unknown, T = unknown, TReturn =
29
29
  throw(e: Error): Promise<IteratorResult<T>>;
30
30
  [Symbol.asyncIterator](): this;
31
31
  }
32
+ export declare function pipeGeneratorWithSetup<S, A extends unknown[], T, TReturn, TNext, U, UReturn, UNext>(to: (g: AsyncGenerator<T, TReturn, TNext>, s: S, ...args: A) => AsyncGenerator<U, UReturn, UNext>, generator: AsyncGenerator<T, TReturn, TNext>, startSetup: () => Promise<S>, ...args: A): Promise<{
33
+ output: AsyncGenerator<U, UReturn, UNext>;
34
+ setup: Awaited<S>;
35
+ }>;
@@ -203,3 +203,8 @@ export class AsyncGeneratorWithSetup {
203
203
  return this;
204
204
  }
205
205
  }
206
+ export async function pipeGeneratorWithSetup(to, generator, startSetup, ...args) {
207
+ const gen = new AsyncGeneratorWithSetup(generator, startSetup);
208
+ const setup = await gen.setup;
209
+ return { output: to(gen, setup, ...args), setup };
210
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/core",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Core LangChain.js abstractions and schemas",
5
5
  "type": "module",
6
6
  "engines": {
@@ -229,16 +229,16 @@
229
229
  "import": "./tracers/run_collector.js",
230
230
  "require": "./tracers/run_collector.cjs"
231
231
  },
232
- "./tracers/tracer_langchain_v1": {
233
- "types": "./tracers/tracer_langchain_v1.d.ts",
234
- "import": "./tracers/tracer_langchain_v1.js",
235
- "require": "./tracers/tracer_langchain_v1.cjs"
236
- },
237
232
  "./tracers/tracer_langchain": {
238
233
  "types": "./tracers/tracer_langchain.d.ts",
239
234
  "import": "./tracers/tracer_langchain.js",
240
235
  "require": "./tracers/tracer_langchain.cjs"
241
236
  },
237
+ "./tracers/tracer_langchain_v1": {
238
+ "types": "./tracers/tracer_langchain_v1.d.ts",
239
+ "import": "./tracers/tracer_langchain_v1.js",
240
+ "require": "./tracers/tracer_langchain_v1.cjs"
241
+ },
242
242
  "./utils/async_caller": {
243
243
  "types": "./utils/async_caller.d.ts",
244
244
  "import": "./utils/async_caller.js",
@@ -390,12 +390,12 @@
390
390
  "tracers/run_collector.cjs",
391
391
  "tracers/run_collector.js",
392
392
  "tracers/run_collector.d.ts",
393
- "tracers/tracer_langchain_v1.cjs",
394
- "tracers/tracer_langchain_v1.js",
395
- "tracers/tracer_langchain_v1.d.ts",
396
393
  "tracers/tracer_langchain.cjs",
397
394
  "tracers/tracer_langchain.js",
398
395
  "tracers/tracer_langchain.d.ts",
396
+ "tracers/tracer_langchain_v1.cjs",
397
+ "tracers/tracer_langchain_v1.js",
398
+ "tracers/tracer_langchain_v1.d.ts",
399
399
  "utils/async_caller.cjs",
400
400
  "utils/async_caller.js",
401
401
  "utils/async_caller.d.ts",