""" 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