@countly/ai-sdk-langchain 0.0.3
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 +73 -0
- package/dist/adapter.d.ts +34 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +122 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# @countly/ai-sdk-langchain
|
|
2
|
+
|
|
3
|
+
> Countly AI observability adapter for [LangChain](https://github.com/langchain-ai/langchainjs).
|
|
4
|
+
|
|
5
|
+
Part of the [Countly AI SDK](https://github.com/Countly/countly-ai-sdk) — provider-agnostic LLM observability for every AI stack.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @countly/ai-sdk-langchain
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`@countly/ai-sdk-core` is pulled in automatically.
|
|
14
|
+
|
|
15
|
+
## Peer dependency
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
@langchain/core >= 0.3.0
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { CountlyCallbackHandler } from "@countly/ai-sdk-langchain";
|
|
25
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
26
|
+
|
|
27
|
+
const userStore = new AsyncLocalStorage<{ userId: string }>();
|
|
28
|
+
|
|
29
|
+
app.use((req, res, next) => {
|
|
30
|
+
userStore.run({ userId: req.user.id }, next);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const handler = new CountlyCallbackHandler({
|
|
34
|
+
appKey: "YOUR_APP_KEY",
|
|
35
|
+
url: "https://your-countly-server.com",
|
|
36
|
+
getDeviceId: () => userStore.getStore()?.userId,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Works with any LangChain chain, agent, or LLM
|
|
40
|
+
const result = await chain.invoke(input, { callbacks: [handler] });
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## With ChatOpenAI
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
47
|
+
|
|
48
|
+
const llm = new ChatOpenAI({ model: "gpt-4o" });
|
|
49
|
+
const response = await llm.invoke("Hello", { callbacks: [handler] });
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## What's captured
|
|
53
|
+
|
|
54
|
+
- LLM start/end lifecycle (latency, tokens, model)
|
|
55
|
+
- Tool start/end lifecycle (name, duration)
|
|
56
|
+
- Error tracking (LLM errors and tool errors tracked separately)
|
|
57
|
+
- Concurrent run tracking (each `runId` tracked independently)
|
|
58
|
+
- Per-user aggregation
|
|
59
|
+
|
|
60
|
+
## Flush before shutdown
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
await handler.flush(); // send buffered events
|
|
64
|
+
await handler.shutdown(); // flush + stop the transport
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Full documentation
|
|
68
|
+
|
|
69
|
+
See the [Countly AI SDK repository](https://github.com/Countly/countly-ai-sdk) for the unified data model, observability levels, cost calculation, privacy controls, and Countly plugin integration (Drill, Funnels, Cohorts, APM, Crash Analytics).
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
MIT
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type CountlyAIConfig } from "@countly/ai-sdk-core";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal interface matching @langchain/core/callbacks/base BaseCallbackHandler.
|
|
4
|
+
* Defined inline to avoid a hard dependency on @langchain/core at compile time.
|
|
5
|
+
*/
|
|
6
|
+
interface BaseCallbackHandler {
|
|
7
|
+
name: string;
|
|
8
|
+
handleLLMStart?(llm: any, prompts: string[], runId: string, ...rest: any[]): void | Promise<void>;
|
|
9
|
+
handleLLMEnd?(output: any, runId: string, ...rest: any[]): void | Promise<void>;
|
|
10
|
+
handleLLMError?(err: Error, runId: string, ...rest: any[]): void | Promise<void>;
|
|
11
|
+
handleToolStart?(tool: any, input: string, runId: string, ...rest: any[]): void | Promise<void>;
|
|
12
|
+
handleToolEnd?(output: string, runId: string, ...rest: any[]): void | Promise<void>;
|
|
13
|
+
handleToolError?(err: Error, runId: string, ...rest: any[]): void | Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare class CountlyCallbackHandler implements BaseCallbackHandler {
|
|
16
|
+
readonly name = "countly-langchain";
|
|
17
|
+
private readonly config;
|
|
18
|
+
private readonly transport;
|
|
19
|
+
private readonly llmRuns;
|
|
20
|
+
private readonly toolRuns;
|
|
21
|
+
constructor(userConfig: CountlyAIConfig);
|
|
22
|
+
handleLLMStart(llm: any, prompts: string[], runId: string, parentRunId?: string, _extraParams?: Record<string, unknown>, tags?: string[], metadata?: Record<string, unknown>, runName?: string): void;
|
|
23
|
+
handleLLMEnd(output: any, runId: string): void;
|
|
24
|
+
handleLLMError(err: Error, runId: string): void;
|
|
25
|
+
handleToolStart(tool: any, input: string, runId: string): void;
|
|
26
|
+
handleToolEnd(output: string, runId: string): void;
|
|
27
|
+
handleToolError(err: Error, runId: string): void;
|
|
28
|
+
/** Flush any buffered events. */
|
|
29
|
+
flush(): Promise<void>;
|
|
30
|
+
/** Shut down the transport, flushing remaining events. */
|
|
31
|
+
shutdown(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,YAAY,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,eAAe,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAkBD,qBAAa,sBAAuB,YAAW,mBAAmB;IAChE,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,UAAU,EAAE,eAAe;IAKvC,cAAc,CACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAYP,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA+C9C,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA2B/C,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ9D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASlD,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,iCAAiC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,0DAA0D;IACpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { resolveConfig, createTransport, buildAllEvents, generatePromptId, inferProviderFromModel, } from "@countly/ai-sdk-core";
|
|
2
|
+
export class CountlyCallbackHandler {
|
|
3
|
+
name = "countly-langchain";
|
|
4
|
+
config;
|
|
5
|
+
transport;
|
|
6
|
+
llmRuns = new Map();
|
|
7
|
+
toolRuns = new Map();
|
|
8
|
+
constructor(userConfig) {
|
|
9
|
+
this.config = resolveConfig(userConfig);
|
|
10
|
+
this.transport = createTransport(this.config);
|
|
11
|
+
}
|
|
12
|
+
handleLLMStart(llm, prompts, runId, parentRunId, _extraParams, tags, metadata, runName) {
|
|
13
|
+
this.llmRuns.set(runId, {
|
|
14
|
+
startTime: Date.now(),
|
|
15
|
+
model: llm?.id?.[llm.id.length - 1] ?? llm?.name ?? undefined,
|
|
16
|
+
input: prompts?.[0],
|
|
17
|
+
parentRunId,
|
|
18
|
+
tags,
|
|
19
|
+
metadata,
|
|
20
|
+
runName,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
handleLLMEnd(output, runId) {
|
|
24
|
+
const run = this.llmRuns.get(runId);
|
|
25
|
+
const now = Date.now();
|
|
26
|
+
const latency = run ? now - run.startTime : 0;
|
|
27
|
+
const tokenUsage = output?.llmOutput?.tokenUsage ?? {};
|
|
28
|
+
const generation = output?.generations?.[0]?.[0];
|
|
29
|
+
// Provider-specific orphan fields → metadata bag.
|
|
30
|
+
const meta = {};
|
|
31
|
+
if (run?.tags && run.tags.length > 0)
|
|
32
|
+
meta.tags = run.tags;
|
|
33
|
+
if (run?.metadata && Object.keys(run.metadata).length > 0)
|
|
34
|
+
meta.metadata = run.metadata;
|
|
35
|
+
if (run?.runName)
|
|
36
|
+
meta.run_name = run.runName;
|
|
37
|
+
if (generation?.generationInfo)
|
|
38
|
+
meta.generation_info = generation.generationInfo;
|
|
39
|
+
if (output?.llmOutput && Object.keys(output.llmOutput).length > 0)
|
|
40
|
+
meta.llm_output = output.llmOutput;
|
|
41
|
+
const model = output?.llmOutput?.modelName ?? run?.model ?? "unknown";
|
|
42
|
+
const raw = {
|
|
43
|
+
model,
|
|
44
|
+
// Report the real vendor (openai/anthropic/…) inferred from the model id,
|
|
45
|
+
// falling back to the framework name only when the vendor is unknown.
|
|
46
|
+
provider: inferProviderFromModel(model) ?? "langchain",
|
|
47
|
+
usage_input: tokenUsage.promptTokens ?? 0,
|
|
48
|
+
usage_output: tokenUsage.completionTokens ?? 0,
|
|
49
|
+
usage_total: tokenUsage.totalTokens ?? 0,
|
|
50
|
+
finish_reason: generation?.generationInfo?.finish_reason,
|
|
51
|
+
text_input: run?.input,
|
|
52
|
+
text_output: generation?.text,
|
|
53
|
+
latency_total: latency,
|
|
54
|
+
status: "success",
|
|
55
|
+
// Trace identity: LangChain runId is the per-call trace identifier; parentRunId hierarchies into agent chains.
|
|
56
|
+
trace_id: runId,
|
|
57
|
+
span_id: runId,
|
|
58
|
+
...(run?.parentRunId && { parent_span_id: run.parentRunId }),
|
|
59
|
+
...(Object.keys(meta).length > 0 && { provider_metadata: meta }),
|
|
60
|
+
};
|
|
61
|
+
const promptId = generatePromptId();
|
|
62
|
+
const context = { prompt_id: promptId, sdk_adapter: "langchain" };
|
|
63
|
+
const events = buildAllEvents(raw, this.config, context);
|
|
64
|
+
this.transport.enqueue(events);
|
|
65
|
+
this.transport.reportTrace(raw, context);
|
|
66
|
+
this.transport.reportUserData(raw);
|
|
67
|
+
this.llmRuns.delete(runId);
|
|
68
|
+
}
|
|
69
|
+
handleLLMError(err, runId) {
|
|
70
|
+
const run = this.llmRuns.get(runId);
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
const latency = run ? now - run.startTime : 0;
|
|
73
|
+
const errModel = run?.model ?? "unknown";
|
|
74
|
+
const raw = {
|
|
75
|
+
model: errModel,
|
|
76
|
+
provider: inferProviderFromModel(errModel) ?? "langchain",
|
|
77
|
+
usage_input: 0,
|
|
78
|
+
usage_output: 0,
|
|
79
|
+
usage_total: 0,
|
|
80
|
+
text_input: run?.input,
|
|
81
|
+
latency_total: latency,
|
|
82
|
+
status: "error",
|
|
83
|
+
error: err.message,
|
|
84
|
+
};
|
|
85
|
+
const promptId = generatePromptId();
|
|
86
|
+
const context = { prompt_id: promptId, sdk_adapter: "langchain" };
|
|
87
|
+
const events = buildAllEvents(raw, this.config, context);
|
|
88
|
+
this.transport.enqueue(events);
|
|
89
|
+
this.transport.reportError(err, raw);
|
|
90
|
+
this.llmRuns.delete(runId);
|
|
91
|
+
}
|
|
92
|
+
handleToolStart(tool, input, runId) {
|
|
93
|
+
this.toolRuns.set(runId, {
|
|
94
|
+
startTime: Date.now(),
|
|
95
|
+
name: tool?.name ?? tool?.id?.[tool.id.length - 1] ?? "unknown_tool",
|
|
96
|
+
input,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
handleToolEnd(output, runId) {
|
|
100
|
+
const run = this.toolRuns.get(runId);
|
|
101
|
+
if (!run)
|
|
102
|
+
return;
|
|
103
|
+
// Tool events are tracked but not sent as standalone LLM interactions.
|
|
104
|
+
// They will be attached when part of an agent chain via handleLLMEnd.
|
|
105
|
+
this.toolRuns.delete(runId);
|
|
106
|
+
}
|
|
107
|
+
handleToolError(err, runId) {
|
|
108
|
+
const run = this.toolRuns.get(runId);
|
|
109
|
+
if (!run)
|
|
110
|
+
return;
|
|
111
|
+
this.toolRuns.delete(runId);
|
|
112
|
+
}
|
|
113
|
+
/** Flush any buffered events. */
|
|
114
|
+
async flush() {
|
|
115
|
+
await this.transport.flush();
|
|
116
|
+
}
|
|
117
|
+
/** Shut down the transport, flushing remaining events. */
|
|
118
|
+
async shutdown() {
|
|
119
|
+
await this.transport.shutdown();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@countly/ai-sdk-langchain",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Countly AI observability adapter for LangChain",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@countly/ai-sdk-core": "0.0.3"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"@langchain/core": ">=0.3.0"
|
|
23
|
+
},
|
|
24
|
+
"peerDependenciesMeta": {
|
|
25
|
+
"@langchain/core": {
|
|
26
|
+
"optional": false
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"typescript": "^5.8.3",
|
|
31
|
+
"@countly/ai-sdk-tsconfig": "0.0.0"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc --project tsconfig.build.json",
|
|
35
|
+
"dev": "tsc --project tsconfig.build.json --watch",
|
|
36
|
+
"lint": "tsc --noEmit",
|
|
37
|
+
"test": "vitest run"
|
|
38
|
+
}
|
|
39
|
+
}
|