Spaces:
Sleeping
Sleeping
| """ | |
| Groq API Service - LLM Integration | |
| """ | |
| from groq import Groq | |
| from typing import Optional, List, Dict, Any | |
| from src.config.settings import settings | |
| from src.api.core.logger import logger | |
| client: Optional[Groq] = None | |
| # Default model - MUST use 8B as 70B is deprecated | |
| DEFAULT_MODEL = "llama-3.1-8b-instant" | |
| def get_groq_client() -> Groq: | |
| """Get or create Groq client instance""" | |
| global client | |
| if client is None: | |
| client = Groq(api_key=settings.GROQ_API_KEY or "dummy") | |
| return client | |
| async def generate_response( | |
| messages: List[Dict[str, str]], | |
| model: str = None, | |
| temperature: float = 0.7, | |
| max_tokens: int = 4096, | |
| ) -> str: | |
| """ | |
| Generate response using Groq API | |
| """ | |
| try: | |
| groq_client = get_groq_client() | |
| # Use DEFAULT_MODEL - 70b is deprecated! | |
| model_name = model or getattr(settings, 'GROQ_MODEL', DEFAULT_MODEL) or DEFAULT_MODEL | |
| print(f"[DEBUG] Using model: {model_name}") | |
| response = groq_client.chat.completions.create( | |
| model=model_name, | |
| messages=messages, | |
| temperature=temperature, | |
| max_tokens=max_tokens, | |
| ) | |
| return response.choices[0].message.content | |
| except Exception as e: | |
| logger.error(f"Groq API error: {str(e)}") | |
| raise | |
| async def stream_response( | |
| messages: List[Dict[str, str]], | |
| model: str = None, | |
| temperature: float = 0.7, | |
| ) -> str: | |
| """Stream response from Groq API""" | |
| try: | |
| groq_client = get_groq_client() | |
| model_name = model or getattr(settings, 'GROQ_MODEL', DEFAULT_MODEL) or DEFAULT_MODEL | |
| stream = groq_client.chat.completions.create( | |
| model=model_name, | |
| messages=messages, | |
| temperature=temperature, | |
| stream=True, | |
| ) | |
| full_response = "" | |
| for chunk in stream: | |
| if chunk.choices[0].delta.content: | |
| full_response += chunk.choices[0].delta.content | |
| return full_response | |
| except Exception as e: | |
| logger.error(f"Groq streaming error: {str(e)}") | |
| raise | |