Merge pull request #2412 from gaoren002/fix/codex-auto-review-gpt55
fix(openai): add codex auto review model pricing
This commit is contained in:
commit
2ec9b0d7ba
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
var codexModelMap = map[string]string{
|
var codexModelMap = map[string]string{
|
||||||
"gpt-5.5": "gpt-5.5",
|
"gpt-5.5": "gpt-5.5",
|
||||||
|
"codex-auto-review": "codex-auto-review",
|
||||||
"gpt-5.4": "gpt-5.4",
|
"gpt-5.4": "gpt-5.4",
|
||||||
"gpt-5.4-mini": "gpt-5.4-mini",
|
"gpt-5.4-mini": "gpt-5.4-mini",
|
||||||
"gpt-5.4-none": "gpt-5.4",
|
"gpt-5.4-none": "gpt-5.4",
|
||||||
|
|||||||
@ -839,6 +839,7 @@ func TestNormalizeCodexModel_Gpt53(t *testing.T) {
|
|||||||
"gpt-5.4": "gpt-5.4",
|
"gpt-5.4": "gpt-5.4",
|
||||||
"gpt5.5": "gpt-5.5",
|
"gpt5.5": "gpt-5.5",
|
||||||
"openai/gpt5.5": "gpt-5.5",
|
"openai/gpt5.5": "gpt-5.5",
|
||||||
|
"codex-auto-review": "codex-auto-review",
|
||||||
"gpt5.4": "gpt-5.4",
|
"gpt5.4": "gpt-5.4",
|
||||||
"gpt-5.4-high": "gpt-5.4",
|
"gpt-5.4-high": "gpt-5.4",
|
||||||
"gpt-5.4-chat-latest": "gpt-5.4",
|
"gpt-5.4-chat-latest": "gpt-5.4",
|
||||||
|
|||||||
@ -261,6 +261,12 @@ func TestNormalizeOpenAIModelForUpstream(t *testing.T) {
|
|||||||
model: "gpt-5.4-high",
|
model: "gpt-5.4-high",
|
||||||
want: "gpt-5.4",
|
want: "gpt-5.4",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "oauth preserves codex auto review model",
|
||||||
|
account: &Account{Type: AccountTypeOAuth},
|
||||||
|
model: "codex-auto-review",
|
||||||
|
want: "codex-auto-review",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "apikey preserves custom compatible model",
|
name: "apikey preserves custom compatible model",
|
||||||
account: &Account{Type: AccountTypeAPIKey},
|
account: &Account{Type: AccountTypeAPIKey},
|
||||||
@ -283,3 +289,17 @@ func TestNormalizeOpenAIModelForUpstream(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel(t *testing.T) {
|
||||||
|
candidates := usageBillingModelCandidates("codex-auto-review")
|
||||||
|
|
||||||
|
expected := []string{"codex-auto-review"}
|
||||||
|
if len(candidates) != len(expected) {
|
||||||
|
t.Fatalf("usageBillingModelCandidates(codex-auto-review) = %#v, want %#v", candidates, expected)
|
||||||
|
}
|
||||||
|
for i := range expected {
|
||||||
|
if candidates[i] != expected[i] {
|
||||||
|
t.Fatalf("usageBillingModelCandidates(codex-auto-review) = %#v, want %#v", candidates, expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -111,6 +113,22 @@ func TestGetModelPricing_OpenAICompactAliasUsesStaticFallback(t *testing.T) {
|
|||||||
require.InDelta(t, 1.5e-5, got.OutputCostPerToken, 1e-12)
|
require.InDelta(t, 1.5e-5, got.OutputCostPerToken, 1e-12)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDefaultPricingIncludesCodexAutoReview(t *testing.T) {
|
||||||
|
data, err := os.ReadFile(filepath.Join("..", "..", "resources", "model-pricing", "model_prices_and_context_window.json"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
svc := &PricingService{}
|
||||||
|
pricingData, err := svc.parsePricingData(data)
|
||||||
|
require.NoError(t, err)
|
||||||
|
svc.pricingData = pricingData
|
||||||
|
|
||||||
|
got := svc.GetModelPricing("codex-auto-review")
|
||||||
|
require.NotNil(t, got)
|
||||||
|
require.InDelta(t, 2.5e-6, got.InputCostPerToken, 1e-12)
|
||||||
|
require.InDelta(t, 1.5e-5, got.OutputCostPerToken, 1e-12)
|
||||||
|
require.InDelta(t, 2.5e-7, got.CacheReadInputTokenCost, 1e-12)
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetModelPricing_Gpt54MiniUsesDedicatedStaticFallbackWhenRemoteMissing(t *testing.T) {
|
func TestGetModelPricing_Gpt54MiniUsesDedicatedStaticFallbackWhenRemoteMissing(t *testing.T) {
|
||||||
svc := &PricingService{
|
svc := &PricingService{
|
||||||
pricingData: map[string]*LiteLLMModelPricing{
|
pricingData: map[string]*LiteLLMModelPricing{
|
||||||
|
|||||||
@ -5173,6 +5173,39 @@
|
|||||||
"supports_tool_choice": true,
|
"supports_tool_choice": true,
|
||||||
"supports_vision": true
|
"supports_vision": true
|
||||||
},
|
},
|
||||||
|
"codex-auto-review": {
|
||||||
|
"cache_read_input_token_cost": 2.5e-07,
|
||||||
|
"input_cost_per_token": 2.5e-06,
|
||||||
|
"litellm_provider": "openai",
|
||||||
|
"max_input_tokens": 1050000,
|
||||||
|
"max_output_tokens": 128000,
|
||||||
|
"max_tokens": 128000,
|
||||||
|
"mode": "chat",
|
||||||
|
"output_cost_per_token": 1.5e-05,
|
||||||
|
"supported_endpoints": [
|
||||||
|
"/v1/chat/completions",
|
||||||
|
"/v1/responses"
|
||||||
|
],
|
||||||
|
"supported_modalities": [
|
||||||
|
"text",
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"supported_output_modalities": [
|
||||||
|
"text",
|
||||||
|
"image"
|
||||||
|
],
|
||||||
|
"supports_function_calling": true,
|
||||||
|
"supports_native_streaming": true,
|
||||||
|
"supports_parallel_function_calling": true,
|
||||||
|
"supports_pdf_input": true,
|
||||||
|
"supports_prompt_caching": true,
|
||||||
|
"supports_reasoning": true,
|
||||||
|
"supports_response_schema": true,
|
||||||
|
"supports_service_tier": true,
|
||||||
|
"supports_system_messages": true,
|
||||||
|
"supports_tool_choice": true,
|
||||||
|
"supports_vision": true
|
||||||
|
},
|
||||||
"gpt-5.4-mini": {
|
"gpt-5.4-mini": {
|
||||||
"cache_read_input_token_cost": 7.5e-08,
|
"cache_read_input_token_cost": 7.5e-08,
|
||||||
"input_cost_per_token": 7.5e-07,
|
"input_cost_per_token": 7.5e-07,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user