@traccia2/sdk 0.0.6 → 0.0.7

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 CHANGED
@@ -449,7 +449,7 @@ If you don't see traces in the console, check:
449
449
  // Use with ChatOllama
450
450
  import { ChatOllama } from '@langchain/ollama';
451
451
 
452
- const handler = new TraciaCallbackHandler();
452
+ const handler = new TracciaCallbackHandler();
453
453
  const model = new ChatOllama({
454
454
  model: 'mistral',
455
455
  baseUrl: 'http://localhost:11434',
@@ -466,7 +466,7 @@ If you don't see traces in the console, check:
466
466
  2. **Callback Handler Configuration:**
467
467
  ```typescript
468
468
  // Make sure the handler is passed to ALL components
469
- const handler = new TraciaCallbackHandler();
469
+ const handler = new TracciaCallbackHandler();
470
470
 
471
471
  const model = new ChatOpenAI({
472
472
  callbacks: [handler], // Required for LLM
@@ -5,6 +5,7 @@
5
5
  * @module integrations
6
6
  */
7
7
  export { TracciaCallbackHandler } from './langchain-callback';
8
+ export { TracciaCallbackHandlerNew } from './langchain-callback.new';
8
9
  export { getTraciaHandler, withTracing, createTracedOpenAI, createTracedAgentExecutor, createTracedLLMChain, traced, setupLangChainWithTracing, } from './auto-langchain';
9
10
  export { instrumentLangGraph, createTracedNode, createTracedConditional, } from './langgraph-instrumentation';
10
11
  export { wrapGraphWithTracing, tracedNode, tracedConditional, createSimpleTracedGraph, traceableFunction, createAgentWorkflow, } from './auto-langgraph';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,MAAM,EACN,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,MAAM,EACN,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
@@ -6,10 +6,12 @@
6
6
  * @module integrations
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.POPULAR_OLLAMA_MODELS = exports.getOllamaSetupInstructions = exports.createOllamaStreamingChatbot = exports.createOllamaChatbot = exports.setupOllamaWithTracing = exports.createOllamaWithTracing = exports.createAgentWorkflow = exports.traceableFunction = exports.createSimpleTracedGraph = exports.tracedConditional = exports.tracedNode = exports.wrapGraphWithTracing = exports.createTracedConditional = exports.createTracedNode = exports.instrumentLangGraph = exports.setupLangChainWithTracing = exports.traced = exports.createTracedLLMChain = exports.createTracedAgentExecutor = exports.createTracedOpenAI = exports.withTracing = exports.getTraciaHandler = exports.TracciaCallbackHandler = void 0;
9
+ exports.POPULAR_OLLAMA_MODELS = exports.getOllamaSetupInstructions = exports.createOllamaStreamingChatbot = exports.createOllamaChatbot = exports.setupOllamaWithTracing = exports.createOllamaWithTracing = exports.createAgentWorkflow = exports.traceableFunction = exports.createSimpleTracedGraph = exports.tracedConditional = exports.tracedNode = exports.wrapGraphWithTracing = exports.createTracedConditional = exports.createTracedNode = exports.instrumentLangGraph = exports.setupLangChainWithTracing = exports.traced = exports.createTracedLLMChain = exports.createTracedAgentExecutor = exports.createTracedOpenAI = exports.withTracing = exports.getTraciaHandler = exports.TracciaCallbackHandlerNew = exports.TracciaCallbackHandler = void 0;
10
10
  // LangChain integrations
11
11
  var langchain_callback_1 = require("./langchain-callback");
12
12
  Object.defineProperty(exports, "TracciaCallbackHandler", { enumerable: true, get: function () { return langchain_callback_1.TracciaCallbackHandler; } });
13
+ var langchain_callback_new_1 = require("./langchain-callback.new");
14
+ Object.defineProperty(exports, "TracciaCallbackHandlerNew", { enumerable: true, get: function () { return langchain_callback_new_1.TracciaCallbackHandlerNew; } });
13
15
  var auto_langchain_1 = require("./auto-langchain");
14
16
  Object.defineProperty(exports, "getTraciaHandler", { enumerable: true, get: function () { return auto_langchain_1.getTraciaHandler; } });
15
17
  Object.defineProperty(exports, "withTracing", { enumerable: true, get: function () { return auto_langchain_1.withTracing; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yBAAyB;AACzB,2DAA8D;AAArD,4HAAA,sBAAsB,OAAA;AAC/B,mDAQ0B;AAPxB,kHAAA,gBAAgB,OAAA;AAChB,6GAAA,WAAW,OAAA;AACX,oHAAA,kBAAkB,OAAA;AAClB,2HAAA,yBAAyB,OAAA;AACzB,sHAAA,oBAAoB,OAAA;AACpB,wGAAA,MAAM,OAAA;AACN,2HAAA,yBAAyB,OAAA;AAG3B,yBAAyB;AACzB,yEAIqC;AAHnC,gIAAA,mBAAmB,OAAA;AACnB,6HAAA,gBAAgB,OAAA;AAChB,oIAAA,uBAAuB,OAAA;AAEzB,mDAO0B;AANxB,sHAAA,oBAAoB,OAAA;AACpB,4GAAA,UAAU,OAAA;AACV,mHAAA,iBAAiB,OAAA;AACjB,yHAAA,uBAAuB,OAAA;AACvB,mHAAA,iBAAiB,OAAA;AACjB,qHAAA,mBAAmB,OAAA;AAGrB,sBAAsB;AACtB,2DAO8B;AAN5B,6HAAA,uBAAuB,OAAA;AACvB,4HAAA,sBAAsB,OAAA;AACtB,yHAAA,mBAAmB,OAAA;AACnB,kIAAA,4BAA4B,OAAA;AAC5B,gIAAA,0BAA0B,OAAA;AAC1B,2HAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yBAAyB;AACzB,2DAA8D;AAArD,4HAAA,sBAAsB,OAAA;AAC/B,mEAAqE;AAA5D,mIAAA,yBAAyB,OAAA;AAClC,mDAQ0B;AAPxB,kHAAA,gBAAgB,OAAA;AAChB,6GAAA,WAAW,OAAA;AACX,oHAAA,kBAAkB,OAAA;AAClB,2HAAA,yBAAyB,OAAA;AACzB,sHAAA,oBAAoB,OAAA;AACpB,wGAAA,MAAM,OAAA;AACN,2HAAA,yBAAyB,OAAA;AAG3B,yBAAyB;AACzB,yEAIqC;AAHnC,gIAAA,mBAAmB,OAAA;AACnB,6HAAA,gBAAgB,OAAA;AAChB,oIAAA,uBAAuB,OAAA;AAEzB,mDAO0B;AANxB,sHAAA,oBAAoB,OAAA;AACpB,4GAAA,UAAU,OAAA;AACV,mHAAA,iBAAiB,OAAA;AACjB,yHAAA,uBAAuB,OAAA;AACvB,mHAAA,iBAAiB,OAAA;AACjB,qHAAA,mBAAmB,OAAA;AAGrB,sBAAsB;AACtB,2DAO8B;AAN5B,6HAAA,uBAAuB,OAAA;AACvB,4HAAA,sBAAsB,OAAA;AACtB,yHAAA,mBAAmB,OAAA;AACnB,kIAAA,4BAA4B,OAAA;AAC5B,gIAAA,0BAA0B,OAAA;AAC1B,2HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,62 @@
1
+ import type { AgentAction, AgentFinish } from "@langchain/core/agents";
2
+ import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
3
+ import type { Document } from "@langchain/core/documents";
4
+ import type { Serialized } from "@langchain/core/load/serializable";
5
+ import { BaseMessage, type BaseMessageFields, type MessageContent } from "@langchain/core/messages";
6
+ import type { LLMResult } from "@langchain/core/outputs";
7
+ import type { ChainValues } from "@langchain/core/utils/types";
8
+ export type LlmMessage = {
9
+ role: string;
10
+ content: BaseMessageFields["content"];
11
+ additional_kwargs?: BaseMessageFields["additional_kwargs"];
12
+ };
13
+ export type AnonymousLlmMessage = {
14
+ content: BaseMessageFields["content"];
15
+ additional_kwargs?: BaseMessageFields["additional_kwargs"];
16
+ };
17
+ type ConstructorParams = {
18
+ userId?: string;
19
+ sessionId?: string;
20
+ tags?: string[];
21
+ version?: string;
22
+ traceMetadata?: Record<string, unknown>;
23
+ };
24
+ export declare class TracciaCallbackHandlerNew extends BaseCallbackHandler {
25
+ name: string;
26
+ private tracer;
27
+ private tags;
28
+ private completionStartTimes;
29
+ private promptToParentRunMap;
30
+ private runMap;
31
+ last_trace_id: string | null;
32
+ constructor(params?: ConstructorParams);
33
+ handleLLMNewToken(_token: string, _idx: any, runId: string, _parentRunId?: string, _tags?: string[], _fields?: any): Promise<void>;
34
+ handleChainStart(chain: Serialized, inputs: ChainValues, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, _runType?: string, name?: string): Promise<void>;
35
+ handleAgentAction(action: AgentAction, runId: string, parentRunId?: string): Promise<void>;
36
+ handleAgentEnd?(action: AgentFinish, runId: string, _parentRunId?: string): Promise<void>;
37
+ handleChainError(err: any, runId: string, _parentRunId?: string | undefined): Promise<void>;
38
+ handleGenerationStart(llm: Serialized, messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
39
+ handleChatModelStart(llm: Serialized, messages: BaseMessage[][], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
40
+ handleChainEnd(outputs: ChainValues, runId: string, _parentRunId?: string | undefined): Promise<void>;
41
+ handleLLMStart(llm: Serialized, prompts: string[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
42
+ handleToolStart(tool: Serialized, input: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
43
+ handleRetrieverStart(retriever: Serialized, query: string, runId: string, parentRunId?: string | undefined, tags?: string[] | undefined, metadata?: Record<string, unknown> | undefined, name?: string): Promise<void>;
44
+ handleRetrieverEnd(documents: Document<Record<string, any>>[], runId: string, _parentRunId?: string | undefined): Promise<void>;
45
+ handleRetrieverError(err: any, runId: string, _parentRunId?: string | undefined): Promise<void>;
46
+ handleToolEnd(output: string, runId: string, _parentRunId?: string | undefined): Promise<void>;
47
+ handleToolError(err: any, runId: string, _parentRunId?: string | undefined): Promise<void>;
48
+ handleLLMEnd(output: LLMResult, runId: string, _parentRunId?: string | undefined): Promise<void>;
49
+ handleLLMError(err: any, runId: string, _parentRunId?: string | undefined): Promise<void>;
50
+ private registerLangfusePrompt;
51
+ private deregisterLangfusePrompt;
52
+ private startAndRegisterSpan;
53
+ private handleSpanEnd;
54
+ private parseAzureRefusalError;
55
+ private joinTagsAndMetaData;
56
+ private stripLangfuseKeysFromMetadata;
57
+ private extractUsageMetadata;
58
+ private extractModelNameFromMetadata;
59
+ private extractChatMessageContent;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=langchain-callback.new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain-callback.new.d.ts","sourceRoot":"","sources":["../../src/integrations/langchain-callback.new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,519 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TracciaCallbackHandlerNew = void 0;
4
+ const base_1 = require("@langchain/core/callbacks/base");
5
+ const messages_1 = require("@langchain/core/messages");
6
+ const auto_1 = require("../auto");
7
+ class TracciaCallbackHandlerNew extends base_1.BaseCallbackHandler {
8
+ constructor(params) {
9
+ super();
10
+ this.name = "TracciaCallbackHandler";
11
+ this.tracer = (0, auto_1.getTracer)('langchain');
12
+ this.tags = [];
13
+ this.completionStartTimes = {};
14
+ this.runMap = new Map();
15
+ this.last_trace_id = null;
16
+ this.tags = params?.tags ?? [];
17
+ this.promptToParentRunMap = new Map();
18
+ }
19
+ async handleLLMNewToken(_token, _idx, runId, _parentRunId, _tags, _fields) {
20
+ // if this is the first token, add it to completionStartTimes
21
+ if (runId && !(runId in this.completionStartTimes)) {
22
+ console.debug(`LLM first streaming token: ${runId}`);
23
+ this.completionStartTimes[runId] = new Date();
24
+ }
25
+ }
26
+ async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, _runType, name) {
27
+ try {
28
+ console.debug(`Chain start with Id: ${runId}`);
29
+ this.tags;
30
+ const runName = name ?? chain.id.at(-1)?.toString() ?? "Langchain Run";
31
+ this.registerLangfusePrompt(parentRunId, metadata);
32
+ // In chains, inputs can be a string or an array of BaseMessage
33
+ let finalInput = inputs;
34
+ if (typeof inputs === "object" &&
35
+ "input" in inputs &&
36
+ Array.isArray(inputs["input"]) &&
37
+ inputs["input"].every((m) => m instanceof messages_1.BaseMessage)) {
38
+ finalInput = inputs["input"].map((m) => this.extractChatMessageContent(m));
39
+ }
40
+ else if (typeof inputs === "object" &&
41
+ "messages" in inputs &&
42
+ Array.isArray(inputs["messages"]) &&
43
+ inputs["messages"].every((m) => m instanceof messages_1.BaseMessage)) {
44
+ finalInput = inputs["messages"].map((m) => this.extractChatMessageContent(m));
45
+ }
46
+ else if (typeof inputs === "object" &&
47
+ "content" in inputs &&
48
+ typeof inputs["content"] === "string") {
49
+ finalInput = inputs["content"];
50
+ }
51
+ this.startAndRegisterSpan({
52
+ runName,
53
+ parentRunId,
54
+ runId,
55
+ tags,
56
+ metadata,
57
+ attributes: {
58
+ input: finalInput,
59
+ },
60
+ });
61
+ if (!parentRunId) {
62
+ // Here we would update the trace, but traccia sdk doesn't support it yet
63
+ }
64
+ }
65
+ catch (e) {
66
+ console.debug(e instanceof Error ? e.message : String(e));
67
+ }
68
+ }
69
+ async handleAgentAction(action, runId, parentRunId) {
70
+ try {
71
+ console.debug(`Agent action ${action.tool} with ID: ${runId}`);
72
+ this.startAndRegisterSpan({
73
+ runId,
74
+ parentRunId,
75
+ runName: action.tool,
76
+ attributes: {
77
+ input: action,
78
+ },
79
+ });
80
+ }
81
+ catch (e) {
82
+ console.debug(e instanceof Error ? e.message : String(e));
83
+ }
84
+ }
85
+ async handleAgentEnd(action, runId, _parentRunId) {
86
+ try {
87
+ console.debug(`Agent finish with ID: ${runId}`);
88
+ this.handleSpanEnd({
89
+ runId,
90
+ attributes: { output: action },
91
+ });
92
+ }
93
+ catch (e) {
94
+ console.debug(e instanceof Error ? e.message : String(e));
95
+ }
96
+ }
97
+ async handleChainError(err, runId, _parentRunId) {
98
+ try {
99
+ console.debug(`Chain error: ${err} with ID: ${runId}`);
100
+ const azureRefusalError = this.parseAzureRefusalError(err);
101
+ this.handleSpanEnd({
102
+ runId,
103
+ attributes: {
104
+ level: "ERROR",
105
+ statusMessage: err.toString() + azureRefusalError,
106
+ },
107
+ });
108
+ }
109
+ catch (e) {
110
+ console.debug(e instanceof Error ? e.message : String(e));
111
+ }
112
+ }
113
+ async handleGenerationStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
114
+ console.debug(`Generation start with ID: ${runId} and parentRunId ${parentRunId}`);
115
+ const runName = name ?? llm.id.at(-1)?.toString() ?? "Langchain Generation";
116
+ const modelParameters = {};
117
+ const invocationParams = extraParams?.["invocation_params"];
118
+ for (const [key, value] of Object.entries({
119
+ temperature: invocationParams?.temperature,
120
+ max_tokens: invocationParams?.max_tokens,
121
+ top_p: invocationParams?.top_p,
122
+ frequency_penalty: invocationParams?.frequency_penalty,
123
+ presence_penalty: invocationParams?.presence_penalty,
124
+ request_timeout: invocationParams?.request_timeout,
125
+ })) {
126
+ if (value !== undefined && value !== null) {
127
+ modelParameters[key] = value;
128
+ }
129
+ }
130
+ let extractedModelName;
131
+ if (extraParams) {
132
+ const invocationParamsModelName = extraParams.invocation_params.model;
133
+ const metadataModelName = metadata && "ls_model_name" in metadata
134
+ ? metadata["ls_model_name"]
135
+ : undefined;
136
+ extractedModelName = invocationParamsModelName ?? metadataModelName;
137
+ }
138
+ const registeredPrompt = this.promptToParentRunMap.get(parentRunId ?? "root");
139
+ if (registeredPrompt && parentRunId) {
140
+ this.deregisterLangfusePrompt(parentRunId);
141
+ }
142
+ this.startAndRegisterSpan({
143
+ runId,
144
+ parentRunId,
145
+ metadata,
146
+ tags,
147
+ runName,
148
+ attributes: {
149
+ input: messages,
150
+ model: extractedModelName,
151
+ modelParameters: modelParameters,
152
+ prompt: registeredPrompt,
153
+ },
154
+ });
155
+ }
156
+ async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
157
+ try {
158
+ console.debug(`Chat model start with ID: ${runId}`);
159
+ const prompts = messages.flatMap((message) => message.map((m) => this.extractChatMessageContent(m)));
160
+ this.handleGenerationStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name);
161
+ }
162
+ catch (e) {
163
+ console.debug(e instanceof Error ? e.message : String(e));
164
+ }
165
+ }
166
+ async handleChainEnd(outputs, runId, _parentRunId) {
167
+ try {
168
+ console.debug(`Chain end with ID: ${runId}`);
169
+ let finalOutput = outputs;
170
+ if (typeof outputs === "object" &&
171
+ "output" in outputs &&
172
+ typeof outputs["output"] === "string") {
173
+ finalOutput = outputs["output"];
174
+ }
175
+ else if (typeof outputs === "object" &&
176
+ "messages" in outputs &&
177
+ Array.isArray(outputs["messages"]) &&
178
+ outputs["messages"].every((m) => m instanceof messages_1.BaseMessage)) {
179
+ finalOutput = {
180
+ messages: outputs.messages.map((message) => this.extractChatMessageContent(message)),
181
+ };
182
+ }
183
+ this.handleSpanEnd({
184
+ runId,
185
+ attributes: {
186
+ output: finalOutput,
187
+ },
188
+ });
189
+ this.deregisterLangfusePrompt(runId);
190
+ }
191
+ catch (e) {
192
+ console.debug(e instanceof Error ? e.message : String(e));
193
+ }
194
+ }
195
+ async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
196
+ try {
197
+ console.debug(`LLM start with ID: ${runId}`);
198
+ this.handleGenerationStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name);
199
+ }
200
+ catch (e) {
201
+ console.debug(e instanceof Error ? e.message : String(e));
202
+ }
203
+ }
204
+ async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
205
+ try {
206
+ console.debug(`Tool start with ID: ${runId}`);
207
+ this.startAndRegisterSpan({
208
+ runId,
209
+ parentRunId,
210
+ runName: name ?? tool.id.at(-1)?.toString() ?? "Tool execution",
211
+ attributes: {
212
+ input,
213
+ },
214
+ metadata,
215
+ tags,
216
+ });
217
+ }
218
+ catch (e) {
219
+ console.debug(e instanceof Error ? e.message : String(e));
220
+ }
221
+ }
222
+ async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
223
+ try {
224
+ console.debug(`Retriever start with ID: ${runId}`);
225
+ this.startAndRegisterSpan({
226
+ runId,
227
+ parentRunId,
228
+ runName: name ?? retriever.id.at(-1)?.toString() ?? "Retriever",
229
+ attributes: {
230
+ input: query,
231
+ },
232
+ tags,
233
+ metadata,
234
+ });
235
+ }
236
+ catch (e) {
237
+ console.debug(e instanceof Error ? e.message : String(e));
238
+ }
239
+ }
240
+ async handleRetrieverEnd(documents, runId, _parentRunId) {
241
+ try {
242
+ console.debug(`Retriever end with ID: ${runId}`);
243
+ this.handleSpanEnd({
244
+ runId,
245
+ attributes: {
246
+ output: documents,
247
+ },
248
+ });
249
+ }
250
+ catch (e) {
251
+ console.debug(e instanceof Error ? e.message : String(e));
252
+ }
253
+ }
254
+ async handleRetrieverError(err, runId, _parentRunId) {
255
+ try {
256
+ console.debug(`Retriever error: ${err} with ID: ${runId}`);
257
+ this.handleSpanEnd({
258
+ runId,
259
+ attributes: {
260
+ level: "ERROR",
261
+ statusMessage: err.toString(),
262
+ },
263
+ });
264
+ }
265
+ catch (e) {
266
+ console.debug(e instanceof Error ? e.message : String(e));
267
+ }
268
+ }
269
+ async handleToolEnd(output, runId, _parentRunId) {
270
+ try {
271
+ console.debug(`Tool end with ID: ${runId}`);
272
+ this.handleSpanEnd({
273
+ runId,
274
+ attributes: { output },
275
+ });
276
+ }
277
+ catch (e) {
278
+ console.debug(e instanceof Error ? e.message : String(e));
279
+ }
280
+ }
281
+ async handleToolError(err, runId, _parentRunId) {
282
+ try {
283
+ console.debug(`Tool error ${err} with ID: ${runId}`);
284
+ this.handleSpanEnd({
285
+ runId,
286
+ attributes: {
287
+ level: "ERROR",
288
+ statusMessage: err.toString(),
289
+ },
290
+ });
291
+ }
292
+ catch (e) {
293
+ console.debug(e instanceof Error ? e.message : String(e));
294
+ }
295
+ }
296
+ async handleLLMEnd(output, runId, _parentRunId) {
297
+ try {
298
+ console.debug(`LLM end with ID: ${runId}`);
299
+ const lastResponse = output.generations[output.generations.length - 1][output.generations[output.generations.length - 1].length - 1];
300
+ const llmUsage = this.extractUsageMetadata(lastResponse) ??
301
+ output.llmOutput?.["tokenUsage"];
302
+ const modelName = this.extractModelNameFromMetadata(lastResponse);
303
+ const usageDetails = {
304
+ input: llmUsage?.input_tokens ??
305
+ ("promptTokens" in llmUsage ? llmUsage?.promptTokens : undefined),
306
+ output: llmUsage?.output_tokens ??
307
+ ("completionTokens" in llmUsage
308
+ ? llmUsage?.completionTokens
309
+ : undefined),
310
+ total: llmUsage?.total_tokens ??
311
+ ("totalTokens" in llmUsage ? llmUsage?.totalTokens : undefined),
312
+ };
313
+ if (llmUsage && "input_token_details" in llmUsage) {
314
+ for (const [key, val] of Object.entries(llmUsage["input_token_details"] ?? {})) {
315
+ usageDetails[`input_${key}`] = val;
316
+ if ("input" in usageDetails && typeof val === "number") {
317
+ usageDetails["input"] = Math.max(0, usageDetails["input"] - val);
318
+ }
319
+ }
320
+ }
321
+ if (llmUsage && "output_token_details" in llmUsage) {
322
+ for (const [key, val] of Object.entries(llmUsage["output_token_details"] ?? {})) {
323
+ usageDetails[`output_${key}`] = val;
324
+ if ("output" in usageDetails && typeof val === "number") {
325
+ usageDetails["output"] = Math.max(0, usageDetails["output"] - val);
326
+ }
327
+ }
328
+ }
329
+ const extractedOutput = "message" in lastResponse
330
+ ? this.extractChatMessageContent(lastResponse["message"])
331
+ : lastResponse.text;
332
+ this.handleSpanEnd({
333
+ runId,
334
+ attributes: {
335
+ model: modelName,
336
+ output: extractedOutput,
337
+ completionStartTime: runId in this.completionStartTimes
338
+ ? this.completionStartTimes[runId]
339
+ : undefined,
340
+ usageDetails: usageDetails,
341
+ },
342
+ });
343
+ if (runId in this.completionStartTimes) {
344
+ delete this.completionStartTimes[runId];
345
+ }
346
+ }
347
+ catch (e) {
348
+ console.debug(e instanceof Error ? e.message : String(e));
349
+ }
350
+ }
351
+ async handleLLMError(err, runId, _parentRunId) {
352
+ try {
353
+ console.debug(`LLM error ${err} with ID: ${runId}`);
354
+ const azureRefusalError = this.parseAzureRefusalError(err);
355
+ this.handleSpanEnd({
356
+ runId,
357
+ attributes: {
358
+ level: "ERROR",
359
+ statusMessage: err.toString() + azureRefusalError,
360
+ },
361
+ });
362
+ }
363
+ catch (e) {
364
+ console.debug(e instanceof Error ? e.message : String(e));
365
+ }
366
+ }
367
+ registerLangfusePrompt(parentRunId, metadata) {
368
+ if (metadata && "langfusePrompt" in metadata && parentRunId) {
369
+ this.promptToParentRunMap.set(parentRunId, metadata.langfusePrompt);
370
+ }
371
+ }
372
+ deregisterLangfusePrompt(runId) {
373
+ this.promptToParentRunMap.delete(runId);
374
+ }
375
+ startAndRegisterSpan(params) {
376
+ const { runName, runId, attributes, metadata, tags } = params;
377
+ const span = this.tracer.startSpan(runName, {
378
+ attributes: {
379
+ ...attributes,
380
+ ...this.joinTagsAndMetaData(tags, metadata)
381
+ }
382
+ });
383
+ this.runMap.set(runId, span);
384
+ return span;
385
+ }
386
+ handleSpanEnd(params) {
387
+ const { runId, attributes = {} } = params;
388
+ const span = this.runMap.get(runId);
389
+ if (!span) {
390
+ console.warn("Span not found in runMap. Skipping operation");
391
+ return;
392
+ }
393
+ for (const [key, value] of Object.entries(attributes)) {
394
+ span.setAttribute(key, value);
395
+ }
396
+ span.end();
397
+ this.runMap.delete(runId);
398
+ }
399
+ parseAzureRefusalError(err) {
400
+ let azureRefusalError = "";
401
+ if (typeof err == "object" && "error" in err) {
402
+ try {
403
+ azureRefusalError =
404
+ "\n\nError details:\n" + JSON.stringify(err["error"], null, 2);
405
+ }
406
+ catch { }
407
+ }
408
+ return azureRefusalError;
409
+ }
410
+ joinTagsAndMetaData(tags, metadata1, metadata2) {
411
+ const finalDict = {};
412
+ if (tags && tags.length > 0) {
413
+ finalDict.tags = tags;
414
+ }
415
+ if (metadata1) {
416
+ Object.assign(finalDict, metadata1);
417
+ }
418
+ if (metadata2) {
419
+ Object.assign(finalDict, metadata2);
420
+ }
421
+ return this.stripLangfuseKeysFromMetadata(finalDict);
422
+ }
423
+ stripLangfuseKeysFromMetadata(metadata) {
424
+ if (!metadata) {
425
+ return;
426
+ }
427
+ const langfuseKeys = [
428
+ "langfusePrompt",
429
+ "langfuseUserId",
430
+ "langfuseSessionId",
431
+ ];
432
+ return Object.fromEntries(Object.entries(metadata).filter(([key, _]) => !langfuseKeys.includes(key)));
433
+ }
434
+ extractUsageMetadata(generation) {
435
+ try {
436
+ const usageMetadata = "message" in generation &&
437
+ (generation["message"] instanceof messages_1.AIMessage ||
438
+ generation["message"] instanceof messages_1.AIMessageChunk)
439
+ ? generation["message"].usage_metadata
440
+ : undefined;
441
+ return usageMetadata;
442
+ }
443
+ catch (err) {
444
+ console.debug(`Error extracting usage metadata: ${err}`);
445
+ return;
446
+ }
447
+ }
448
+ extractModelNameFromMetadata(generation) {
449
+ try {
450
+ return "message" in generation &&
451
+ (generation["message"] instanceof messages_1.AIMessage ||
452
+ generation["message"] instanceof messages_1.AIMessageChunk)
453
+ ? generation["message"].response_metadata.model_name
454
+ : undefined;
455
+ }
456
+ catch {
457
+ return undefined;
458
+ }
459
+ }
460
+ extractChatMessageContent(message) {
461
+ let response = undefined;
462
+ if (message.getType() === "human") {
463
+ response = { content: message.content, role: "user" };
464
+ }
465
+ else if (message.getType() === "generic") {
466
+ response = {
467
+ content: message.content,
468
+ role: "human",
469
+ };
470
+ }
471
+ else if (message.getType() === "ai") {
472
+ response = { content: message.content, role: "assistant" };
473
+ if ("tool_calls" in message &&
474
+ Array.isArray(message.tool_calls) &&
475
+ (message.tool_calls?.length ?? 0) > 0) {
476
+ response[`tool_calls`] = message[`tool_calls`];
477
+ }
478
+ if ("additional_kwargs" in message &&
479
+ "tool_calls" in message["additional_kwargs"]) {
480
+ response[`tool_calls`] =
481
+ message["additional_kwargs"]["tool_calls"];
482
+ }
483
+ }
484
+ else if (message.getType() === "system") {
485
+ response = { content: message.content, role: "system" };
486
+ }
487
+ else if (message.getType() === "function") {
488
+ response = {
489
+ content: message.content,
490
+ additional_kwargs: message.additional_kwargs,
491
+ role: message.name,
492
+ };
493
+ }
494
+ else if (message.getType() === "tool") {
495
+ response = {
496
+ content: message.content,
497
+ additional_kwargs: message.additional_kwargs,
498
+ role: message.name,
499
+ };
500
+ }
501
+ else if (!message.name) {
502
+ response = { content: message.content };
503
+ }
504
+ else {
505
+ response = {
506
+ role: message.name,
507
+ content: message.content,
508
+ };
509
+ }
510
+ if ((message.additional_kwargs.function_call ||
511
+ message.additional_kwargs.tool_calls) &&
512
+ response[`tool_calls`] === undefined) {
513
+ return { ...response, additional_kwargs: message.additional_kwargs };
514
+ }
515
+ return response;
516
+ }
517
+ }
518
+ exports.TracciaCallbackHandlerNew = TracciaCallbackHandlerNew;
519
+ //# sourceMappingURL=langchain-callback.new.js.map