langsmith 0.1.31-rc.0 → 0.1.31

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.
@@ -412,7 +412,13 @@ class RunTree {
412
412
  return this.fromHeaders({ "langsmith-trace": dottedOrder });
413
413
  }
414
414
  static fromHeaders(headers, inheritArgs) {
415
- const headerTrace = headers["langsmith-trace"];
415
+ const rawHeaders = "get" in headers && typeof headers.get === "function"
416
+ ? {
417
+ "langsmith-trace": headers.get("langsmith-trace"),
418
+ baggage: headers.get("baggage"),
419
+ }
420
+ : headers;
421
+ const headerTrace = rawHeaders["langsmith-trace"];
416
422
  if (!headerTrace || typeof headerTrace !== "string")
417
423
  return undefined;
418
424
  const parentDottedOrder = headerTrace.trim();
@@ -430,18 +436,24 @@ class RunTree {
430
436
  trace_id: traceId,
431
437
  dotted_order: parentDottedOrder,
432
438
  };
433
- if (headers["baggage"]) {
434
- const baggage = Baggage.fromHeader(headers["baggage"]);
439
+ if (rawHeaders["baggage"] && typeof rawHeaders["baggage"] === "string") {
440
+ const baggage = Baggage.fromHeader(rawHeaders["baggage"]);
435
441
  config.metadata = baggage.metadata;
436
442
  config.tags = baggage.tags;
437
443
  }
438
444
  return new RunTree(config);
439
445
  }
440
- toHeaders() {
441
- return {
446
+ toHeaders(headers) {
447
+ const result = {
442
448
  "langsmith-trace": this.dotted_order,
443
449
  baggage: new Baggage(this.extra?.metadata, this.tags).toHeader(),
444
450
  };
451
+ if (headers) {
452
+ for (const [key, value] of Object.entries(result)) {
453
+ headers.set(key, value);
454
+ }
455
+ }
456
+ return result;
445
457
  }
446
458
  }
447
459
  exports.RunTree = RunTree;
@@ -44,6 +44,10 @@ export interface RunnableConfigLike {
44
44
  */
45
45
  callbacks?: any;
46
46
  }
47
+ interface HeadersLike {
48
+ get(name: string): string | null;
49
+ set(name: string, value: string): void;
50
+ }
47
51
  export declare class RunTree implements BaseRun {
48
52
  id: string;
49
53
  name: RunTreeConfig["name"];
@@ -77,11 +81,12 @@ export declare class RunTree implements BaseRun {
77
81
  toJSON(): RunCreate;
78
82
  static fromRunnableConfig(parentConfig: RunnableConfigLike, props: RunTreeConfig): RunTree;
79
83
  static fromDottedOrder(dottedOrder: string): RunTree | undefined;
80
- static fromHeaders(headers: Record<string, string>, inheritArgs?: RunTreeConfig): RunTree | undefined;
81
- toHeaders(): {
84
+ static fromHeaders(headers: Record<string, string | string[]> | HeadersLike, inheritArgs?: RunTreeConfig): RunTree | undefined;
85
+ toHeaders(headers?: HeadersLike): {
82
86
  "langsmith-trace": string;
83
87
  baggage: string;
84
88
  };
85
89
  }
86
90
  export declare function isRunTree(x?: unknown): x is RunTree;
87
91
  export declare function isRunnableConfigLike(x?: unknown): x is RunnableConfigLike;
92
+ export {};
package/dist/run_trees.js CHANGED
@@ -385,7 +385,13 @@ export class RunTree {
385
385
  return this.fromHeaders({ "langsmith-trace": dottedOrder });
386
386
  }
387
387
  static fromHeaders(headers, inheritArgs) {
388
- const headerTrace = headers["langsmith-trace"];
388
+ const rawHeaders = "get" in headers && typeof headers.get === "function"
389
+ ? {
390
+ "langsmith-trace": headers.get("langsmith-trace"),
391
+ baggage: headers.get("baggage"),
392
+ }
393
+ : headers;
394
+ const headerTrace = rawHeaders["langsmith-trace"];
389
395
  if (!headerTrace || typeof headerTrace !== "string")
390
396
  return undefined;
391
397
  const parentDottedOrder = headerTrace.trim();
@@ -403,18 +409,24 @@ export class RunTree {
403
409
  trace_id: traceId,
404
410
  dotted_order: parentDottedOrder,
405
411
  };
406
- if (headers["baggage"]) {
407
- const baggage = Baggage.fromHeader(headers["baggage"]);
412
+ if (rawHeaders["baggage"] && typeof rawHeaders["baggage"] === "string") {
413
+ const baggage = Baggage.fromHeader(rawHeaders["baggage"]);
408
414
  config.metadata = baggage.metadata;
409
415
  config.tags = baggage.tags;
410
416
  }
411
417
  return new RunTree(config);
412
418
  }
413
- toHeaders() {
414
- return {
419
+ toHeaders(headers) {
420
+ const result = {
415
421
  "langsmith-trace": this.dotted_order,
416
422
  baggage: new Baggage(this.extra?.metadata, this.tags).toHeader(),
417
423
  };
424
+ if (headers) {
425
+ for (const [key, value] of Object.entries(result)) {
426
+ headers.set(key, value);
427
+ }
428
+ }
429
+ return result;
418
430
  }
419
431
  }
420
432
  export function isRunTree(x) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTraceableFunction = exports.ROOT = exports.getCurrentRunTree = exports.AsyncLocalStorageProviderSingleton = void 0;
3
+ exports.isTraceableFunction = exports.ROOT = exports.withRunTree = exports.getCurrentRunTree = exports.AsyncLocalStorageProviderSingleton = void 0;
4
4
  class MockAsyncLocalStorage {
5
5
  getStore() {
6
6
  return undefined;
@@ -47,12 +47,20 @@ const getCurrentRunTree = () => {
47
47
  throw new Error([
48
48
  "Could not get the current run tree.",
49
49
  "",
50
- "Please make sure you are calling this method within a traceable function.",
50
+ "Please make sure you are calling this method within a traceable function or the tracing is enabled.",
51
51
  ].join("\n"));
52
52
  }
53
53
  return runTree;
54
54
  };
55
55
  exports.getCurrentRunTree = getCurrentRunTree;
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ function withRunTree(runTree, fn) {
58
+ const storage = exports.AsyncLocalStorageProviderSingleton.getInstance();
59
+ return new Promise((resolve, reject) => {
60
+ storage.run(runTree, () => void Promise.resolve(fn()).then(resolve).catch(reject));
61
+ });
62
+ }
63
+ exports.withRunTree = withRunTree;
56
64
  exports.ROOT = Symbol.for("langsmith:traceable:root");
57
65
  function isTraceableFunction(x
58
66
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -18,6 +18,7 @@ export declare const AsyncLocalStorageProviderSingleton: AsyncLocalStorageProvid
18
18
  * @returns The run tree for the given context.
19
19
  */
20
20
  export declare const getCurrentRunTree: () => RunTree;
21
+ export declare function withRunTree<Fn extends (...args: any[]) => any>(runTree: RunTree, fn: Fn): Promise<Awaited<ReturnType<Fn>>>;
21
22
  export declare const ROOT: unique symbol;
22
23
  export declare function isTraceableFunction(x: unknown): x is TraceableFunction<any>;
23
24
  export type { TraceableFunction } from "./types.js";
@@ -44,11 +44,18 @@ export const getCurrentRunTree = () => {
44
44
  throw new Error([
45
45
  "Could not get the current run tree.",
46
46
  "",
47
- "Please make sure you are calling this method within a traceable function.",
47
+ "Please make sure you are calling this method within a traceable function or the tracing is enabled.",
48
48
  ].join("\n"));
49
49
  }
50
50
  return runTree;
51
51
  };
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ export function withRunTree(runTree, fn) {
54
+ const storage = AsyncLocalStorageProviderSingleton.getInstance();
55
+ return new Promise((resolve, reject) => {
56
+ storage.run(runTree, () => void Promise.resolve(fn()).then(resolve).catch(reject));
57
+ });
58
+ }
52
59
  export const ROOT = Symbol.for("langsmith:traceable:root");
53
60
  export function isTraceableFunction(x
54
61
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ROOT = exports.isTraceableFunction = exports.getCurrentRunTree = exports.traceable = void 0;
3
+ exports.ROOT = exports.withRunTree = exports.isTraceableFunction = exports.getCurrentRunTree = exports.traceable = void 0;
4
4
  const node_async_hooks_1 = require("node:async_hooks");
5
5
  const run_trees_js_1 = require("./run_trees.cjs");
6
6
  const env_js_1 = require("./env.cjs");
@@ -35,8 +35,8 @@ const getTracingRunTree = (runTree, inputs, getInvocationParams) => {
35
35
  if (invocationParams != null) {
36
36
  runTree.extra ??= {};
37
37
  runTree.extra.metadata = {
38
- ...runTree.extra.metadata,
39
38
  ...invocationParams,
39
+ ...runTree.extra.metadata,
40
40
  };
41
41
  }
42
42
  return runTree;
@@ -418,4 +418,5 @@ exports.traceable = traceable;
418
418
  var traceable_js_2 = require("./singletons/traceable.cjs");
419
419
  Object.defineProperty(exports, "getCurrentRunTree", { enumerable: true, get: function () { return traceable_js_2.getCurrentRunTree; } });
420
420
  Object.defineProperty(exports, "isTraceableFunction", { enumerable: true, get: function () { return traceable_js_2.isTraceableFunction; } });
421
+ Object.defineProperty(exports, "withRunTree", { enumerable: true, get: function () { return traceable_js_2.withRunTree; } });
421
422
  Object.defineProperty(exports, "ROOT", { enumerable: true, get: function () { return traceable_js_2.ROOT; } });
@@ -28,5 +28,5 @@ export declare function traceable<Func extends (...args: any[]) => any>(wrappedF
28
28
  */
29
29
  getInvocationParams?: (...args: Parameters<Func>) => InvocationParamsSchema | undefined;
30
30
  }): TraceableFunction<Func>;
31
- export { getCurrentRunTree, isTraceableFunction, ROOT, } from "./singletons/traceable.js";
31
+ export { getCurrentRunTree, isTraceableFunction, withRunTree, ROOT, } from "./singletons/traceable.js";
32
32
  export type { RunTreeLike, TraceableFunction } from "./singletons/types.js";
package/dist/traceable.js CHANGED
@@ -32,8 +32,8 @@ const getTracingRunTree = (runTree, inputs, getInvocationParams) => {
32
32
  if (invocationParams != null) {
33
33
  runTree.extra ??= {};
34
34
  runTree.extra.metadata = {
35
- ...runTree.extra.metadata,
36
35
  ...invocationParams,
36
+ ...runTree.extra.metadata,
37
37
  };
38
38
  }
39
39
  return runTree;
@@ -411,4 +411,4 @@ export function traceable(wrappedFunc, config) {
411
411
  });
412
412
  return traceableFunc;
413
413
  }
414
- export { getCurrentRunTree, isTraceableFunction, ROOT, } from "./singletons/traceable.js";
414
+ export { getCurrentRunTree, isTraceableFunction, withRunTree, ROOT, } from "./singletons/traceable.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "langsmith",
3
- "version": "0.1.31-rc.0",
3
+ "version": "0.1.31",
4
4
  "description": "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform.",
5
5
  "packageManager": "yarn@1.22.19",
6
6
  "files": [