Spaces:
Sleeping
Sleeping
| 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 | |
| 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}") | |
| 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}") | |
| def get_groq_llm(cls) -> ChatGroq: | |
| """Convenience method to get Groq LLM""" | |
| return cls.get_llm("groq") | |
| def get_openai_llm(cls) -> ChatOpenAI: | |
| """Convenience method to get OpenAI LLM""" | |
| return cls.get_llm("openai") | |
| def reset_instances(cls): | |
| """Reset singleton instances (useful for testing)""" | |
| cls._groq_instance = None | |
| cls._openai_instance = None |