import spaces import os import gradio as gr from ui import upload_document, chat, clear_chat custom_css = """ .gradio-container { max-width: 100% !important; padding: 1.5rem 2rem !important; margin: 0 !important; } .header-box { text-align: center; padding: 1rem; margin-bottom: 1rem; width: 100%; } .header-box h1 { margin-bottom: 0.5rem; } .header-box p { margin: 0.3rem 0; } .example-btn { border-radius: 8px !important; font-size: 0.88rem !important; flex: 1 !important; } .send-btn { background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important; color: white !important; border: none !important; font-weight: 600 !important; border-radius: 8px !important; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3) !important; } .send-btn:hover { background: linear-gradient(135deg, #1d4ed8 0%, #1e40af 100%) !important; box-shadow: 0 6px 16px rgba(37, 99, 235, 0.45) !important; } """ def user_submit(user_message, history): if not user_message or not user_message.strip(): return "", history updated_history = chat(user_message, history) return "", updated_history with gr.Blocks(title="Enterprise AI Document Intelligence Platform") as demo: gr.Markdown( """
# 🤖 Enterprise AI Document Intelligence Platform Upload a PDF and chat with your documents using
AI-powered Retrieval-Augmented Generation (RAG) *Powered by*
**Groq â€ĸ Sentence Transformers â€ĸ FAISS**
""" ) gr.Markdown("---") with gr.Row(): # Sidebar for PDF Ingestion (responsive 1/4 screen width) with gr.Column(scale=1, min_width=320): gr.Markdown("### 📄 Document Ingestion") upload = gr.File( label="Upload Enterprise PDF", file_types=[".pdf"], file_count="single" ) status = gr.Markdown("*No document indexed yet. Upload a PDF above.*") active_doc = gr.Markdown("â„šī¸ **Active Index:** Empty") clear_btn = gr.Button("đŸ—‘ī¸ Clear Chat History", variant="secondary") gr.Markdown( """ --- **System Stack:** - 📄 PyMuPDF PDF Text Extraction - 🧠 `all-MiniLM-L6-v2` Vector Embeddings - ⚡ FAISS Vector Similarity Index - 🤖 Groq `llama-3.3-70b-versatile` Engine """ ) # Main Chat Panel (expanding to fill remaining full width) with gr.Column(scale=3): gr.Markdown("### đŸ’Ŧ Enterprise Knowledge Chat") chatbot = gr.Chatbot( height=560, placeholder="💡 Upload a PDF document on the left, then ask questions here." ) gr.Markdown("#### 💡 Try Asking") with gr.Row(): ex1 = gr.Button("📄 Summarize this document", variant="secondary", size="sm", elem_classes=["example-btn"]) ex2 = gr.Button("đŸ› ī¸ List technical skills", variant="secondary", size="sm", elem_classes=["example-btn"]) ex3 = gr.Button("🚀 What projects are mentioned?", variant="secondary", size="sm", elem_classes=["example-btn"]) ex4 = gr.Button("📋 Give me a short overview", variant="secondary", size="sm", elem_classes=["example-btn"]) with gr.Row(): question = gr.Textbox( placeholder="Ask anything about the uploaded document...", show_label=False, scale=5, container=False ) ask = gr.Button("Send 🚀", variant="primary", scale=1, elem_classes=["send-btn"]) # Event Connections upload.upload( upload_document, inputs=upload, outputs=[status, active_doc] ) ask.click( user_submit, inputs=[question, chatbot], outputs=[question, chatbot] ) question.submit( user_submit, inputs=[question, chatbot], outputs=[question, chatbot] ) ex1.click( lambda h: user_submit("Summarize this document", h), inputs=[chatbot], outputs=[question, chatbot] ) ex2.click( lambda h: user_submit("List technical skills", h), inputs=[chatbot], outputs=[question, chatbot] ) ex3.click( lambda h: user_submit("What projects are mentioned?", h), inputs=[chatbot], outputs=[question, chatbot] ) ex4.click( lambda h: user_submit("Give me a short overview", h), inputs=[chatbot], outputs=[question, chatbot] ) clear_btn.click( clear_chat, inputs=[], outputs=[chatbot] ) if __name__ == "__main__": demo.launch( css=custom_css, theme=gr.themes.Soft(), ssr_mode=False )