Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import requests
|
3 |
+
import dotenv
|
4 |
+
import streamlit as st
|
5 |
+
from transformers import AutoTokenizer
|
6 |
+
|
7 |
+
dotenv.load_dotenv()
|
8 |
+
token = os.environ['TOKEN_HF']
|
9 |
+
headers = {'Authorization': f'Bearer {token}'}
|
10 |
+
|
11 |
+
modelos = {
|
12 |
+
'meta-llama/Meta-Llama-3.1-8B-Instruct': '<|end_header_id|>\n',
|
13 |
+
'mistralai/Mixtral-8x7B-Instruct-v0.1': '[/INST]'
|
14 |
+
}
|
15 |
+
|
16 |
+
ofertas = ['Atualização', 'Quitação', 'Renegociação']
|
17 |
+
opcoes_classificacao = ["Segunda via de boleto", "Conhecer as ofertas", "Renegociação", "Atualização", "Quitação"]
|
18 |
+
|
19 |
+
|
20 |
+
modelo = st.selectbox('Selecione um modelo:', options=modelos)
|
21 |
+
token_modelo = modelos[modelo]
|
22 |
+
|
23 |
+
if ('modelo_atual' not in st.session_state or st.session_state['modelo_atual'] != modelo):
|
24 |
+
st.session_state['modelo_atual'] = modelo
|
25 |
+
st.session_state['mensagens'] = [ {"role": "system", "content": "Você é um atendente de central de atendimento de negociação de dívidas. "
|
26 |
+
"Você é empático e gostaria sempre de entender a situação do cliente, como o que o levou a ficar em dívida. Seja sucinto nas suas respostas."},]
|
27 |
+
|
28 |
+
nome_modelo = st.session_state['modelo_atual']
|
29 |
+
tokenizer = AutoTokenizer.from_pretrained(nome_modelo, token=token)
|
30 |
+
url = f'https://api-inference.huggingface.co/models/{nome_modelo}'
|
31 |
+
url_classificacao = f'https://api-inference.huggingface.co/models/facebook/bart-large-mnli'
|
32 |
+
mensagens = st.session_state['mensagens']
|
33 |
+
|
34 |
+
area_chat = st.empty()
|
35 |
+
pergunta_usuario = st.chat_input('Faça sua pergunta aqui: ')
|
36 |
+
if pergunta_usuario:
|
37 |
+
payload = {
|
38 |
+
"inputs": pergunta_usuario,
|
39 |
+
"parameters": {
|
40 |
+
"candidate_labels": opcoes_classificacao
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
response = requests.post(url_classificacao, headers=headers, json=payload)
|
45 |
+
# Verifique a resposta
|
46 |
+
if response.status_code == 200:
|
47 |
+
result = response.json()
|
48 |
+
score = result['scores'][0] * 100
|
49 |
+
label = result['labels'][0]
|
50 |
+
if score > 70:
|
51 |
+
print(label)
|
52 |
+
print(score)
|
53 |
+
if label == ofertas[1]:
|
54 |
+
novo_pront = (
|
55 |
+
"Você deve fornecer as seguintes informações.\n"
|
56 |
+
"- Relizamos o fechamento da sua quitação \n"
|
57 |
+
"- Valor total do contrato de R$ 6.000,00 foi fechado\n"
|
58 |
+
"- Foi enviado um email para '[email protected]' com mais detalhes"
|
59 |
+
)
|
60 |
+
else:
|
61 |
+
novo_pront = (
|
62 |
+
"Você deve fornecer as seguintes informações.\n"
|
63 |
+
"- Valor total do contrato: R$ 6.000,00\n"
|
64 |
+
"- Valor em aberto: R$ 2.000 \n"
|
65 |
+
"Ofertas disponíveis:\n"
|
66 |
+
"1 - Renegociação de dívida:\n"
|
67 |
+
"* Prazo de pagamento: 10 meses\n"
|
68 |
+
"* Valor mensal: R$ 590,00\n"
|
69 |
+
"* Desconto total: R$ 100,00\n"
|
70 |
+
"2 - Atualização de dívida atrasada:\n"
|
71 |
+
"* Prazo de pagamento: 1 parcela\n"
|
72 |
+
"* Valor a pagar: R$ 1.500,00\n"
|
73 |
+
"* Desconto total: R$ 500,00\n"
|
74 |
+
"* E continua pagando as parcelas do contrato \n"
|
75 |
+
"3 - Quitação de dívida:\n"
|
76 |
+
"- Prazo de pagamento: 1 vez\n"
|
77 |
+
"- Valor a pagar: R$ 5.000,00\n"
|
78 |
+
"- Desconto total: R$ 1.000,00\n"
|
79 |
+
)
|
80 |
+
|
81 |
+
print(novo_pront)
|
82 |
+
|
83 |
+
mensagens.append({"role": "system", "content": novo_pront})
|
84 |
+
else:
|
85 |
+
print(f'Não atingiu mais que 70%. score maximo {score:.2f}% para "{label}"')
|
86 |
+
else:
|
87 |
+
print(f"Error Classificação: {response.status_code}")
|
88 |
+
print(response.json())
|
89 |
+
|
90 |
+
|
91 |
+
|
92 |
+
mensagens.append({'role': 'user', 'content': pergunta_usuario})
|
93 |
+
template = tokenizer.apply_chat_template(mensagens, tokenize=False, add_generation_prompt=True)
|
94 |
+
json = {
|
95 |
+
'inputs': template,
|
96 |
+
'parameters': {'max_new_tokens': 600},
|
97 |
+
'options': {'use_cache': False, 'wait_for_model': True},
|
98 |
+
}
|
99 |
+
response = requests.post(url, json=json, headers=headers).json()
|
100 |
+
print(response)
|
101 |
+
mensagem_chatbot = response[0]['generated_text'].split(token_modelo)[-1]
|
102 |
+
mensagens.append({'role': 'assistant', 'content': mensagem_chatbot})
|
103 |
+
|
104 |
+
with area_chat.container():
|
105 |
+
for mensagem in mensagens:
|
106 |
+
chat = st.chat_message(mensagem['role'])
|
107 |
+
chat.markdown(mensagem['content'])
|
108 |
+
print(mensagens)
|