feat: update pricing schema for models to ensure more accurate cost tracking (#27184)

This commit is contained in:
Aiden Cline
2026-05-12 20:44:06 -05:00
committed by GitHub
parent d1356f509e
commit c2b1ebd9dc
6 changed files with 114570 additions and 62322 deletions

View File

@@ -10,11 +10,23 @@ import { AppFileSystem } from "@opencode-ai/core/filesystem"
import { withTransientReadRetry } from "@/util/effect-http-client"
import { CatalogModelStatus } from "./model-status"
const CostTier = Schema.Struct({
input: Schema.Finite,
output: Schema.Finite,
cache_read: Schema.optional(Schema.Finite),
cache_write: Schema.optional(Schema.Finite),
tier: Schema.Struct({
type: Schema.Literal("context"),
size: Schema.Finite,
}),
})
const Cost = Schema.Struct({
input: Schema.Finite,
output: Schema.Finite,
cache_read: Schema.optional(Schema.Finite),
cache_write: Schema.optional(Schema.Finite),
tiers: Schema.optional(Schema.Array(CostTier)),
context_over_200k: Schema.optional(
Schema.Struct({
input: Schema.Finite,

View File

@@ -869,10 +869,21 @@ const ProviderCacheCost = Schema.Struct({
write: Schema.Finite,
})
const ProviderCostTier = Schema.Struct({
input: Schema.Finite,
output: Schema.Finite,
cache: ProviderCacheCost,
tier: Schema.Struct({
type: Schema.Literal("context"),
size: Schema.Finite,
}),
})
const ProviderCost = Schema.Struct({
input: Schema.Finite,
output: Schema.Finite,
cache: ProviderCacheCost,
tiers: optionalOmitUndefined(Schema.Array(ProviderCostTier)),
experimentalOver200K: optionalOmitUndefined(
Schema.Struct({
input: Schema.Finite,
@@ -977,6 +988,17 @@ function cost(c: ModelsDev.Model["cost"]): Model["cost"] {
write: c?.cache_write ?? 0,
},
}
if (c?.tiers) {
result.tiers = c.tiers.map((item) => ({
input: item.input,
output: item.output,
cache: {
read: item.cache_read ?? 0,
write: item.cache_write ?? 0,
},
tier: item.tier,
}))
}
if (c?.context_over_200k) {
result.experimentalOver200K = {
cache: {