| import os | |
| from dotenv import load_dotenv | |
| from langchain_groq import ChatGroq | |
| # Load environment variables (e.g., GROQ_API_KEY) | |
| load_dotenv() | |
| class GroqLLM: | |
| """ | |
| Wrapper for Groq API using llama-3.1-8b-instant. | |
| """ | |
| def __init__(self, model_id: str = "llama-3.1-8b-instant"): | |
| self.model_id = model_id | |
| print(f"Initializing Groq LLM: {self.model_id}") | |
| self.llm = ChatGroq( | |
| model=self.model_id, | |
| temperature=0.1, # Low temperature for factual medical RAG to prevent hallucination | |
| groq_api_key=os.getenv("GROQ_API_KEY") | |
| ) | |
| def get_llm(self): | |
| """Returns the LangChain-compatible LLM.""" | |
| return self.llm | |
| def generate_stream(self, prompt: str): | |
| """ | |
| Generates text while natively streaming chunks from ChatGroq. | |
| Yields plain string chunks to maintain compatibility with the UI. | |
| """ | |
| for chunk in self.llm.stream(prompt): | |
| if chunk.content: | |
| yield chunk.content | |