thigobr commited on
Commit
d25c837
·
1 Parent(s): cc5b2ab

Add PostMessageHandler try to fix deployment

Browse files
Files changed (1) hide show
  1. app.py +41 -0
app.py CHANGED
@@ -3,6 +3,7 @@ import pandas as pd
3
  import os
4
  from langchain.document_loaders import CSVLoader
5
  from langchain.text_splitter import RecursiveCharacterTextSplitter
 
6
  from langchain_core.output_parsers import StrOutputParser
7
  from langchain_core.prompts import ChatPromptTemplate
8
  from langchain_core.runnables import RunnablePassthrough, RunnableConfig
@@ -97,3 +98,43 @@ async def on_message(message: cl.Message):
97
  await msg.stream_token(chunk)
98
 
99
  await msg.send()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  import os
4
  from langchain.document_loaders import CSVLoader
5
  from langchain.text_splitter import RecursiveCharacterTextSplitter
6
+ from langchain_core.callbacks import BaseCallbackHandler
7
  from langchain_core.output_parsers import StrOutputParser
8
  from langchain_core.prompts import ChatPromptTemplate
9
  from langchain_core.runnables import RunnablePassthrough, RunnableConfig
 
98
  await msg.stream_token(chunk)
99
 
100
  await msg.send()
101
+
102
+ @cl.on_message
103
+ async def on_message(message: cl.Message):
104
+ runnable = cl.user_session.get("runnable_chain")
105
+ msg = cl.Message(content="")
106
+
107
+ class PostMessageHandler(BaseCallbackHandler):
108
+ """
109
+ Callback handler for handling the retriever and LLM processes.
110
+ Used to post the sources of the retrieved documents as a Chainlit element.
111
+ """
112
+
113
+ def __init__(self, msg: cl.Message):
114
+ BaseCallbackHandler.__init__(self)
115
+ self.msg = msg
116
+ self.sources = set() # To store unique pairs
117
+
118
+ def on_retriever_end(self, documents, *, run_id, parent_run_id, **kwargs):
119
+ for d in documents:
120
+ source_page_pair = (d.metadata['source'], d.metadata['page'])
121
+ self.sources.add(source_page_pair) # Add unique pairs to the set
122
+
123
+ def on_llm_end(self, response, *, run_id, parent_run_id, **kwargs):
124
+ if len(self.sources):
125
+ sources_text = "\n".join([f"{source}#page={page}" for source, page in self.sources])
126
+ self.msg.elements.append(
127
+ cl.Text(name="Sources", content=sources_text, display="inline")
128
+ )
129
+
130
+ async with cl.Step(type="run", name="Movie Assistant"):
131
+ async for chunk in runnable.astream(
132
+ message.content,
133
+ config=RunnableConfig(callbacks=[
134
+ cl.LangchainCallbackHandler(),
135
+ PostMessageHandler(msg)
136
+ ]),
137
+ ):
138
+ await msg.stream_token(chunk)
139
+
140
+ await msg.send()