@countly/ai-sdk-vercel 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 +70 -0
- package/dist/adapter.d.ts +64 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +196 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index.d.ts +3 -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,70 @@
|
|
|
1
|
+
# @countly/ai-sdk-vercel
|
|
2
|
+
|
|
3
|
+
> Countly AI observability adapter for the [Vercel AI SDK](https://github.com/vercel/ai).
|
|
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-vercel
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`@countly/ai-sdk-core` is pulled in automatically.
|
|
14
|
+
|
|
15
|
+
## Peer dependency
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
ai >= 4.0.0
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { countlyTelemetry } from "@countly/ai-sdk-vercel";
|
|
25
|
+
import { generateText } from "ai";
|
|
26
|
+
import { openai } from "@ai-sdk/openai";
|
|
27
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
28
|
+
|
|
29
|
+
const userStore = new AsyncLocalStorage<{ userId: string }>();
|
|
30
|
+
|
|
31
|
+
app.use((req, res, next) => {
|
|
32
|
+
userStore.run({ userId: req.user.id }, next);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const telemetry = countlyTelemetry({
|
|
36
|
+
appKey: "YOUR_APP_KEY",
|
|
37
|
+
url: "https://your-countly-server.com",
|
|
38
|
+
getDeviceId: () => userStore.getStore()?.userId,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const { text } = await generateText({
|
|
42
|
+
model: openai("gpt-4o"),
|
|
43
|
+
prompt: "Explain quantum computing",
|
|
44
|
+
experimental_telemetry: { integrations: [telemetry] },
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## What's captured
|
|
49
|
+
|
|
50
|
+
- Token usage (input, output, reasoning, cached) — uses `totalUsage` to aggregate multi-step calls when available
|
|
51
|
+
- Model, provider, finish reason
|
|
52
|
+
- Latency (total)
|
|
53
|
+
- Tool calls and results
|
|
54
|
+
- Reasoning text (when the model returns it)
|
|
55
|
+
- Error tracking
|
|
56
|
+
|
|
57
|
+
## Flush before shutdown
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
await telemetry.flush(); // send buffered events
|
|
61
|
+
await telemetry.shutdown(); // flush + stop the transport
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Full documentation
|
|
65
|
+
|
|
66
|
+
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).
|
|
67
|
+
|
|
68
|
+
## License
|
|
69
|
+
|
|
70
|
+
MIT
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type CountlyAIConfig } from "@countly/ai-sdk-core";
|
|
2
|
+
/**
|
|
3
|
+
* The shape our factory returns. Consumers pass it into
|
|
4
|
+
* `experimental_telemetry: { integrations: [telemetry] }`.
|
|
5
|
+
*
|
|
6
|
+
* Matches the AI SDK `Telemetry` interface (callback-based).
|
|
7
|
+
*/
|
|
8
|
+
export interface CountlyTelemetryIntegration {
|
|
9
|
+
onStart?: (event: any) => void;
|
|
10
|
+
onStepFinish?: (event: any) => void;
|
|
11
|
+
onFinish?: (event: any) => void;
|
|
12
|
+
onError?: (error: unknown) => void;
|
|
13
|
+
/** Flush pending events. */
|
|
14
|
+
flush(): Promise<void>;
|
|
15
|
+
/** Shutdown transport. */
|
|
16
|
+
shutdown(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a Countly telemetry integration for the Vercel AI SDK (v4+).
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { countlyTelemetry } from "@countly/ai-sdk-vercel";
|
|
24
|
+
* import { generateText } from "ai";
|
|
25
|
+
*
|
|
26
|
+
* const telemetry = countlyTelemetry({
|
|
27
|
+
* appKey: "YOUR_APP_KEY",
|
|
28
|
+
* url: "https://your-countly.com",
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* const { text } = await generateText({
|
|
32
|
+
* model: openai("gpt-4o"),
|
|
33
|
+
* prompt: "Hello",
|
|
34
|
+
* experimental_telemetry: { integrations: [telemetry] },
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function countlyTelemetry(userConfig: CountlyAIConfig): CountlyTelemetryIntegration;
|
|
39
|
+
/**
|
|
40
|
+
* Class-based wrapper around `countlyTelemetry()`.
|
|
41
|
+
* Provides the same Telemetry integration via a class constructor.
|
|
42
|
+
*/
|
|
43
|
+
export declare class CountlyTelemetry {
|
|
44
|
+
private readonly integration;
|
|
45
|
+
constructor(userConfig: CountlyAIConfig);
|
|
46
|
+
/** Returns the integration object for use with AI SDK. */
|
|
47
|
+
asIntegration(): CountlyTelemetryIntegration;
|
|
48
|
+
flush(): Promise<void>;
|
|
49
|
+
shutdown(): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated The AI SDK no longer uses OTel SpanProcessor.
|
|
53
|
+
* Use `countlyTelemetry()` or `CountlyTelemetry` instead.
|
|
54
|
+
*
|
|
55
|
+
* This class is a no-op stub kept for backward compatibility.
|
|
56
|
+
*/
|
|
57
|
+
export declare class CountlySpanProcessor {
|
|
58
|
+
constructor(_userConfig: CountlyAIConfig);
|
|
59
|
+
onStart(_span: any, _parentContext?: any): void;
|
|
60
|
+
onEnd(_span: any): void;
|
|
61
|
+
forceFlush(): Promise<void>;
|
|
62
|
+
shutdown(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAKrB,MAAM,sBAAsB,CAAC;AAqD9B;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAyED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,eAAe,GAC1B,2BAA2B,CAmF7B;AAMD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,UAAU,EAAE,eAAe;IAIvC,0DAA0D;IAC1D,aAAa,IAAI,2BAA2B;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAMD;;;;;GAKG;AACH,qBAAa,oBAAoB;gBACnB,WAAW,EAAE,eAAe;IAQxC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,IAAI;IAC/C,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IACjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { resolveConfig, createTransport, buildAllEvents, generatePromptId, } from "@countly/ai-sdk-core";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Helpers
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
function mapToolCalls(toolCalls) {
|
|
6
|
+
if (!toolCalls || toolCalls.length === 0)
|
|
7
|
+
return undefined;
|
|
8
|
+
return toolCalls.map((tc) => ({
|
|
9
|
+
name: tc.toolName ?? "unknown",
|
|
10
|
+
type: "function_call",
|
|
11
|
+
arguments: tc.input,
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
function mapEventToExtraction(event, durationMs = 0) {
|
|
15
|
+
const usage = event.usage ?? {};
|
|
16
|
+
const inputTokens = usage.inputTokens ?? 0;
|
|
17
|
+
const outputTokens = usage.outputTokens ?? 0;
|
|
18
|
+
const cacheRead = usage.inputTokenDetails?.cacheReadTokens ??
|
|
19
|
+
usage.cachedInputTokens;
|
|
20
|
+
const cacheWrite = usage.inputTokenDetails?.cacheWriteTokens;
|
|
21
|
+
const reasoning = usage.outputTokenDetails?.reasoningTokens ??
|
|
22
|
+
usage.reasoningTokens;
|
|
23
|
+
// Provider-specific orphan fields → metadata bag.
|
|
24
|
+
const ev = event;
|
|
25
|
+
const meta = {};
|
|
26
|
+
if (ev.experimental_providerMetadata)
|
|
27
|
+
meta.experimental_providerMetadata = ev.experimental_providerMetadata;
|
|
28
|
+
if (ev.providerMetadata)
|
|
29
|
+
meta.providerMetadata = ev.providerMetadata;
|
|
30
|
+
if (ev.toolResults && ev.toolResults.length > 0)
|
|
31
|
+
meta.tool_results = ev.toolResults;
|
|
32
|
+
if (Array.isArray(ev.steps) && ev.steps.length > 0)
|
|
33
|
+
meta.steps_count = ev.steps.length;
|
|
34
|
+
if (ev.warnings && ev.warnings.length > 0)
|
|
35
|
+
meta.warnings = ev.warnings;
|
|
36
|
+
if (ev.sources && ev.sources.length > 0)
|
|
37
|
+
meta.sources = ev.sources;
|
|
38
|
+
if (ev.files && ev.files.length > 0)
|
|
39
|
+
meta.files = ev.files;
|
|
40
|
+
// Response identity: AI SDK returns nested response object on finish events.
|
|
41
|
+
const resp = ev.response ?? {};
|
|
42
|
+
return {
|
|
43
|
+
model: event.model?.modelId ?? "unknown",
|
|
44
|
+
provider: event.model?.provider ?? "unknown",
|
|
45
|
+
usage_input: inputTokens,
|
|
46
|
+
usage_output: outputTokens,
|
|
47
|
+
usage_total: inputTokens + outputTokens,
|
|
48
|
+
...(reasoning !== undefined && { usage_reasoning: reasoning }),
|
|
49
|
+
...(cacheRead !== undefined && { usage_cache_read: cacheRead }),
|
|
50
|
+
...(cacheWrite !== undefined && { usage_cache_write: cacheWrite }),
|
|
51
|
+
finish_reason: event.finishReason ?? undefined,
|
|
52
|
+
tools: mapToolCalls(event.toolCalls),
|
|
53
|
+
text_output: event.text || undefined,
|
|
54
|
+
...(event.reasoningText ? { text_reasoning: event.reasoningText } : {}),
|
|
55
|
+
latency_total: durationMs,
|
|
56
|
+
status: "success",
|
|
57
|
+
...(resp.id && { response_id: String(resp.id) }),
|
|
58
|
+
...(resp.modelId && { response_model: String(resp.modelId) }),
|
|
59
|
+
...(Array.isArray(ev.steps) && ev.steps.length > 0 && { step_count: ev.steps.length }),
|
|
60
|
+
...(Object.keys(meta).length > 0 && { provider_metadata: meta }),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Factory
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* Creates a Countly telemetry integration for the Vercel AI SDK (v4+).
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { countlyTelemetry } from "@countly/ai-sdk-vercel";
|
|
72
|
+
* import { generateText } from "ai";
|
|
73
|
+
*
|
|
74
|
+
* const telemetry = countlyTelemetry({
|
|
75
|
+
* appKey: "YOUR_APP_KEY",
|
|
76
|
+
* url: "https://your-countly.com",
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* const { text } = await generateText({
|
|
80
|
+
* model: openai("gpt-4o"),
|
|
81
|
+
* prompt: "Hello",
|
|
82
|
+
* experimental_telemetry: { integrations: [telemetry] },
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export function countlyTelemetry(userConfig) {
|
|
87
|
+
const config = resolveConfig(userConfig);
|
|
88
|
+
const transport = createTransport(config);
|
|
89
|
+
// Track start timestamps per callId for latency calculation
|
|
90
|
+
const callStartTimes = new Map();
|
|
91
|
+
const integration = {
|
|
92
|
+
onStart(event) {
|
|
93
|
+
if (event.callId) {
|
|
94
|
+
callStartTimes.set(event.callId, Date.now());
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
onStepFinish(event) {
|
|
98
|
+
// We let onFinish handle the top-level reporting.
|
|
99
|
+
// onStepFinish can be used for per-step granularity in the future.
|
|
100
|
+
},
|
|
101
|
+
onFinish(event) {
|
|
102
|
+
const startTime = event.callId
|
|
103
|
+
? callStartTimes.get(event.callId)
|
|
104
|
+
: undefined;
|
|
105
|
+
const durationMs = startTime ? Date.now() - startTime : 0;
|
|
106
|
+
// Clean up
|
|
107
|
+
if (event.callId) {
|
|
108
|
+
callStartTimes.delete(event.callId);
|
|
109
|
+
}
|
|
110
|
+
// Use totalUsage if available (aggregated across all steps),
|
|
111
|
+
// otherwise fall back to the event's per-step usage.
|
|
112
|
+
const effectiveEvent = event.totalUsage
|
|
113
|
+
? { ...event, usage: event.totalUsage }
|
|
114
|
+
: event;
|
|
115
|
+
const raw = mapEventToExtraction(effectiveEvent, durationMs);
|
|
116
|
+
const context = {
|
|
117
|
+
prompt_id: generatePromptId(),
|
|
118
|
+
sdk_adapter: "ai-sdk",
|
|
119
|
+
};
|
|
120
|
+
const events = buildAllEvents(raw, config, context);
|
|
121
|
+
if (events.length > 0) {
|
|
122
|
+
transport.enqueue(events);
|
|
123
|
+
}
|
|
124
|
+
transport.reportTrace(raw, context);
|
|
125
|
+
transport.reportUserData(raw);
|
|
126
|
+
},
|
|
127
|
+
onError(error) {
|
|
128
|
+
const raw = {
|
|
129
|
+
model: "unknown",
|
|
130
|
+
provider: "unknown",
|
|
131
|
+
usage_input: 0,
|
|
132
|
+
usage_output: 0,
|
|
133
|
+
usage_total: 0,
|
|
134
|
+
latency_total: 0,
|
|
135
|
+
status: "error",
|
|
136
|
+
error: error instanceof Error ? error.message : String(error),
|
|
137
|
+
};
|
|
138
|
+
const context = {
|
|
139
|
+
prompt_id: generatePromptId(),
|
|
140
|
+
sdk_adapter: "ai-sdk",
|
|
141
|
+
};
|
|
142
|
+
transport.reportError(raw.error, raw);
|
|
143
|
+
},
|
|
144
|
+
async flush() {
|
|
145
|
+
await transport.flush();
|
|
146
|
+
},
|
|
147
|
+
async shutdown() {
|
|
148
|
+
await transport.shutdown();
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
return integration;
|
|
152
|
+
}
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Class wrapper (alternative API)
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
/**
|
|
157
|
+
* Class-based wrapper around `countlyTelemetry()`.
|
|
158
|
+
* Provides the same Telemetry integration via a class constructor.
|
|
159
|
+
*/
|
|
160
|
+
export class CountlyTelemetry {
|
|
161
|
+
integration;
|
|
162
|
+
constructor(userConfig) {
|
|
163
|
+
this.integration = countlyTelemetry(userConfig);
|
|
164
|
+
}
|
|
165
|
+
/** Returns the integration object for use with AI SDK. */
|
|
166
|
+
asIntegration() {
|
|
167
|
+
return this.integration;
|
|
168
|
+
}
|
|
169
|
+
async flush() {
|
|
170
|
+
await this.integration.flush();
|
|
171
|
+
}
|
|
172
|
+
async shutdown() {
|
|
173
|
+
await this.integration.shutdown();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
// Deprecated: backward compatibility
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
/**
|
|
180
|
+
* @deprecated The AI SDK no longer uses OTel SpanProcessor.
|
|
181
|
+
* Use `countlyTelemetry()` or `CountlyTelemetry` instead.
|
|
182
|
+
*
|
|
183
|
+
* This class is a no-op stub kept for backward compatibility.
|
|
184
|
+
*/
|
|
185
|
+
export class CountlySpanProcessor {
|
|
186
|
+
constructor(_userConfig) {
|
|
187
|
+
console.warn("[@countly/ai-sdk-vercel] CountlySpanProcessor is deprecated. " +
|
|
188
|
+
"The Vercel AI SDK no longer uses OTel SpanProcessor. " +
|
|
189
|
+
"Use countlyTelemetry() instead.");
|
|
190
|
+
}
|
|
191
|
+
onStart(_span, _parentContext) { }
|
|
192
|
+
onEnd(_span) { }
|
|
193
|
+
async forceFlush() { }
|
|
194
|
+
async shutdown() { }
|
|
195
|
+
}
|
|
196
|
+
//# 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,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,2BAA2B,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,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@countly/ai-sdk-vercel",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Countly AI observability adapter for Vercel AI SDK",
|
|
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
|
+
"ai": ">=4.0.0"
|
|
23
|
+
},
|
|
24
|
+
"peerDependenciesMeta": {
|
|
25
|
+
"ai": {
|
|
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
|
+
}
|