ProfRod100 commited on
Commit
5f6bbaa
·
verified ·
1 Parent(s): ca47101

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -33
app.py CHANGED
@@ -1,80 +1,112 @@
1
-
2
  import gradio as gr
3
  import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
 
6
  MODEL_NAME = "microsoft/DialoGPT-small"
7
 
8
- # Carrega tokenizer e modelo
9
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
10
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to("cpu")
11
 
12
 
13
- def gerar_resposta(mensagem, history):
14
  """
15
- Agora o Gradio fornece o histórico no novo padrão:
16
- [
17
- {"role": "user", "content": "..."},
18
- {"role": "assistant", "content": "..."},
19
  ...
20
  ]
21
 
22
- Devemos retornar APENAS a resposta (string)
23
- e o Gradio cuida do histórico.
24
  """
25
 
26
- # Monta prompt com histórico no estilo DialoGPT:
27
- texto = ""
28
- if history:
29
- for msg in history:
30
- if msg["role"] == "user":
31
- texto += f"Usuário: {msg['content']}\n"
32
- else:
33
- texto += f"Bot: {msg['content']}\n"
 
 
 
34
 
35
- texto += f"Usuário: {mensagem}\nBot:"
 
 
 
 
 
 
36
 
37
- # Tokeniza
 
 
 
38
  inputs = tokenizer(
39
  texto,
40
  return_tensors="pt",
41
  truncation=True,
42
- max_length=512
43
  )
44
 
45
- # Gera
46
  with torch.no_grad():
47
  output_ids = model.generate(
48
  **inputs,
49
- max_new_tokens=70,
50
  do_sample=True,
51
  top_p=0.9,
52
  temperature=0.7,
53
  pad_token_id=tokenizer.eos_token_id,
54
  )
55
 
56
- out = tokenizer.decode(output_ids[0], skip_special_tokens=True)
57
 
58
- # Recorta o trecho do Bot
59
- if "Bot:" in out:
60
- resposta = out.split("Bot:")[-1].strip()
61
  else:
62
- resposta = out.strip()
 
 
 
 
 
 
63
 
64
  return resposta
65
 
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  iface = gr.ChatInterface(
68
  fn=gerar_resposta,
69
- type="messages", # NOVO MODO OBRIGATÓRIO NO GRADIO RECENTE
70
- title="Chatbot com Transformers",
71
- description="Demonstração do Hugging Face com IA real utilizando DialoGPT.",
72
  examples=[
73
- "Oi, quem é você?",
74
- "Como posso aprender sobre segurança da informação?",
75
- "Me uma dica de programação",
 
76
  ],
77
  )
78
 
79
  if __name__ == "__main__":
80
  iface.launch()
 
 
 
1
  import gradio as gr
2
  import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
 
5
+ # Modelo pequeno, viável em CPU grátis
6
  MODEL_NAME = "microsoft/DialoGPT-small"
7
 
 
8
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
9
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to("cpu")
10
 
11
 
12
+ def gerar_resposta(messages):
13
  """
14
+ Novo formato do Gradio (type='messages'):
15
+ messages = [
16
+ {"role": "user" | "assistant", "content": "texto"},
 
17
  ...
18
  ]
19
 
20
+ A função deve receber apenas 'messages' e retornar uma string
21
+ com a resposta do bot.
22
  """
23
 
24
+ # Prompt de sistema: define o "personagem" do bot
25
+ system_prefix = (
26
+ "Você é o Professor DL, um professor de Deep Learning. "
27
+ "Responda SEMPRE em português do Brasil, de forma simples, didática e objetiva, "
28
+ "usando exemplos práticos quando possível. "
29
+ "Explique conceitos como redes neurais, CNN, RNN, overfitting, regularização, etc., "
30
+ "sem fórmulas muito pesadas."
31
+ )
32
+
33
+ # Monta o texto de conversa
34
+ texto = system_prefix + "\n\n"
35
 
36
+ for msg in messages:
37
+ role = msg.get("role", "user")
38
+ content = msg.get("content", "")
39
+ if role == "user":
40
+ texto += f"Aluno: {content}\n"
41
+ else:
42
+ texto += f"Professor DL: {content}\n"
43
 
44
+ # Última fala deve ser do professor
45
+ texto += "Professor DL:"
46
+
47
+ # Tokenização
48
  inputs = tokenizer(
49
  texto,
50
  return_tensors="pt",
51
  truncation=True,
52
+ max_length=512,
53
  )
54
 
55
+ # Geração
56
  with torch.no_grad():
57
  output_ids = model.generate(
58
  **inputs,
59
+ max_new_tokens=120,
60
  do_sample=True,
61
  top_p=0.9,
62
  temperature=0.7,
63
  pad_token_id=tokenizer.eos_token_id,
64
  )
65
 
66
+ saida = tokenizer.decode(output_ids[0], skip_special_tokens=True)
67
 
68
+ # Pega apenas o trecho depois do último "Professor DL:"
69
+ if "Professor DL:" in saida:
70
+ resposta = saida.split("Professor DL:")[-1].strip()
71
  else:
72
+ resposta = saida.strip()
73
+
74
+ if not resposta:
75
+ resposta = (
76
+ "Boa pergunta! Tenta reformular ou ser um pouco mais específico "
77
+ "sobre o que você quer saber em Deep Learning."
78
+ )
79
 
80
  return resposta
81
 
82
 
83
+ descricao = """
84
+ ### 🤖 Professor DL – Chatbot de Deep Learning
85
+
86
+ Este chatbot foi treinado para atuar como um **professor de Deep Learning**:
87
+
88
+ - Explica conceitos de redes neurais profundas
89
+ - Fala sobre CNN, RNN, overfitting, regularização, etc.
90
+ - Responde sempre em **português**, de forma simples e didática
91
+
92
+ Use este Space em aula para mostrar:
93
+ 1. Como integrar **Transformers** + **Gradio** em um Hugging Face Space
94
+ 2. Como adaptar o *prompt* para criar um assistente temático (neste caso, Deep Learning)
95
+ """
96
+
97
  iface = gr.ChatInterface(
98
  fn=gerar_resposta,
99
+ type="messages", # formato novo do Gradio
100
+ title="Professor DL - Chatbot de Deep Learning",
101
+ description=descricao,
102
  examples=[
103
+ "O que é Deep Learning?",
104
+ "Qual a diferença entre rede neural e CNN?",
105
+ "O que é overfitting?",
106
+ "Como começo a estudar Deep Learning na prática?",
107
  ],
108
  )
109
 
110
  if __name__ == "__main__":
111
  iface.launch()
112
+