diff --git a/internal/provider/anthropic/cost.go b/internal/provider/anthropic/cost.go index 95c88be..f5ef452 100644 --- a/internal/provider/anthropic/cost.go +++ b/internal/provider/anthropic/cost.go @@ -8,27 +8,45 @@ import ( var AnthropicPerMillionTokenCost = map[string]map[string]float64{ "prompt": { - "claude-sonnet-4.5": 3.0, + "claude-opus-4-8": 5.0, + "claude-opus-4-7": 5.0, + "claude-opus-4-6": 5.0, + "claude-opus-4-5": 5.0, + "claude-opus-4-1": 15.0, + "claude-opus-4": 15.0, + + "claude-sonnet-4-6": 3.0, + "claude-sonnet-4-5": 3.0, "claude-sonnet-4": 3.0, - "claude-3.7-sonnet": 3.0, - "claude-opus-4.1": 15.0, - "claude-opus-4": 15.0, - "claude-3.5-haiku": 0.8, - "claude-3-haiku": 0.25, - "claude-3.5-sonnet": 3.0, + "claude-haiku-4-5": 1.0, + + // old models + "claude-3-7-sonnet": 3.0, + "claude-3-5-haiku": 0.8, + "claude-3-haiku": 0.25, + "claude-3-5-sonnet": 3.0, "claude-3-opus": 15.0, }, "completion": { - "claude-sonnet-4.5": 15.0, + "claude-opus-4-8": 25.0, + "claude-opus-4-7": 25.0, + "claude-opus-4-6": 25.0, + "claude-opus-4-5": 25.0, + "claude-opus-4-1": 75.0, + "claude-opus-4": 75.0, + + "claude-sonnet-4-6": 15.0, + "claude-sonnet-4-5": 15.0, "claude-sonnet-4": 15.0, - "claude-3.7-sonnet": 15.0, - "claude-opus-4.1": 75.0, - "claude-opus-4": 75.0, - "claude-3.5-haiku": 4.0, - "claude-3-haiku": 1.25, - "claude-3.5-sonnet": 15.0, + "claude-haiku-4-5": 5.0, + + // old models + "claude-3-7-sonnet": 15.0, + "claude-3-5-haiku": 4.0, + "claude-3-haiku": 1.25, + "claude-3-5-sonnet": 15.0, "claude-3-opus": 75.0, }, } @@ -87,26 +105,54 @@ func (ce *CostEstimator) EstimatePromptCost(model string, tks int) (float64, err } func SelectModel(model string) string { - if strings.HasPrefix(model, "claude-sonnet-4.5") || strings.HasPrefix(model, "claude-sonnet-4-5") { - return "claude-sonnet-4.5" - } else if strings.HasPrefix(model, "claude-sonnet-4") { - return "claude-sonnet-4" - } else if strings.HasPrefix(model, "claude-3.7-sonnet") || strings.HasPrefix(model, "claude-3-7-sonnet") { - return "claude-3.7-sonnet" - } else if strings.HasPrefix(model, "claude-opus-4.1") || strings.HasPrefix(model, "claude-opus-4-1") { - return "claude-opus-4.1" - } else if strings.HasPrefix(model, "claude-opus-4") { + if strings.HasPrefix(model, "claude-opus-4-8") { + return "claude-opus-4-8" + } + if strings.HasPrefix(model, "claude-opus-4-7") { + return "claude-opus-4-7" + } + if strings.HasPrefix(model, "claude-opus-4-6") { + return "claude-opus-4-6" + } + if strings.HasPrefix(model, "claude-opus-4-5") { + return "claude-opus-4-5" + } + if strings.HasPrefix(model, "claude-opus-4-1") { + return "claude-opus-4-1" + } + if strings.HasPrefix(model, "claude-opus-4") { return "claude-opus-4" - } else if strings.HasPrefix(model, "claude-3.5-haiku") || strings.HasPrefix(model, "claude-3-5-haiku") { - return "claude-3.5-haiku" - } else if strings.HasPrefix(model, "claude-3-haiku") { - return "claude-3-haiku" - } else if strings.HasPrefix(model, "claude-3.5-sonnet") || strings.HasPrefix(model, "claude-3-5-sonnet") { - return "claude-3.5-sonnet" - } else if strings.HasPrefix(model, "claude-3-opus") { + } + if strings.HasPrefix(model, "claude-sonnet-4-6") { + return "claude-sonnet-4-6" + } + if strings.HasPrefix(model, "claude-sonnet-4-5") { + return "claude-sonnet-4-5" + } + if strings.HasPrefix(model, "claude-sonnet-4") { + return "claude-sonnet-4" + } + if strings.HasPrefix(model, "claude-haiku-4-5") { + return "claude-haiku-4-5" + } + + // old + if strings.HasPrefix(model, "claude-3-7-sonnet") { + return "claude-3-7-sonnet" + } + if strings.HasPrefix(model, "claude-3-5-haiku") { + return "claude-3-5-haiku" + } + if strings.HasPrefix(model, "claude-3-5-sonnet") { + return "claude-3-5-sonnet" + } + if strings.HasPrefix(model, "claude-3-opus") { return "claude-3-opus" } - return "" + if strings.HasPrefix(model, "claude-3-haiku") { + return "claude-3-haiku" + } + return model } func convertAmazonModelToAnthropicModel(model string) string { diff --git a/internal/provider/openai/cost.go b/internal/provider/openai/cost.go index 3ac1d99..e83a100 100644 --- a/internal/provider/openai/cost.go +++ b/internal/provider/openai/cost.go @@ -41,6 +41,13 @@ var OpenAiPerThousandTokenCost = map[string]map[string]float64{ "chatgpt-image-latest": 0.005, "gpt-image-1-mini": 0.002, + "gpt-5.5": 0.01, + "gpt-5.5~long": 0.01, + "gpt-5.5~short": 0.005, + "gpt-5.5-pro": 0.06, + "gpt-5.5-pro~long": 0.06, + "gpt-5.5-pro~short": 0.03, + "gpt-5.4": 0.005, "gpt-5.4~long": 0.005, "gpt-5.4~short": 0.0025, @@ -115,6 +122,10 @@ var OpenAiPerThousandTokenCost = map[string]map[string]float64{ "babbage-002": 0.000400, }, "cached-prompt": { + "gpt-5.5": 0.001, + "gpt-5.5~long": 0.001, + "gpt-5.5~short": 0.0005, + "gpt-5.4": 0.0005, "gpt-5.4~long": 0.0005, "gpt-5.4~short": 0.00025, @@ -202,6 +213,13 @@ var OpenAiPerThousandTokenCost = map[string]map[string]float64{ "gpt-image-1.5": 0.010, "chatgpt-image-latest": 0.010, + "gpt-5.5": 0.045, + "gpt-5.5~long": 0.045, + "gpt-5.5~short": 0.03, + "gpt-5.5-pro": 0.27, + "gpt-5.5-pro~long": 0.27, + "gpt-5.5-pro~short": 0.18, + "gpt-5.4": 0.0225, "gpt-5.4~long": 0.0225, "gpt-5.4~short": 0.015, @@ -1088,6 +1106,8 @@ func countTotalTokens(model string, r *goopenai.ChatCompletionRequest, tc tokenC } var modelWithLengthCtx = []string{ + "gpt-5.5", + "gpt-5.5-pro", "gpt-5.4", "gpt-5.4-pro", }