-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
tracer_langchain.ts
105 lines (90 loc) · 2.47 KB
/
tracer_langchain.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import { Client } from "langsmith";
import {
BaseRun,
RunCreate,
RunUpdate as BaseRunUpdate,
KVMap,
} from "langsmith/schemas";
import { getEnvironmentVariable, getRuntimeEnvironment } from "../utils/env.js";
import { BaseTracer } from "./base.js";
import { BaseCallbackHandlerInput } from "../callbacks/base.js";
export interface Run extends BaseRun {
id: string;
child_runs: this[];
child_execution_order: number;
dotted_order?: string;
trace_id?: string;
}
export interface RunCreate2 extends RunCreate {
trace_id?: string;
dotted_order?: string;
}
export interface RunUpdate extends BaseRunUpdate {
events: BaseRun["events"];
inputs: KVMap;
trace_id?: string;
dotted_order?: string;
}
export interface LangChainTracerFields extends BaseCallbackHandlerInput {
exampleId?: string;
projectName?: string;
client?: Client;
}
export class LangChainTracer
extends BaseTracer
implements LangChainTracerFields
{
name = "langchain_tracer";
projectName?: string;
exampleId?: string;
client: Client;
constructor(fields: LangChainTracerFields = {}) {
super(fields);
const { exampleId, projectName, client } = fields;
this.projectName =
projectName ??
getEnvironmentVariable("LANGCHAIN_PROJECT") ??
getEnvironmentVariable("LANGCHAIN_SESSION");
this.exampleId = exampleId;
this.client = client ?? new Client({});
}
private async _convertToCreate(
run: Run,
example_id: string | undefined = undefined
): Promise<RunCreate> {
return {
...run,
extra: {
...run.extra,
runtime: await getRuntimeEnvironment(),
},
child_runs: undefined,
session_name: this.projectName,
reference_example_id: run.parent_run_id ? undefined : example_id,
};
}
protected async persistRun(_run: Run): Promise<void> {}
async onRunCreate(run: Run): Promise<void> {
const persistedRun: RunCreate2 = await this._convertToCreate(
run,
this.exampleId
);
await this.client.createRun(persistedRun);
}
async onRunUpdate(run: Run): Promise<void> {
const runUpdate: RunUpdate = {
end_time: run.end_time,
error: run.error,
outputs: run.outputs,
events: run.events,
inputs: run.inputs,
trace_id: run.trace_id,
dotted_order: run.dotted_order,
parent_run_id: run.parent_run_id,
};
await this.client.updateRun(run.id, runUpdate);
}
getRun(id: string): Run | undefined {
return this.runMap.get(id);
}
}