File size: 3,184 Bytes
03d6e86
 
 
 
 
 
bafee93
57c5821
49124ad
de6d203
57c5821
49124ad
57c5821
5f82549
 
bafee93
 
 
 
b1a6dfa
de6d203
048e2e2
03d6e86
 
bafee93
 
 
57c5821
b1a6dfa
 
5f82549
57c5821
bafee93
 
5f82549
 
57c5821
b1a6dfa
bafee93
b1a6dfa
 
 
 
03d6e86
 
 
 
 
57c5821
03d6e86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9adca6f
03d6e86
 
 
 
 
 
 
 
 
 
 
 
 
 
57c5821
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import streamlit as st
import pandas as pd
import torch
from transformers import pipeline
import datetime

# Load the CSV file
df = pd.read_csv("anomalies.csv", quotechar='"')

# Convert 'real' column to standard float format and then to strings
df['real'] = df['real'].apply(lambda x: f"{x:.2f}")

# Fill NaN values and convert all columns to strings
df = df.fillna('').astype(str)

# Subset the DataFrame for the relevant query
def subset_dataframe(df, date, group_keyword):
    subset_df = df[(df['ds'] == date) & (df['Group'].str.contains(group_keyword, case=False))]
    return subset_df

# Function to generate a response using the TAPAS model
def response(user_question, df):
    a = datetime.datetime.now()

    # Subset the DataFrame for December 2022 and IPVA
    subset_df = subset_dataframe(df, "2022-12-01", "IPVA")

    # Initialize the TAPAS model
    tqa = pipeline(task="table-question-answering", model="google/tapas-large-finetuned-wtq", 
                   tokenizer_kwargs={"clean_up_tokenization_spaces": False})

    # Debugging information
    print("Subset DataFrame shape:", subset_df.shape)
    print("Subset DataFrame head:\n", subset_df.head())
    print("User question:", user_question)

    # Query the TAPAS model
    try:
        answer = tqa(table=subset_df, query=user_question)['answer']
    except IndexError as e:
        print(f"Error: {e}")
        answer = "Error occurred: " + str(e)
    
    query_result = {
        "Resposta": answer
    }

    b = datetime.datetime.now()
    print("Time taken:", b - a)

    return query_result

# 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 human emoji when user asks a question
    st.session_state['history'].append(('👤', user_question))
    st.markdown(f"**👤 {user_question}**")
    
    # Generate the response
    bot_response = response(user_question, df)["Resposta"]
    
    # 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)