Skip to content

Commit a40e858

Browse files
MarcoDotIOclaude
andcommitted
fix(server): mapped usage keeps the target's own rate
Co-Authored-By: Claude Opus 5.5 <[email protected]>
1 parent b7a9a28 commit a40e858

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

‎apps/server/src/usage/usageAggregation.test.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ describe("UsageAggregator", () => {
197197
untilDay: "2026-08-31",
198198
rates,
199199
modelAliases: resolveModelAliases({ "example-preview": "claude-fable-5" }),
200+
rateModel: () => "claude-fable",
200201
});
201202
aggregator.add(record());
202203
aggregator.add(record({ model: "example-preview", rateModel: "example-preview-high" }));

‎apps/server/src/usage/usageAggregation.ts‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type {
1010
} from "@t3tools/contracts";
1111

1212
import { EMPTY_TOTALS, type UsageRecord } from "@t3tools/provider-core/server/usage";
13-
import { cacheSavingsUsd, priceUsage, type RateTable } from "./usagePricing.ts";
13+
import { cacheSavingsUsd, lookupRate, priceUsage, type RateTable } from "./usagePricing.ts";
1414

1515
// en-CA gives ISO-ordered parts in the requested zone; Date getters are host-local.
1616
function makeDayFormatter(timeZone: string): (timestampMs: number) => string {
@@ -236,12 +236,15 @@ export class UsageAggregator {
236236
return true;
237237
}
238238

239-
// Aliases use the target's rate, which a provider may name apart from the target's ID.
239+
// Aliases use the target's rate. Only an unpriced target goes through the provider's own rate naming.
240240
#mapModel(record: UsageRecord): UsageRecord {
241241
const model = this.#options.modelAliases?.get(record.model);
242242
if (model === undefined) return record;
243243
const { rateModel: _rateModel, ...rest } = record;
244-
const rateModel = this.#options.rateModel?.(record.provider, model);
244+
const rateModel =
245+
lookupRate(this.#options.rates, model) === null
246+
? this.#options.rateModel?.(record.provider, model)
247+
: undefined;
245248
return rateModel === undefined ? { ...rest, model } : { ...rest, model, rateModel };
246249
}
247250

0 commit comments

Comments
 (0)