Skip to content

Commit 45ab90f

Browse files
authored
Allow chat handlers to be initialized in any order (#1268)
* lazy-initialize-retriever * add-retriever-property
1 parent 055d7b8 commit 45ab90f

File tree

1 file changed

+14
-5
lines changed
  • packages/jupyter-ai/jupyter_ai/chat_handlers

1 file changed

+14
-5
lines changed

packages/jupyter-ai/jupyter_ai/chat_handlers/ask.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)