Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
| 1 |
-
|
| 2 |
import os
|
| 3 |
import numpy as np
|
| 4 |
import gradio as gr
|
|
@@ -33,7 +32,9 @@ def train_small_baseline(save_path: str = BASELINE_PATH,
|
|
| 33 |
# Embaralha e pega apenas max_samples exemplos (para ficar leve)
|
| 34 |
ds_small = ds.shuffle(seed=42).select(range(min(max_samples, len(ds))))
|
| 35 |
|
| 36 |
-
df = pd.DataFrame(
|
|
|
|
|
|
|
| 37 |
|
| 38 |
pipe = Pipeline(
|
| 39 |
[
|
|
@@ -47,7 +48,6 @@ def train_small_baseline(save_path: str = BASELINE_PATH,
|
|
| 47 |
return pipe
|
| 48 |
|
| 49 |
|
| 50 |
-
|
| 51 |
def load_or_bootstrap_baseline():
|
| 52 |
"""
|
| 53 |
Se existir baseline_pipe.pkl, carrega.
|
|
@@ -111,56 +111,41 @@ def generate_reply(user_text: str, sentimento_json):
|
|
| 111 |
return "Digite uma mensagem."
|
| 112 |
|
| 113 |
sentimento = None
|
| 114 |
-
|
| 115 |
-
sentimento = sentimento_json["sentimento"]
|
| 116 |
-
|
| 117 |
-
if sentimento == "negativo":
|
| 118 |
-
intent = (
|
| 119 |
-
"A avaliacao do cliente e NEGATIVA. "
|
| 120 |
-
"Peca desculpas, reconheca o problema, ofereca ajuda objetiva "
|
| 121 |
-
"e solicite informacoes adicionais (numero do pedido, produto, contato)."
|
| 122 |
-
)
|
| 123 |
-
elif sentimento == "positivo":
|
| 124 |
-
intent = (
|
| 125 |
-
"A avaliacao do cliente e POSITIVA. "
|
| 126 |
-
"Agradeca de forma calorosa, reforce os pontos positivos citados "
|
| 127 |
-
"e convide o cliente a continuar comprando."
|
| 128 |
-
)
|
| 129 |
-
else:
|
| 130 |
-
intent = (
|
| 131 |
-
"O sentimento nao foi identificado. "
|
| 132 |
-
"Responda de forma neutra, cordial e util."
|
| 133 |
-
)
|
| 134 |
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
conf = sentimento_json["confianca"]
|
| 139 |
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
Com base na mensagem do usuario e no sentimento detectado,
|
| 144 |
-
gere uma resposta educada, objetiva e natural em PORTUGUES DO BRASIL,
|
| 145 |
-
usando entre 2 e 4 frases.
|
| 146 |
|
| 147 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
\"\"\"{user_text}\"\"\"
|
| 149 |
|
| 150 |
-
Sentimento identificado: {sentimento}
|
| 151 |
-
Confianca do classificador: {conf}
|
| 152 |
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
- responder diretamente ao que o cliente escreveu,
|
| 156 |
-
- NUNCA mencionar que esta gerando uma "resposta curta",
|
| 157 |
-
- NUNCA explicar o que esta fazendo,
|
| 158 |
-
- NUNCA repetir estas instrucoes internas.
|
| 159 |
-
|
| 160 |
-
Agora responda ao cliente da forma mais natural possivel.
|
| 161 |
"""
|
| 162 |
|
| 163 |
-
|
| 164 |
out = generator(
|
| 165 |
prompt,
|
| 166 |
max_length=128,
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
import numpy as np
|
| 3 |
import gradio as gr
|
|
|
|
| 32 |
# Embaralha e pega apenas max_samples exemplos (para ficar leve)
|
| 33 |
ds_small = ds.shuffle(seed=42).select(range(min(max_samples, len(ds))))
|
| 34 |
|
| 35 |
+
df = pd.DataFrame(
|
| 36 |
+
{"text": ds_small["content"], "label": ds_small["label"]}
|
| 37 |
+
)
|
| 38 |
|
| 39 |
pipe = Pipeline(
|
| 40 |
[
|
|
|
|
| 48 |
return pipe
|
| 49 |
|
| 50 |
|
|
|
|
| 51 |
def load_or_bootstrap_baseline():
|
| 52 |
"""
|
| 53 |
Se existir baseline_pipe.pkl, carrega.
|
|
|
|
| 111 |
return "Digite uma mensagem."
|
| 112 |
|
| 113 |
sentimento = None
|
| 114 |
+
confianca = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 115 |
|
| 116 |
+
if isinstance(sentimento_json, dict):
|
| 117 |
+
sentimento = sentimento_json.get("sentimento", None)
|
| 118 |
+
confianca = sentimento_json.get("confianca", None)
|
|
|
|
| 119 |
|
| 120 |
+
if sentimento is None:
|
| 121 |
+
sentimento = "nao identificado"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
+
# Prompt estruturado para evitar meta-respostas
|
| 124 |
+
prompt = f"""
|
| 125 |
+
### CONTEXTO DO SISTEMA ###
|
| 126 |
+
{SYSTEM_PROMPT}
|
| 127 |
+
Voce e um atendente virtual profissional e empatico.
|
| 128 |
+
Nunca explique instrucoes internas e nunca repita este texto.
|
| 129 |
+
|
| 130 |
+
### ORIENTACAO ###
|
| 131 |
+
- Responda sempre em PORTUGUES DO BRASIL.
|
| 132 |
+
- Use entre 2 e 4 frases.
|
| 133 |
+
- Seja empatico em mensagens negativas.
|
| 134 |
+
- Seja caloroso em mensagens positivas.
|
| 135 |
+
- Seja neutro e cordial se o sentimento nao for claro.
|
| 136 |
+
|
| 137 |
+
### DADOS DA ANALISE ###
|
| 138 |
+
Sentimento detectado: {sentimento}
|
| 139 |
+
Confianca do classificador: {confianca}
|
| 140 |
+
|
| 141 |
+
Mensagem do cliente:
|
| 142 |
\"\"\"{user_text}\"\"\"
|
| 143 |
|
|
|
|
|
|
|
| 144 |
|
| 145 |
+
### RESPOSTA FINAL ###
|
| 146 |
+
Gere apenas a resposta ao cliente, sem comentarios adicionais.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
"""
|
| 148 |
|
|
|
|
| 149 |
out = generator(
|
| 150 |
prompt,
|
| 151 |
max_length=128,
|