UNPKG

@langchain/core

Version:
201 lines (200 loc) 7.37 kB
"use strict"; 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;