From 9b42cd87281d487157bd938c49b7d0ded6b9be1a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 21 Apr 2026 03:20:27 +0100 Subject: [PATCH] test: fix cost snapshot PR checks --- src/agents/command/session-store.test.ts | 49 ++++++++++++++++-------- src/auto-reply/reply/session-usage.ts | 1 - 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/agents/command/session-store.test.ts b/src/agents/command/session-store.test.ts index 102408ccb2c..61b8b41916f 100644 --- a/src/agents/command/session-store.test.ts +++ b/src/agents/command/session-store.test.ts @@ -15,8 +15,24 @@ vi.mock("../model-selection.js", () => ({ normalizeProviderId: (provider: string) => provider.trim().toLowerCase(), })); +type MockCost = { + input?: number; + output?: number; +}; + +type MockProviderModel = { + id: string; + cost?: MockCost; +}; + +type MockUsageFormatConfig = { + models?: { + providers?: Record; + }; +}; + vi.mock("../../utils/usage-format.js", () => ({ - estimateUsageCost: (params: { usage?: { input?: number; output?: number }; cost?: { input?: number; output?: number } }) => { + estimateUsageCost: (params: { usage?: { input?: number; output?: number }; cost?: MockCost }) => { if (!params.usage || !params.cost) { return undefined; } @@ -31,20 +47,14 @@ vi.mock("../../utils/usage-format.js", () => ({ return total / 1e6; }, resolveModelCostConfig: (params: { provider?: string; model?: string; config?: unknown }) => { - // Look up cost from config.models.providers[provider][model].cost - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const providers = params.config?.models?.providers as Record | undefined; + const providers = (params.config as MockUsageFormatConfig | undefined)?.models?.providers; if (!providers) { return undefined; } - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const provider = providers[params.provider ?? ""] as Record | undefined; - if (!provider) { - return undefined; - } - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const model = provider[params.model ?? ""] as { cost?: { input: number; output: number } } | undefined; - if (!model?.cost) { + const model = providers[params.provider ?? ""]?.models?.find( + (entry) => entry.id === params.model, + ); + if (!model) { return undefined; } return model.cost; @@ -426,12 +436,17 @@ describe("updateSessionStoreAfterAgentRun", () => { models: { providers: { openai: { - "gpt-4": { - cost: { - input: 10, // $10 per million input tokens - output: 30, // $30 per million output tokens + models: [ + { + id: "gpt-4", + cost: { + input: 10, + output: 30, + cacheRead: 0, + cacheWrite: 0, + }, }, - }, + ], }, }, }, diff --git a/src/auto-reply/reply/session-usage.ts b/src/auto-reply/reply/session-usage.ts index c7fc0422805..9afede8f6ab 100644 --- a/src/auto-reply/reply/session-usage.ts +++ b/src/auto-reply/reply/session-usage.ts @@ -132,7 +132,6 @@ export async function persistSessionUsageUpdate(params: { providerUsed: params.providerUsed ?? entry.modelProvider, modelUsed: params.modelUsed ?? entry.model, }); - const existingEstimatedCostUsd = resolveNonNegativeNumber(entry.estimatedCostUsd) ?? 0; const patch: Partial = { modelProvider: params.providerUsed ?? entry.modelProvider, model: params.modelUsed ?? entry.model,