diff --git a/internal/provider/anthropic/cost.go b/internal/provider/anthropic/cost.go index 95c88be..a527927 100644 --- a/internal/provider/anthropic/cost.go +++ b/internal/provider/anthropic/cost.go @@ -8,6 +8,13 @@ import ( var AnthropicPerMillionTokenCost = map[string]map[string]float64{ "prompt": { + "claude-opus-4.7": 5.0, + "claude-opus-4.6": 5.0, + "claude-opus-4.5": 5.0, + "claude-4.6-sonnet": 3.0, + "claude-4.5-sonnet": 3.0, + "claude-4.5-haiku": 1.0, + "claude-sonnet-4.5": 3.0, "claude-sonnet-4": 3.0, "claude-3.7-sonnet": 3.0, @@ -20,6 +27,13 @@ var AnthropicPerMillionTokenCost = map[string]map[string]float64{ "claude-3-opus": 15.0, }, "completion": { + "claude-opus-4.7": 25.0, + "claude-opus-4.6": 25.0, + "claude-opus-4.5": 25.0, + "claude-4.6-sonnet": 15.0, + "claude-4.5-sonnet": 15.0, + "claude-4.5-haiku": 5.0, + "claude-sonnet-4.5": 15.0, "claude-sonnet-4": 15.0, "claude-3.7-sonnet": 15.0, @@ -87,26 +101,52 @@ func (ce *CostEstimator) EstimatePromptCost(model string, tks int) (float64, err } func SelectModel(model string) string { + if strings.HasPrefix(model, "claude-sonnet-4.6") || strings.HasPrefix(model, "claude-sonnet-4-6") { + return "claude-sonnet-4.6" + } 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") { + } + 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") { + } + 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") { + } + if strings.HasPrefix(model, "claude-3.5-sonnet") || strings.HasPrefix(model, "claude-3-5-sonnet") { + return "claude-3.5-sonnet" + } + + if strings.HasPrefix(model, "claude-opus-4.7") || strings.HasPrefix(model, "claude-opus-4-7") { + return "claude-opus-4.7" + } + if strings.HasPrefix(model, "claude-opus-4.6") || strings.HasPrefix(model, "claude-opus-4-6") { + return "claude-opus-4.6" + } + if strings.HasPrefix(model, "claude-opus-4.5") || strings.HasPrefix(model, "claude-opus-4-5") { + return "claude-opus-4.5" + } + 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") { return "claude-opus-4" - } else if strings.HasPrefix(model, "claude-3.5-haiku") || strings.HasPrefix(model, "claude-3-5-haiku") { + } + if strings.HasPrefix(model, "claude-3-opus") { + return "claude-3-opus" + } + + if strings.HasPrefix(model, "claude-4.5-haiku") || strings.HasPrefix(model, "claude-4-5-haiku") { + return "claude-4.5-haiku" + } + 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") { + } + 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") { - return "claude-3-opus" } - return "" + + 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", }