amkyawdev's picture
Initial commit - AmkyawDev Coder Backend
dac1631 verified
Raw
History Blame Contribute Delete
2.13 kB
"""
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