import gradio as gr from textwrap import dedent import os from chains import setup_chain_v2 chain = setup_chain_v2() with gr.Blocks() as demo: with gr.Row(): # --- Nhóm các thành phần nhập liệu --- with gr.Column(): with gr.Group(): # Nhóm "Thái độ" attitude_components = [ gr.Radio(["Đi học đầy đủ", "Chưa đi học đầy đủ"], label="Thái độ", show_label=True), gr.Radio(["Đi học đúng giờ", "Vẫn còn đi học muộn"], show_label=False), gr.Radio(["Hoàn thành BTVN", "Chưa hoàn thành đầy đủ BTVN"], show_label=False), gr.Radio(["Tập trung trong lớp học", "Chưa tập trung trong lớp học"], show_label=False), gr.Radio(["Sôi nổi, hào hứng trong các buổi học", "Cần được động viên, khích lệ thường xuyên"], show_label=False), ] with gr.Group(): # Nhóm "Kiến thức" knowleadge_components = [ gr.Radio(["Có vốn từ vựng phong phú", "Có vốn từ vựng cơ bản", "Cần trau dồi vốn từ vựng"], label="Kiến thức"), gr.Textbox(lines=1, label="Nhớ và sử dụng linh hoạt các từ vựng đã học trong chủ điểm:", show_label=True), gr.Textbox(lines=1, label="Chưa nhớ từ vựng trong chủ điểm:", show_label=True), gr.Radio(["Có thể sử dụng cấu trúc ngữ pháp thành thạo", "Có thể sử dụng cấu trúc ngữ pháp cơ bản", "Cần trau dồi cấu trúc ngữ pháp"], show_label=False), gr.Textbox(lines=1, label="Các cấu trúc ngữ pháp đã thành thạo:", show_label=True), gr.Textbox(lines=1, label="Các cấu trúc ngữ pháp chưa thành thạo:", show_label=True), ] with gr.Group(): # Nhóm "Tương tác" interaction_components = [ gr.Radio(["Tích cực tham gia vào các hoạt động trên lớp", "Ít tham gia vào các hoạt động trên lớp"], label="Tương tác"), gr.Radio(["Chăm chú nghe giảng", "Chưa chăm chú nghe giảng"], show_label=False), gr.Radio(["Hăng hái giơ tay phát biểu và xây dựng bài", "Ít tương tác và chưa chủ động tham gia xây dựng bài"], show_label=False), ] with gr.Column(): # Nhóm "Kỹ năng" skill_components = [ gr.Radio(["Nghe hiểu và phản xạ tốt đối với các yêu cầu của thầy cô", "Phản xạ còn chậm trước các yêu cầu của thầy cô"], label="Kỹ năng", info="", show_label=True), gr.Radio(["Thực hành thành thạo các dạng bài nghe", "Cần rèn luyện thêm để cải thiện kỹ năng nghe với những dạng bài khác nhau"], label="", info="", show_label=False), gr.Radio(["Có giọng nói to, rõ ràng", "Giọng nói đôi khi nhỏ và không rõ ràng"], label="", info="", show_label=False), gr.Radio(["Phát âm đúng, đặc biệt là các âm cuối", "Phát âm chưa hoàn toàn chính xác, đặc biệt là các âm cuối"], label="", info="", show_label=False), gr.Radio(["Có khả năng nói trôi chảy, lưu loát", "Cần chú ý hơn về ngữ điệu khi nói, thỉnh thoảng còn nói ngập ngừng, chưa thực sự lưu loát"], label="", info="", show_label=False), gr.Radio(["Đọc hiểu tốt và làm đúng yêu cầu đề bài", "Cần luyện tập kỹ năng đọc để nắm vững toàn bộ yêu cầu đề bài"], label="", info="", show_label=False), gr.Radio(["Hiểu được nội dung chính và chi tiết quan trọng của bài đọc", "Cần luyện tập thêm để hiểu được nội dung chính và chi tiết quan trọng trong bài đọc"], label="", info="", show_label=False), gr.Radio(["Viết đúng chính tả", "Đôi khi viết sai chính tả"], label="", info="", show_label=False), gr.Radio(["Viết đúng ngữ pháp và cấu trúc câu", "Khi viết còn mắc lỗi ngữ pháp và cấu trúc câu"], label="", info="", show_label=False), gr.Radio(["Sử dụng từ vựng phong phú khi viết", "Từ vựng sử dụng chưa đa dạng"], label="", info="", show_label=False), gr.Radio(["Khi viết diễn đạt ý tưởng rõ ràng và mạch lạc", "Khi viết diễn đạt ý tưởng chưa rõ ràng và mạch lạc"], label="", info="", show_label=False), ] # --- Nhóm các thành phần xuất kết quả --- with gr.Column(): # debug_output = gr.Textbox(label="Thông tin đánh giá", show_copy_button=True) attitude_output = gr.Textbox(label="Thái độ", show_copy_button=True) knowleadge_output = gr.Textbox(label="Kiến thức", show_copy_button=True) skill_output = gr.Textbox(label="Kỹ năng", show_copy_button=True) interaction_output = gr.Textbox(label="Tương tác", show_copy_button=True) # detail_output = gr.Textbox(label="Chi tiết", show_copy_button=True) greet_btn = gr.Button("Tạo nhận xét") # --- Hàm xử lý dữ liệu và tạo nhận xét --- def gen(*args): # Tách các tham số thành các nhóm tương ứng attitude_data = args[:5] knowleadge_data = args[5:11] skill_data = args[11:22] interaction_data = args[22:] attitude_sentence = "" for data in attitude_data: if data: attitude_sentence += data + ". " knowleadge_sentence = "" for idx, data in enumerate(knowleadge_data): if data: if idx == 1: knowleadge_sentence += "Nhớ và sử dụng linh hoạt các từ vựng đã học trong chủ điểm: " + data + ". " elif idx == 2: knowleadge_sentence += "chưa nhớ từ vựng trong chủ điểm: " + data + ". " elif idx == 4: knowleadge_sentence += "Các cấu trúc đã thành thạo: " + data + ". " elif idx == 5: knowleadge_sentence += "Các cấu trúc chưa thành thạo: " + data + ". " else: knowleadge_sentence += data + ". " skill_sentence = "" for data in skill_data: if data: skill_sentence += data + ". " interaction_sentence = "" for data in interaction_data: if data: interaction_sentence += data + ". " full_sentence = dedent(f"""\ Thái độ: {attitude_sentence.strip() if len(attitude_sentence.strip()) else "Không có đánh giá"} Kiến thức: {knowleadge_sentence.strip()if len(knowleadge_sentence.strip()) else "Không có đánh giá"} Kỹ năng: {skill_sentence.strip()if len(skill_sentence.strip()) else "Không có đánh giá"} Tương tác: {interaction_sentence.strip()if len(interaction_sentence.strip()) else "Không có đánh giá"} """) result = chain.invoke({"query": full_sentence}) return { # debug_output: full_sentence.strip(), attitude_output: result['atitude'], knowleadge_output: result['knowleadge'], skill_output: result['skill'], interaction_output: result['interaction'], # detail_output: result['detail'] } greet_btn.click(gen, inputs=[*attitude_components, *knowleadge_components, *skill_components, *interaction_components], outputs=[attitude_output, knowleadge_output, skill_output, interaction_output]) if __name__ == "__main__": demo.launch(auth=(os.getenv('username'), os.getenv('password')))