Vtr100 commited on
Commit
883f887
·
verified ·
1 Parent(s): 568bc71

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -14
app.py CHANGED
@@ -4,53 +4,68 @@ import numpy as np
4
  import os
5
  from transformers import pipeline
6
 
7
- # Caminho padrão do modelo
8
  MODEL_PATH = os.getenv("MODEL_PATH", "baseline_pipe.pkl")
9
 
10
  # Carrega o modelo de sentimentos
11
  baseline = None
12
  if os.path.exists(MODEL_PATH):
13
- baseline = joblib.load(MODEL_PATH)
14
- print("✅ Modelo de sentimento carregado.")
 
 
 
15
  else:
16
- print("⚠️ Aviso: baseline_pipe.pkl não encontrado. Usando modo simulado.")
17
 
18
- # Cria o gerador de texto (IA generativa local)
19
  generator = pipeline("text-generation", model="distilgpt2")
20
 
21
  def predict_and_respond(text: str):
 
 
 
22
  if not text or text.strip() == "":
23
- return {"sentimento": "n/a", "resposta": "Por favor, digite um texto válido."}
24
 
25
  # Predição de sentimento
26
  if baseline:
27
  proba = baseline.predict_proba([text])[0]
28
  pred = int(np.argmax(proba))
29
  label = "positivo" if pred == 1 else "negativo"
 
30
  else:
31
  label = "positivo" if "bom" in text.lower() else "negativo"
 
32
 
33
- # Gera uma resposta contextual
34
  prompt = (
35
  f"O cliente escreveu: '{text}'. "
36
  f"Identificamos que o sentimento é {label}. "
37
- "Responda de forma empática e útil, em português:"
38
  )
 
 
39
  response = generator(prompt, max_new_tokens=60, do_sample=True, temperature=0.7)[0]["generated_text"]
 
40
 
41
- # Retorna resultados
42
  return {
43
  "sentimento": label,
44
- "resposta": response.replace(prompt, "").strip()
 
45
  }
46
 
47
- # Interface Gradio
48
  demo = gr.Interface(
49
  fn=predict_and_respond,
50
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
51
- outputs=gr.JSON(label="Análise + Resposta"),
52
- title="🧠 Análise de Sentimentos + IA Generativa",
53
- description="Analisa o sentimento e gera uma resposta automática e empática ao usuário.",
 
 
 
 
54
  theme="soft"
55
  )
56
 
 
4
  import os
5
  from transformers import pipeline
6
 
7
+ # Caminho padrão do modelo de sentimento
8
  MODEL_PATH = os.getenv("MODEL_PATH", "baseline_pipe.pkl")
9
 
10
  # Carrega o modelo de sentimentos
11
  baseline = None
12
  if os.path.exists(MODEL_PATH):
13
+ try:
14
+ baseline = joblib.load(MODEL_PATH)
15
+ print(f"✅ Modelo de sentimento carregado: {MODEL_PATH}")
16
+ except Exception as e:
17
+ print(f"⚠️ Erro ao carregar modelo: {e}")
18
  else:
19
+ print("⚠️ baseline_pipe.pkl não encontrado. O app usará modo simulado.")
20
 
21
+ # Inicializa o gerador de texto (IA generativa)
22
  generator = pipeline("text-generation", model="distilgpt2")
23
 
24
  def predict_and_respond(text: str):
25
+ """
26
+ Analisa o sentimento do texto e gera uma resposta automática empática.
27
+ """
28
  if not text or text.strip() == "":
29
+ return {"sentimento": "n/a", "resposta": "Por favor, digite uma avaliação válida."}
30
 
31
  # Predição de sentimento
32
  if baseline:
33
  proba = baseline.predict_proba([text])[0]
34
  pred = int(np.argmax(proba))
35
  label = "positivo" if pred == 1 else "negativo"
36
+ conf = float(np.max(proba))
37
  else:
38
  label = "positivo" if "bom" in text.lower() else "negativo"
39
+ conf = 0.0
40
 
41
+ # Prompt para a IA generativa
42
  prompt = (
43
  f"O cliente escreveu: '{text}'. "
44
  f"Identificamos que o sentimento é {label}. "
45
+ "Responda de forma empática, amigável e em português:"
46
  )
47
+
48
+ # Geração da resposta
49
  response = generator(prompt, max_new_tokens=60, do_sample=True, temperature=0.7)[0]["generated_text"]
50
+ resposta_limpa = response.replace(prompt, "").strip()
51
 
 
52
  return {
53
  "sentimento": label,
54
+ "confiança": round(conf, 3),
55
+ "resposta": resposta_limpa
56
  }
57
 
58
+ # Interface do Gradio
59
  demo = gr.Interface(
60
  fn=predict_and_respond,
61
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
62
+ outputs=gr.JSON(label="Resultado"),
63
+ title="🤖 Análise de Sentimentos + IA Generativa",
64
+ description="Analisa o sentimento e gera uma resposta empática com IA generativa (DistilGPT-2).",
65
+ examples=[
66
+ ["O produto é excelente, recomendo!"],
67
+ ["Horrível, veio quebrado e atrasado."]
68
+ ],
69
  theme="soft"
70
  )
71