rag-chatbot / app /core /generator.py
Abeshith's picture
RAG Chatbot with LangChain, FastAPI, and service layer architecture
64d7fdf
from langchain_groq import ChatGroq
from langchain_core.messages import HumanMessage, SystemMessage
from app.config import config, settings
from app.utils.logger import logger
from typing import AsyncIterator
class LLMGenerator:
def __init__(self):
llm_config = config["models"]["llm"]
self.llm = ChatGroq(
model=llm_config["model_name"],
temperature=llm_config["temperature"],
max_tokens=llm_config["max_tokens"],
groq_api_key=settings.groq_api_key,
streaming=llm_config["streaming"]
)
logger.info(f"LLM initialized: {llm_config['model_name']}")
def generate(self, prompt: str, system_prompt: str = None) -> str:
messages = []
if system_prompt:
messages.append(SystemMessage(content=system_prompt))
messages.append(HumanMessage(content=prompt))
response = self.llm.invoke(messages)
return response.content
async def agenerate(self, prompt: str, system_prompt: str = None) -> str:
messages = []
if system_prompt:
messages.append(SystemMessage(content=system_prompt))
messages.append(HumanMessage(content=prompt))
response = await self.llm.ainvoke(messages)
return response.content
async def stream(self, prompt: str, system_prompt: str = None) -> AsyncIterator[str]:
messages = []
if system_prompt:
messages.append(SystemMessage(content=system_prompt))
messages.append(HumanMessage(content=prompt))
async for chunk in self.llm.astream(messages):
if chunk.content:
yield chunk.content
llm_generator = LLMGenerator()