ajuste identacao
This commit is contained in:
parent
4c7d346a3c
commit
a4ba9d02bc
110
groq_handler.py
110
groq_handler.py
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user