@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 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"}
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export { CountlyCallbackHandler } from "./adapter";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { CountlyCallbackHandler } from "./adapter";
2
+ //# sourceMappingURL=index.js.map
@@ -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
+ }