Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/benchmarks/agent-cli/harness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,10 +227,11 @@ function reasoningFromContent(content: unknown): string | undefined {

function usageFromResult(result: Record<string, unknown>): ModelUsage {
const { usage } = result;
const cacheReadTokens = numberField(usage, "cache_read_input_tokens");
const inputTokens =
numberField(usage, "input_tokens") +
numberField(usage, "cache_creation_input_tokens") +
numberField(usage, "cache_read_input_tokens");
cacheReadTokens;
const outputTokens = numberField(usage, "output_tokens");
const details = isRecord(usage) ? usage["output_tokens_details"] : undefined;
const reasoningTokens = numberField(details, "thinking_tokens");
Expand All @@ -243,6 +244,7 @@ function usageFromResult(result: Record<string, unknown>): ModelUsage {
inputTokens,
outputTokens,
totalTokens: inputTokens + outputTokens,
cacheReadTokens,
reasoningTokens,
totalCost: numberField(result, "total_cost_usd"),
...definedValues({
Expand Down Expand Up @@ -704,6 +706,7 @@ function parseJsonAgentStream(stdout: string): OriAgentRun {
inputTokens: inputTokens + cacheRead + cacheWrite,
outputTokens,
totalTokens,
cacheReadTokens: cacheRead,
reasoningTokens,
totalCost,
}
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/deep-swe/solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ const ZERO_AGENT_USAGE: ModelUsage = {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
1 change: 1 addition & 0 deletions src/benchmarks/draco/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ function runResultWith(
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
4 changes: 4 additions & 0 deletions src/benchmarks/harbor/agent-loop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ export interface UsageAccumulator {
inputTokens: number;
outputTokens: number;
totalTokens: number;
cacheReadTokens: number;
reasoningTokens: number;
totalCost: number;
webSearchRequests: number;
Expand All @@ -451,6 +452,7 @@ function newUsageAccumulator(): UsageAccumulator {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
webSearchRequests: 0,
Expand All @@ -467,6 +469,7 @@ function addUsage(acc: UsageAccumulator, usage: ModelUsage | undefined): void {
acc.inputTokens += usage.inputTokens ?? 0;
acc.outputTokens += usage.outputTokens ?? 0;
acc.totalTokens += usage.totalTokens ?? 0;
acc.cacheReadTokens += usage.cacheReadTokens ?? 0;
acc.reasoningTokens += usage.reasoningTokens ?? 0;
acc.totalCost += usage.totalCost ?? 0;
const serverToolUse = usage.serverToolUse;
Expand All @@ -492,6 +495,7 @@ function toModelUsage(acc: UsageAccumulator): ModelUsage {
inputTokens: acc.inputTokens,
outputTokens: acc.outputTokens,
totalTokens: acc.totalTokens,
cacheReadTokens: acc.cacheReadTokens,
reasoningTokens: acc.reasoningTokens,
totalCost: acc.totalCost,
serverToolUse: acc.seenServerToolUse
Expand Down
2 changes: 2 additions & 0 deletions src/benchmarks/mmlu-pro.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ function runResultWith(
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down Expand Up @@ -144,6 +145,7 @@ describe("MMLU-Pro runLevelScores", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/search/browsecomp/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ describe("browseCompRunLevelScores", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
14 changes: 14 additions & 0 deletions src/benchmarks/search/core/usage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ describe("mergeModelUsages", () => {
inputTokens: 10,
outputTokens: 5,
totalTokens: 15,
cacheReadTokens: 0,
reasoningTokens: 2,
totalCost: 0.02,
serverToolUse: {
Expand All @@ -22,6 +23,7 @@ describe("mergeModelUsages", () => {
inputTokens: 4,
outputTokens: 2,
totalTokens: 6,
cacheReadTokens: 0,
reasoningTokens: 1,
totalCost: 0.001,
serverToolUse: {
Expand All @@ -36,6 +38,7 @@ describe("mergeModelUsages", () => {
inputTokens: 14,
outputTokens: 7,
totalTokens: 24,
cacheReadTokens: 0,
reasoningTokens: 3,
totalCost: 0.021,
serverToolUse: {
Expand All @@ -45,6 +48,17 @@ describe("mergeModelUsages", () => {
},
});
});
it("sums cacheReadTokens when present", () => {
expect(
mergeModelUsages([
{ inputTokens: 10, cacheReadTokens: 4 },
{ inputTokens: 5, cacheReadTokens: 2 },
])
).toEqual({
inputTokens: 15,
cacheReadTokens: 6,
});
});
it("returns undefined when no call reports usage", () => {
expect(mergeModelUsages([undefined, undefined])).toBeUndefined();
});
Expand Down
2 changes: 2 additions & 0 deletions src/benchmarks/search/core/usage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ export function mergeModelUsages(
const inputTokens = sum(defined.map((usage) => usage.inputTokens));
const outputTokens = sum(defined.map((usage) => usage.outputTokens));
const totalTokens = sum(defined.map((usage) => usage.totalTokens));
const cacheReadTokens = sum(defined.map((usage) => usage.cacheReadTokens));
const reasoningTokens = sum(defined.map((usage) => usage.reasoningTokens));
const totalCost = sum(defined.map((usage) => usage.totalCost));
const serverToolUse = mergeServerToolUse(
Expand All @@ -54,6 +55,7 @@ export function mergeModelUsages(
inputTokens,
outputTokens,
totalTokens,
cacheReadTokens,
reasoningTokens,
totalCost,
serverToolUse,
Expand Down
2 changes: 2 additions & 0 deletions src/benchmarks/search/dsqa/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ describe("DSQA benchmark", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down Expand Up @@ -334,6 +335,7 @@ describe("DSQA metrics", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/search/hle/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ function runResult(sampleScores: SampleScore[]): RunResult {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
3 changes: 3 additions & 0 deletions src/benchmarks/search/widesearch/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ describe("wideSearchScorer and run-level scores", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand All @@ -268,6 +269,7 @@ describe("wideSearchScorer and run-level scores", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down Expand Up @@ -338,6 +340,7 @@ describe("wideSearchScorer and run-level scores", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/swe-atlas/solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ const ZERO_AGENT_USAGE: ModelUsage = {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/swe-bench/solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,7 @@ const ZERO_AGENT_USAGE: ModelUsage = {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
3 changes: 3 additions & 0 deletions src/benchmarks/tau-bench-airline/solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ export function airlineSolver({
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
Expand Down Expand Up @@ -157,6 +158,7 @@ export function airlineSolver({
accUsage.inputTokens += output.usage.inputTokens ?? 0;
accUsage.outputTokens += output.usage.outputTokens ?? 0;
accUsage.totalTokens += output.usage.totalTokens ?? 0;
accUsage.cacheReadTokens += output.usage.cacheReadTokens ?? 0;
accUsage.reasoningTokens += output.usage.reasoningTokens ?? 0;
accUsage.totalCost += output.usage.totalCost ?? 0;
}
Expand Down Expand Up @@ -205,6 +207,7 @@ export function airlineSolver({
inputTokens: accUsage.inputTokens,
outputTokens: accUsage.outputTokens,
totalTokens: accUsage.totalTokens,
cacheReadTokens: accUsage.cacheReadTokens,
reasoningTokens: accUsage.reasoningTokens,
totalCost: accUsage.totalCost,
};
Expand Down
3 changes: 3 additions & 0 deletions src/benchmarks/tau3-bench-banking/solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ export function bankingSolver({
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
Expand Down Expand Up @@ -299,6 +300,7 @@ export function bankingSolver({
accUsage.inputTokens += output.usage.inputTokens ?? 0;
accUsage.outputTokens += output.usage.outputTokens ?? 0;
accUsage.totalTokens += output.usage.totalTokens ?? 0;
accUsage.cacheReadTokens += output.usage.cacheReadTokens ?? 0;
accUsage.reasoningTokens += output.usage.reasoningTokens ?? 0;
accUsage.totalCost += output.usage.totalCost ?? 0;
}
Expand Down Expand Up @@ -341,6 +343,7 @@ export function bankingSolver({
inputTokens: accUsage.inputTokens,
outputTokens: accUsage.outputTokens,
totalTokens: accUsage.totalTokens,
cacheReadTokens: accUsage.cacheReadTokens,
reasoningTokens: accUsage.reasoningTokens,
totalCost: accUsage.totalCost,
};
Expand Down
2 changes: 2 additions & 0 deletions src/benchmarks/terminal-bench/ori-parquet.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ async function runOriSampleToParquetRow() {
inputTokens: usage?.inputTokens ?? 0,
outputTokens: usage?.outputTokens ?? 0,
totalTokens: usage?.totalTokens ?? 0,
cacheReadTokens: usage?.cacheReadTokens ?? 0,
reasoningTokens: usage?.reasoningTokens ?? 0,
totalCost: usage?.totalCost ?? 0,
generationTimeMs: state.output?.generationTimeMs ?? 0,
Expand All @@ -144,6 +145,7 @@ async function runOriSampleToParquetRow() {
epoch: 0,
score,
messages: state.messages,
...(usage !== undefined && { usage }),
...(state.responseItems !== undefined && {
responseItems: state.responseItems,
}),
Expand Down
4 changes: 4 additions & 0 deletions src/benchmarks/terminal-bench/ori-solver.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1274,6 +1274,7 @@ describe("terminal-bench Prime Agent via ori", () => {
inputTokens: 4494,
outputTokens: 3,
totalTokens: 4497,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0.0018023999999999998,
});
Expand Down Expand Up @@ -1540,6 +1541,7 @@ describe("terminal-bench Prime Agent via ori", () => {
inputTokens: 37,
outputTokens: 8,
totalTokens: 126,
cacheReadTokens: 10,
reasoningTokens: 0,
totalCost: 0,
});
Expand Down Expand Up @@ -1619,6 +1621,7 @@ describe("terminal-bench omp via ori", () => {
cacheRead: 0,
cacheWrite: 0,
totalTokens: 127,
cacheReadTokens: 0,
reasoningTokens: 4,
cost: {
input: 0.000048,
Expand Down Expand Up @@ -1696,6 +1699,7 @@ describe("terminal-bench omp via ori", () => {
inputTokens: 120,
outputTokens: 7,
totalTokens: 127,
cacheReadTokens: 0,
reasoningTokens: 4,
totalCost: 0.0000536,
});
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/terminal-bench/ori-solver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const ZERO_USAGE: ModelUsage = {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
};
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/vgi-bench/benchmark.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ describe("VGI-Bench registry", () => {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
1 change: 1 addition & 0 deletions src/benchmarks/wandr/scorer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ function resultWith(values: readonly number[]): RunResult {
inputTokens: 0,
outputTokens: 0,
totalTokens: 0,
cacheReadTokens: 0,
reasoningTokens: 0,
totalCost: 0,
generationTimeMs: 0,
Expand Down
1 change: 1 addition & 0 deletions src/harness/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ export interface UsageTotals {
readonly inputTokens: number;
readonly outputTokens: number;
readonly totalTokens: number;
readonly cacheReadTokens: number;
readonly reasoningTokens: number;
readonly totalCost: number;
readonly generationTimeMs: number;
Expand Down
9 changes: 8 additions & 1 deletion src/harness/metric.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
import type { ModelMessage, ResponseItem, Score, ScoreValue } from "./core";
import type {
ModelMessage,
ModelUsage,
ResponseItem,
Score,
ScoreValue,
} from "./core";
import { ScoreValue as SV, scoreToNumber } from "./core";

export interface SampleScore {
Expand All @@ -10,6 +16,7 @@ export interface SampleScore {
readonly requestBody?: Readonly<Record<string, unknown>>;
readonly generationIds?: readonly string[];
readonly generationTimeMs?: number;
readonly usage?: ModelUsage;
readonly metadata?: Readonly<Record<string, unknown>>;
readonly input?: string;
readonly target?: string;
Expand Down
1 change: 1 addition & 0 deletions src/harness/progress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export const CheckpointDataSchema = z.object({
inputTokens: z.number(),
outputTokens: z.number(),
totalTokens: z.number(),
cacheReadTokens: z.number().optional(),
reasoningTokens: z.number(),
totalCost: z.number(),
webSearchRequests: z.number().optional(),
Expand Down
Loading
Loading