Spaces:
Sleeping
Sleeping
import os | |
import logging | |
from langchain.text_splitter import RecursiveCharacterTextSplitter | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
import chainlit as cl | |
from src.utils import get_docSearch, get_source | |
from src.model import load_chain | |
welcome_message = """ Upload your file here""" | |
async def start(): | |
await cl.Message("you are in ").send() | |
logging.info(f"app started") | |
files = None | |
while files is None: | |
files = await cl.AskFileMessage( | |
content=welcome_message, | |
accept=["text/plain", "application/pdf"], | |
max_size_mb=10, | |
timeout=90 | |
).send() | |
logging.info("uploader excecuted") | |
file = files[0] | |
msg = cl.Message(content=f"Processing `{type(files)}` {file.name}....") | |
await msg.send() | |
logging.info("processing started") | |
docsearch = get_docSearch(file,cl) | |
logging.info("document uploaded success") | |
chain = load_chain(docsearch) | |
logging.info(f"Model loaded successfully") | |
## let the user know when system is ready | |
msg.content = f"{file.name} processed. You begin asking questions" | |
await msg.update() | |
logging.info("processing completed") | |
cl.user_session.set("chain", chain) | |
async def main(message): | |
chain = cl.user_session.get("chain") | |
cb = cl.AsyncLangchainCallbackHandler( | |
stream_final_answer=True, answer_prefix_tokens=["FINAL","ANSWER"] | |
) | |
cb.answer_reached = True | |
res = await chain.acall(message, callbacks=[cb]) | |
answer = res["answer"] | |
sources = res["sources"].strip() | |
## get doc from user session | |
docs = cl.user_session.get("docs") | |
metadatas = [doc.metadata for doc in docs] | |
all_sources = [m["source"]for m in metadatas] | |
source_elements,answer = get_source(sources,all_sources,docs,cl) | |
if cb.has_streamed_final_answer: | |
cb.final_stream.elements = source_elements | |
await cb.final_stream.update() | |
else: | |
await cl.Message(content=answer, elements=source_elements).send() | |