diff --git a/Sources/CodexBarCore/Vendored/CostUsage/CostUsagePricing.swift b/Sources/CodexBarCore/Vendored/CostUsage/CostUsagePricing.swift index 37f87cf57..f18842262 100644 --- a/Sources/CodexBarCore/Vendored/CostUsage/CostUsagePricing.swift +++ b/Sources/CodexBarCore/Vendored/CostUsage/CostUsagePricing.swift @@ -41,6 +41,14 @@ enum CostUsagePricing { inputCostPerToken: 1.75e-6, outputCostPerToken: 1.4e-5, cacheReadInputCostPerToken: 1.75e-7), + "gpt-5.4": CodexPricing( + inputCostPerToken: 2.5e-6, + outputCostPerToken: 1.5e-5, + cacheReadInputCostPerToken: 2.5e-7), + "gpt-5.4-codex": CodexPricing( + inputCostPerToken: 2.5e-6, + outputCostPerToken: 1.5e-5, + cacheReadInputCostPerToken: 2.5e-7), ] private static let claude: [String: ClaudePricing] = [ diff --git a/Tests/CodexBarTests/CostUsagePricingTests.swift b/Tests/CodexBarTests/CostUsagePricingTests.swift index 695a4843a..242f93ff6 100644 --- a/Tests/CodexBarTests/CostUsagePricingTests.swift +++ b/Tests/CodexBarTests/CostUsagePricingTests.swift @@ -8,6 +8,7 @@ struct CostUsagePricingTests { #expect(CostUsagePricing.normalizeCodexModel("openai/gpt-5-codex") == "gpt-5") #expect(CostUsagePricing.normalizeCodexModel("gpt-5.2-codex") == "gpt-5.2") #expect(CostUsagePricing.normalizeCodexModel("gpt-5.1-codex-max") == "gpt-5.1") + #expect(CostUsagePricing.normalizeCodexModel("gpt-5.4-codex") == "gpt-5.4") } @Test @@ -20,6 +21,17 @@ struct CostUsagePricingTests { #expect(cost != nil) } + @Test + func codexCostSupportsGpt54() { + let cost = CostUsagePricing.codexCostUSD( + model: "gpt-5.4", + inputTokens: 1_000_000, + cachedInputTokens: 200_000, + outputTokens: 50_000) + #expect(cost != nil) + #expect(cost == 2.8) + } + @Test func normalizesClaudeOpus41DatedVariants() { #expect(CostUsagePricing.normalizeClaudeModel("claude-opus-4-1-20250805") == "claude-opus-4-1")