Speak / src /agenticRAG /components /llm_factory.py
Alamgirapi's picture
Upload folder src
7038292 verified
from langchain_groq import ChatGroq
from langchain_openai import ChatOpenAI
from src.config.settings import settings
from typing import Union, Literal
class LLMFactory:
"""Factory for creating LLM instances"""
_groq_instance = None
_openai_instance = None
@classmethod
def get_llm(cls, provider: Literal["groq", "openai"] = "groq") -> Union[ChatGroq, ChatOpenAI]:
"""Get or create LLM instance (singleton pattern)"""
if provider == "groq":
if cls._groq_instance is None:
cls._groq_instance = ChatGroq(
model=settings.GROQ_MODEL,
temperature=settings.GROQ_TEMPERATURE,
groq_api_key=settings.GROQ_API_KEY
)
return cls._groq_instance
elif provider == "openai":
if cls._openai_instance is None:
cls._openai_instance = ChatOpenAI(
model=settings.OPENAI_MODEL,
temperature=settings.OPENAI_TEMPERATURE,
openai_api_key=settings.OPENAI_API_KEY
)
return cls._openai_instance
else:
raise ValueError(f"Unsupported provider: {provider}")
@classmethod
def create_new_llm(cls, provider: Literal["groq", "openai"] = "groq", **kwargs) -> Union[ChatGroq, ChatOpenAI]:
"""Create a new LLM instance with custom parameters"""
if provider == "groq":
return ChatGroq(
model=kwargs.get("model", settings.GROQ_MODEL),
temperature=kwargs.get("temperature", settings.GROQ_TEMPERATURE),
groq_api_key=kwargs.get("api_key", settings.GROQ_API_KEY)
)
elif provider == "openai":
return ChatOpenAI(
model=kwargs.get("model", settings.OPENAI_MODEL),
temperature=kwargs.get("temperature", settings.OPENAI_TEMPERATURE),
openai_api_key=kwargs.get("api_key", settings.OPENAI_API_KEY)
)
else:
raise ValueError(f"Unsupported provider: {provider}")
@classmethod
def get_groq_llm(cls) -> ChatGroq:
"""Convenience method to get Groq LLM"""
return cls.get_llm("groq")
@classmethod
def get_openai_llm(cls) -> ChatOpenAI:
"""Convenience method to get OpenAI LLM"""
return cls.get_llm("openai")
@classmethod
def reset_instances(cls):
"""Reset singleton instances (useful for testing)"""
cls._groq_instance = None
cls._openai_instance = None