@langchain/core 0.2.17 → 0.2.18

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.
@@ -57,6 +57,58 @@ test("Runnable streamEvents method", async () => {
57
57
  },
58
58
  ]);
59
59
  });
60
+ test("Runnable streamEvents method on a chat model", async () => {
61
+ const model = new FakeListChatModel({
62
+ responses: ["abc"],
63
+ });
64
+ const events = [];
65
+ const eventStream = await model.streamEvents("hello", { version: "v2" });
66
+ for await (const event of eventStream) {
67
+ events.push(event);
68
+ }
69
+ expect(events).toMatchObject([
70
+ {
71
+ data: { input: "hello" },
72
+ event: "on_chat_model_start",
73
+ name: "FakeListChatModel",
74
+ metadata: expect.any(Object),
75
+ run_id: expect.any(String),
76
+ tags: [],
77
+ },
78
+ {
79
+ data: { chunk: new AIMessageChunk({ content: "a" }) },
80
+ event: "on_chat_model_stream",
81
+ name: "FakeListChatModel",
82
+ metadata: expect.any(Object),
83
+ run_id: expect.any(String),
84
+ tags: [],
85
+ },
86
+ {
87
+ data: { chunk: new AIMessageChunk({ content: "b" }) },
88
+ event: "on_chat_model_stream",
89
+ name: "FakeListChatModel",
90
+ metadata: expect.any(Object),
91
+ run_id: expect.any(String),
92
+ tags: [],
93
+ },
94
+ {
95
+ data: { chunk: new AIMessageChunk({ content: "c" }) },
96
+ event: "on_chat_model_stream",
97
+ name: "FakeListChatModel",
98
+ metadata: expect.any(Object),
99
+ run_id: expect.any(String),
100
+ tags: [],
101
+ },
102
+ {
103
+ data: { output: new AIMessageChunk({ content: "abc" }) },
104
+ event: "on_chat_model_end",
105
+ name: "FakeListChatModel",
106
+ metadata: expect.any(Object),
107
+ run_id: expect.any(String),
108
+ tags: [],
109
+ },
110
+ ]);
111
+ });
60
112
  test("Runnable streamEvents method with three runnables", async () => {
61
113
  const r = RunnableLambda.from(reverse);
62
114
  const chain = r
@@ -556,18 +608,6 @@ test("Runnable streamEvents method with llm", async () => {
556
608
  a: "b",
557
609
  },
558
610
  },
559
- {
560
- event: "on_llm_stream",
561
- run_id: expect.any(String),
562
- name: "my_model",
563
- tags: ["my_model"],
564
- metadata: {
565
- a: "b",
566
- },
567
- data: {
568
- chunk: "h",
569
- },
570
- },
571
611
  {
572
612
  event: "on_llm_stream",
573
613
  data: {
@@ -582,18 +622,6 @@ test("Runnable streamEvents method with llm", async () => {
582
622
  a: "b",
583
623
  },
584
624
  },
585
- {
586
- event: "on_llm_stream",
587
- run_id: expect.any(String),
588
- name: "my_model",
589
- tags: ["my_model"],
590
- metadata: {
591
- a: "b",
592
- },
593
- data: {
594
- chunk: "e",
595
- },
596
- },
597
625
  {
598
626
  event: "on_llm_stream",
599
627
  data: {
@@ -608,18 +636,6 @@ test("Runnable streamEvents method with llm", async () => {
608
636
  a: "b",
609
637
  },
610
638
  },
611
- {
612
- event: "on_llm_stream",
613
- run_id: expect.any(String),
614
- name: "my_model",
615
- tags: ["my_model"],
616
- metadata: {
617
- a: "b",
618
- },
619
- data: {
620
- chunk: "y",
621
- },
622
- },
623
639
  {
624
640
  event: "on_llm_stream",
625
641
  data: {
@@ -634,18 +650,6 @@ test("Runnable streamEvents method with llm", async () => {
634
650
  a: "b",
635
651
  },
636
652
  },
637
- {
638
- event: "on_llm_stream",
639
- run_id: expect.any(String),
640
- name: "my_model",
641
- tags: ["my_model"],
642
- metadata: {
643
- a: "b",
644
- },
645
- data: {
646
- chunk: "!",
647
- },
648
- },
649
653
  {
650
654
  event: "on_llm_end",
651
655
  data: {
@@ -1,7 +1,7 @@
1
1
  import type { z } from "zod";
2
- import type { RunnableConfig } from "./config.js";
3
2
  import type { IterableReadableStreamInterface } from "../utils/stream.js";
4
3
  import type { SerializableInterface } from "../load/serializable.js";
4
+ import type { BaseCallbackConfig } from "../callbacks/manager.js";
5
5
  export type RunnableBatchOptions = {
6
6
  /** @deprecated Pass in via the standard runnable config object instead */
7
7
  maxConcurrency?: number;
@@ -41,3 +41,16 @@ export interface Node {
41
41
  id: string;
42
42
  data: RunnableIOSchema | RunnableInterface;
43
43
  }
44
+ export interface RunnableConfig extends BaseCallbackConfig {
45
+ /**
46
+ * Runtime values for attributes previously made configurable on this Runnable,
47
+ * or sub-Runnables.
48
+ */
49
+ configurable?: Record<string, any>;
50
+ /**
51
+ * Maximum number of times a call can recurse. If not provided, defaults to 25.
52
+ */
53
+ recursionLimit?: number;
54
+ /** Maximum number of parallel calls to make. */
55
+ maxConcurrency?: number;
56
+ }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.AsyncLocalStorageProviderSingleton = exports.MockAsyncLocalStorage = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const langsmith_1 = require("langsmith");
6
+ const manager_js_1 = require("../callbacks/manager.cjs");
5
7
  class MockAsyncLocalStorage {
6
8
  getStore() {
7
9
  return undefined;
@@ -12,14 +14,42 @@ class MockAsyncLocalStorage {
12
14
  }
13
15
  exports.MockAsyncLocalStorage = MockAsyncLocalStorage;
14
16
  const mockAsyncLocalStorage = new MockAsyncLocalStorage();
17
+ const TRACING_ALS_KEY = Symbol.for("ls:tracing_async_local_storage");
18
+ const LC_CHILD_KEY = Symbol.for("lc:child_config");
15
19
  class AsyncLocalStorageProvider {
16
20
  getInstance() {
17
- return (globalThis.__lc_tracing_async_local_storage ??
18
- mockAsyncLocalStorage);
21
+ return globalThis[TRACING_ALS_KEY] ?? mockAsyncLocalStorage;
22
+ }
23
+ getRunnableConfig() {
24
+ const storage = this.getInstance();
25
+ // this has the runnable config
26
+ // which means that we should also have an instance of a LangChainTracer
27
+ // with the run map prepopulated
28
+ return storage.getStore()?.extra?.[LC_CHILD_KEY];
29
+ }
30
+ runWithConfig(config, callback, avoidCreatingRootRunTree) {
31
+ const callbackManager = manager_js_1.CallbackManager._configureSync(config?.callbacks, undefined, config?.tags, undefined, config?.metadata);
32
+ const storage = this.getInstance();
33
+ const parentRunId = callbackManager?.getParentRunId();
34
+ const langChainTracer = callbackManager?.handlers?.find((handler) => handler?.name === "langchain_tracer");
35
+ let runTree;
36
+ if (langChainTracer && parentRunId) {
37
+ runTree = langChainTracer.convertToRunTree(parentRunId);
38
+ }
39
+ else if (!avoidCreatingRootRunTree) {
40
+ runTree = new langsmith_1.RunTree({
41
+ name: "<runnable_lambda>",
42
+ tracingEnabled: false,
43
+ });
44
+ }
45
+ if (runTree) {
46
+ runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };
47
+ }
48
+ return storage.run(runTree, callback);
19
49
  }
20
50
  initializeGlobalInstance(instance) {
21
- if (globalThis.__lc_tracing_async_local_storage === undefined) {
22
- globalThis.__lc_tracing_async_local_storage = instance;
51
+ if (globalThis[TRACING_ALS_KEY] === undefined) {
52
+ globalThis[TRACING_ALS_KEY] = instance;
23
53
  }
24
54
  }
25
55
  }
@@ -8,6 +8,8 @@ export declare class MockAsyncLocalStorage implements AsyncLocalStorageInterface
8
8
  }
9
9
  declare class AsyncLocalStorageProvider {
10
10
  getInstance(): AsyncLocalStorageInterface;
11
+ getRunnableConfig(): any;
12
+ runWithConfig<T>(config: any, callback: () => T, avoidCreatingRootRunTree?: boolean): T;
11
13
  initializeGlobalInstance(instance: AsyncLocalStorageInterface): void;
12
14
  }
13
15
  declare const AsyncLocalStorageProviderSingleton: AsyncLocalStorageProvider;
@@ -1,4 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { RunTree } from "langsmith";
3
+ import { CallbackManager } from "../callbacks/manager.js";
2
4
  export class MockAsyncLocalStorage {
3
5
  getStore() {
4
6
  return undefined;
@@ -8,14 +10,42 @@ export class MockAsyncLocalStorage {
8
10
  }
9
11
  }
10
12
  const mockAsyncLocalStorage = new MockAsyncLocalStorage();
13
+ const TRACING_ALS_KEY = Symbol.for("ls:tracing_async_local_storage");
14
+ const LC_CHILD_KEY = Symbol.for("lc:child_config");
11
15
  class AsyncLocalStorageProvider {
12
16
  getInstance() {
13
- return (globalThis.__lc_tracing_async_local_storage ??
14
- mockAsyncLocalStorage);
17
+ return globalThis[TRACING_ALS_KEY] ?? mockAsyncLocalStorage;
18
+ }
19
+ getRunnableConfig() {
20
+ const storage = this.getInstance();
21
+ // this has the runnable config
22
+ // which means that we should also have an instance of a LangChainTracer
23
+ // with the run map prepopulated
24
+ return storage.getStore()?.extra?.[LC_CHILD_KEY];
25
+ }
26
+ runWithConfig(config, callback, avoidCreatingRootRunTree) {
27
+ const callbackManager = CallbackManager._configureSync(config?.callbacks, undefined, config?.tags, undefined, config?.metadata);
28
+ const storage = this.getInstance();
29
+ const parentRunId = callbackManager?.getParentRunId();
30
+ const langChainTracer = callbackManager?.handlers?.find((handler) => handler?.name === "langchain_tracer");
31
+ let runTree;
32
+ if (langChainTracer && parentRunId) {
33
+ runTree = langChainTracer.convertToRunTree(parentRunId);
34
+ }
35
+ else if (!avoidCreatingRootRunTree) {
36
+ runTree = new RunTree({
37
+ name: "<runnable_lambda>",
38
+ tracingEnabled: false,
39
+ });
40
+ }
41
+ if (runTree) {
42
+ runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };
43
+ }
44
+ return storage.run(runTree, callback);
15
45
  }
16
46
  initializeGlobalInstance(instance) {
17
- if (globalThis.__lc_tracing_async_local_storage === undefined) {
18
- globalThis.__lc_tracing_async_local_storage = instance;
47
+ if (globalThis[TRACING_ALS_KEY] === undefined) {
48
+ globalThis[TRACING_ALS_KEY] = instance;
19
49
  }
20
50
  }
21
51
  }
@@ -108,7 +108,6 @@ test("Config should be automatically populated after setting global async local
108
108
  });
109
109
  test("Runnable streamEvents method with streaming nested in a RunnableLambda", async () => {
110
110
  AsyncLocalStorageProviderSingleton.initializeGlobalInstance(new AsyncLocalStorage());
111
- const asyncLocalStorage = AsyncLocalStorageProviderSingleton.getInstance();
112
111
  const chat = new FakeListChatModel({
113
112
  responses: ["Hello"],
114
113
  });
@@ -117,7 +116,7 @@ test("Runnable streamEvents method with streaming nested in a RunnableLambda", a
117
116
  const innerRunId2 = v4();
118
117
  const dummyHandler = new FakeCallbackHandler();
119
118
  const myFunc = async (input) => {
120
- const outerCallbackManager = await getCallbackManagerForConfig(asyncLocalStorage.getStore());
119
+ const outerCallbackManager = await getCallbackManagerForConfig(AsyncLocalStorageProviderSingleton.getRunnableConfig());
121
120
  expect(outerCallbackManager?.getParentRunId()).toEqual(outerRunId);
122
121
  const nestedLambdaWithOverriddenCallbacks = RunnableLambda.from(async (_, config) => {
123
122
  expect(config?.callbacks?.handlers).toEqual([]);
@@ -127,7 +126,7 @@ test("Runnable streamEvents method with streaming nested in a RunnableLambda", a
127
126
  callbacks: [],
128
127
  });
129
128
  const nestedLambdaWithoutOverriddenCallbacks = RunnableLambda.from(async (_, config) => {
130
- const innerCallbackManager = await getCallbackManagerForConfig(asyncLocalStorage.getStore());
129
+ const innerCallbackManager = await getCallbackManagerForConfig(AsyncLocalStorageProviderSingleton.getRunnableConfig());
131
130
  expect(innerCallbackManager?.getParentRunId()).toEqual(innerRunId2);
132
131
  expect(config?.callbacks?.handlers).toContain(dummyHandler);
133
132
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseTracer = void 0;
3
+ exports.BaseTracer = exports.isBaseTracer = void 0;
4
4
  const base_js_1 = require("../callbacks/base.cjs");
5
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
6
  function _coerceToDict(value, defaultKey) {
@@ -15,6 +15,10 @@ function convertToDottedOrderFormat(epoch, runId, executionOrder) {
15
15
  const paddedOrder = executionOrder.toFixed(0).slice(0, 3).padStart(3, "0");
16
16
  return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}${paddedOrder}Z`) + runId);
17
17
  }
18
+ function isBaseTracer(x) {
19
+ return typeof x._addRunToRunMap === "function";
20
+ }
21
+ exports.isBaseTracer = isBaseTracer;
18
22
  class BaseTracer extends base_js_1.BaseCallbackHandler {
19
23
  constructor(_fields) {
20
24
  super(...arguments);
@@ -41,7 +45,7 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
41
45
  _addChildRun(parentRun, childRun) {
42
46
  parentRun.child_runs.push(childRun);
43
47
  }
44
- async _startTrace(run) {
48
+ _addRunToRunMap(run) {
45
49
  const currentDottedOrder = convertToDottedOrderFormat(run.start_time, run.id, run.execution_order);
46
50
  const storedRun = { ...run };
47
51
  if (storedRun.parent_run_id !== undefined) {
@@ -73,7 +77,7 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
73
77
  storedRun.dotted_order = currentDottedOrder;
74
78
  }
75
79
  this.runMap.set(storedRun.id, storedRun);
76
- await this.onRunCreate?.(storedRun);
80
+ return storedRun;
77
81
  }
78
82
  async _endTrace(run) {
79
83
  const parentRun = run.parent_run_id !== undefined && this.runMap.get(run.parent_run_id);
@@ -94,7 +98,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
94
98
  }
95
99
  return parentRun.child_execution_order + 1;
96
100
  }
97
- async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
101
+ /**
102
+ * Create and add a run to the run map for LLM start events.
103
+ * This must sometimes be done synchronously to avoid race conditions
104
+ * when callbacks are backgrounded, so we expose it as a separate method here.
105
+ */
106
+ _createRunForLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
98
107
  const execution_order = this._getExecutionOrder(parentRunId);
99
108
  const start_time = Date.now();
100
109
  const finalExtraParams = metadata
@@ -120,11 +129,21 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
120
129
  extra: finalExtraParams ?? {},
121
130
  tags: tags || [],
122
131
  };
123
- await this._startTrace(run);
132
+ return this._addRunToRunMap(run);
133
+ }
134
+ async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
135
+ const run = this.runMap.get(runId) ??
136
+ this._createRunForLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name);
137
+ await this.onRunCreate?.(run);
124
138
  await this.onLLMStart?.(run);
125
139
  return run;
126
140
  }
127
- async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
141
+ /**
142
+ * Create and add a run to the run map for chat model start events.
143
+ * This must sometimes be done synchronously to avoid race conditions
144
+ * when callbacks are backgrounded, so we expose it as a separate method here.
145
+ */
146
+ _createRunForChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
128
147
  const execution_order = this._getExecutionOrder(parentRunId);
129
148
  const start_time = Date.now();
130
149
  const finalExtraParams = metadata
@@ -150,7 +169,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
150
169
  extra: finalExtraParams ?? {},
151
170
  tags: tags || [],
152
171
  };
153
- await this._startTrace(run);
172
+ return this._addRunToRunMap(run);
173
+ }
174
+ async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
175
+ const run = this.runMap.get(runId) ??
176
+ this._createRunForChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name);
177
+ await this.onRunCreate?.(run);
154
178
  await this.onLLMStart?.(run);
155
179
  return run;
156
180
  }
@@ -184,7 +208,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
184
208
  await this._endTrace(run);
185
209
  return run;
186
210
  }
187
- async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) {
211
+ /**
212
+ * Create and add a run to the run map for chain start events.
213
+ * This must sometimes be done synchronously to avoid race conditions
214
+ * when callbacks are backgrounded, so we expose it as a separate method here.
215
+ */
216
+ _createRunForChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) {
188
217
  const execution_order = this._getExecutionOrder(parentRunId);
189
218
  const start_time = Date.now();
190
219
  const run = {
@@ -207,7 +236,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
207
236
  extra: metadata ? { metadata } : {},
208
237
  tags: tags || [],
209
238
  };
210
- await this._startTrace(run);
239
+ return this._addRunToRunMap(run);
240
+ }
241
+ async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) {
242
+ const run = this.runMap.get(runId) ??
243
+ this._createRunForChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name);
244
+ await this.onRunCreate?.(run);
211
245
  await this.onChainStart?.(run);
212
246
  return run;
213
247
  }
@@ -247,7 +281,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
247
281
  await this._endTrace(run);
248
282
  return run;
249
283
  }
250
- async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
284
+ /**
285
+ * Create and add a run to the run map for tool start events.
286
+ * This must sometimes be done synchronously to avoid race conditions
287
+ * when callbacks are backgrounded, so we expose it as a separate method here.
288
+ */
289
+ _createRunForToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
251
290
  const execution_order = this._getExecutionOrder(parentRunId);
252
291
  const start_time = Date.now();
253
292
  const run = {
@@ -270,7 +309,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
270
309
  extra: metadata ? { metadata } : {},
271
310
  tags: tags || [],
272
311
  };
273
- await this._startTrace(run);
312
+ return this._addRunToRunMap(run);
313
+ }
314
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
315
+ const run = this.runMap.get(runId) ??
316
+ this._createRunForToolStart(tool, input, runId, parentRunId, tags, metadata, name);
317
+ await this.onRunCreate?.(run);
274
318
  await this.onToolStart?.(run);
275
319
  return run;
276
320
  }
@@ -332,7 +376,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
332
376
  });
333
377
  await this.onAgentEnd?.(run);
334
378
  }
335
- async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
379
+ /**
380
+ * Create and add a run to the run map for retriever start events.
381
+ * This must sometimes be done synchronously to avoid race conditions
382
+ * when callbacks are backgrounded, so we expose it as a separate method here.
383
+ */
384
+ _createRunForRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
336
385
  const execution_order = this._getExecutionOrder(parentRunId);
337
386
  const start_time = Date.now();
338
387
  const run = {
@@ -355,7 +404,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
355
404
  extra: metadata ? { metadata } : {},
356
405
  tags: tags || [],
357
406
  };
358
- await this._startTrace(run);
407
+ return this._addRunToRunMap(run);
408
+ }
409
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
410
+ const run = this.runMap.get(runId) ??
411
+ this._createRunForRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name);
412
+ await this.onRunCreate?.(run);
359
413
  await this.onRetrieverStart?.(run);
360
414
  return run;
361
415
  }
@@ -24,6 +24,7 @@ export interface Run extends BaseRun {
24
24
  export interface AgentRun extends Run {
25
25
  actions: AgentAction[];
26
26
  }
27
+ export declare function isBaseTracer(x: BaseCallbackHandler): x is BaseTracer;
27
28
  export declare abstract class BaseTracer extends BaseCallbackHandler {
28
29
  protected runMap: Map<string, Run>;
29
30
  constructor(_fields?: BaseCallbackHandlerInput);
@@ -31,13 +32,127 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
31
32
  protected stringifyError(error: unknown): string;
32
33
  protected abstract persistRun(run: Run): Promise<void>;
33
34
  protected _addChildRun(parentRun: Run, childRun: Run): void;
34
- protected _startTrace(run: Run): Promise<void>;
35
+ _addRunToRunMap(run: Run): {
36
+ id: string;
37
+ start_time: number;
38
+ execution_order: number;
39
+ child_runs: Run[];
40
+ child_execution_order: number;
41
+ events: {
42
+ name: string;
43
+ time: string;
44
+ kwargs?: Record<string, unknown> | undefined;
45
+ }[];
46
+ trace_id?: string | undefined;
47
+ dotted_order?: string | undefined;
48
+ name: string;
49
+ run_type: string;
50
+ end_time?: number | undefined;
51
+ extra?: KVMap | undefined;
52
+ error?: string | undefined;
53
+ serialized?: object | undefined;
54
+ inputs: KVMap;
55
+ outputs?: KVMap | undefined;
56
+ reference_example_id?: string | undefined;
57
+ parent_run_id?: string | undefined;
58
+ tags?: string[] | undefined;
59
+ };
35
60
  protected _endTrace(run: Run): Promise<void>;
36
61
  protected _getExecutionOrder(parentRunId: string | undefined): number;
62
+ /**
63
+ * Create and add a run to the run map for LLM start events.
64
+ * This must sometimes be done synchronously to avoid race conditions
65
+ * when callbacks are backgrounded, so we expose it as a separate method here.
66
+ */
67
+ _createRunForLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): {
68
+ id: string;
69
+ start_time: number;
70
+ execution_order: number;
71
+ child_runs: Run[];
72
+ child_execution_order: number;
73
+ events: {
74
+ name: string;
75
+ time: string;
76
+ kwargs?: Record<string, unknown> | undefined;
77
+ }[];
78
+ trace_id?: string | undefined;
79
+ dotted_order?: string | undefined;
80
+ name: string;
81
+ run_type: string;
82
+ end_time?: number | undefined;
83
+ extra?: KVMap | undefined;
84
+ error?: string | undefined;
85
+ serialized?: object | undefined;
86
+ inputs: KVMap;
87
+ outputs?: KVMap | undefined;
88
+ reference_example_id?: string | undefined;
89
+ parent_run_id?: string | undefined;
90
+ tags?: string[] | undefined;
91
+ };
37
92
  handleLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): Promise<Run>;
93
+ /**
94
+ * Create and add a run to the run map for chat model start events.
95
+ * This must sometimes be done synchronously to avoid race conditions
96
+ * when callbacks are backgrounded, so we expose it as a separate method here.
97
+ */
98
+ _createRunForChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): {
99
+ id: string;
100
+ start_time: number;
101
+ execution_order: number;
102
+ child_runs: Run[];
103
+ child_execution_order: number;
104
+ events: {
105
+ name: string;
106
+ time: string;
107
+ kwargs?: Record<string, unknown> | undefined;
108
+ }[];
109
+ trace_id?: string | undefined;
110
+ dotted_order?: string | undefined;
111
+ name: string;
112
+ run_type: string;
113
+ end_time?: number | undefined;
114
+ extra?: KVMap | undefined;
115
+ error?: string | undefined;
116
+ serialized?: object | undefined;
117
+ inputs: KVMap;
118
+ outputs?: KVMap | undefined;
119
+ reference_example_id?: string | undefined;
120
+ parent_run_id?: string | undefined;
121
+ tags?: string[] | undefined;
122
+ };
38
123
  handleChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): Promise<Run>;
39
124
  handleLLMEnd(output: LLMResult, runId: string): Promise<Run>;
40
125
  handleLLMError(error: unknown, runId: string): Promise<Run>;
126
+ /**
127
+ * Create and add a run to the run map for chain start events.
128
+ * This must sometimes be done synchronously to avoid race conditions
129
+ * when callbacks are backgrounded, so we expose it as a separate method here.
130
+ */
131
+ _createRunForChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, runType?: string, name?: string): {
132
+ id: string;
133
+ start_time: number;
134
+ execution_order: number;
135
+ child_runs: Run[];
136
+ child_execution_order: number;
137
+ events: {
138
+ name: string;
139
+ time: string;
140
+ kwargs?: Record<string, unknown> | undefined;
141
+ }[];
142
+ trace_id?: string | undefined;
143
+ dotted_order?: string | undefined;
144
+ name: string;
145
+ run_type: string;
146
+ end_time?: number | undefined;
147
+ extra?: KVMap | undefined;
148
+ error?: string | undefined;
149
+ serialized?: object | undefined;
150
+ inputs: KVMap;
151
+ outputs?: KVMap | undefined;
152
+ reference_example_id?: string | undefined;
153
+ parent_run_id?: string | undefined;
154
+ tags?: string[] | undefined;
155
+ };
41
156
  handleChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, runType?: string, name?: string): Promise<Run>;
42
157
  handleChainEnd(outputs: ChainValues, runId: string, _parentRunId?: string, _tags?: string[], kwargs?: {
43
158
  inputs?: Record<string, unknown>;
@@ -45,11 +160,71 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
45
160
  handleChainError(error: unknown, runId: string, _parentRunId?: string, _tags?: string[], kwargs?: {
46
161
  inputs?: Record<string, unknown>;
47
162
  }): Promise<Run>;
163
+ /**
164
+ * Create and add a run to the run map for tool start events.
165
+ * This must sometimes be done synchronously to avoid race conditions
166
+ * when callbacks are backgrounded, so we expose it as a separate method here.
167
+ */
168
+ _createRunForToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): {
169
+ id: string;
170
+ start_time: number;
171
+ execution_order: number;
172
+ child_runs: Run[];
173
+ child_execution_order: number;
174
+ events: {
175
+ name: string;
176
+ time: string;
177
+ kwargs?: Record<string, unknown> | undefined;
178
+ }[];
179
+ trace_id?: string | undefined;
180
+ dotted_order?: string | undefined;
181
+ name: string;
182
+ run_type: string;
183
+ end_time?: number | undefined;
184
+ extra?: KVMap | undefined;
185
+ error?: string | undefined;
186
+ serialized?: object | undefined;
187
+ inputs: KVMap;
188
+ outputs?: KVMap | undefined;
189
+ reference_example_id?: string | undefined;
190
+ parent_run_id?: string | undefined;
191
+ tags?: string[] | undefined;
192
+ };
48
193
  handleToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): Promise<Run>;
49
194
  handleToolEnd(output: any, runId: string): Promise<Run>;
50
195
  handleToolError(error: unknown, runId: string): Promise<Run>;
51
196
  handleAgentAction(action: AgentAction, runId: string): Promise<void>;
52
197
  handleAgentEnd(action: AgentFinish, runId: string): Promise<void>;
198
+ /**
199
+ * Create and add a run to the run map for retriever start events.
200
+ * This must sometimes be done synchronously to avoid race conditions
201
+ * when callbacks are backgrounded, so we expose it as a separate method here.
202
+ */
203
+ _createRunForRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): {
204
+ id: string;
205
+ start_time: number;
206
+ execution_order: number;
207
+ child_runs: Run[];
208
+ child_execution_order: number;
209
+ events: {
210
+ name: string;
211
+ time: string;
212
+ kwargs?: Record<string, unknown> | undefined;
213
+ }[];
214
+ trace_id?: string | undefined;
215
+ dotted_order?: string | undefined;
216
+ name: string;
217
+ run_type: string;
218
+ end_time?: number | undefined;
219
+ extra?: KVMap | undefined;
220
+ error?: string | undefined;
221
+ serialized?: object | undefined;
222
+ inputs: KVMap;
223
+ outputs?: KVMap | undefined;
224
+ reference_example_id?: string | undefined;
225
+ parent_run_id?: string | undefined;
226
+ tags?: string[] | undefined;
227
+ };
53
228
  handleRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): Promise<Run>;
54
229
  handleRetrieverEnd(documents: Document<Record<string, unknown>>[], runId: string): Promise<Run>;
55
230
  handleRetrieverError(error: unknown, runId: string): Promise<Run>;