fix(auth): break credits cold-start deadlock by keeping unknown-hint auths as fallback candidates
Replace antigravityCreditsAvailableForModel with inline known/unknown split. Auths whose credit hints are not yet populated are kept as lower-priority candidates instead of being rejected, breaking the chicken-and-egg deadlock at cold start.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
cliproxyexecutor "github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/executor"
|
||||
)
|
||||
|
||||
func TestFindAllAntigravityCreditsCandidateAuths_PrefersKnownCreditsThenUnknown(t *testing.T) {
|
||||
m := &Manager{
|
||||
auths: map[string]*Auth{
|
||||
"zz-credits": {ID: "zz-credits", Provider: "antigravity"},
|
||||
"aa-unknown": {ID: "aa-unknown", Provider: "antigravity"},
|
||||
"mm-no": {ID: "mm-no", Provider: "antigravity"},
|
||||
},
|
||||
executors: map[string]ProviderExecutor{
|
||||
"antigravity": schedulerTestExecutor{},
|
||||
},
|
||||
}
|
||||
|
||||
SetAntigravityCreditsHint("zz-credits", AntigravityCreditsHint{
|
||||
Known: true,
|
||||
Available: true,
|
||||
UpdatedAt: time.Now(),
|
||||
})
|
||||
SetAntigravityCreditsHint("mm-no", AntigravityCreditsHint{
|
||||
Known: true,
|
||||
Available: false,
|
||||
UpdatedAt: time.Now(),
|
||||
})
|
||||
|
||||
opts := cliproxyexecutor.Options{}
|
||||
|
||||
candidates := m.findAllAntigravityCreditsCandidateAuths("claude-sonnet-4-6", opts)
|
||||
if len(candidates) != 2 {
|
||||
t.Fatalf("candidates len = %d, want 2", len(candidates))
|
||||
}
|
||||
if candidates[0].auth.ID != "zz-credits" {
|
||||
t.Fatalf("candidates[0].auth.ID = %q, want %q", candidates[0].auth.ID, "zz-credits")
|
||||
}
|
||||
if candidates[1].auth.ID != "aa-unknown" {
|
||||
t.Fatalf("candidates[1].auth.ID = %q, want %q", candidates[1].auth.ID, "aa-unknown")
|
||||
}
|
||||
|
||||
nonClaude := m.findAllAntigravityCreditsCandidateAuths("gemini-3-flash", opts)
|
||||
if len(nonClaude) != 0 {
|
||||
t.Fatalf("nonClaude len = %d, want 0", len(nonClaude))
|
||||
}
|
||||
|
||||
pinnedOpts := cliproxyexecutor.Options{
|
||||
Metadata: map[string]any{cliproxyexecutor.PinnedAuthMetadataKey: "aa-unknown"},
|
||||
}
|
||||
pinned := m.findAllAntigravityCreditsCandidateAuths("claude-sonnet-4-6", pinnedOpts)
|
||||
if len(pinned) != 1 {
|
||||
t.Fatalf("pinned len = %d, want 1", len(pinned))
|
||||
}
|
||||
if pinned[0].auth.ID != "aa-unknown" {
|
||||
t.Fatalf("pinned[0].auth.ID = %q, want %q", pinned[0].auth.ID, "aa-unknown")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user