Skip to content

Commit 39661c3

Browse files
authored
Fix AI SDK usage typings
1 parent 3a22ca9 commit 39661c3

3 files changed

Lines changed: 51 additions & 42 deletions

File tree

‎js/src/instrumentation/plugins/ai-sdk-plugin.ts‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3964,9 +3964,14 @@ export function extractTokenMetrics(
39643964
return metrics;
39653965
}
39663966

3967+
const inputTokenDetails =
3968+
typeof usage.inputTokens === "object" ? usage.inputTokens : undefined;
3969+
const outputTokenDetails =
3970+
typeof usage.outputTokens === "object" ? usage.outputTokens : undefined;
3971+
39673972
// Extract token counts
39683973
const promptTokens = firstNumber(
3969-
usage.inputTokens?.total,
3974+
inputTokenDetails?.total,
39703975
usage.inputTokens,
39713976
usage.promptTokens,
39723977
usage.prompt_tokens,
@@ -3976,7 +3981,7 @@ export function extractTokenMetrics(
39763981
}
39773982

39783983
const completionTokens = firstNumber(
3979-
usage.outputTokens?.total,
3984+
outputTokenDetails?.total,
39803985
usage.outputTokens,
39813986
usage.completionTokens,
39823987
usage.completion_tokens,
@@ -3997,7 +4002,7 @@ export function extractTokenMetrics(
39974002
}
39984003

39994004
const promptCachedTokens = firstNumber(
4000-
usage.inputTokens?.cacheRead,
4005+
inputTokenDetails?.cacheRead,
40014006
usage.inputTokenDetails?.cacheReadTokens,
40024007
usage.cachedInputTokens,
40034008
usage.promptCachedTokens,
@@ -4008,7 +4013,7 @@ export function extractTokenMetrics(
40084013
}
40094014

40104015
const promptCacheCreationTokens = firstNumber(
4011-
usage.inputTokens?.cacheWrite,
4016+
inputTokenDetails?.cacheWrite,
40124017
usage.inputTokenDetails?.cacheWriteTokens,
40134018
usage.promptCacheCreationTokens,
40144019
usage.prompt_cache_creation_tokens,
@@ -4035,7 +4040,7 @@ export function extractTokenMetrics(
40354040
}
40364041

40374042
const reasoningTokenCount = firstNumber(
4038-
usage.outputTokens?.reasoning,
4043+
outputTokenDetails?.reasoning,
40394044
usage.reasoningTokens,
40404045
usage.completionReasoningTokens,
40414046
usage.completion_reasoning_tokens,

‎js/src/vendor-sdk-types/ai-sdk-common.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ interface AISDKTokenBucket {
1212
[key: string]: unknown;
1313
}
1414

15-
type AISDKTokenCount = number & AISDKTokenBucket;
15+
type AISDKTokenCount = number | AISDKTokenBucket;
1616

1717
export interface AISDKUsage {
1818
inputTokens?: AISDKTokenCount;

‎js/src/wrappers/ai-sdk-evaluate.test.ts‎

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,45 @@ import { wrapAISDK } from "./ai-sdk/ai-sdk";
1919

2020
configureNode();
2121

22+
const questions = {
23+
category: {
24+
type: "choice",
25+
instructions: "Which team should handle this request?",
26+
criteria: { billing: null, technical: null },
27+
},
28+
urgency: {
29+
type: "score",
30+
instructions: "How urgent is this request?",
31+
criteria: ["Low", "High"],
32+
},
33+
duplicate: {
34+
type: "boolean",
35+
instructions: "Was there a duplicate charge?",
36+
},
37+
};
38+
39+
const answers = {
40+
category: {
41+
type: "choice",
42+
choice: "billing",
43+
probabilities: { billing: 0.9, technical: 0.1 },
44+
},
45+
urgency: {
46+
type: "score",
47+
score: 0.75,
48+
probabilities: { 0: 0.25, 1: 0.75 },
49+
},
50+
duplicate: { type: "boolean", probability: 0.95 },
51+
};
52+
2253
const params: AISDKEvaluateParams = {
2354
model: "typesafe-ai/jev",
2455
state: { message: "Charged twice" },
25-
questions: {
26-
category: {
27-
type: "choice",
28-
instructions: "Which team should handle this request?",
29-
criteria: { billing: null, technical: null },
30-
},
31-
urgency: {
32-
type: "score",
33-
instructions: "How urgent is this request?",
34-
criteria: ["Low", "High"],
35-
},
36-
duplicate: {
37-
type: "boolean",
38-
instructions: "Was there a duplicate charge?",
39-
},
40-
},
56+
questions,
4157
};
4258

4359
const result: AISDKEvaluationResult = {
44-
answers: {
45-
category: {
46-
type: "choice",
47-
choice: "billing",
48-
probabilities: { billing: 0.9, technical: 0.1 },
49-
},
50-
urgency: {
51-
type: "score",
52-
score: 0.75,
53-
probabilities: { 0: 0.25, 1: 0.75 },
54-
},
55-
duplicate: { type: "boolean", probability: 0.95 },
56-
},
60+
answers,
5761
usage: { inputTokens: 20, outputTokens: 5, totalTokens: 25 },
5862
response: { modelId: "typesafe-ai/jev-1.13.0" },
5963
providerMetadata: {
@@ -120,24 +124,24 @@ describe("AI SDK evaluate instrumentation", () => {
120124
input: {
121125
state: params.state,
122126
questions: [
123-
{ ...params.questions.category, id: "category" },
124-
{ ...params.questions.urgency, id: "urgency" },
125-
{ ...params.questions.duplicate, id: "duplicate" },
127+
{ ...questions.category, id: "category" },
128+
{ ...questions.urgency, id: "urgency" },
129+
{ ...questions.duplicate, id: "duplicate" },
126130
],
127131
},
128132
output: {
129133
answers: [
130134
{
131-
...result.answers.category,
135+
...answers.category,
132136
confidence: 0.9,
133137
id: "category",
134138
},
135139
{
136-
...result.answers.urgency,
140+
...answers.urgency,
137141
confidence: 0.8,
138142
id: "urgency",
139143
},
140-
{ ...result.answers.duplicate, id: "duplicate" },
144+
{ ...answers.duplicate, id: "duplicate" },
141145
],
142146
},
143147
metadata: {
@@ -187,7 +191,7 @@ describe("AI SDK evaluate instrumentation", () => {
187191
}),
188192
]),
189193
);
190-
expect(result.answers.category).toHaveProperty("probabilities", {
194+
expect(answers.category).toHaveProperty("probabilities", {
191195
billing: 0.9,
192196
technical: 0.1,
193197
});

0 commit comments

Comments
 (0)