@langchain/core 0.3.63 → 0.3.65

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.
@@ -155,9 +155,10 @@ class AIMessageChunk extends base_js_1.BaseMessageChunk {
155
155
  for (const [id, chunks] of Object.entries(groupedToolCallChunk)) {
156
156
  let parsedArgs = {};
157
157
  const name = chunks[0]?.name ?? "";
158
- const argStr = chunks.map((c) => c.args || "").join("");
158
+ const joinedArgs = chunks.map((c) => c.args || "").join("");
159
+ const argsStr = joinedArgs.length ? joinedArgs : "{}";
159
160
  try {
160
- parsedArgs = (0, json_js_1.parsePartialJson)(argStr);
161
+ parsedArgs = (0, json_js_1.parsePartialJson)(argsStr);
161
162
  if (parsedArgs === null ||
162
163
  typeof parsedArgs !== "object" ||
163
164
  Array.isArray(parsedArgs)) {
@@ -173,7 +174,7 @@ class AIMessageChunk extends base_js_1.BaseMessageChunk {
173
174
  catch (e) {
174
175
  invalidToolCalls.push({
175
176
  name,
176
- args: argStr,
177
+ args: argsStr,
177
178
  id,
178
179
  error: "Malformed args.",
179
180
  type: "invalid_tool_call",
@@ -149,9 +149,10 @@ export class AIMessageChunk extends BaseMessageChunk {
149
149
  for (const [id, chunks] of Object.entries(groupedToolCallChunk)) {
150
150
  let parsedArgs = {};
151
151
  const name = chunks[0]?.name ?? "";
152
- const argStr = chunks.map((c) => c.args || "").join("");
152
+ const joinedArgs = chunks.map((c) => c.args || "").join("");
153
+ const argsStr = joinedArgs.length ? joinedArgs : "{}";
153
154
  try {
154
- parsedArgs = parsePartialJson(argStr);
155
+ parsedArgs = parsePartialJson(argsStr);
155
156
  if (parsedArgs === null ||
156
157
  typeof parsedArgs !== "object" ||
157
158
  Array.isArray(parsedArgs)) {
@@ -167,7 +168,7 @@ export class AIMessageChunk extends BaseMessageChunk {
167
168
  catch (e) {
168
169
  invalidToolCalls.push({
169
170
  name,
170
- args: argStr,
171
+ args: argsStr,
171
172
  id,
172
173
  error: "Malformed args.",
173
174
  type: "invalid_tool_call",
@@ -26,6 +26,7 @@ function convertRunToRunTree(run, parentRun) {
26
26
  }
27
27
  return new run_trees_1.RunTree({
28
28
  ...run,
29
+ start_time: run._serialized_start_time ?? run.start_time,
29
30
  parent_run: convertRunToRunTree(parentRun),
30
31
  child_runs: run.child_runs
31
32
  .map((r) => convertRunToRunTree(r))
@@ -43,13 +44,6 @@ function _coerceToDict(value, defaultKey) {
43
44
  ? value
44
45
  : { [defaultKey]: value };
45
46
  }
46
- function stripNonAlphanumeric(input) {
47
- return input.replace(/[-:.]/g, "");
48
- }
49
- function convertToDottedOrderFormat(epoch, runId, executionOrder) {
50
- const paddedOrder = executionOrder.toFixed(0).slice(0, 3).padStart(3, "0");
51
- return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}${paddedOrder}Z`) + runId);
52
- }
53
47
  function isBaseTracer(x) {
54
48
  return typeof x._addRunToRunMap === "function";
55
49
  }
@@ -101,7 +95,7 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
101
95
  parentRun.child_runs.push(childRun);
102
96
  }
103
97
  _addRunToRunMap(run) {
104
- const currentDottedOrder = convertToDottedOrderFormat(run.start_time, run.id, run.execution_order);
98
+ const { dottedOrder: currentDottedOrder, microsecondPrecisionDatestring } = (0, run_trees_1.convertToDottedOrderFormat)(new Date(run.start_time).getTime(), run.id, run.execution_order);
105
99
  const storedRun = { ...run };
106
100
  const parentRun = this.getRunById(storedRun.parent_run_id);
107
101
  if (storedRun.parent_run_id !== undefined) {
@@ -114,6 +108,7 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
114
108
  parentRun.dotted_order,
115
109
  currentDottedOrder,
116
110
  ].join(".");
111
+ storedRun._serialized_start_time = microsecondPrecisionDatestring;
117
112
  }
118
113
  else {
119
114
  // This can happen naturally for callbacks added within a run
@@ -130,6 +125,7 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
130
125
  else {
131
126
  storedRun.trace_id = storedRun.id;
132
127
  storedRun.dotted_order = currentDottedOrder;
128
+ storedRun._serialized_start_time = microsecondPrecisionDatestring;
133
129
  }
134
130
  if (this.usesRunTreeMap) {
135
131
  const runTree = convertRunToRunTree(storedRun, parentRun);
@@ -11,6 +11,7 @@ export type RunType = string;
11
11
  export interface Run extends BaseRun {
12
12
  id: string;
13
13
  start_time: number;
14
+ end_time?: number;
14
15
  execution_order: number;
15
16
  child_runs: this[];
16
17
  child_execution_order: number;
@@ -21,6 +22,8 @@ export interface Run extends BaseRun {
21
22
  }>;
22
23
  trace_id?: string;
23
24
  dotted_order?: string;
25
+ /** @internal */
26
+ _serialized_start_time?: string;
24
27
  }
25
28
  export interface AgentRun extends Run {
26
29
  actions: AgentAction[];
@@ -40,6 +43,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
40
43
  _addRunToRunMap(run: Run): {
41
44
  id: string;
42
45
  start_time: number;
46
+ end_time?: number;
43
47
  execution_order: number;
44
48
  child_runs: Run[];
45
49
  child_execution_order: number;
@@ -50,9 +54,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
50
54
  }>;
51
55
  trace_id?: string;
52
56
  dotted_order?: string;
57
+ /** @internal */
58
+ _serialized_start_time?: string;
53
59
  name: string;
54
60
  run_type: string;
55
- end_time?: number;
56
61
  extra?: KVMap;
57
62
  error?: string;
58
63
  serialized?: object;
@@ -73,6 +78,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
73
78
  _createRunForLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): {
74
79
  id: string;
75
80
  start_time: number;
81
+ end_time?: number;
76
82
  execution_order: number;
77
83
  child_runs: Run[];
78
84
  child_execution_order: number;
@@ -83,9 +89,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
83
89
  }>;
84
90
  trace_id?: string;
85
91
  dotted_order?: string;
92
+ /** @internal */
93
+ _serialized_start_time?: string;
86
94
  name: string;
87
95
  run_type: string;
88
- end_time?: number;
89
96
  extra?: KVMap;
90
97
  error?: string;
91
98
  serialized?: object;
@@ -105,6 +112,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
105
112
  _createRunForChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string, extraParams?: KVMap, tags?: string[], metadata?: KVMap, name?: string): {
106
113
  id: string;
107
114
  start_time: number;
115
+ end_time?: number;
108
116
  execution_order: number;
109
117
  child_runs: Run[];
110
118
  child_execution_order: number;
@@ -115,9 +123,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
115
123
  }>;
116
124
  trace_id?: string;
117
125
  dotted_order?: string;
126
+ /** @internal */
127
+ _serialized_start_time?: string;
118
128
  name: string;
119
129
  run_type: string;
120
- end_time?: number;
121
130
  extra?: KVMap;
122
131
  error?: string;
123
132
  serialized?: object;
@@ -139,6 +148,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
139
148
  _createRunForChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, runType?: string, name?: string): {
140
149
  id: string;
141
150
  start_time: number;
151
+ end_time?: number;
142
152
  execution_order: number;
143
153
  child_runs: Run[];
144
154
  child_execution_order: number;
@@ -149,9 +159,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
149
159
  }>;
150
160
  trace_id?: string;
151
161
  dotted_order?: string;
162
+ /** @internal */
163
+ _serialized_start_time?: string;
152
164
  name: string;
153
165
  run_type: string;
154
- end_time?: number;
155
166
  extra?: KVMap;
156
167
  error?: string;
157
168
  serialized?: object;
@@ -177,6 +188,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
177
188
  _createRunForToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): {
178
189
  id: string;
179
190
  start_time: number;
191
+ end_time?: number;
180
192
  execution_order: number;
181
193
  child_runs: Run[];
182
194
  child_execution_order: number;
@@ -187,9 +199,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
187
199
  }>;
188
200
  trace_id?: string;
189
201
  dotted_order?: string;
202
+ /** @internal */
203
+ _serialized_start_time?: string;
190
204
  name: string;
191
205
  run_type: string;
192
- end_time?: number;
193
206
  extra?: KVMap;
194
207
  error?: string;
195
208
  serialized?: object;
@@ -213,6 +226,7 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
213
226
  _createRunForRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string, tags?: string[], metadata?: KVMap, name?: string): {
214
227
  id: string;
215
228
  start_time: number;
229
+ end_time?: number;
216
230
  execution_order: number;
217
231
  child_runs: Run[];
218
232
  child_execution_order: number;
@@ -223,9 +237,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
223
237
  }>;
224
238
  trace_id?: string;
225
239
  dotted_order?: string;
240
+ /** @internal */
241
+ _serialized_start_time?: string;
226
242
  name: string;
227
243
  run_type: string;
228
- end_time?: number;
229
244
  extra?: KVMap;
230
245
  error?: string;
231
246
  serialized?: object;
@@ -1,4 +1,4 @@
1
- import { RunTree } from "langsmith/run_trees";
1
+ import { RunTree, convertToDottedOrderFormat } from "langsmith/run_trees";
2
2
  import { BaseCallbackHandler, } from "../callbacks/base.js";
3
3
  import { getRuntimeEnvironmentSync } from "../utils/env.js";
4
4
  // TODO: Remove and just use base LangSmith Run type
@@ -22,6 +22,7 @@ function convertRunToRunTree(run, parentRun) {
22
22
  }
23
23
  return new RunTree({
24
24
  ...run,
25
+ start_time: run._serialized_start_time ?? run.start_time,
25
26
  parent_run: convertRunToRunTree(parentRun),
26
27
  child_runs: run.child_runs
27
28
  .map((r) => convertRunToRunTree(r))
@@ -39,13 +40,6 @@ function _coerceToDict(value, defaultKey) {
39
40
  ? value
40
41
  : { [defaultKey]: value };
41
42
  }
42
- function stripNonAlphanumeric(input) {
43
- return input.replace(/[-:.]/g, "");
44
- }
45
- function convertToDottedOrderFormat(epoch, runId, executionOrder) {
46
- const paddedOrder = executionOrder.toFixed(0).slice(0, 3).padStart(3, "0");
47
- return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}${paddedOrder}Z`) + runId);
48
- }
49
43
  export function isBaseTracer(x) {
50
44
  return typeof x._addRunToRunMap === "function";
51
45
  }
@@ -97,7 +91,7 @@ export class BaseTracer extends BaseCallbackHandler {
97
91
  parentRun.child_runs.push(childRun);
98
92
  }
99
93
  _addRunToRunMap(run) {
100
- const currentDottedOrder = convertToDottedOrderFormat(run.start_time, run.id, run.execution_order);
94
+ const { dottedOrder: currentDottedOrder, microsecondPrecisionDatestring } = convertToDottedOrderFormat(new Date(run.start_time).getTime(), run.id, run.execution_order);
101
95
  const storedRun = { ...run };
102
96
  const parentRun = this.getRunById(storedRun.parent_run_id);
103
97
  if (storedRun.parent_run_id !== undefined) {
@@ -110,6 +104,7 @@ export class BaseTracer extends BaseCallbackHandler {
110
104
  parentRun.dotted_order,
111
105
  currentDottedOrder,
112
106
  ].join(".");
107
+ storedRun._serialized_start_time = microsecondPrecisionDatestring;
113
108
  }
114
109
  else {
115
110
  // This can happen naturally for callbacks added within a run
@@ -126,6 +121,7 @@ export class BaseTracer extends BaseCallbackHandler {
126
121
  else {
127
122
  storedRun.trace_id = storedRun.id;
128
123
  storedRun.dotted_order = currentDottedOrder;
124
+ storedRun._serialized_start_time = microsecondPrecisionDatestring;
129
125
  }
130
126
  if (this.usesRunTreeMap) {
131
127
  const runTree = convertRunToRunTree(storedRun, parentRun);
@@ -1,5 +1,5 @@
1
1
  import { type LangSmithTracingClientInterface } from "langsmith";
2
- import { RunTree } from "langsmith/run_trees";
2
+ import { RunTree, type RunTreeConfig } from "langsmith/run_trees";
3
3
  import { BaseRun, RunCreate, RunUpdate as BaseRunUpdate, KVMap } from "langsmith/schemas";
4
4
  import { BaseTracer } from "./base.js";
5
5
  import { BaseCallbackHandlerInput } from "../callbacks/base.js";
@@ -24,14 +24,14 @@ export interface LangChainTracerFields extends BaseCallbackHandlerInput {
24
24
  exampleId?: string;
25
25
  projectName?: string;
26
26
  client?: LangSmithTracingClientInterface;
27
- replicas?: RunTree["replicas"];
27
+ replicas?: RunTreeConfig["replicas"];
28
28
  }
29
29
  export declare class LangChainTracer extends BaseTracer implements LangChainTracerFields {
30
30
  name: string;
31
31
  projectName?: string;
32
32
  exampleId?: string;
33
33
  client: LangSmithTracingClientInterface;
34
- replicas?: RunTree["replicas"];
34
+ replicas?: RunTreeConfig["replicas"];
35
35
  usesRunTreeMap: boolean;
36
36
  constructor(fields?: LangChainTracerFields);
37
37
  protected persistRun(_run: Run): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/core",
3
- "version": "0.3.63",
3
+ "version": "0.3.65",
4
4
  "description": "Core LangChain.js abstractions and schemas",
5
5
  "type": "module",
6
6
  "engines": {
@@ -38,7 +38,7 @@
38
38
  "camelcase": "6",
39
39
  "decamelize": "1.2.0",
40
40
  "js-tiktoken": "^1.0.12",
41
- "langsmith": "^0.3.33",
41
+ "langsmith": "^0.3.46",
42
42
  "mustache": "^4.2.0",
43
43
  "p-queue": "^6.6.2",
44
44
  "p-retry": "4",