@langchain/core
Version:
Core LangChain.js abstractions and schemas
201 lines (200 loc) • 7.37 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.LangChainTracerV1 = void 0;
const utils_js_1 = require("../messages/utils.cjs");
const env_js_1 = require("../utils/env.cjs");
const base_js_1 = require("./base.cjs");
/** @deprecated Use LangChainTracer instead. */
class LangChainTracerV1 extends base_js_1.BaseTracer {
constructor() {
super();
Object.defineProperty(this, "name", {
enumerable: true,
configurable: true,
writable: true,
value: "langchain_tracer"
});
Object.defineProperty(this, "endpoint", {
enumerable: true,
configurable: true,
writable: true,
value: (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_ENDPOINT") || "http://localhost:1984"
});
Object.defineProperty(this, "headers", {
enumerable: true,
configurable: true,
writable: true,
value: {
"Content-Type": "application/json",
}
});
Object.defineProperty(this, "session", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
const apiKey = (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_API_KEY");
if (apiKey) {
this.headers["x-api-key"] = apiKey;
}
}
async newSession(sessionName) {
const sessionCreate = {
start_time: Date.now(),
name: sessionName,
};
const session = await this.persistSession(sessionCreate);
this.session = session;
return session;
}
async loadSession(sessionName) {
const endpoint = `${this.endpoint}/sessions?name=${sessionName}`;
return this._handleSessionResponse(endpoint);
}
async loadDefaultSession() {
const endpoint = `${this.endpoint}/sessions?name=default`;
return this._handleSessionResponse(endpoint);
}
async convertV2RunToRun(run) {
const session = this.session ?? (await this.loadDefaultSession());
const serialized = run.serialized;
let runResult;
if (run.run_type === "llm") {
const prompts = run.inputs.prompts
? run.inputs.prompts
: run.inputs.messages.map((x) => (0, utils_js_1.getBufferString)(x));
const llmRun = {
uuid: run.id,
start_time: run.start_time,
end_time: run.end_time,
execution_order: run.execution_order,
child_execution_order: run.child_execution_order,
serialized,
type: run.run_type,
session_id: session.id,
prompts,
response: run.outputs,
};
runResult = llmRun;
}
else if (run.run_type === "chain") {
const child_runs = await Promise.all(run.child_runs.map((child_run) => this.convertV2RunToRun(child_run)));
const chainRun = {
uuid: run.id,
start_time: run.start_time,
end_time: run.end_time,
execution_order: run.execution_order,
child_execution_order: run.child_execution_order,
serialized,
type: run.run_type,
session_id: session.id,
inputs: run.inputs,
outputs: run.outputs,
child_llm_runs: child_runs.filter((child_run) => child_run.type === "llm"),
child_chain_runs: child_runs.filter((child_run) => child_run.type === "chain"),
child_tool_runs: child_runs.filter((child_run) => child_run.type === "tool"),
};
runResult = chainRun;
}
else if (run.run_type === "tool") {
const child_runs = await Promise.all(run.child_runs.map((child_run) => this.convertV2RunToRun(child_run)));
const toolRun = {
uuid: run.id,
start_time: run.start_time,
end_time: run.end_time,
execution_order: run.execution_order,
child_execution_order: run.child_execution_order,
serialized,
type: run.run_type,
session_id: session.id,
tool_input: run.inputs.input,
output: run.outputs?.output,
action: JSON.stringify(serialized),
child_llm_runs: child_runs.filter((child_run) => child_run.type === "llm"),
child_chain_runs: child_runs.filter((child_run) => child_run.type === "chain"),
child_tool_runs: child_runs.filter((child_run) => child_run.type === "tool"),
};
runResult = toolRun;
}
else {
throw new Error(`Unknown run type: ${run.run_type}`);
}
return runResult;
}
async persistRun(run) {
let endpoint;
let v1Run;
if (run.run_type !== undefined) {
v1Run = await this.convertV2RunToRun(run);
}
else {
v1Run = run;
}
if (v1Run.type === "llm") {
endpoint = `${this.endpoint}/llm-runs`;
}
else if (v1Run.type === "chain") {
endpoint = `${this.endpoint}/chain-runs`;
}
else {
endpoint = `${this.endpoint}/tool-runs`;
}
const response = await fetch(endpoint, {
method: "POST",
headers: this.headers,
body: JSON.stringify(v1Run),
});
if (!response.ok) {
console.error(`Failed to persist run: ${response.status} ${response.statusText}`);
}
}
async persistSession(sessionCreate) {
const endpoint = `${this.endpoint}/sessions`;
const response = await fetch(endpoint, {
method: "POST",
headers: this.headers,
body: JSON.stringify(sessionCreate),
});
if (!response.ok) {
console.error(`Failed to persist session: ${response.status} ${response.statusText}, using default session.`);
return {
id: 1,
...sessionCreate,
};
}
return {
id: (await response.json()).id,
...sessionCreate,
};
}
async _handleSessionResponse(endpoint) {
const response = await fetch(endpoint, {
method: "GET",
headers: this.headers,
});
let tracerSession;
if (!response.ok) {
console.error(`Failed to load session: ${response.status} ${response.statusText}`);
tracerSession = {
id: 1,
start_time: Date.now(),
};
this.session = tracerSession;
return tracerSession;
}
const resp = (await response.json());
if (resp.length === 0) {
tracerSession = {
id: 1,
start_time: Date.now(),
};
this.session = tracerSession;
return tracerSession;
}
[tracerSession] = resp;
this.session = tracerSession;
return tracerSession;
}
}
exports.LangChainTracerV1 = LangChainTracerV1;
;