@uselemma/tracing 4.2.0 → 4.3.0
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.
- package/README.md +36 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/langchain.d.ts +55 -0
- package/dist/langchain.d.ts.map +1 -0
- package/dist/langchain.js +295 -0
- package/dist/langchain.js.map +1 -0
- package/examples/langchain.ts +15 -0
- package/examples/langgraph.ts +24 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -213,6 +213,40 @@ enableDebugMode();
|
|
|
213
213
|
Use `openAIAgents({ recordInputs: false, recordOutputs: false })` to avoid
|
|
214
214
|
sending prompts, tool inputs, tool outputs, or model output text.
|
|
215
215
|
|
|
216
|
+
## LangChain and LangGraph
|
|
217
|
+
|
|
218
|
+
Pass `langChain()` as a LangChain callback handler. The handler creates one
|
|
219
|
+
Lemma trace for the root run, records LLM calls as generations, tools as tool
|
|
220
|
+
spans, retrievers as spans with retrieval documents, and nested chains as child
|
|
221
|
+
spans.
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
225
|
+
import { langChain } from "@uselemma/tracing";
|
|
226
|
+
|
|
227
|
+
const model = new ChatOpenAI({
|
|
228
|
+
model: "gpt-4o",
|
|
229
|
+
callbacks: [langChain({ agentName: "support-agent" })],
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
const response = await model.invoke(userMessage);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
LangGraph uses LangChain callbacks too:
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
import { langGraph } from "@uselemma/tracing";
|
|
239
|
+
|
|
240
|
+
const result = await graph.invoke(
|
|
241
|
+
{ input: userMessage },
|
|
242
|
+
{ callbacks: [langGraph({ agentName: "support-graph" })] },
|
|
243
|
+
);
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Use `langChain({ recordInputs: false, recordOutputs: false })` or
|
|
247
|
+
`langGraph({ recordInputs: false, recordOutputs: false })` to avoid sending
|
|
248
|
+
prompts, tool inputs, tool outputs, retrieved documents, or generated text.
|
|
249
|
+
|
|
216
250
|
When a helper only has IDs, use the client-level methods:
|
|
217
251
|
|
|
218
252
|
```typescript
|
|
@@ -304,7 +338,8 @@ Use `attributes` for raw attributes that do not yet have a native SDK prop.
|
|
|
304
338
|
## Examples
|
|
305
339
|
|
|
306
340
|
See [`examples/`](./examples) for complete callback tracing, trace handle,
|
|
307
|
-
record-by-ID, Vercel AI SDK v6/v7,
|
|
341
|
+
record-by-ID, Vercel AI SDK v6/v7, OpenAI Agents SDK, LangChain, and LangGraph
|
|
342
|
+
examples.
|
|
308
343
|
|
|
309
344
|
## License
|
|
310
345
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { Lemma, NoopSpanHandle, SpanHandle, TraceContext, TraceHandle, active, type DetachedGenerationOptions, type DetachedSpanOptions, type DetachedToolOptions, type GenerationOptions, type JsonValue, type LemmaClientOptions, type SpanOptions, type ToolOptions, type TraceEndOptions, type TraceOptions, } from "./client";
|
|
2
2
|
export { disableDebugMode, enableDebugMode, isDebugModeEnabled, lemmaDebug, } from "./debug-mode";
|
|
3
|
+
export { LangChainCallbackHandler, LemmaLangChainCallbackHandler, langChain, langGraph, type LangChainIntegrationOptions, type LemmaLangChainIntegrationOptions, type LemmaLangGraphIntegrationOptions, } from "./langchain";
|
|
3
4
|
export { openAIAgents, type OpenAIAgentsIntegrationOptions, type OpenAIAgentsSpan, type OpenAIAgentsSpanData, type OpenAIAgentsTrace, type OpenAIAgentsTracingProcessor, } from "./openai-agents";
|
|
4
5
|
export { vercelAI, type LemmaVercelAIIntegrationOptions, type VercelAIIntegrationOptions, type VercelAITelemetryIntegration, } from "./vercel-ai";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,KAAK,8BAA8B,EACnC,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,GAClC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,QAAQ,EACR,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,GAClC,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,SAAS,EACT,SAAS,EACT,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,GACtC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,KAAK,8BAA8B,EACnC,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,GAClC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,QAAQ,EACR,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,GAClC,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.vercelAI = exports.openAIAgents = exports.lemmaDebug = exports.isDebugModeEnabled = exports.enableDebugMode = exports.disableDebugMode = exports.active = exports.TraceHandle = exports.TraceContext = exports.SpanHandle = exports.NoopSpanHandle = exports.Lemma = void 0;
|
|
3
|
+
exports.vercelAI = exports.openAIAgents = exports.langGraph = exports.langChain = exports.LemmaLangChainCallbackHandler = exports.LangChainCallbackHandler = exports.lemmaDebug = exports.isDebugModeEnabled = exports.enableDebugMode = exports.disableDebugMode = exports.active = exports.TraceHandle = exports.TraceContext = exports.SpanHandle = exports.NoopSpanHandle = exports.Lemma = void 0;
|
|
4
4
|
var client_1 = require("./client");
|
|
5
5
|
Object.defineProperty(exports, "Lemma", { enumerable: true, get: function () { return client_1.Lemma; } });
|
|
6
6
|
Object.defineProperty(exports, "NoopSpanHandle", { enumerable: true, get: function () { return client_1.NoopSpanHandle; } });
|
|
@@ -13,6 +13,11 @@ Object.defineProperty(exports, "disableDebugMode", { enumerable: true, get: func
|
|
|
13
13
|
Object.defineProperty(exports, "enableDebugMode", { enumerable: true, get: function () { return debug_mode_1.enableDebugMode; } });
|
|
14
14
|
Object.defineProperty(exports, "isDebugModeEnabled", { enumerable: true, get: function () { return debug_mode_1.isDebugModeEnabled; } });
|
|
15
15
|
Object.defineProperty(exports, "lemmaDebug", { enumerable: true, get: function () { return debug_mode_1.lemmaDebug; } });
|
|
16
|
+
var langchain_1 = require("./langchain");
|
|
17
|
+
Object.defineProperty(exports, "LangChainCallbackHandler", { enumerable: true, get: function () { return langchain_1.LangChainCallbackHandler; } });
|
|
18
|
+
Object.defineProperty(exports, "LemmaLangChainCallbackHandler", { enumerable: true, get: function () { return langchain_1.LemmaLangChainCallbackHandler; } });
|
|
19
|
+
Object.defineProperty(exports, "langChain", { enumerable: true, get: function () { return langchain_1.langChain; } });
|
|
20
|
+
Object.defineProperty(exports, "langGraph", { enumerable: true, get: function () { return langchain_1.langGraph; } });
|
|
16
21
|
var openai_agents_1 = require("./openai-agents");
|
|
17
22
|
Object.defineProperty(exports, "openAIAgents", { enumerable: true, get: function () { return openai_agents_1.openAIAgents; } });
|
|
18
23
|
var vercel_ai_1 = require("./vercel-ai");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAiBkB;AAhBhB,+FAAA,KAAK,OAAA;AACL,wGAAA,cAAc,OAAA;AACd,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,qGAAA,WAAW,OAAA;AACX,gGAAA,MAAM,OAAA;AAYR,2CAKsB;AAJpB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,wGAAA,UAAU,OAAA;AAEZ,iDAOyB;AANvB,6GAAA,YAAY,OAAA;AAOd,yCAKqB;AAJnB,qGAAA,QAAQ,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAiBkB;AAhBhB,+FAAA,KAAK,OAAA;AACL,wGAAA,cAAc,OAAA;AACd,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,qGAAA,WAAW,OAAA;AACX,gGAAA,MAAM,OAAA;AAYR,2CAKsB;AAJpB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,wGAAA,UAAU,OAAA;AAEZ,yCAQqB;AAPnB,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AAKX,iDAOyB;AANvB,6GAAA,YAAY,OAAA;AAOd,yCAKqB;AAJnB,qGAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Lemma, type LemmaClientOptions } from "./client";
|
|
2
|
+
type RunId = string;
|
|
3
|
+
type Serialized = {
|
|
4
|
+
id?: string[];
|
|
5
|
+
name?: string;
|
|
6
|
+
kwargs?: Record<string, unknown>;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
type LLMResult = {
|
|
10
|
+
generations?: unknown[][];
|
|
11
|
+
llmOutput?: Record<string, unknown>;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
export type LangChainIntegrationOptions = {
|
|
15
|
+
lemma?: Lemma;
|
|
16
|
+
apiKey?: LemmaClientOptions["apiKey"];
|
|
17
|
+
projectId?: LemmaClientOptions["projectId"];
|
|
18
|
+
baseUrl?: LemmaClientOptions["baseUrl"];
|
|
19
|
+
fetch?: LemmaClientOptions["fetch"];
|
|
20
|
+
agentName?: string;
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
recordInputs?: boolean;
|
|
23
|
+
recordOutputs?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare class LemmaLangChainCallbackHandler {
|
|
26
|
+
private readonly options;
|
|
27
|
+
name: string;
|
|
28
|
+
private lemma;
|
|
29
|
+
private readonly runs;
|
|
30
|
+
constructor(options?: LangChainIntegrationOptions);
|
|
31
|
+
private getLemma;
|
|
32
|
+
private traceName;
|
|
33
|
+
private startTrace;
|
|
34
|
+
private parent;
|
|
35
|
+
handleChainStart(serialized: Serialized, inputs: unknown, runId: RunId, parentRunId?: RunId, _tags?: string[], metadata?: Record<string, unknown>, _runType?: string, name?: string): void;
|
|
36
|
+
handleChainEnd(outputs: unknown, runId: RunId): Promise<void>;
|
|
37
|
+
handleChainError(error: unknown, runId: RunId): Promise<void>;
|
|
38
|
+
handleLLMStart(serialized: Serialized, prompts: string[], runId: RunId, parentRunId?: RunId, extraParams?: Record<string, unknown>): void;
|
|
39
|
+
handleChatModelStart(serialized: Serialized, messages: unknown[][], runId: RunId, parentRunId?: RunId, extraParams?: Record<string, unknown>): void;
|
|
40
|
+
handleLLMEnd(output: LLMResult, runId: RunId): void;
|
|
41
|
+
handleLLMError(error: unknown, runId: RunId): void;
|
|
42
|
+
handleToolStart(serialized: Serialized, input: unknown, runId: RunId, parentRunId?: RunId): void;
|
|
43
|
+
handleToolEnd(output: unknown, runId: RunId): void;
|
|
44
|
+
handleToolError(error: unknown, runId: RunId): void;
|
|
45
|
+
handleRetrieverStart(serialized: Serialized, query: string, runId: RunId, parentRunId?: RunId): void;
|
|
46
|
+
handleRetrieverEnd(documents: unknown[], runId: RunId): void;
|
|
47
|
+
handleRetrieverError(error: unknown, runId: RunId): void;
|
|
48
|
+
}
|
|
49
|
+
export declare const LangChainCallbackHandler: typeof LemmaLangChainCallbackHandler;
|
|
50
|
+
export declare function langChain(options?: LangChainIntegrationOptions): LemmaLangChainCallbackHandler;
|
|
51
|
+
export declare function langGraph(options?: LangChainIntegrationOptions): LemmaLangChainCallbackHandler;
|
|
52
|
+
export type LemmaLangChainIntegrationOptions = LangChainIntegrationOptions;
|
|
53
|
+
export type LemmaLangGraphIntegrationOptions = LangChainIntegrationOptions;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LangChainCallbackHandler = exports.LemmaLangChainCallbackHandler = void 0;
|
|
4
|
+
exports.langChain = langChain;
|
|
5
|
+
exports.langGraph = langGraph;
|
|
6
|
+
const client_1 = require("./client");
|
|
7
|
+
function serializedName(serialized, fallback) {
|
|
8
|
+
if (typeof serialized?.name === "string" && serialized.name) {
|
|
9
|
+
return serialized.name;
|
|
10
|
+
}
|
|
11
|
+
const id = serialized?.id;
|
|
12
|
+
if (Array.isArray(id) && id.length > 0) {
|
|
13
|
+
return String(id[id.length - 1]);
|
|
14
|
+
}
|
|
15
|
+
return fallback;
|
|
16
|
+
}
|
|
17
|
+
function modelName(serialized) {
|
|
18
|
+
const kwargs = serialized?.kwargs;
|
|
19
|
+
const value = kwargs?.model ??
|
|
20
|
+
kwargs?.modelName ??
|
|
21
|
+
kwargs?.model_name ??
|
|
22
|
+
kwargs?.model_id ??
|
|
23
|
+
serialized?.model ??
|
|
24
|
+
serialized?.modelName ??
|
|
25
|
+
serialized?.model_name ??
|
|
26
|
+
serialized?.model_id;
|
|
27
|
+
return typeof value === "string" ? value : undefined;
|
|
28
|
+
}
|
|
29
|
+
function firstText(value) {
|
|
30
|
+
if (typeof value === "string")
|
|
31
|
+
return value;
|
|
32
|
+
if (!value || typeof value !== "object")
|
|
33
|
+
return undefined;
|
|
34
|
+
const record = value;
|
|
35
|
+
if (typeof record.text === "string")
|
|
36
|
+
return record.text;
|
|
37
|
+
if (typeof record.content === "string")
|
|
38
|
+
return record.content;
|
|
39
|
+
const message = record.message;
|
|
40
|
+
if (message && typeof message === "object") {
|
|
41
|
+
return firstText(message);
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
function llmOutput(result) {
|
|
46
|
+
const generations = result.generations;
|
|
47
|
+
if (!Array.isArray(generations))
|
|
48
|
+
return result;
|
|
49
|
+
const text = generations.flat().map(firstText).filter(Boolean).join("");
|
|
50
|
+
return text || generations;
|
|
51
|
+
}
|
|
52
|
+
function usage(result) {
|
|
53
|
+
const output = result.llmOutput ?? {};
|
|
54
|
+
const tokenUsage = output.tokenUsage ??
|
|
55
|
+
output.token_usage ??
|
|
56
|
+
output.usage ??
|
|
57
|
+
output.estimatedTokenUsage;
|
|
58
|
+
if (!tokenUsage || typeof tokenUsage !== "object")
|
|
59
|
+
return undefined;
|
|
60
|
+
const usageData = tokenUsage;
|
|
61
|
+
const inputTokens = usageData.promptTokens ??
|
|
62
|
+
usageData.prompt_tokens ??
|
|
63
|
+
usageData.inputTokens ??
|
|
64
|
+
usageData.input_tokens;
|
|
65
|
+
const outputTokens = usageData.completionTokens ??
|
|
66
|
+
usageData.completion_tokens ??
|
|
67
|
+
usageData.outputTokens ??
|
|
68
|
+
usageData.output_tokens;
|
|
69
|
+
return {
|
|
70
|
+
inputTokens: typeof inputTokens === "number" ? inputTokens : undefined,
|
|
71
|
+
outputTokens: typeof outputTokens === "number" ? outputTokens : undefined,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function errorMessage(error) {
|
|
75
|
+
return error instanceof Error ? error.message : String(error);
|
|
76
|
+
}
|
|
77
|
+
class LemmaLangChainCallbackHandler {
|
|
78
|
+
options;
|
|
79
|
+
name = "lemma";
|
|
80
|
+
lemma;
|
|
81
|
+
runs = new Map();
|
|
82
|
+
constructor(options = {}) {
|
|
83
|
+
this.options = options;
|
|
84
|
+
this.lemma = options.lemma;
|
|
85
|
+
}
|
|
86
|
+
getLemma() {
|
|
87
|
+
this.lemma ??= new client_1.Lemma({
|
|
88
|
+
apiKey: this.options.apiKey,
|
|
89
|
+
projectId: this.options.projectId,
|
|
90
|
+
baseUrl: this.options.baseUrl,
|
|
91
|
+
fetch: this.options.fetch,
|
|
92
|
+
});
|
|
93
|
+
return this.lemma;
|
|
94
|
+
}
|
|
95
|
+
traceName(serialized, fallback) {
|
|
96
|
+
return this.options.agentName ?? serializedName(serialized, fallback);
|
|
97
|
+
}
|
|
98
|
+
startTrace(runId, serialized, input, fallbackName, metadata) {
|
|
99
|
+
const trace = this.getLemma().trace({
|
|
100
|
+
name: this.traceName(serialized, fallbackName),
|
|
101
|
+
input: this.options.recordInputs === false ? undefined : input,
|
|
102
|
+
metadata: {
|
|
103
|
+
...this.options.metadata,
|
|
104
|
+
...(metadata ?? {}),
|
|
105
|
+
langchainRunId: runId,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
this.runs.set(runId, { trace, type: "chain" });
|
|
109
|
+
return trace;
|
|
110
|
+
}
|
|
111
|
+
parent(runId) {
|
|
112
|
+
if (!runId)
|
|
113
|
+
return undefined;
|
|
114
|
+
return this.runs.get(runId);
|
|
115
|
+
}
|
|
116
|
+
handleChainStart(serialized, inputs, runId, parentRunId, _tags, metadata, _runType, name) {
|
|
117
|
+
const parent = this.parent(parentRunId);
|
|
118
|
+
if (!parent) {
|
|
119
|
+
this.startTrace(runId, { ...serialized, name: name ?? serialized?.name }, inputs, "langchain-run", metadata);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const handle = (parent.handle ?? parent.trace)?.startSpan({
|
|
123
|
+
name: name ?? serializedName(serialized, "langchain-chain"),
|
|
124
|
+
input: this.options.recordInputs === false ? undefined : inputs,
|
|
125
|
+
metadata: this.options.metadata,
|
|
126
|
+
attributes: {
|
|
127
|
+
"langchain.run_id": runId,
|
|
128
|
+
"langchain.parent_run_id": parentRunId,
|
|
129
|
+
"langchain.run_type": "chain",
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
this.runs.set(runId, { handle, parentRunId, type: "chain" });
|
|
133
|
+
}
|
|
134
|
+
async handleChainEnd(outputs, runId) {
|
|
135
|
+
const run = this.runs.get(runId);
|
|
136
|
+
if (!run)
|
|
137
|
+
return;
|
|
138
|
+
if (run.trace) {
|
|
139
|
+
await run.trace.end(this.options.recordOutputs === false ? undefined : { output: outputs });
|
|
140
|
+
this.runs.delete(runId);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
run.handle?.end({
|
|
144
|
+
output: this.options.recordOutputs === false ? undefined : outputs,
|
|
145
|
+
});
|
|
146
|
+
this.runs.delete(runId);
|
|
147
|
+
}
|
|
148
|
+
async handleChainError(error, runId) {
|
|
149
|
+
const run = this.runs.get(runId);
|
|
150
|
+
if (!run)
|
|
151
|
+
return;
|
|
152
|
+
if (run.trace) {
|
|
153
|
+
run.trace.fail(error);
|
|
154
|
+
await run.trace.end();
|
|
155
|
+
this.runs.delete(runId);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
run.handle?.end({ status: "ERROR", error: errorMessage(error) });
|
|
159
|
+
this.runs.delete(runId);
|
|
160
|
+
}
|
|
161
|
+
handleLLMStart(serialized, prompts, runId, parentRunId, extraParams) {
|
|
162
|
+
const parent = this.parent(parentRunId);
|
|
163
|
+
const trace = parent?.trace ??
|
|
164
|
+
parent?.handle ??
|
|
165
|
+
this.startTrace(runId, serialized, prompts, "langchain-llm");
|
|
166
|
+
const handle = trace.startGeneration({
|
|
167
|
+
name: serializedName(serialized, "langchain-llm"),
|
|
168
|
+
input: this.options.recordInputs === false ? undefined : prompts,
|
|
169
|
+
metadata: this.options.metadata,
|
|
170
|
+
model: modelName(serialized),
|
|
171
|
+
llmProvider: "langchain",
|
|
172
|
+
llmInputMessages: this.options.recordInputs === false
|
|
173
|
+
? undefined
|
|
174
|
+
: prompts.map((content) => ({ role: "user", content })),
|
|
175
|
+
llmInvocationParameters: extraParams,
|
|
176
|
+
attributes: {
|
|
177
|
+
"langchain.run_id": runId,
|
|
178
|
+
"langchain.parent_run_id": parentRunId,
|
|
179
|
+
"langchain.run_type": "llm",
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
this.runs.set(runId, { handle, parentRunId, type: "llm" });
|
|
183
|
+
}
|
|
184
|
+
handleChatModelStart(serialized, messages, runId, parentRunId, extraParams) {
|
|
185
|
+
const flatMessages = messages.flat();
|
|
186
|
+
const parent = this.parent(parentRunId);
|
|
187
|
+
const trace = parent?.trace ??
|
|
188
|
+
parent?.handle ??
|
|
189
|
+
this.startTrace(runId, serialized, flatMessages, "langchain-chat-model");
|
|
190
|
+
const handle = trace.startGeneration({
|
|
191
|
+
name: serializedName(serialized, "langchain-chat-model"),
|
|
192
|
+
input: this.options.recordInputs === false ? undefined : flatMessages,
|
|
193
|
+
metadata: this.options.metadata,
|
|
194
|
+
model: modelName(serialized),
|
|
195
|
+
llmProvider: "langchain",
|
|
196
|
+
llmInputMessages: this.options.recordInputs === false ? undefined : flatMessages,
|
|
197
|
+
llmInvocationParameters: extraParams,
|
|
198
|
+
attributes: {
|
|
199
|
+
"langchain.run_id": runId,
|
|
200
|
+
"langchain.parent_run_id": parentRunId,
|
|
201
|
+
"langchain.run_type": "llm",
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
this.runs.set(runId, { handle, parentRunId, type: "llm" });
|
|
205
|
+
}
|
|
206
|
+
handleLLMEnd(output, runId) {
|
|
207
|
+
const run = this.runs.get(runId);
|
|
208
|
+
if (!run?.handle)
|
|
209
|
+
return;
|
|
210
|
+
const outputText = llmOutput(output);
|
|
211
|
+
run.handle.end({
|
|
212
|
+
output: this.options.recordOutputs === false ? undefined : outputText,
|
|
213
|
+
usage: usage(output),
|
|
214
|
+
llmOutputMessages: this.options.recordOutputs === false || outputText === undefined
|
|
215
|
+
? undefined
|
|
216
|
+
: [{ role: "assistant", content: outputText }],
|
|
217
|
+
});
|
|
218
|
+
this.runs.delete(runId);
|
|
219
|
+
}
|
|
220
|
+
handleLLMError(error, runId) {
|
|
221
|
+
const run = this.runs.get(runId);
|
|
222
|
+
run?.handle?.end({ status: "ERROR", error: errorMessage(error) });
|
|
223
|
+
this.runs.delete(runId);
|
|
224
|
+
}
|
|
225
|
+
handleToolStart(serialized, input, runId, parentRunId) {
|
|
226
|
+
const parent = this.parent(parentRunId);
|
|
227
|
+
const trace = parent?.trace ??
|
|
228
|
+
parent?.handle ??
|
|
229
|
+
this.startTrace(runId, serialized, input, "langchain-tool");
|
|
230
|
+
const name = serializedName(serialized, "langchain-tool");
|
|
231
|
+
const handle = trace.startTool({
|
|
232
|
+
name,
|
|
233
|
+
toolName: name,
|
|
234
|
+
input: this.options.recordInputs === false ? undefined : input,
|
|
235
|
+
metadata: this.options.metadata,
|
|
236
|
+
attributes: {
|
|
237
|
+
"langchain.run_id": runId,
|
|
238
|
+
"langchain.parent_run_id": parentRunId,
|
|
239
|
+
"langchain.run_type": "tool",
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
this.runs.set(runId, { handle, parentRunId, type: "tool" });
|
|
243
|
+
}
|
|
244
|
+
handleToolEnd(output, runId) {
|
|
245
|
+
const run = this.runs.get(runId);
|
|
246
|
+
run?.handle?.end({
|
|
247
|
+
output: this.options.recordOutputs === false ? undefined : output,
|
|
248
|
+
});
|
|
249
|
+
this.runs.delete(runId);
|
|
250
|
+
}
|
|
251
|
+
handleToolError(error, runId) {
|
|
252
|
+
const run = this.runs.get(runId);
|
|
253
|
+
run?.handle?.end({ status: "ERROR", error: errorMessage(error) });
|
|
254
|
+
this.runs.delete(runId);
|
|
255
|
+
}
|
|
256
|
+
handleRetrieverStart(serialized, query, runId, parentRunId) {
|
|
257
|
+
const parent = this.parent(parentRunId);
|
|
258
|
+
const trace = parent?.trace ??
|
|
259
|
+
parent?.handle ??
|
|
260
|
+
this.startTrace(runId, serialized, query, "langchain-retriever");
|
|
261
|
+
const handle = trace.startSpan({
|
|
262
|
+
name: serializedName(serialized, "langchain-retriever"),
|
|
263
|
+
input: this.options.recordInputs === false ? undefined : query,
|
|
264
|
+
metadata: this.options.metadata,
|
|
265
|
+
attributes: {
|
|
266
|
+
"langchain.run_id": runId,
|
|
267
|
+
"langchain.parent_run_id": parentRunId,
|
|
268
|
+
"langchain.run_type": "retriever",
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
this.runs.set(runId, { handle, parentRunId, type: "retriever" });
|
|
272
|
+
}
|
|
273
|
+
handleRetrieverEnd(documents, runId) {
|
|
274
|
+
const run = this.runs.get(runId);
|
|
275
|
+
run?.handle?.end({
|
|
276
|
+
output: this.options.recordOutputs === false ? undefined : documents,
|
|
277
|
+
retrievalDocuments: this.options.recordOutputs === false ? undefined : documents,
|
|
278
|
+
});
|
|
279
|
+
this.runs.delete(runId);
|
|
280
|
+
}
|
|
281
|
+
handleRetrieverError(error, runId) {
|
|
282
|
+
const run = this.runs.get(runId);
|
|
283
|
+
run?.handle?.end({ status: "ERROR", error: errorMessage(error) });
|
|
284
|
+
this.runs.delete(runId);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.LemmaLangChainCallbackHandler = LemmaLangChainCallbackHandler;
|
|
288
|
+
exports.LangChainCallbackHandler = LemmaLangChainCallbackHandler;
|
|
289
|
+
function langChain(options = {}) {
|
|
290
|
+
return new LemmaLangChainCallbackHandler(options);
|
|
291
|
+
}
|
|
292
|
+
function langGraph(options = {}) {
|
|
293
|
+
return langChain({ agentName: "langgraph-agent", ...options });
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
2
|
+
import { HumanMessage } from "@langchain/core/messages";
|
|
3
|
+
import { langChain } from "@uselemma/tracing";
|
|
4
|
+
|
|
5
|
+
const lemmaCallbacks = [langChain({ agentName: "support-agent" })];
|
|
6
|
+
|
|
7
|
+
export async function callLangChain(userMessage: string) {
|
|
8
|
+
const model = new ChatOpenAI({
|
|
9
|
+
model: "gpt-4o",
|
|
10
|
+
callbacks: lemmaCallbacks,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const response = await model.invoke([new HumanMessage(userMessage)]);
|
|
14
|
+
return response.content;
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { StateGraph, START, END } from "@langchain/langgraph";
|
|
2
|
+
import { langGraph } from "@uselemma/tracing";
|
|
3
|
+
|
|
4
|
+
type GraphState = {
|
|
5
|
+
input: string;
|
|
6
|
+
output?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const graph = new StateGraph<GraphState>()
|
|
10
|
+
.addNode("answer", async (state) => ({
|
|
11
|
+
output: `You said: ${state.input}`,
|
|
12
|
+
}))
|
|
13
|
+
.addEdge(START, "answer")
|
|
14
|
+
.addEdge("answer", END)
|
|
15
|
+
.compile();
|
|
16
|
+
|
|
17
|
+
export async function callLangGraph(userMessage: string) {
|
|
18
|
+
const result = await graph.invoke(
|
|
19
|
+
{ input: userMessage },
|
|
20
|
+
{ callbacks: [langGraph({ agentName: "support-graph" })] },
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
return result.output;
|
|
24
|
+
}
|