@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 +2 -2
- package/dist/integrations/index.d.ts +1 -0
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +3 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/langchain-callback.new.d.ts +62 -0
- package/dist/integrations/langchain-callback.new.d.ts.map +1 -0
- package/dist/integrations/langchain-callback.new.js +519 -0
- package/dist/integrations/langchain-callback.new.js.map +1 -0
- package/package.json +1 -1
- package/src/integrations/index.ts +1 -0
- package/src/integrations/langchain-callback.new.ts +810 -0
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
|
|
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
|
|
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
|