Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
from dataset_loader import load_dataset | |
from dotenv import load_dotenv | |
load_dotenv() | |
if not os.path.isdir("low_partners_chatbot_data"): | |
load_dataset() | |
from low_partners_chatbot_data.agent import Agent | |
import gradio as gr | |
import fitz # PyMuPDF | |
from PIL import Image | |
import io | |
import os | |
from uuid import uuid4 | |
agent = Agent() | |
def extract_pages_from_multiple_pdfs(pdf_info): | |
images = [] | |
for pdf_path, page_numbers in pdf_info.items(): | |
if not os.path.exists(pdf_path): | |
print(f"PDF file not found: {pdf_path}") | |
continue | |
try: | |
doc = fitz.open(pdf_path) | |
for page_num in page_numbers: | |
if 1 <= page_num <= len(doc): | |
page = doc.load_page(page_num - 1) | |
pix = page.get_pixmap( | |
matrix=fitz.Matrix(2, 2) | |
) # Increase resolution | |
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) | |
images.append( | |
(img, f"{os.path.basename(pdf_path)} - Page {page_num}") | |
) | |
else: | |
print(f"Page {page_num} is out of range for {pdf_path}") | |
doc.close() | |
except Exception as e: | |
print(f"An error occurred with {pdf_path}: {str(e)}") | |
return images | |
def get_answer(query, chat_history, session_id): | |
print(f"Session ID: {session_id}") | |
answer, pdf_info = agent.ask(query, session_id) | |
images = [] | |
if pdf_info: | |
images = extract_pages_from_multiple_pdfs(pdf_info) | |
# Update chat history | |
chat_history.append((query, answer)) | |
return chat_history, images, session_id | |
with gr.Blocks(title="Low & Partners Chatbot") as demo: | |
# Initialize session ID | |
session_id = gr.State(value=lambda: str(uuid4())) | |
gr.Markdown("## Low & Partners Chatbot") | |
gr.Markdown( | |
"This is a chatbot for Low & Partners Law Firm. Ask me anything related to law! \n" | |
"Note: The chat session persists until you refresh the page." | |
) | |
with gr.Row(): | |
# Left Column - Chat Interface | |
with gr.Column(scale=1): | |
chatbot = gr.Chatbot(label="Conversation History") | |
query_input = gr.Textbox( | |
label="Enter your legal query", | |
placeholder="Type your question here and press Enter...", | |
lines=3, | |
) | |
submit_btn = gr.Button("Submit", variant="primary") | |
# Right Column - PDF References | |
with gr.Column(scale=1): | |
gallery = gr.Gallery( | |
label="Reference Documents from Latest Answer", | |
allow_preview=True, | |
preview=True, | |
object_fit="contain", | |
height=600, | |
) | |
# Event handlers for both button click and Enter key | |
submit_event = submit_btn.click( | |
fn=get_answer, | |
inputs=[query_input, chatbot, session_id], | |
outputs=[chatbot, gallery, session_id], | |
).then(lambda: "", outputs=[query_input]) | |
query_input.submit( | |
fn=get_answer, | |
inputs=[query_input, chatbot, session_id], | |
outputs=[chatbot, gallery, session_id], | |
).then(lambda: "", outputs=[query_input]) | |
if __name__ == "__main__": | |
demo.launch() | |