File size: 2,625 Bytes
c6dc269
 
34e67a1
10379c1
cd67181
43ad650
 
 
cd67181
c6dc269
8775a91
43ad650
8775a91
 
 
 
34e67a1
8775a91
 
 
 
 
cd67181
8775a91
 
 
 
 
c6dc269
 
23171a7
4ade980
 
86088c2
 
9b8124b
86088c2
4ade980
 
c6dc269
23171a7
c6dc269
 
 
23171a7
c6dc269
 
 
23171a7
c6dc269
31a3643
c6dc269
23171a7
c6dc269
 
23171a7
c6dc269
31a3643
c6dc269
23171a7
c6dc269
 
 
23171a7
c6dc269
 
31a3643
c6dc269
31a3643
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import streamlit as st
import pandas as pd
from transformers import pipeline

# Load the anomalies data and convert all cells to strings
data = pd.read_csv('anomalies.csv', sep=',', decimal='.')
df = pd.DataFrame(data)
df.fillna("", inplace=True)
print(df.head())

def response(user_question):
    user_question = user_question.astype(str)
    if not isinstance(user_question, str):
        raise TypeError(f"Esperado uma string para a pergunta, mas recebeu {type(user_question)}")
    
    # Inicializa o pipeline para table-question-answering
    tqa = pipeline(task="table-question-answering", model="google/tapas-large-finetuned-wtq")
    
    # Obtém a resposta do modelo
    resposta = tqa(table=df, query=user_question)
    
    # Verifica se alguma célula foi retornada
    if 'cells' not in resposta or len(resposta['cells']) == 0:
        raise IndexError("Nenhuma célula foi retornada pelo modelo.")
    
    # Obtém a primeira célula da resposta
    final_response = resposta['cells'][0]
    
    return final_response

# Streamlit interface
st.markdown("""
<div style='display: flex; align-items: center;'>
    <div style='width: 40px; height: 40px; background-color: green; border-radius: 50%; margin-right: 5px;'></div>
    <div style='width: 40px; height: 40px; background-color: red; border-radius: 50%; margin-right: 5px;'></div>
    <div style='width: 40px; height: 40px; background-color: yellow; border-radius: 50%; margin-right: 5px;'></div>
    <span style='font-size: 40px; font-weight: bold;'>Chatbot do Tesouro RS</span>
</div>
""", unsafe_allow_html=True)

# Chat history
if 'history' not in st.session_state:
    st.session_state['history'] = []

# Input box for user question
user_question = st.text_input("Escreva sua questão aqui:", "")

if user_question:
    # Add person emoji when typing question
    st.session_state['history'].append(('👤', user_question))
    st.markdown(f"**👤 {user_question}**")
    
    # Generate the response
    bot_response = response(user_question)
    
    # Add robot emoji when generating response and align to the right
    st.session_state['history'].append(('🤖', bot_response))
    st.markdown(f"<div style='text-align: right'>**🤖 {bot_response}**</div>", unsafe_allow_html=True)

# Clear history button
if st.button("Limpar"):
    st.session_state['history'] = []

# Display chat history
for sender, message in st.session_state['history']:
    if sender == '👤':
        st.markdown(f"**👤 {message}**")
    elif sender == '🤖':
        st.markdown(f"<div style='text-align: right'>**🤖 {message}**</div>", unsafe_allow_html=True)