| import os |
| import asyncio |
| from groq import AsyncGroq |
| from app.utils.key_manager import key_manager |
| import logging |
|
|
| logger = logging.getLogger(__name__) |
|
|
| async def get_groq_completion(messages: list, model: str = None) -> str: |
| if model is None: |
| model = os.getenv("GROQ_MODEL", "llama3-70b-8192") |
| |
| max_retries = len(key_manager.keys) |
| last_error = None |
|
|
| for _ in range(max_retries): |
| try: |
| api_key = key_manager.get_next_key() |
| client = AsyncGroq(api_key=api_key) |
| |
| response = await client.chat.completions.create( |
| messages=messages, |
| model=model, |
| temperature=0.7, |
| ) |
| return response.choices[0].message.content |
| except Exception as e: |
| logger.warning(f"Error using key: {e}. Retrying with next key...") |
| last_error = e |
| continue |
| |
| raise Exception(f"All API keys exhausted or failed. Last error: {last_error}") |
|
|