Spaces:
Running
Running
File size: 3,353 Bytes
c6dc269 ff6536f de6fbce c6dc269 0e56089 1f0dffd 40fe707 827d04a 6febf59 23171a7 827d04a 23171a7 827d04a 23171a7 c6dc269 10379c1 23171a7 c6dc269 23171a7 c6dc269 23171a7 c6dc269 23171a7 d0b6b88 23171a7 c6dc269 d0b6b88 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import streamlit as st
import pandas as pd
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
import os
os.system("!GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/meta-llama/Llama-2-7b")
hf_token = os.getenv("HF_TOKEN")
token = os.getenv("HF_TOKEN")
# Load the tokenizer
model_name = "meta-llama/Llama-2-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Load the model
model = AutoModelForCausalLM.from_pretrained(model_name)
# Apply dynamic quantization for CPU
model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8
)
# Move model to CPU
device = torch.device("cpu")
model = model.to(device)
# Set the padding token to the end-of-sequence token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
# Load the anomalies data
df = pd.read_csv('anomalies.csv', sep=',', decimal='.')
# Function to generate a response
def response(question):
prompt = f"Considerando os dados: {df.to_string(index=False)}, onde a coluna 'ds' está em formato DateTime, a coluna 'real' é o valor da despesa e a coluna 'group' é o grupo da despesa. Pergunta: {question}"
inputs = tokenizer(prompt, return_tensors='pt', padding='max_length', truncation=True, max_length=256).to(device)
generated_ids = model.generate(
inputs['input_ids'],
attention_mask=inputs['attention_mask'],
max_length=inputs['input_ids'].shape[1] + 50,
temperature=0.7,
top_p=0.9,
no_repeat_ngram_size=2,
num_beams=3,
)
generated_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
final_response = generated_text.split("Resposta:")[-1].split(".")[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)
|