ProfRod100 commited on
Commit
1ea637d
·
verified ·
1 Parent(s): bee4ea1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -16
app.py CHANGED
@@ -5,15 +5,15 @@ from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
6
  MODEL_NAME = "microsoft/DialoGPT-small"
7
 
8
- # Carrega tokenizer e modelo uma única vez (mais rápido para o usuário)
9
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
10
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
11
 
12
- # Garante uso em CPU (suficiente para demo no Hugging Face Spaces gratuito)
13
  device = torch.device("cpu")
14
  model.to(device)
15
 
16
  def gerar_resposta(mensagem, historico):
 
17
  if historico is None:
18
  historico = []
19
 
@@ -21,14 +21,19 @@ def gerar_resposta(mensagem, historico):
21
  if not mensagem:
22
  return "Me manda uma pergunta primeiro? :)", historico
23
 
24
- # Monta o histórico de conversa em formato simples
25
  conversa = ""
26
  for user_msg, bot_msg in historico:
27
  conversa += f"Usuário: {user_msg}\nBot: {bot_msg}\n"
28
  conversa += f"Usuário: {mensagem}\nBot:"
29
 
30
  # Tokeniza e gera texto com o modelo
31
- inputs = tokenizer(conversa, return_tensors="pt", truncation=True, max_length=512).to(device)
 
 
 
 
 
32
 
33
  with torch.no_grad():
34
  output_ids = model.generate(
@@ -42,34 +47,27 @@ def gerar_resposta(mensagem, historico):
42
 
43
  texto_gerado = tokenizer.decode(output_ids[0], skip_special_tokens=True)
44
 
45
- # Extrai apenas a parte após o último "Bot:"
46
  if "Bot:" in texto_gerado:
47
  resposta = texto_gerado.split("Bot:")[-1].strip()
48
  else:
49
  resposta = texto_gerado.strip()
50
 
51
- # Evita respostas vazias
52
  if not resposta:
53
  resposta = "Estou pensando aqui, mas não consegui formular uma resposta melhor ainda. Tenta perguntar de outro jeito? :)"
54
 
55
- historico = historico + [[mensagem, resposta]]
 
56
  return resposta, historico
57
 
58
- descricao = """### Chatbot com IA Real (Transformers) 🤖
 
59
 
60
  Este Space demonstra um **chatbot de verdade** usando um modelo de linguagem da biblioteca **Transformers**:
61
  - Modelo: `microsoft/DialoGPT-small`
62
  - Backend: `transformers` + `torch`
63
  - Interface: **Gradio ChatInterface**
64
 
65
- ✔ Não precisa de chave de API externa
66
- ✔ Roda no CPU gratuito (Hugging Face Spaces)
67
- ✔ Ótimo para demonstração em aula de como integrar IA real em um app web simples
68
-
69
- Você pode usar este projeto como base para:
70
- - Chatbots de FAQ
71
- - Assistentes temáticos (QA, Cyber, Cloud, etc.)
72
- - Laboratórios de IA Generativa e NLP
73
  """
74
 
75
  iface = gr.ChatInterface(
@@ -82,7 +80,9 @@ iface = gr.ChatInterface(
82
  "Me dá uma dica para estudar programação?",
83
  "Como posso aprender sobre segurança da informação?",
84
  ],
 
85
  )
86
 
87
  if __name__ == "__main__":
88
  iface.launch()
 
 
5
 
6
  MODEL_NAME = "microsoft/DialoGPT-small"
7
 
8
+ # Carrega tokenizer e modelo uma única vez
9
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
10
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
11
 
 
12
  device = torch.device("cpu")
13
  model.to(device)
14
 
15
  def gerar_resposta(mensagem, historico):
16
+ # Garante que o histórico comece como lista
17
  if historico is None:
18
  historico = []
19
 
 
21
  if not mensagem:
22
  return "Me manda uma pergunta primeiro? :)", historico
23
 
24
+ # Monta o texto com base no histórico
25
  conversa = ""
26
  for user_msg, bot_msg in historico:
27
  conversa += f"Usuário: {user_msg}\nBot: {bot_msg}\n"
28
  conversa += f"Usuário: {mensagem}\nBot:"
29
 
30
  # Tokeniza e gera texto com o modelo
31
+ inputs = tokenizer(
32
+ conversa,
33
+ return_tensors="pt",
34
+ truncation=True,
35
+ max_length=512
36
+ ).to(device)
37
 
38
  with torch.no_grad():
39
  output_ids = model.generate(
 
47
 
48
  texto_gerado = tokenizer.decode(output_ids[0], skip_special_tokens=True)
49
 
50
+ # Pega apenas o trecho depois do último "Bot:"
51
  if "Bot:" in texto_gerado:
52
  resposta = texto_gerado.split("Bot:")[-1].strip()
53
  else:
54
  resposta = texto_gerado.strip()
55
 
 
56
  if not resposta:
57
  resposta = "Estou pensando aqui, mas não consegui formular uma resposta melhor ainda. Tenta perguntar de outro jeito? :)"
58
 
59
+ # ATENÇÃO: agora usamos TUPLAS, não listas
60
+ historico = historico + [(mensagem, resposta)]
61
  return resposta, historico
62
 
63
+ descricao = """
64
+ ### Chatbot com IA Real (Transformers) 🤖
65
 
66
  Este Space demonstra um **chatbot de verdade** usando um modelo de linguagem da biblioteca **Transformers**:
67
  - Modelo: `microsoft/DialoGPT-small`
68
  - Backend: `transformers` + `torch`
69
  - Interface: **Gradio ChatInterface**
70
 
 
 
 
 
 
 
 
 
71
  """
72
 
73
  iface = gr.ChatInterface(
 
80
  "Me dá uma dica para estudar programação?",
81
  "Como posso aprender sobre segurança da informação?",
82
  ],
83
+ cache_examples=False, # evita erro de cache no startup
84
  )
85
 
86
  if __name__ == "__main__":
87
  iface.launch()
88
+