Heng2004's picture
Update app.py
9c64bb2 verified
# app.py
import gradio as gr
from model_utils import laos_science_bot
from loader import manual_qa_table_data
from teacher_panel import (
teacher_save_add_overwrite,
teacher_update_current,
teacher_delete_current,
teacher_on_table_select,
teacher_rebuild_cache_click, # <--- 1. IMPORT THIS!
)
# Build Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🐘 Laos Natural Science Chatbot – ສໍາລັບນັກຮຽນ ມ.1 - ມ.4")
# ---------------- Student tab ----------------
with gr.Tab("👩‍🎓 Student Chat"):
gr.Markdown("ຖາມຄໍາຖາມວິທະຍາສາດທຳມະຊາດພາສາລາວໄດ້ເລີຍ.")
gr.ChatInterface(
fn=laos_science_bot,
title="",
description="",
examples=["ວິທະຍາສາດທຳມະຊາດແມ່ນຫຍັງ?"],
)
# ---------------- Teacher tab ----------------
with gr.Tab("👩‍🏫 Teacher Panel"):
gr.Markdown("ໜ້ານີ້ໃຫ້ຄູເພີ່ມ / ແກ້ໄຂ Q&A ເອງ.")
q_box = gr.Textbox(label="ຄໍາຖາມ (ພາສາລາວ)", lines=3)
a_box = gr.Textbox(label="ຄໍາຕອບ (ພາສາລາວ)", lines=4)
current_id_state = gr.State("")
with gr.Row():
btn_save = gr.Button("💾 Save Q&A (Add / Overwrite)")
btn_update = gr.Button("✏️ Update current")
btn_delete = gr.Button("🗑️ Delete current")
# 👇👇👇 2. ADD THIS NEW SECTION HERE 👇👇👇
gr.Markdown("---") # Horizontal Line
with gr.Row():
# This is the missing button!
btn_rebuild = gr.Button("⚡ Admin: Rebuild & Upload Cache (Click only when Curriculum changes)")
# 👆👆👆 END OF NEW SECTION 👆👆👆
status_md = gr.Markdown("")
qa_table = gr.Dataframe(
headers=["ID", "ຄໍາຖາມ", "ຄໍາຕອບ"],
value=manual_qa_table_data(),
interactive=True,
wrap=True,
row_count=(0, "dynamic"),
)
# wire buttons
btn_save.click(
fn=teacher_save_add_overwrite,
inputs=[q_box, a_box, current_id_state],
outputs=[q_box, a_box, current_id_state, qa_table, status_md],
)
btn_update.click(
fn=teacher_update_current,
inputs=[q_box, a_box, current_id_state],
outputs=[q_box, a_box, current_id_state, qa_table, status_md],
)
btn_delete.click(
fn=teacher_delete_current,
inputs=[current_id_state],
outputs=[q_box, a_box, current_id_state, qa_table, status_md],
)
# 👇👇👇 3. WIRE UP THE NEW BUTTON 👇👇👇
btn_rebuild.click(
fn=teacher_rebuild_cache_click,
inputs=None,
outputs=[status_md] # Show success message
)
# 👆👆👆 END OF NEW WIRE 👆👆👆
qa_table.select(
fn=teacher_on_table_select,
inputs=None,
outputs=[q_box, a_box, current_id_state, status_md],
)
# Auto-refresh on load
demo.load(fn=manual_qa_table_data, inputs=None, outputs=qa_table)
if __name__ == "__main__":
demo.launch()