feat: add configurable account selection strategies
Refactor account selection into a strategy pattern with three options: - Sticky: cache-optimized, stays on same account until rate-limited - Round-robin: load-balanced, rotates every request - Hybrid (default): smart distribution using health scores, token buckets, and LRU The hybrid strategy uses multiple signals for optimal account selection: health tracking for reliability, client-side token buckets for rate limiting, and LRU freshness to prefer rested accounts. Includes WebUI settings for strategy selection and unit tests. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -212,8 +212,21 @@ window.translations.pt = {
|
||||
persistTokenDesc: "Salvar sessões OAuth no disco para reinicializações mais rápidas",
|
||||
rateLimiting: "Limitação de Taxa de Conta & Timeouts",
|
||||
defaultCooldown: "Tempo de Resfriamento Padrão",
|
||||
defaultCooldownDesc: "Resfriamento de fallback quando a API não fornece tempo de reset.",
|
||||
maxWaitThreshold: "Limiar Máximo de Espera (Sticky)",
|
||||
maxWaitDesc: "Tempo máximo para aguardar uma conta sticky resetar antes de trocar.",
|
||||
// Ajuste de Tratamento de Erros
|
||||
errorHandlingTuning: "Ajuste de Tratamento de Erros",
|
||||
rateLimitDedupWindow: "Janela de Deduplicação de Rate Limit",
|
||||
rateLimitDedupWindowDesc: "Previne tempestades de retry quando múltiplas requisições atingem rate limits simultaneamente.",
|
||||
maxConsecutiveFailures: "Máx. Falhas Consecutivas",
|
||||
maxConsecutiveFailuresDesc: "Número de falhas consecutivas antes de aplicar resfriamento estendido.",
|
||||
extendedCooldown: "Resfriamento Estendido",
|
||||
extendedCooldownDesc: "Duração do resfriamento aplicado após atingir máx. de falhas consecutivas.",
|
||||
capacityRetryDelay: "Atraso de Retry de Capacidade",
|
||||
capacityRetryDelayDesc: "Atraso antes de tentar novamente quando capacidade do modelo está esgotada (não quota).",
|
||||
maxCapacityRetries: "Máx. Retries de Capacidade",
|
||||
maxCapacityRetriesDesc: "Máximo de retries para esgotamento de capacidade antes de trocar conta.",
|
||||
saveConfigServer: "Salvar Configuração",
|
||||
serverRestartAlert: "Alterações salvas em {path}. Reinicie o servidor para aplicar algumas configurações.",
|
||||
changePassword: "Alterar Senha da WebUI",
|
||||
@@ -258,4 +271,17 @@ window.translations.pt = {
|
||||
gemini1mDesc: "Adiciona sufixo [1m] aos modelos Gemini para suporte a janela de contexto de 1M.",
|
||||
gemini1mWarning: "⚠ Contexto grande pode reduzir o desempenho do Gemini-3-Pro.",
|
||||
clickToSet: "Clique para configurar...",
|
||||
|
||||
// Account Selection Strategy translations
|
||||
accountSelectionStrategy: "Estratégia de Seleção de Conta",
|
||||
selectionStrategy: "Estratégia de Seleção",
|
||||
strategyStickyLabel: "Fixo (Otimizado para Cache)",
|
||||
strategyRoundRobinLabel: "Rodízio (Balanceamento de Carga)",
|
||||
strategyHybridLabel: "Híbrido (Distribuição Inteligente)",
|
||||
strategyStickyDesc: "Permanece na mesma conta até atingir limite. Melhor para cache de prompts.",
|
||||
strategyRoundRobinDesc: "Alterna para próxima conta a cada requisição. Máximo throughput.",
|
||||
strategyHybridDesc: "Seleção inteligente baseada em saúde, tokens e frescor.",
|
||||
strategyUpdated: "Estratégia atualizada para: {strategy}",
|
||||
failedToUpdateStrategy: "Falha ao atualizar estratégia",
|
||||
invalidStrategy: "Estratégia inválida selecionada",
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user