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