""" 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 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) 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 Args: messages: List of message dicts with 'role' and 'content' model: Model name (defaults to settings.GROQ_MODEL) temperature: Sampling temperature max_tokens: Maximum tokens to generate Returns: Generated response string """ try: groq_client = get_groq_client() model = model or settings.GROQ_MODEL response = groq_client.chat.completions.create( model=model, 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 = model or settings.GROQ_MODEL stream = groq_client.chat.completions.create( model=model, 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