ajuste identacao

This commit is contained in:
Fábio Cavalcanti 2025-01-23 15:38:49 -03:00
parent 4c7d346a3c
commit a4ba9d02bc

View File

@ -41,58 +41,58 @@ async def get_working_groq_key(storage) -> Optional[str]:
return None return None
async def handle_groq_request(url: str, headers: dict, data: dict, storage) -> Tuple[bool, dict, str]: async def handle_groq_request(url: str, headers: dict, data: dict, storage) -> Tuple[bool, dict, str]:
""" """
Handle GROQ API request with retries and key rotation. Handle GROQ API request with retries and key rotation.
Returns: (success, response_data, error_message) Returns: (success, response_data, error_message)
""" """
max_retries = len(storage.get_groq_keys()) max_retries = len(storage.get_groq_keys())
for attempt in range(max_retries): for attempt in range(max_retries):
try: try:
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
async with session.post(url, headers=headers, json=data) as response: async with session.post(url, headers=headers, json=data) as response:
response_data = await response.json() response_data = await response.json()
if response.status == 200: if response.status == 200:
# Validate response content # Validate response content
if "choices" in response_data and response_data["choices"]: if "choices" in response_data and response_data["choices"]:
content = response_data["choices"][0].get("message", {}).get("content") content = response_data["choices"][0].get("message", {}).get("content")
if content and await validate_transcription_response(content): if content and await validate_transcription_response(content):
return True, response_data, "" return True, response_data, ""
# Handle specific error cases # Handle specific error cases
error_msg = response_data.get("error", {}).get("message", "") error_msg = response_data.get("error", {}).get("message", "")
if "organization_restricted" in error_msg or "invalid_api_key" in error_msg: if "organization_restricted" in error_msg or "invalid_api_key" in error_msg:
# Try next key # Try next key
new_key = await get_working_groq_key(storage) new_key = await get_working_groq_key(storage)
if new_key: if new_key:
headers["Authorization"] = f"Bearer {new_key}" headers["Authorization"] = f"Bearer {new_key}"
storage.add_log("INFO", "Tentando nova chave GROQ após erro", { storage.add_log("INFO", "Tentando nova chave GROQ após erro", {
"error": error_msg, "error": error_msg,
"attempt": attempt + 1 "attempt": attempt + 1
}) })
continue continue
return False, {}, f"API Error: {error_msg}" return False, {}, f"API Error: {error_msg}"
except Exception as e: except Exception as e:
# Tratamento específico para erros de conexão # Tratamento específico para erros de conexão
if "Connection" in str(e) and attempt < max_retries - 1: if "Connection" in str(e) and attempt < max_retries - 1:
storage.add_log("WARNING", "Erro de conexão, tentando novamente", { storage.add_log("WARNING", "Erro de conexão, tentando novamente", {
"error": str(e), "error": str(e),
"attempt": attempt + 1 "attempt": attempt + 1
}) })
await asyncio.sleep(1) # Espera 1 segundo antes de retry await asyncio.sleep(1) # Espera 1 segundo antes de retry
continue continue
# Se for última tentativa ou outro tipo de erro # Se for última tentativa ou outro tipo de erro
if attempt == max_retries - 1: if attempt == max_retries - 1:
storage.add_log("ERROR", "Todas tentativas falharam", { storage.add_log("ERROR", "Todas tentativas falharam", {
"error": str(e), "error": str(e),
"total_attempts": max_retries "total_attempts": max_retries
}) })
return False, {}, f"Request failed: {str(e)}" return False, {}, f"Request failed: {str(e)}"
continue continue
storage.add_log("ERROR", "Todas as chaves GROQ falharam") storage.add_log("ERROR", "Todas as chaves GROQ falharam")
return False, {}, "All GROQ keys exhausted" return False, {}, "All GROQ keys exhausted"