Skip to content

Commit a19dbb0

Browse files
committed
fix(ai-sdk): report cached tokens usage
1 parent 1832387 commit a19dbb0

File tree

8 files changed

+900
-712
lines changed

8 files changed

+900
-712
lines changed

packages/ai-semantic-conventions/src/SemanticAttributes.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ export const SpanAttributes = {
3636
LLM_USAGE_INPUT_TOKENS: ATTR_GEN_AI_USAGE_INPUT_TOKENS,
3737
LLM_USAGE_OUTPUT_TOKENS: ATTR_GEN_AI_USAGE_OUTPUT_TOKENS,
3838

39+
// Cache token usage
40+
GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS:
41+
"gen_ai.usage.cache_creation_input_tokens",
42+
GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
43+
3944
GEN_AI_AGENT_NAME: "gen_ai.agent.name",
4045

4146
// LLM

packages/instrumentation-anthropic/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"tslib": "^2.8.1"
4747
},
4848
"devDependencies": {
49-
"@anthropic-ai/sdk": "^0.56.0",
49+
"@anthropic-ai/sdk": "^0.71.0",
5050
"@opentelemetry/context-async-hooks": "^2.0.1",
5151
"@opentelemetry/sdk-trace-node": "^2.0.1",
5252
"@pollyjs/adapter-fetch": "^6.0.7",

packages/traceloop-sdk/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,10 @@
9393
"gitHead": "ef1e70d6037f7b5c061056ef2be16e3f55f02ed5",
9494
"devDependencies": {
9595
"@ai-sdk/amazon-bedrock": "^3.0.10",
96+
"@ai-sdk/anthropic": "^2.0.53",
9697
"@ai-sdk/google": "^2.0.8",
9798
"@ai-sdk/openai": "^2.0.19",
98-
"@anthropic-ai/sdk": "^0.56.0",
99+
"@anthropic-ai/sdk": "^0.71.0",
99100
"@aws-sdk/client-bedrock-runtime": "^3.848.0",
100101
"@google-cloud/aiplatform": "^4.4.0",
101102
"@google-cloud/vertexai": "^1.10.0",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
{
2+
"log": {
3+
"_recordingName": "Test AI SDK Integration with Recording/should capture and transform Anthropic cache tokens from providerMetadata",
4+
"creator": {
5+
"comment": "persister:fs",
6+
"name": "Polly.JS",
7+
"version": "6.0.6"
8+
},
9+
"entries": [
10+
{
11+
"_id": "1bd11ef17274abbfa3cd6f3f58cd46c3",
12+
"_order": 0,
13+
"cache": {},
14+
"request": {
15+
"bodySize": 5957,
16+
"cookies": [],
17+
"headers": [
18+
{
19+
"name": "anthropic-version",
20+
"value": "2023-06-01"
21+
},
22+
{
23+
"name": "content-type",
24+
"value": "application/json"
25+
},
26+
{
27+
"name": "user-agent",
28+
"value": "ai-sdk/anthropic/2.0.53 ai-sdk/provider-utils/3.0.18 runtime/node.js/v20.19.5"
29+
}
30+
],
31+
"headersSize": 330,
32+
"httpVersion": "HTTP/1.1",
33+
"method": "POST",
34+
"postData": {
35+
"mimeType": "application/json",
36+
"params": [],
37+
"text": "{\"model\":\"claude-3-haiku-20240307\",\"max_tokens\":4096,\"system\":[{\"type\":\"text\",\"text\":\"You are a helpful assistant. Here is some context that should be cached for efficiency: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"}],\"messages\":[{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"What is 2+2?\"}]}]}"
38+
},
39+
"queryString": [],
40+
"url": "https://api.anthropic.com/v1/messages"
41+
},
42+
"response": {
43+
"bodySize": 405,
44+
"content": {
45+
"mimeType": "application/json",
46+
"size": 405,
47+
"text": "{\"model\":\"claude-3-haiku-20240307\",\"id\":\"msg_015VLRmzNLU2ArL866tYeYTy\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[{\"type\":\"text\",\"text\":\"4\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1231,\"cache_creation_input_tokens\":1200,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":5,\"service_tier\":\"standard\"}}"
48+
},
49+
"cookies": [],
50+
"headers": [
51+
{
52+
"name": "anthropic-organization-id",
53+
"value": "617d109c-a187-4902-889d-689223d134aa"
54+
},
55+
{
56+
"name": "anthropic-ratelimit-input-tokens-limit",
57+
"value": "400000"
58+
},
59+
{
60+
"name": "anthropic-ratelimit-input-tokens-remaining",
61+
"value": "400000"
62+
},
63+
{
64+
"name": "anthropic-ratelimit-input-tokens-reset",
65+
"value": "2025-12-02T14:29:05Z"
66+
},
67+
{
68+
"name": "anthropic-ratelimit-output-tokens-limit",
69+
"value": "80000"
70+
},
71+
{
72+
"name": "anthropic-ratelimit-output-tokens-remaining",
73+
"value": "80000"
74+
},
75+
{
76+
"name": "anthropic-ratelimit-output-tokens-reset",
77+
"value": "2025-12-02T14:29:05Z"
78+
},
79+
{
80+
"name": "anthropic-ratelimit-requests-limit",
81+
"value": "4000"
82+
},
83+
{
84+
"name": "anthropic-ratelimit-requests-remaining",
85+
"value": "3999"
86+
},
87+
{
88+
"name": "anthropic-ratelimit-requests-reset",
89+
"value": "2025-12-02T14:29:05Z"
90+
},
91+
{
92+
"name": "anthropic-ratelimit-tokens-limit",
93+
"value": "480000"
94+
},
95+
{
96+
"name": "anthropic-ratelimit-tokens-remaining",
97+
"value": "480000"
98+
},
99+
{
100+
"name": "anthropic-ratelimit-tokens-reset",
101+
"value": "2025-12-02T14:29:05Z"
102+
},
103+
{
104+
"name": "cf-cache-status",
105+
"value": "DYNAMIC"
106+
},
107+
{
108+
"name": "cf-ray",
109+
"value": "9a7b83b54e107da0-TLV"
110+
},
111+
{
112+
"name": "connection",
113+
"value": "keep-alive"
114+
},
115+
{
116+
"name": "content-encoding",
117+
"value": "gzip"
118+
},
119+
{
120+
"name": "content-type",
121+
"value": "application/json"
122+
},
123+
{
124+
"name": "date",
125+
"value": "Tue, 02 Dec 2025 14:29:05 GMT"
126+
},
127+
{
128+
"name": "request-id",
129+
"value": "req_011CVi24YsBaALhQPhhdTaoi"
130+
},
131+
{
132+
"name": "retry-after",
133+
"value": "55"
134+
},
135+
{
136+
"name": "server",
137+
"value": "cloudflare"
138+
},
139+
{
140+
"name": "strict-transport-security",
141+
"value": "max-age=31536000; includeSubDomains; preload"
142+
},
143+
{
144+
"name": "transfer-encoding",
145+
"value": "chunked"
146+
},
147+
{
148+
"name": "x-envoy-upstream-service-time",
149+
"value": "336"
150+
},
151+
{
152+
"name": "x-robots-tag",
153+
"value": "none"
154+
}
155+
],
156+
"headersSize": 1091,
157+
"httpVersion": "HTTP/1.1",
158+
"redirectURL": "",
159+
"status": 200,
160+
"statusText": "OK"
161+
},
162+
"startedDateTime": "2025-12-02T14:28:57.517Z",
163+
"time": 9705,
164+
"timings": {
165+
"blocked": -1,
166+
"connect": -1,
167+
"dns": -1,
168+
"receive": 0,
169+
"send": 0,
170+
"ssl": -1,
171+
"wait": 9705
172+
}
173+
}
174+
],
175+
"pages": [],
176+
"version": "1.2"
177+
}
178+
}

0 commit comments

Comments
 (0)