import gradio as gr from rag_engine import RAGEngine engine = RAGEngine() # ── Functions ───────────────────────── def load_pdf(file): if not file: return "Upload file", gr.update(interactive=False) return engine.load_pdf(file.name), gr.update(interactive=True) def load_url(url): if not url: return "Enter URL", gr.update(interactive=False) return engine.load_url(url), gr.update(interactive=True) def load_text(text): if not text: return "Enter text", gr.update(interactive=False) return engine.load_text(text), gr.update(interactive=True) def chat(msg, history): if not msg: return history, "" ans = engine.answer(msg) history = history or [] history.append((msg, ans)) return history, "" def reset(): engine.reset() return [], "", "Reset done" # ── UI ─────────────────────────────── with gr.Blocks(title="RAG Chatbot") as demo: gr.Markdown("# 🤖 RAG Chatbot") with gr.Row(): with gr.Column(): pdf = gr.File() btn_pdf = gr.Button("Load PDF") url = gr.Textbox() btn_url = gr.Button("Load URL") text = gr.Textbox(lines=5) btn_text = gr.Button("Load Text") status = gr.Textbox(value="Load data", interactive=False) with gr.Column(): chatbot = gr.Chatbot() msg = gr.Textbox( placeholder="Ask something...", interactive=False ) send = gr.Button("Send") reset_btn = gr.Button("Reset") btn_pdf.click(load_pdf, pdf, [status, msg]) btn_url.click(load_url, url, [status, msg]) btn_text.click(load_text, text, [status, msg]) send.click(chat, [msg, chatbot], [chatbot, msg]) msg.submit(chat, [msg, chatbot], [chatbot, msg]) reset_btn.click(reset, outputs=[chatbot, msg, status]) # ✅ IMPORTANT (Gradio 6 style) demo.launch()