|
""" |
|
Module: conversation_chain_singleton |
|
|
|
This module provides a singleton class, ConversationChainSingleton, for managing a conversation chain instance. |
|
|
|
Dependencies: |
|
- langchain.memory: Module providing memory functionalities for conversation chains. |
|
- langchain.chains: Module providing conversation chain functionalities. |
|
- langchain.llms: Module providing language model functionalities, particularly from HuggingFaceHub. |
|
|
|
Classes: |
|
- ConversationChainSingleton: A singleton class for managing a conversation chain instance. |
|
""" |
|
|
|
from langchain.memory import ConversationBufferMemory |
|
from langchain.chains import ConversationChain |
|
from langchain.llms import HuggingFaceHub |
|
|
|
class ConversationChainSingleton: |
|
""" |
|
A singleton class for managing a conversation chain instance. |
|
|
|
Attributes: |
|
- _instance: Private attribute holding the singleton instance. |
|
- conversation_chain: The conversation chain instance. |
|
|
|
Methods: |
|
- __new__(cls, *args, **kwargs): Creates a new instance of the ConversationChainSingleton class. |
|
- get_conversation_chain(self): Returns the conversation chain instance. |
|
|
|
Static Methods: |
|
- get_conversation_chain(): Creates and returns a conversational retrieval chain and a language model. |
|
""" |
|
|
|
_instance = None |
|
|
|
def __new__(cls, *args, **kwargs): |
|
if not cls._instance: |
|
cls._instance = super(ConversationChainSingleton, cls).__new__(cls) |
|
|
|
cls._instance.conversation_chain = cls.get_conversation_chain(cls._instance) |
|
return cls._instance |
|
|
|
@staticmethod |
|
def get_conversation_chain(instance): |
|
""" |
|
Create a conversational retrieval chain and a language model. |
|
|
|
Args: |
|
- instance: The instance of the ConversationChainSingleton class. |
|
|
|
Returns: |
|
- ConversationChain: The initialized conversation chain. |
|
""" |
|
llm = HuggingFaceHub( |
|
repo_id="mistralai/Mixtral-8x7B-Instruct-v0.1", |
|
model_kwargs={"max_length": 1048, "temperature": 0.2, "max_new_tokens": 256, "top_p": 0.95, "repetition_penalty": 1.0}, |
|
) |
|
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) |
|
conversation_chain = ConversationChain( |
|
llm=llm, verbose=True, memory=memory |
|
) |
|
return conversation_chain |
|
|