mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-09-08 17:36:37 +08:00
fix: 修复以第一个key获取模型列表,如果key失效将无法获取模型的问题
This commit is contained in:
@@ -50,7 +50,7 @@ async def list_models(
|
|||||||
logger.info("Handling Gemini models list request")
|
logger.info("Handling Gemini models list request")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api_key = await key_manager.get_first_valid_key()
|
api_key = await key_manager.get_random_valid_key()
|
||||||
if not api_key:
|
if not api_key:
|
||||||
raise HTTPException(status_code=503, detail="No valid API keys available to fetch models.")
|
raise HTTPException(status_code=503, detail="No valid API keys available to fetch models.")
|
||||||
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ async def list_models(
|
|||||||
operation_name = "list_models"
|
operation_name = "list_models"
|
||||||
async with handle_route_errors(logger, operation_name):
|
async with handle_route_errors(logger, operation_name):
|
||||||
logger.info("Handling models list request")
|
logger.info("Handling models list request")
|
||||||
api_key = await key_manager.get_first_valid_key()
|
api_key = await key_manager.get_random_valid_key()
|
||||||
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
||||||
return await openai_service.get_models(api_key)
|
return await openai_service.get_models(api_key)
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ async def list_models(
|
|||||||
operation_name = "list_models"
|
operation_name = "list_models"
|
||||||
async with handle_route_errors(logger, operation_name):
|
async with handle_route_errors(logger, operation_name):
|
||||||
logger.info("Handling models list request")
|
logger.info("Handling models list request")
|
||||||
api_key = await key_manager.get_first_valid_key()
|
api_key = await key_manager.get_random_valid_key()
|
||||||
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
||||||
return await model_service.get_gemini_openai_models(api_key)
|
return await model_service.get_gemini_openai_models(api_key)
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ async def list_models(
|
|||||||
logger.info("Handling Gemini models list request")
|
logger.info("Handling Gemini models list request")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api_key = await key_manager.get_first_valid_key()
|
api_key = await key_manager.get_random_valid_key()
|
||||||
if not api_key:
|
if not api_key:
|
||||||
raise HTTPException(status_code=503, detail="No valid API keys available to fetch models.")
|
raise HTTPException(status_code=503, detail="No valid API keys available to fetch models.")
|
||||||
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
logger.info(f"Using API key: {redact_key_for_logging(api_key)}")
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ class ConfigService:
|
|||||||
key_manager = await get_key_manager_instance()
|
key_manager = await get_key_manager_instance()
|
||||||
model_service = ModelService()
|
model_service = ModelService()
|
||||||
|
|
||||||
api_key = await key_manager.get_first_valid_key()
|
api_key = await key_manager.get_random_valid_key()
|
||||||
if not api_key:
|
if not api_key:
|
||||||
logger.error("No valid API keys available to fetch model list for UI.")
|
logger.error("No valid API keys available to fetch model list for UI.")
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
import random
|
||||||
from itertools import cycle
|
from itertools import cycle
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
@@ -195,6 +196,25 @@ class KeyManager:
|
|||||||
return ""
|
return ""
|
||||||
return self.api_keys[0]
|
return self.api_keys[0]
|
||||||
|
|
||||||
|
async def get_random_valid_key(self) -> str:
|
||||||
|
"""获取随机的有效API key"""
|
||||||
|
valid_keys = []
|
||||||
|
async with self.failure_count_lock:
|
||||||
|
for key in self.key_failure_counts:
|
||||||
|
if self.key_failure_counts[key] < self.MAX_FAILURES:
|
||||||
|
valid_keys.append(key)
|
||||||
|
|
||||||
|
if valid_keys:
|
||||||
|
return random.choice(valid_keys)
|
||||||
|
|
||||||
|
# 如果没有有效的key,返回第一个key作为fallback
|
||||||
|
if self.api_keys:
|
||||||
|
logger.warning("No valid keys available, returning first key as fallback.")
|
||||||
|
return self.api_keys[0]
|
||||||
|
|
||||||
|
logger.warning("API key list is empty, cannot get random valid key.")
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
_singleton_instance = None
|
_singleton_instance = None
|
||||||
_singleton_lock = asyncio.Lock()
|
_singleton_lock = asyncio.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user