from typing import Optional, Generator from groq import Groq class LLMHandler: def __init__( self, api_key: str, model: str = "llama-3.1-8b-instant", temperature: float = 0.1, max_tokens: int = 2048, timeout: int = 10, ): if not api_key: raise ValueError( "GROQ_API_KEY is not set. Set it via environment variable or config." ) self.client = Groq(api_key=api_key, timeout=timeout) self.model = model self.temperature = temperature self.max_tokens = max_tokens def generate(self, prompt: str) -> Optional[str]: try: response = self.client.chat.completions.create( model=self.model, messages=[{"role": "user", "content": prompt}], temperature=self.temperature, max_tokens=self.max_tokens, ) return response.choices[0].message.content except Exception as e: return None def generate_stream(self, prompt: str) -> Generator[str, None, None]: try: stream = self.client.chat.completions.create( model=self.model, messages=[{"role": "user", "content": prompt}], temperature=self.temperature, max_tokens=self.max_tokens, stream=True, ) for chunk in stream: delta = chunk.choices[0].delta.content if chunk.choices else "" if delta: yield delta except Exception as e: yield f"[Error: {e}]"