@@ -49,11 +49,20 @@ def __init__(self, *args, **kwargs):
49
49
50
50
self .parser .prog = "/ask"
51
51
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
55
54
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
57
66
58
67
def create_llm_chain (
59
68
self , provider : Type [BaseProvider ], provider_params : Dict [str , str ]
@@ -69,7 +78,7 @@ def create_llm_chain(
69
78
70
79
self .llm_chain = ConversationalRetrievalChain .from_llm (
71
80
self .llm ,
72
- self ._retriever ,
81
+ self .retriever ,
73
82
memory = memory ,
74
83
condense_question_prompt = CONDENSE_PROMPT ,
75
84
verbose = False ,
0 commit comments