| import gradio as gr |
| from rag_engine import RAGEngine |
|
|
| engine = RAGEngine() |
|
|
| |
|
|
| 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" |
|
|
| |
|
|
| 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]) |
|
|
| |
| demo.launch() |