@countly/ai-sdk-llamaindex 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,69 @@
1
+ # @countly/ai-sdk-llamaindex
2
+
3
+ > Countly AI observability adapter for [LlamaIndex.TS](https://github.com/run-llama/LlamaIndexTS).
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-llamaindex
11
+ ```
12
+
13
+ `@countly/ai-sdk-core` is pulled in automatically.
14
+
15
+ ## Peer dependency
16
+
17
+ ```
18
+ llamaindex >= 0.8.0
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ ```typescript
24
+ import { Settings } from "llamaindex";
25
+ import { CountlyLlamaIndexTracer } from "@countly/ai-sdk-llamaindex";
26
+ import { AsyncLocalStorage } from "node:async_hooks";
27
+
28
+ const userStore = new AsyncLocalStorage<{ userId: string }>();
29
+
30
+ app.use((req, res, next) => {
31
+ userStore.run({ userId: req.user.id }, next);
32
+ });
33
+
34
+ const tracer = new CountlyLlamaIndexTracer({
35
+ appKey: "YOUR_APP_KEY",
36
+ url: "https://your-countly-server.com",
37
+ getDeviceId: () => userStore.getStore()?.userId,
38
+ });
39
+
40
+ // Attach to LlamaIndex's callback manager
41
+ tracer.register(Settings.callbackManager);
42
+ ```
43
+
44
+ The tracer listens to `llm-start`, `llm-end`, `llm-tool-call`, and `llm-tool-result` events on the dispatcher.
45
+
46
+ ## What's captured
47
+
48
+ - LLM start/end lifecycle (latency, tokens, model) — supports both snake_case and camelCase token fields
49
+ - Tool call lifecycle (name, arguments, status, latency)
50
+ - Multiple event format support across LlamaIndex versions
51
+ - Concurrent call tracking
52
+ - Error tracking with categorization
53
+ - Per-user aggregation
54
+
55
+ ## Flush before shutdown
56
+
57
+ ```typescript
58
+ await tracer.flush(); // send buffered events
59
+ await tracer.shutdown(); // flush + stop the transport
60
+ tracer.unregister(Settings.callbackManager); // detach handlers
61
+ ```
62
+
63
+ ## Full documentation
64
+
65
+ 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).
66
+
67
+ ## License
68
+
69
+ MIT
@@ -0,0 +1,80 @@
1
+ import { type CountlyAIConfig } from "@countly/ai-sdk-core";
2
+ /**
3
+ * Mirrors `LlamaIndexCustomEvent<T>` — a CustomEvent whose payload
4
+ * lives in `.detail`.
5
+ */
6
+ interface LlamaIndexCustomEvent<T = unknown> {
7
+ type: string;
8
+ detail: T;
9
+ reason?: unknown;
10
+ }
11
+ /**
12
+ * Minimal CallbackManager interface (subset of the real one).
13
+ */
14
+ interface CallbackManager {
15
+ on(event: string, handler: (event: LlamaIndexCustomEvent<any>) => void): CallbackManager;
16
+ off(event: string, handler: (event: LlamaIndexCustomEvent<any>) => void): CallbackManager;
17
+ }
18
+ /**
19
+ * Countly AI observability integration for LlamaIndex.
20
+ *
21
+ * Usage:
22
+ * ```ts
23
+ * import { Settings } from "llamaindex";
24
+ * import { CountlyLlamaIndexTracer } from "@countly/ai-sdk-llamaindex";
25
+ *
26
+ * const tracer = new CountlyLlamaIndexTracer({ appKey: "…", url: "…" });
27
+ * tracer.register(Settings.callbackManager);
28
+ * ```
29
+ */
30
+ export declare class CountlyLlamaIndexTracer {
31
+ private readonly config;
32
+ private readonly transport;
33
+ /** Maps LLM call id → start info for latency tracking */
34
+ private readonly llmCalls;
35
+ /** Accumulates tool calls between llm-start and llm-end */
36
+ private readonly pendingTools;
37
+ private readonly completedTools;
38
+ readonly handleLLMStart: (event: LlamaIndexCustomEvent<any>) => void;
39
+ readonly handleLLMEnd: (event: LlamaIndexCustomEvent<any>) => void;
40
+ readonly handleToolCall: (event: LlamaIndexCustomEvent<any>) => void;
41
+ readonly handleToolResult: (event: LlamaIndexCustomEvent<any>) => void;
42
+ constructor(userConfig: CountlyAIConfig);
43
+ /**
44
+ * Register all handlers on the given CallbackManager.
45
+ * Typically: `tracer.register(Settings.callbackManager)`
46
+ */
47
+ register(callbackManager: CallbackManager): void;
48
+ /**
49
+ * Unregister all handlers from the given CallbackManager.
50
+ */
51
+ unregister(callbackManager: CallbackManager): void;
52
+ /** Flush any buffered events. */
53
+ flush(): Promise<void>;
54
+ /** Shut down the transport, flushing remaining events. */
55
+ shutdown(): Promise<void>;
56
+ /**
57
+ * llm-start: { id: UUID, messages: ChatMessage[] }
58
+ */
59
+ private _onLLMStart;
60
+ /**
61
+ * llm-end: { id: UUID, response: ChatResponse }
62
+ * ChatResponse = { message: ChatMessage, raw: object | null }
63
+ * Tokens live in raw.usage (provider-specific).
64
+ */
65
+ private _onLLMEnd;
66
+ /**
67
+ * llm-tool-call: { toolCall: ToolCall }
68
+ * ToolCall = { name: string, input: JSONObject, id: string }
69
+ */
70
+ private _onToolCall;
71
+ /**
72
+ * llm-tool-result: { toolCall: ToolCall, toolResult: ToolOutput }
73
+ * ToolOutput = { tool, input, output, isError }
74
+ */
75
+ private _onToolResult;
76
+ }
77
+ /** @deprecated Use `CountlyLlamaIndexTracer` instead */
78
+ export declare const CountlyEventHandler: typeof CountlyLlamaIndexTracer;
79
+ export {};
80
+ //# 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,EAKrB,MAAM,sBAAsB,CAAC;AAQ9B;;;GAGG;AACH,UAAU,qBAAqB,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,eAAe,CAAC;IACzF,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,eAAe,CAAC;CAC3F;AAsBD;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAGpD,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;gBAE3D,UAAU,EAAE,eAAe;IAavC;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAOhD;;OAEG;IACH,UAAU,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAOlD,iCAAiC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,0DAA0D;IACpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IA0EjB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAiBnB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAqBtB;AAGD,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,gCAA0B,CAAC"}
@@ -0,0 +1,212 @@
1
+ import { resolveConfig, createTransport, buildAllEvents, generatePromptId, inferProviderFromModel, } from "@countly/ai-sdk-core";
2
+ /* ------------------------------------------------------------------ */
3
+ /* CountlyLlamaIndexTracer */
4
+ /* ------------------------------------------------------------------ */
5
+ /**
6
+ * Countly AI observability integration for LlamaIndex.
7
+ *
8
+ * Usage:
9
+ * ```ts
10
+ * import { Settings } from "llamaindex";
11
+ * import { CountlyLlamaIndexTracer } from "@countly/ai-sdk-llamaindex";
12
+ *
13
+ * const tracer = new CountlyLlamaIndexTracer({ appKey: "…", url: "…" });
14
+ * tracer.register(Settings.callbackManager);
15
+ * ```
16
+ */
17
+ export class CountlyLlamaIndexTracer {
18
+ config;
19
+ transport;
20
+ /** Maps LLM call id → start info for latency tracking */
21
+ llmCalls = new Map();
22
+ /** Accumulates tool calls between llm-start and llm-end */
23
+ pendingTools = new Map();
24
+ completedTools = [];
25
+ /* Bound handler references (needed for off()) */
26
+ handleLLMStart;
27
+ handleLLMEnd;
28
+ handleToolCall;
29
+ handleToolResult;
30
+ constructor(userConfig) {
31
+ this.config = resolveConfig(userConfig);
32
+ this.transport = createTransport(this.config);
33
+ // Bind handlers so they can be passed to on()/off()
34
+ this.handleLLMStart = this._onLLMStart.bind(this);
35
+ this.handleLLMEnd = this._onLLMEnd.bind(this);
36
+ this.handleToolCall = this._onToolCall.bind(this);
37
+ this.handleToolResult = this._onToolResult.bind(this);
38
+ }
39
+ /* ── Public API ─────────────────────────────────────────────────── */
40
+ /**
41
+ * Register all handlers on the given CallbackManager.
42
+ * Typically: `tracer.register(Settings.callbackManager)`
43
+ */
44
+ register(callbackManager) {
45
+ callbackManager.on("llm-start", this.handleLLMStart);
46
+ callbackManager.on("llm-end", this.handleLLMEnd);
47
+ callbackManager.on("llm-tool-call", this.handleToolCall);
48
+ callbackManager.on("llm-tool-result", this.handleToolResult);
49
+ }
50
+ /**
51
+ * Unregister all handlers from the given CallbackManager.
52
+ */
53
+ unregister(callbackManager) {
54
+ callbackManager.off("llm-start", this.handleLLMStart);
55
+ callbackManager.off("llm-end", this.handleLLMEnd);
56
+ callbackManager.off("llm-tool-call", this.handleToolCall);
57
+ callbackManager.off("llm-tool-result", this.handleToolResult);
58
+ }
59
+ /** Flush any buffered events. */
60
+ async flush() {
61
+ await this.transport.flush();
62
+ }
63
+ /** Shut down the transport, flushing remaining events. */
64
+ async shutdown() {
65
+ await this.transport.shutdown();
66
+ }
67
+ /* ── Event handlers ─────────────────────────────────────────────── */
68
+ /**
69
+ * llm-start: { id: UUID, messages: ChatMessage[] }
70
+ */
71
+ _onLLMStart(event) {
72
+ const detail = event?.detail;
73
+ if (!detail)
74
+ return;
75
+ const id = detail.id ?? generatePromptId();
76
+ const messages = detail.messages ?? [];
77
+ // Capture last user/assistant message as input text (skip system/tool roles)
78
+ let input;
79
+ for (let i = messages.length - 1; i >= 0; i--) {
80
+ const role = messages[i]?.role;
81
+ if (role === "system" || role === "tool")
82
+ continue;
83
+ const content = messages[i]?.content;
84
+ if (typeof content === "string") {
85
+ input = content;
86
+ break;
87
+ }
88
+ }
89
+ this.llmCalls.set(id, {
90
+ startTime: Date.now(),
91
+ input,
92
+ });
93
+ }
94
+ /**
95
+ * llm-end: { id: UUID, response: ChatResponse }
96
+ * ChatResponse = { message: ChatMessage, raw: object | null }
97
+ * Tokens live in raw.usage (provider-specific).
98
+ */
99
+ _onLLMEnd(event) {
100
+ const detail = event?.detail;
101
+ if (!detail)
102
+ return;
103
+ const id = detail.id ?? "";
104
+ const call = this.llmCalls.get(id);
105
+ const now = Date.now();
106
+ const latency = call ? now - call.startTime : 0;
107
+ const response = detail.response ?? {};
108
+ const raw = response.raw ?? {};
109
+ const usage = raw.usage ?? {};
110
+ // Text output from ChatResponse.message.content
111
+ const messageContent = response.message?.content;
112
+ const textOutput = typeof messageContent === "string"
113
+ ? messageContent
114
+ : undefined;
115
+ // Model from raw (provider-specific, e.g. OpenAI returns raw.model)
116
+ const model = raw.model ?? "unknown";
117
+ // Token extraction — handle both snake_case and camelCase
118
+ const usageInput = usage.prompt_tokens ?? usage.promptTokens ?? usage.input_tokens ?? usage.inputTokens ?? 0;
119
+ const usageOutput = usage.completion_tokens ?? usage.completionTokens ?? usage.output_tokens ?? usage.outputTokens ?? 0;
120
+ const usageTotal = usage.total_tokens ?? usage.totalTokens ?? (usageInput + usageOutput);
121
+ // Collect completed tools
122
+ const tools = this.completedTools.splice(0);
123
+ // Provider-specific orphan fields → metadata bag.
124
+ const meta = {};
125
+ const sourceNodes = response?.sourceNodes;
126
+ if (Array.isArray(sourceNodes) && sourceNodes.length > 0) {
127
+ meta.source_nodes = sourceNodes.map((n) => ({
128
+ score: n?.score,
129
+ node_id: n?.node?.id_ ?? n?.node?.nodeId ?? n?.node?.id,
130
+ metadata: n?.node?.metadata,
131
+ }));
132
+ }
133
+ if (raw?.system_fingerprint)
134
+ meta.system_fingerprint = raw.system_fingerprint;
135
+ if (raw?.service_tier)
136
+ meta.service_tier = raw.service_tier;
137
+ const extraction = {
138
+ model,
139
+ // Report the real vendor inferred from the model id; fall back to the
140
+ // framework name only when the vendor can't be determined.
141
+ provider: inferProviderFromModel(model) ?? "llamaindex",
142
+ usage_input: usageInput,
143
+ usage_output: usageOutput,
144
+ usage_total: usageTotal,
145
+ finish_reason: raw.choices?.[0]?.finish_reason,
146
+ text_input: call?.input,
147
+ text_output: textOutput,
148
+ latency_total: latency,
149
+ status: "success",
150
+ ...(tools.length > 0 ? { tools } : {}),
151
+ // Trace identity: LlamaIndex callbacks expose an `id` per LLM call.
152
+ ...(id && { trace_id: String(id), span_id: String(id) }),
153
+ ...(raw?.id && { response_id: String(raw.id) }),
154
+ ...(raw?.model && { response_model: String(raw.model) }),
155
+ ...(Object.keys(meta).length > 0 && { provider_metadata: meta }),
156
+ };
157
+ const promptId = generatePromptId();
158
+ const context = { prompt_id: promptId, sdk_adapter: "llamaindex" };
159
+ const events = buildAllEvents(extraction, this.config, context);
160
+ this.transport.enqueue(events);
161
+ this.transport.reportTrace(extraction, context);
162
+ this.transport.reportUserData(extraction);
163
+ this.llmCalls.delete(id);
164
+ }
165
+ /**
166
+ * llm-tool-call: { toolCall: ToolCall }
167
+ * ToolCall = { name: string, input: JSONObject, id: string }
168
+ */
169
+ _onToolCall(event) {
170
+ const detail = event?.detail;
171
+ if (!detail)
172
+ return;
173
+ const toolCall = detail.toolCall;
174
+ if (!toolCall)
175
+ return;
176
+ const toolId = toolCall.id ?? generatePromptId();
177
+ this.pendingTools.set(toolId, {
178
+ startTime: Date.now(),
179
+ name: toolCall.name ?? "unknown_tool",
180
+ input: typeof toolCall.input === "string"
181
+ ? toolCall.input
182
+ : JSON.stringify(toolCall.input),
183
+ });
184
+ }
185
+ /**
186
+ * llm-tool-result: { toolCall: ToolCall, toolResult: ToolOutput }
187
+ * ToolOutput = { tool, input, output, isError }
188
+ */
189
+ _onToolResult(event) {
190
+ const detail = event?.detail;
191
+ if (!detail)
192
+ return;
193
+ const toolCall = detail.toolCall;
194
+ const toolResult = detail.toolResult;
195
+ const toolId = toolCall?.id ?? "";
196
+ const pending = this.pendingTools.get(toolId);
197
+ const latency = pending ? Date.now() - pending.startTime : 0;
198
+ this.completedTools.push({
199
+ name: pending?.name ?? toolCall?.name ?? "unknown_tool",
200
+ type: "function_call",
201
+ arguments: typeof toolCall?.input === "object" ? toolCall.input : undefined,
202
+ status: toolResult?.isError ? "error" : "success",
203
+ error: toolResult?.isError ? String(toolResult.output) : undefined,
204
+ latency,
205
+ });
206
+ this.pendingTools.delete(toolId);
207
+ }
208
+ }
209
+ /* ── Backward-compat alias ──────────────────────────────────────────── */
210
+ /** @deprecated Use `CountlyLlamaIndexTracer` instead */
211
+ export const CountlyEventHandler = CountlyLlamaIndexTracer;
212
+ //# 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 { CountlyLlamaIndexTracer, CountlyEventHandler } 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,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CountlyLlamaIndexTracer, CountlyEventHandler } 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,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@countly/ai-sdk-llamaindex",
3
+ "version": "0.0.3",
4
+ "description": "Countly AI observability adapter for LlamaIndex",
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
+ "llamaindex": ">=0.8.0"
23
+ },
24
+ "peerDependenciesMeta": {
25
+ "llamaindex": {
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
+ }