import streamlit as st import torch from transformers import pipeline st.set_page_config(page_title="ViBidLawQA - Hệ thống hỏi đáp trực tuyến luật Việt Nam", page_icon="./app/static/ai.png", layout="centered", initial_sidebar_state="expanded") with open("./static/styles.css") as f: st.markdown(f"", unsafe_allow_html=True) st.markdown(f"""
""", unsafe_allow_html=True) st.markdown("

ViBidLawQA

", unsafe_allow_html=True) context = st.sidebar.text_area(label='Nội dung văn bản pháp luật Việt Nam:', placeholder='Vui lòng nhập nội dung văn bản pháp luật Việt Nam tại đây...', height=925) device = 0 if torch.cuda.is_available() else -1 if 'model' not in st.session_state: print('Some errors occurred!') st.session_state.model = pipeline("question-answering", model='./model/', device=device) def get_answer(context, question): return st.session_state.model(context=context, question=question, max_answer_len=512) if 'messages' not in st.session_state: st.session_state.messages = [] for message in st.session_state.messages: if message['role'] == 'assistant': avatar_class = "assistant-avatar" message_class = "assistant-message" avatar = './app/static/ai.png' else: avatar_class = "user-avatar" message_class = "user-message" avatar = './app/static/human.png' st.markdown(f"""
{message['content']}
""", unsafe_allow_html=True) if prompt := st.chat_input(placeholder='Tôi có thể giúp được gì cho bạn?'): st.markdown(f"""
{prompt}
""", unsafe_allow_html=True) st.session_state.messages.append({'role': 'user', 'content': prompt}) respond = get_answer(context=context, question=prompt)['answer'] respond = respond.strip() respond = respond.rstrip('.,!?;:') respond = respond.capitalize() if not respond.endswith('.'): respond += '.' st.markdown(f"""
{respond}
""", unsafe_allow_html=True) st.session_state.messages.append({'role': 'assistant', 'content': respond})