AraRAG / app.py
Yaser Abdelaziz
Initial commit
b5acc22
import fitz
import gradio as gr
from dotenv import load_dotenv
load_dotenv(override=True)
from rag import RAG
from utils import format_page
def add_message(history, message):
if message["files"] is not None and len(message["files"]) > 0:
file_path = message["files"][0]
history.append([file_path, ""])
else:
if message["text"] is not None:
history.append((message["text"], None))
return history
def bot(history, message, pdf_file_content):
rag = RAG()
if message["files"] is not None and len(message["files"]) > 0:
file_path = message["files"][0]
if file_path.endswith(".pdf"):
with fitz.open(file_path) as doc:
history[-1][1] = ""
for page in doc:
cont, page_content = format_page(page)
if cont:
continue
pdf_file_content += "\n\n" + page_content
history[-1][1] += "\n\n" + page_content
yield history, gr.MultimodalTextbox(value=None, interactive=False), pdf_file_content
rag.ingest_text(pdf_file_content)
else:
for answer in rag(message, stream=True):
history[-1][1] = answer
yield history, gr.MultimodalTextbox(value=None, interactive=False), pdf_file_content
with gr.Blocks() as demo:
pdf_file_content = gr.State("")
chatbot = gr.Chatbot(
[],
elem_id="chatbot",
bubble_full_width=False
)
chat_input = gr.MultimodalTextbox(interactive=True, file_types=[".pdf"], placeholder="Enter message or upload file...", show_label=False)
chat_msg = chat_input.submit(add_message, [chatbot, chat_input], chatbot)
bot_msg = chat_msg.then(bot, [chatbot, chat_input, pdf_file_content], [chatbot, chat_input, pdf_file_content], api_name="bot_response")
bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])
demo.queue()
demo.launch()