@@ -49,11 +49,20 @@ def __init__(self, *args, **kwargs):
4949
5050 self .parser .prog = "/ask"
5151 self .parser .add_argument ("query" , nargs = argparse .REMAINDER )
52- learn_chat_handler = self .chat_handlers .get ("/learn" )
53- if not isinstance (learn_chat_handler , LearnChatHandler ):
54- raise CustomLearnException ()
52+ # NOTE: devs should use self.retriever property to access the retriever
53+ self ._retriever = None # Will be set when accessed
5554
56- self ._retriever = Retriever (learn_chat_handler = learn_chat_handler )
55+ @property
56+ def retriever (self ):
57+ """Lazy-loads and caches the retriever instance"""
58+ if self ._retriever is None :
59+ learn_chat_handler = self .chat_handlers .get ("/learn" )
60+ if not isinstance (learn_chat_handler , LearnChatHandler ):
61+ raise CustomLearnException ()
62+
63+ self ._retriever = Retriever (learn_chat_handler = learn_chat_handler )
64+
65+ return self ._retriever # Return cached instance
5766
5867 def create_llm_chain (
5968 self , provider : Type [BaseProvider ], provider_params : Dict [str , str ]
@@ -69,7 +78,7 @@ def create_llm_chain(
6978
7079 self .llm_chain = ConversationalRetrievalChain .from_llm (
7180 self .llm ,
72- self ._retriever ,
81+ self .retriever ,
7382 memory = memory ,
7483 condense_question_prompt = CONDENSE_PROMPT ,
7584 verbose = False ,
0 commit comments