Spaces:
Sleeping
Sleeping
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"<style>{f.read()}</style>", unsafe_allow_html=True) | |
st.markdown(f""" | |
<div class=logo_area> | |
<img src="./app/static/ai.png"/> | |
</div> | |
""", unsafe_allow_html=True) | |
st.markdown("<h2 style='text-align: center;'> ViBidLawQA</h2>", 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""" | |
<div class="{message_class}"> | |
<img src="{avatar}" class="{avatar_class}" /> | |
<div class="stMarkdown">{message['content']}</div> | |
</div> | |
""", unsafe_allow_html=True) | |
if prompt := st.chat_input(placeholder='Tôi có thể giúp được gì cho bạn?'): | |
st.markdown(f""" | |
<div class="user-message"> | |
<img src="./app/static/human.png" class="user-avatar" /> | |
<div class="stMarkdown">{prompt}</div> | |
</div> | |
""", 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""" | |
<div class="assistant-message"> | |
<img src="./app/static/ai.png" class="assistant-avatar" /> | |
<div class="stMarkdown">{respond}</div> | |
</div> | |
""", unsafe_allow_html=True) | |
st.session_state.messages.append({'role': 'assistant', 'content': respond}) |