@uselemma/tracing 7.9.0 → 7.11.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.
Files changed (45) hide show
  1. package/README.md +60 -5
  2. package/dist/client.d.ts +26 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +49 -8
  5. package/dist/client.js.map +1 -1
  6. package/dist/coding-agent.d.ts +85 -0
  7. package/dist/coding-agent.d.ts.map +1 -0
  8. package/dist/coding-agent.js +186 -0
  9. package/dist/coding-agent.js.map +1 -0
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/langchain.d.ts +7 -1
  15. package/dist/langchain.d.ts.map +1 -1
  16. package/dist/langchain.js +81 -13
  17. package/dist/langchain.js.map +1 -1
  18. package/dist/mastra.d.ts +8 -0
  19. package/dist/mastra.d.ts.map +1 -1
  20. package/dist/mastra.js +42 -1
  21. package/dist/mastra.js.map +1 -1
  22. package/dist/openai-agents.d.ts +6 -0
  23. package/dist/openai-agents.d.ts.map +1 -1
  24. package/dist/openai-agents.js +43 -1
  25. package/dist/openai-agents.js.map +1 -1
  26. package/dist/release.d.ts +7 -0
  27. package/dist/release.d.ts.map +1 -0
  28. package/dist/release.js +23 -0
  29. package/dist/release.js.map +1 -0
  30. package/dist/schedule.d.ts +3 -0
  31. package/dist/schedule.d.ts.map +1 -0
  32. package/dist/schedule.js +12 -0
  33. package/dist/schedule.js.map +1 -0
  34. package/dist/usage.d.ts +65 -0
  35. package/dist/usage.d.ts.map +1 -0
  36. package/dist/usage.js +272 -0
  37. package/dist/usage.js.map +1 -0
  38. package/dist/vercel-ai.d.ts +27 -1
  39. package/dist/vercel-ai.d.ts.map +1 -1
  40. package/dist/vercel-ai.js +53 -8
  41. package/dist/vercel-ai.js.map +1 -1
  42. package/examples/langchain.ts +1 -0
  43. package/examples/langgraph.ts +1 -0
  44. package/examples/mastra.ts +4 -1
  45. package/package.json +1 -1
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startCodingAgentTurn = startCodingAgentTurn;
4
+ exports.recordCodingAgentToolStart = recordCodingAgentToolStart;
5
+ exports.recordCodingAgentToolResult = recordCodingAgentToolResult;
6
+ exports.completeCodingAgentTurn = completeCodingAgentTurn;
7
+ exports.codingAgentTurnTrace = codingAgentTurnTrace;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const client_1 = require("./client");
10
+ const error_message_1 = require("./error-message");
11
+ function requireOpen(turn) {
12
+ if (turn.status === "completed") {
13
+ throw new Error(`Coding agent turn ${turn.sessionId}/${turn.turnId} already completed`);
14
+ }
15
+ return turn;
16
+ }
17
+ function harnessAttributes(turn) {
18
+ return {
19
+ "lemma.harness.id": turn.harness,
20
+ "lemma.harness.session_id": turn.sessionId,
21
+ "lemma.harness.turn_id": turn.turnId,
22
+ "lemma.sdk.integration": "coding-agent",
23
+ };
24
+ }
25
+ function deterministicUuid(value) {
26
+ const hash = (0, node_crypto_1.createHash)("sha256").update(value).digest("hex");
27
+ const variant = (8 + (Number.parseInt(hash[16], 16) % 4)).toString(16);
28
+ return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-5${hash.slice(13, 16)}-${variant}${hash.slice(17, 20)}-${hash.slice(20, 32)}`;
29
+ }
30
+ function turnIdentity(options) {
31
+ return `${options.harness}\0${options.sessionId}\0${options.turnId}`;
32
+ }
33
+ function startCodingAgentTurn(options) {
34
+ return {
35
+ version: 1,
36
+ status: "open",
37
+ harness: options.harness,
38
+ sessionId: options.sessionId,
39
+ turnId: options.turnId,
40
+ traceId: options.traceId ??
41
+ deterministicUuid(`lemma-coding-agent-trace\0${turnIdentity(options)}`),
42
+ generationId: options.generationId ??
43
+ deterministicUuid(`lemma-coding-agent-generation\0${turnIdentity(options)}`),
44
+ prompt: options.prompt,
45
+ startedAt: options.startedAt,
46
+ model: options.model,
47
+ provider: options.provider,
48
+ metadata: options.metadata,
49
+ tools: [],
50
+ };
51
+ }
52
+ function recordCodingAgentToolStart(turn, event) {
53
+ const open = requireOpen(turn);
54
+ const existingIndex = open.tools.findIndex((tool) => tool.toolUseId === event.toolUseId);
55
+ if (existingIndex >= 0) {
56
+ const existing = open.tools[existingIndex];
57
+ if (!existing.startTimeMissing)
58
+ return open;
59
+ const tools = [...open.tools];
60
+ tools[existingIndex] = {
61
+ ...existing,
62
+ toolName: event.toolName,
63
+ input: event.input === undefined ? existing.input : event.input,
64
+ startedAt: event.startedAt,
65
+ startTimeMissing: undefined,
66
+ };
67
+ return { ...open, tools };
68
+ }
69
+ return {
70
+ ...open,
71
+ tools: [
72
+ ...open.tools,
73
+ {
74
+ toolUseId: event.toolUseId,
75
+ toolName: event.toolName,
76
+ input: event.input,
77
+ startedAt: event.startedAt,
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ function recordCodingAgentToolResult(turn, event) {
83
+ const open = requireOpen(turn);
84
+ const existingIndex = open.tools.findIndex((tool) => tool.toolUseId === event.toolUseId);
85
+ const completed = {
86
+ toolUseId: event.toolUseId,
87
+ toolName: event.toolName,
88
+ input: event.input === undefined && existingIndex >= 0
89
+ ? open.tools[existingIndex].input
90
+ : event.input,
91
+ output: event.output,
92
+ error: (0, error_message_1.failureMessage)(event.error) ?? undefined,
93
+ startedAt: existingIndex >= 0 ? open.tools[existingIndex].startedAt : undefined,
94
+ endedAt: event.endedAt,
95
+ startTimeMissing: existingIndex >= 0 ? open.tools[existingIndex].startTimeMissing : true,
96
+ };
97
+ if (existingIndex < 0) {
98
+ return { ...open, tools: [...open.tools, completed] };
99
+ }
100
+ const tools = [...open.tools];
101
+ tools[existingIndex] = completed;
102
+ return { ...open, tools };
103
+ }
104
+ function completeCodingAgentTurn(turn, event) {
105
+ if (turn.status === "completed")
106
+ return turn;
107
+ if ((event.generationStartedAt === undefined) !==
108
+ (event.generationEndedAt === undefined)) {
109
+ throw new Error("Coding agent generation timing requires both startedAt and endedAt");
110
+ }
111
+ const tools = turn.tools.map((tool) => {
112
+ const error = (0, error_message_1.failureMessage)(tool.error) ?? undefined;
113
+ return tool.endedAt
114
+ ? { ...tool, error }
115
+ : { ...tool, error, resultMissing: true };
116
+ });
117
+ return {
118
+ ...turn,
119
+ tools,
120
+ status: "completed",
121
+ response: event.response,
122
+ endedAt: event.endedAt,
123
+ model: event.model ?? turn.model,
124
+ provider: event.provider ?? turn.provider,
125
+ generationStartedAt: event.generationStartedAt,
126
+ generationEndedAt: event.generationEndedAt,
127
+ };
128
+ }
129
+ function codingAgentTurnTrace(turn) {
130
+ const attributes = harnessAttributes(turn);
131
+ const context = new client_1.TraceContext({
132
+ id: turn.traceId,
133
+ name: `${turn.harness} coding agent`,
134
+ input: turn.prompt,
135
+ output: turn.response,
136
+ threadId: turn.sessionId,
137
+ startedAt: turn.startedAt,
138
+ metadata: {
139
+ ...(turn.metadata ?? {}),
140
+ ...attributes,
141
+ },
142
+ });
143
+ for (const tool of turn.tools) {
144
+ const missingStart = tool.startTimeMissing === true || tool.startedAt === undefined;
145
+ const missingResult = tool.resultMissing === true || tool.endedAt === undefined;
146
+ const error = tool.error;
147
+ context.recordTool({
148
+ id: tool.toolUseId,
149
+ name: tool.toolName,
150
+ toolName: tool.toolName,
151
+ input: tool.input,
152
+ output: tool.output,
153
+ error,
154
+ status: error == null ? (missingResult ? undefined : "OK") : "ERROR",
155
+ startedAt: tool.startedAt ?? null,
156
+ endedAt: tool.endedAt ?? null,
157
+ attributes,
158
+ metadata: {
159
+ tool_use_id: tool.toolUseId,
160
+ ...(missingStart ? { start_time_missing: true } : {}),
161
+ ...(missingResult ? { result_missing: true } : {}),
162
+ },
163
+ });
164
+ }
165
+ const generationTimingMissing = turn.generationStartedAt === undefined;
166
+ context.recordGeneration({
167
+ id: turn.generationId,
168
+ name: `${turn.harness} response`,
169
+ input: turn.prompt,
170
+ output: turn.response,
171
+ model: turn.model,
172
+ llmProvider: turn.provider,
173
+ llmInputMessages: [{ role: "user", content: turn.prompt }],
174
+ llmOutputMessages: [{ role: "assistant", content: turn.response }],
175
+ startedAt: turn.generationStartedAt ?? null,
176
+ endedAt: turn.generationEndedAt ?? null,
177
+ attributes,
178
+ metadata: generationTimingMissing ? { timing_missing: true } : undefined,
179
+ });
180
+ return {
181
+ context,
182
+ startedAt: turn.startedAt,
183
+ endedAt: turn.endedAt,
184
+ };
185
+ }
186
+ //# sourceMappingURL=coding-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coding-agent.js","sourceRoot":"","sources":["../src/coding-agent.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- export { Lemma, NoopSpanHandle, SpanHandle, TraceContext, TraceHandle, type DetachedGenerationOptions, type DetachedSpanOptions, type DetachedToolOptions, type GenerationOptions, type JsonValue, type LemmaClientOptions, type SpanOptions, type ToolOptions, type TraceEndOptions, type TraceOptions, type DebugSmokeTestResult, } from "./client";
1
+ export { Lemma, NoopSpanHandle, SpanHandle, TraceContext, TraceHandle, type DetachedGenerationOptions, type DetachedSpanOptions, type DetachedToolOptions, type GenerationOptions, type JsonValue, type LemmaClientOptions, type SdkIntegration, type SpanOptions, type OperationUsageResult, type TokenUsage, type ToolOptions, type TraceEndOptions, type TraceOptions, type DebugSmokeTestResult, type WireTokenUsage, attachResultUsage, normalizeTokenUsage, toWireTokenUsage, } from "./client";
2
+ export { codingAgentTurnTrace, completeCodingAgentTurn, recordCodingAgentToolResult, recordCodingAgentToolStart, startCodingAgentTurn, type CodingAgentHarnessId, type CodingAgentToolCall, type CodingAgentToolResult, type CodingAgentToolStart, type CodingAgentTurn, type CodingAgentTurnTrace, type CompleteCodingAgentTurnOptions, type CompletedCodingAgentTurn, type OpenCodingAgentTurn, type StartCodingAgentTurnOptions, } from "./coding-agent";
3
+ export { normalizeRelease, RELEASE_MAX_LENGTH } from "./release";
2
4
  export { disableDebugMode, enableDebugMode, isDebugModeEnabled, isDebugVerifyEnabled, lemmaDebug, } from "./debug-mode";
3
5
  export { LangChainCallbackHandler, LemmaLangChainCallbackHandler, langChain, langGraph, type LangChainIntegrationOptions, type LemmaLangChainIntegrationOptions, type LemmaLangGraphIntegrationOptions, } from "./langchain";
4
6
  export { LemmaMastraExporter, mastra, type LemmaMastraIntegrationOptions, type MastraErrorInfo, type MastraExportedSpan, type MastraIntegrationOptions, type MastraSpanType, type MastraTracingEvent, } from "./mastra";
@@ -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,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,EACjB,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,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,mBAAmB,EACnB,MAAM,EACN,KAAK,6BAA6B,EAClC,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAC;AAClB,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,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,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,mBAAmB,EACnB,MAAM,EACN,KAAK,6BAA6B,EAClC,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAC;AAClB,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,12 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.vercelAI = exports.openAIAgents = exports.mastra = exports.LemmaMastraExporter = exports.langGraph = exports.langChain = exports.LemmaLangChainCallbackHandler = exports.LangChainCallbackHandler = exports.lemmaDebug = exports.isDebugVerifyEnabled = exports.isDebugModeEnabled = exports.enableDebugMode = exports.disableDebugMode = exports.TraceHandle = exports.TraceContext = exports.SpanHandle = exports.NoopSpanHandle = exports.Lemma = void 0;
3
+ exports.vercelAI = exports.openAIAgents = exports.mastra = exports.LemmaMastraExporter = exports.langGraph = exports.langChain = exports.LemmaLangChainCallbackHandler = exports.LangChainCallbackHandler = exports.lemmaDebug = exports.isDebugVerifyEnabled = exports.isDebugModeEnabled = exports.enableDebugMode = exports.disableDebugMode = exports.RELEASE_MAX_LENGTH = exports.normalizeRelease = exports.startCodingAgentTurn = exports.recordCodingAgentToolStart = exports.recordCodingAgentToolResult = exports.completeCodingAgentTurn = exports.codingAgentTurnTrace = exports.toWireTokenUsage = exports.normalizeTokenUsage = exports.attachResultUsage = 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; } });
7
7
  Object.defineProperty(exports, "SpanHandle", { enumerable: true, get: function () { return client_1.SpanHandle; } });
8
8
  Object.defineProperty(exports, "TraceContext", { enumerable: true, get: function () { return client_1.TraceContext; } });
9
9
  Object.defineProperty(exports, "TraceHandle", { enumerable: true, get: function () { return client_1.TraceHandle; } });
10
+ Object.defineProperty(exports, "attachResultUsage", { enumerable: true, get: function () { return client_1.attachResultUsage; } });
11
+ Object.defineProperty(exports, "normalizeTokenUsage", { enumerable: true, get: function () { return client_1.normalizeTokenUsage; } });
12
+ Object.defineProperty(exports, "toWireTokenUsage", { enumerable: true, get: function () { return client_1.toWireTokenUsage; } });
13
+ var coding_agent_1 = require("./coding-agent");
14
+ Object.defineProperty(exports, "codingAgentTurnTrace", { enumerable: true, get: function () { return coding_agent_1.codingAgentTurnTrace; } });
15
+ Object.defineProperty(exports, "completeCodingAgentTurn", { enumerable: true, get: function () { return coding_agent_1.completeCodingAgentTurn; } });
16
+ Object.defineProperty(exports, "recordCodingAgentToolResult", { enumerable: true, get: function () { return coding_agent_1.recordCodingAgentToolResult; } });
17
+ Object.defineProperty(exports, "recordCodingAgentToolStart", { enumerable: true, get: function () { return coding_agent_1.recordCodingAgentToolStart; } });
18
+ Object.defineProperty(exports, "startCodingAgentTurn", { enumerable: true, get: function () { return coding_agent_1.startCodingAgentTurn; } });
19
+ var release_1 = require("./release");
20
+ Object.defineProperty(exports, "normalizeRelease", { enumerable: true, get: function () { return release_1.normalizeRelease; } });
21
+ Object.defineProperty(exports, "RELEASE_MAX_LENGTH", { enumerable: true, get: function () { return release_1.RELEASE_MAX_LENGTH; } });
10
22
  var debug_mode_1 = require("./debug-mode");
11
23
  Object.defineProperty(exports, "disableDebugMode", { enumerable: true, get: function () { return debug_mode_1.disableDebugMode; } });
12
24
  Object.defineProperty(exports, "enableDebugMode", { enumerable: true, get: function () { return debug_mode_1.enableDebugMode; } });
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;AAab,2CAMsB;AALpB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,kHAAA,oBAAoB,OAAA;AACpB,wGAAA,UAAU,OAAA;AAEZ,yCAQqB;AAPnB,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AAKX,mCASkB;AARhB,6GAAA,mBAAmB,OAAA;AACnB,gGAAA,MAAM,OAAA;AAQR,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,mCAwBkB;AAvBhB,+FAAA,KAAK,OAAA;AACL,wGAAA,cAAc,OAAA;AACd,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,qGAAA,WAAW,OAAA;AAgBX,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,0GAAA,gBAAgB,OAAA;AAElB,+CAgBwB;AAftB,oHAAA,oBAAoB,OAAA;AACpB,uHAAA,uBAAuB,OAAA;AACvB,2HAAA,2BAA2B,OAAA;AAC3B,0HAAA,0BAA0B,OAAA;AAC1B,oHAAA,oBAAoB,OAAA;AAYtB,qCAAiE;AAAxD,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAC7C,2CAMsB;AALpB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,gHAAA,kBAAkB,OAAA;AAClB,kHAAA,oBAAoB,OAAA;AACpB,wGAAA,UAAU,OAAA;AAEZ,yCAQqB;AAPnB,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AAKX,mCASkB;AARhB,6GAAA,mBAAmB,OAAA;AACnB,gGAAA,MAAM,OAAA;AAQR,iDAOyB;AANvB,6GAAA,YAAY,OAAA;AAOd,yCAKqB;AAJnB,qGAAA,QAAQ,OAAA"}
@@ -18,6 +18,7 @@ export type LangChainIntegrationOptions = {
18
18
  projectId?: LemmaClientOptions["projectId"];
19
19
  baseUrl?: LemmaClientOptions["baseUrl"];
20
20
  fetch?: LemmaClientOptions["fetch"];
21
+ release?: LemmaClientOptions["release"];
21
22
  agentName?: string;
22
23
  metadata?: Record<string, unknown>;
23
24
  /** Key looked up on run metadata / tags for threadId. Default: `threadId`. */
@@ -55,6 +56,11 @@ export declare class LemmaLangChainCallbackHandler {
55
56
  private forgetTraceRuns;
56
57
  private finalizeTrace;
57
58
  private maybeFinalizeOwner;
59
+ /**
60
+ * Copy token usage from an `invoke` / chain result onto generation spans
61
+ * whose callback event omitted it. Call after the operation returns.
62
+ */
63
+ recordResult(result: unknown): number;
58
64
  private traceName;
59
65
  handleChainStart(serialized: Serialized, inputs: unknown, runId: RunId, parentRunId?: RunId, tags?: string[], metadata?: Record<string, unknown>, runType?: string, name?: string): void;
60
66
  handleChainEnd(outputs: unknown, runId: RunId): Promise<void>;
@@ -71,7 +77,7 @@ export declare class LemmaLangChainCallbackHandler {
71
77
  handleRetrieverStart(serialized: Serialized, query: string, runId: RunId, parentRunId?: RunId, tags?: string[], metadata?: Record<string, unknown>): void;
72
78
  handleRetrieverEnd(documents: unknown[], runId: RunId): Promise<void>;
73
79
  handleRetrieverError(error: unknown, runId: RunId): Promise<void>;
74
- /** Await outstanding terminal deliveries. */
80
+ /** Send completed traces and await ingest delivery. */
75
81
  flush(): Promise<void>;
76
82
  /** Finalize open traces and reset integration state. */
77
83
  shutdown(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,kBAAkB,EAGxB,MAAM,UAAU,CAAC;AAIlB,KAAK,KAAK,GAAG,MAAM,CAAC;AAEpB,KAAK,UAAU,GAAG;IAChB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA0jBF,qBAAa,6BAA6B;IAO5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,IAAI,SAAW;IACf,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAEvB,OAAO,GAAE,2BAAgC;IAItE,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAKjB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;YAMT,aAAa;IAqC3B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,SAAS;IAIjB,gBAAgB,CACd,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,KAAK,EACnB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM;IAiET,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IA2B7C,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IA6BnD,cAAc,CACZ,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,KAAK,EACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA+CpC,oBAAoB,CAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,OAAO,EAAE,EAAE,EACrB,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,KAAK,EACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiDpC,OAAO,CAAC,gBAAgB;IAalB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;YAoDpC,qBAAqB;IAa7B,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IA2BjD,eAAe,CACb,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,KAAK,EACnB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA0C9B,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAkC3C,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IA2BlD,oBAAoB,CAClB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,KAAK,EACnB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAwC9B,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK;IAqBrD,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAuBvD,6CAA6C;IACvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,wDAAwD;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC;AAED,eAAO,MAAM,wBAAwB,sCAAgC,CAAC;AAEtE,wBAAgB,SAAS,CAAC,OAAO,GAAE,2BAAgC,iCAElE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,2BAAgC,iCAElE;AAED,MAAM,MAAM,gCAAgC,GAAG,2BAA2B,CAAC;AAC3E,MAAM,MAAM,gCAAgC,GAAG,2BAA2B,CAAC"}
1
+ {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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"}
package/dist/langchain.js CHANGED
@@ -5,7 +5,12 @@ exports.langChain = langChain;
5
5
  exports.langGraph = langGraph;
6
6
  const client_1 = require("./client");
7
7
  const error_message_1 = require("./error-message");
8
+ const schedule_1 = require("./schedule");
8
9
  const tool_result_1 = require("./tool-result");
10
+ const usage_1 = require("./usage");
11
+ const INTEGRATION_ATTRS = {
12
+ "lemma.sdk.integration": "langchain",
13
+ };
9
14
  const KNOWN_PROVIDERS = [
10
15
  "openai",
11
16
  "anthropic",
@@ -507,11 +512,53 @@ function durationMs(start, end) {
507
512
  }
508
513
  function langchainAttributes(runId, parentRunId, runType) {
509
514
  return Object.fromEntries(Object.entries({
515
+ ...INTEGRATION_ATTRS,
510
516
  "langchain.run_id": runId,
511
517
  "langchain.parent_run_id": parentRunId,
512
518
  "langchain.run_type": runType,
513
519
  }).filter(([, value]) => value !== undefined && value !== null));
514
520
  }
521
+ /**
522
+ * Extract token usage from LLMResult.llmOutput and/or generation message
523
+ * usage_metadata. Prefers llmOutput.tokenUsage / token_usage, then the first
524
+ * message-level usage_metadata that normalizes.
525
+ */
526
+ function llmTokenUsage(result) {
527
+ const llmOutput = result.llmOutput;
528
+ if (llmOutput && typeof llmOutput === "object") {
529
+ const fromOutput = (0, usage_1.normalizeTokenUsage)(llmOutput);
530
+ if (fromOutput)
531
+ return fromOutput;
532
+ }
533
+ const generations = result.generations;
534
+ if (!Array.isArray(generations))
535
+ return undefined;
536
+ for (const group of generations) {
537
+ if (!Array.isArray(group))
538
+ continue;
539
+ for (const item of group) {
540
+ if (!item || typeof item !== "object")
541
+ continue;
542
+ const record = item;
543
+ const message = record.message;
544
+ if (message && typeof message === "object") {
545
+ const msg = message;
546
+ const fromMessage = (0, usage_1.normalizeTokenUsage)(msg.usage_metadata) ??
547
+ (0, usage_1.normalizeTokenUsage)(msg.usageMetadata) ??
548
+ (0, usage_1.normalizeTokenUsage)(msg.response_metadata) ??
549
+ (0, usage_1.normalizeTokenUsage)(msg);
550
+ if (fromMessage)
551
+ return fromMessage;
552
+ }
553
+ const fromItem = (0, usage_1.normalizeTokenUsage)(record.usage_metadata) ??
554
+ (0, usage_1.normalizeTokenUsage)(record.generationInfo) ??
555
+ (0, usage_1.normalizeTokenUsage)(record);
556
+ if (fromItem)
557
+ return fromItem;
558
+ }
559
+ }
560
+ return undefined;
561
+ }
515
562
  class LemmaLangChainCallbackHandler {
516
563
  options;
517
564
  name = "lemma";
@@ -529,6 +576,7 @@ class LemmaLangChainCallbackHandler {
529
576
  projectId: this.options.projectId,
530
577
  baseUrl: this.options.baseUrl,
531
578
  fetch: this.options.fetch,
579
+ release: this.options.release,
532
580
  });
533
581
  return this.lemma;
534
582
  }
@@ -712,13 +760,32 @@ class LemmaLangChainCallbackHandler {
712
760
  if (!run.ownsTrace)
713
761
  return;
714
762
  const stored = this.traces.get(run.owningTraceId);
715
- if (!stored)
763
+ if (!stored || stored.ended)
716
764
  return;
717
765
  this.noteBounds(stored, run.startedAt, endedAt);
718
- const promise = this.finalizeTrace(run.owningTraceId, stored);
766
+ // Delay the HTTP send so recordResult(invoke return) can stamp usage
767
+ // onto generations whose callback event omitted it.
768
+ const promise = new Promise((resolve, reject) => {
769
+ (0, schedule_1.scheduleMacrotask)(() => {
770
+ this.finalizeTrace(run.owningTraceId, stored).then(resolve, reject);
771
+ });
772
+ });
719
773
  this.trackPending(promise);
720
774
  return promise;
721
775
  }
776
+ /**
777
+ * Copy token usage from an `invoke` / chain result onto generation spans
778
+ * whose callback event omitted it. Call after the operation returns.
779
+ */
780
+ recordResult(result) {
781
+ let stamped = 0;
782
+ for (const stored of this.traces.values()) {
783
+ if (stored.ended)
784
+ continue;
785
+ stamped += stored.handle.applyGenerationUsage(result);
786
+ }
787
+ return stamped;
788
+ }
722
789
  traceName(serialized, fallback) {
723
790
  return this.options.agentName ?? serializedName(serialized, fallback);
724
791
  }
@@ -900,6 +967,7 @@ class LemmaLangChainCallbackHandler {
900
967
  endedAt,
901
968
  durationMs: durationMs(run.startedAt, endedAt),
902
969
  llmOutputMessages: softError ? undefined : outputMessages,
970
+ usage: llmTokenUsage(output),
903
971
  });
904
972
  const stored = this.storedTrace(run.owningTraceId);
905
973
  if (stored) {
@@ -924,14 +992,14 @@ class LemmaLangChainCallbackHandler {
924
992
  }
925
993
  this.runs.delete(runId);
926
994
  if (run.ownsTrace) {
927
- await this.maybeFinalizeOwner(run, endedAt);
995
+ void this.maybeFinalizeOwner(run, endedAt);
928
996
  return;
929
997
  }
930
998
  // Final answer generation under a deferred owned LLM — close that root.
931
999
  const deferred = this.deferredOwnerFor(run.owningTraceId);
932
1000
  if (deferred) {
933
1001
  this.runs.delete(deferred.rootRunId);
934
- await this.maybeFinalizeOwner(deferred, endedAt);
1002
+ void this.maybeFinalizeOwner(deferred, endedAt);
935
1003
  }
936
1004
  }
937
1005
  async finalizeDeferredOwner(owningTraceId, endedAt, rootError) {
@@ -942,7 +1010,7 @@ class LemmaLangChainCallbackHandler {
942
1010
  if (stored && rootError)
943
1011
  this.noteRootError(stored, rootError);
944
1012
  this.runs.delete(deferred.rootRunId);
945
- await this.maybeFinalizeOwner(deferred, endedAt);
1013
+ void this.maybeFinalizeOwner(deferred, endedAt);
946
1014
  }
947
1015
  async handleLLMError(error, runId) {
948
1016
  const run = this.runs.get(runId);
@@ -964,10 +1032,10 @@ class LemmaLangChainCallbackHandler {
964
1032
  }
965
1033
  this.runs.delete(runId);
966
1034
  if (run.ownsTrace) {
967
- await this.maybeFinalizeOwner(run, endedAt);
1035
+ void this.maybeFinalizeOwner(run, endedAt);
968
1036
  return;
969
1037
  }
970
- await this.finalizeDeferredOwner(run.owningTraceId, endedAt, message);
1038
+ void this.finalizeDeferredOwner(run.owningTraceId, endedAt, message);
971
1039
  }
972
1040
  handleToolStart(serialized, input, runId, parentRunId, tags, metadata) {
973
1041
  const startedAt = new Date();
@@ -1029,7 +1097,7 @@ class LemmaLangChainCallbackHandler {
1029
1097
  }
1030
1098
  }
1031
1099
  this.runs.delete(runId);
1032
- await this.maybeFinalizeOwner(run, endedAt);
1100
+ void this.maybeFinalizeOwner(run, endedAt);
1033
1101
  }
1034
1102
  async handleToolError(error, runId) {
1035
1103
  const run = this.runs.get(runId);
@@ -1051,10 +1119,10 @@ class LemmaLangChainCallbackHandler {
1051
1119
  }
1052
1120
  this.runs.delete(runId);
1053
1121
  if (run.ownsTrace) {
1054
- await this.maybeFinalizeOwner(run, endedAt);
1122
+ void this.maybeFinalizeOwner(run, endedAt);
1055
1123
  return;
1056
1124
  }
1057
- await this.finalizeDeferredOwner(run.owningTraceId, endedAt, message);
1125
+ void this.finalizeDeferredOwner(run.owningTraceId, endedAt, message);
1058
1126
  }
1059
1127
  handleRetrieverStart(serialized, query, runId, parentRunId, tags, metadata) {
1060
1128
  const startedAt = new Date();
@@ -1099,7 +1167,7 @@ class LemmaLangChainCallbackHandler {
1099
1167
  this.noteRootOutput(stored, documents);
1100
1168
  }
1101
1169
  this.runs.delete(runId);
1102
- await this.maybeFinalizeOwner(run, endedAt);
1170
+ void this.maybeFinalizeOwner(run, endedAt);
1103
1171
  }
1104
1172
  async handleRetrieverError(error, runId) {
1105
1173
  const run = this.runs.get(runId);
@@ -1120,9 +1188,9 @@ class LemmaLangChainCallbackHandler {
1120
1188
  this.noteRootError(stored, message);
1121
1189
  }
1122
1190
  this.runs.delete(runId);
1123
- await this.maybeFinalizeOwner(run, endedAt);
1191
+ void this.maybeFinalizeOwner(run, endedAt);
1124
1192
  }
1125
- /** Await outstanding terminal deliveries. */
1193
+ /** Send completed traces and await ingest delivery. */
1126
1194
  async flush() {
1127
1195
  await Promise.all([
1128
1196
  ...Array.from(this.traces.entries(), ([id, stored]) => this.finalizeTrace(id, stored)),