| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package service
- import (
- "errors"
- "strings"
- "testing"
- "time"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/stretchr/testify/require"
- )
- func legacyProfitDiagnosticService(accounts []Account) *OpenAIGatewayService {
- return &OpenAIGatewayService{
- accountRepo: stubOpenAIAccountRepo{accounts: accounts},
- cfg: &config.Config{},
- rateLimitService: newOpenAIAdvancedSchedulerRateLimitService("false"),
- concurrencyService: NewConcurrencyService(stubConcurrencyCache{}),
- }
- }
- func legacyProfitDiagnosticAccount(id int64) *Account {
- now := time.Now()
- a := upstreamCostTestAccount(id, UpstreamBillingProbeStatusOK, 0.9, now.Add(-time.Minute), 30*time.Minute)
- a.Status = StatusActive
- a.Schedulable = true
- a.Concurrency = 1
- return a
- }
- func TestSelectAccountWithScheduler_LegacyProfitDiagnostics(t *testing.T) {
- groupID := int64(5313)
- ctx := profitControlTestCtx(profitControlTestGroup(groupID, 0.5, 0))
- t.Run("threshold reports deterministic pool count", func(t *testing.T) {
- account := legacyProfitDiagnosticAccount(53131)
- profitControlTestAccountWithRate(account, 0.9)
- svc := legacyProfitDiagnosticService([]Account{*account})
- selection, _, err := svc.SelectAccountWithScheduler(ctx, &groupID, "", "", "gpt-test", nil, OpenAIUpstreamTransportAny, false)
- require.Nil(t, selection)
- require.ErrorIs(t, err, ErrNoAvailableAccounts)
- require.Contains(t, err.Error(), "pool=1, filtered: profit_threshold=1")
- })
- t.Run("missing account rate reports invalid rate", func(t *testing.T) {
- account := upstreamCostTestOAuthAccount(53132)
- account.Status = StatusActive
- account.Schedulable = true
- account.Concurrency = 1
- svc := legacyProfitDiagnosticService([]Account{*account})
- selection, _, err := svc.SelectAccountWithScheduler(ctx, &groupID, "", "", "gpt-test", nil, OpenAIUpstreamTransportAny, false)
- require.Nil(t, selection)
- require.ErrorIs(t, err, ErrNoAvailableAccounts)
- require.Contains(t, err.Error(), "profit_invalid_account_rate=1")
- })
- t.Run("model support gate does not report profit reasons", func(t *testing.T) {
- account := legacyProfitDiagnosticAccount(53133)
- profitControlTestAccountWithRate(account, 0.9)
- account.Credentials = map[string]any{"model_mapping": map[string]any{"other-model": "other-model"}}
- svc := legacyProfitDiagnosticService([]Account{*account})
- selection, _, err := svc.SelectAccountWithScheduler(ctx, &groupID, "", "", "gpt-test", nil, OpenAIUpstreamTransportAny, false)
- require.Nil(t, selection)
- require.ErrorIs(t, err, ErrNoAvailableAccounts)
- require.Contains(t, err.Error(), "ineligible=1")
- require.NotContains(t, err.Error(), openAIProfitFilterReasonThreshold)
- require.NotContains(t, err.Error(), openAIProfitFilterReasonInvalidAccountRate)
- })
- t.Run("compact preserves compact sentinel", func(t *testing.T) {
- account := legacyProfitDiagnosticAccount(53134)
- account.Extra = map[string]any{"openai_compact_supported": false}
- profitControlTestAccountWithRate(account, 0.4)
- svc := legacyProfitDiagnosticService([]Account{*account})
- selection, _, err := svc.SelectAccountWithScheduler(ctx, &groupID, "", "", "gpt-test", nil, OpenAIUpstreamTransportAny, true)
- require.Nil(t, selection)
- require.ErrorIs(t, err, ErrNoAvailableCompactAccounts)
- require.False(t, strings.Contains(err.Error(), "pool="), err)
- require.False(t, errors.Is(err, ErrNoAvailableAccounts))
- })
- }
|