ProfRod100 commited on
Commit
713eec4
·
verified ·
1 Parent(s): ef55241

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -56
app.py CHANGED
@@ -2,50 +2,43 @@ 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, history=None):
13
  """
14
- Gradio (type='messages') chama a função com:
15
- - messages: lista de mensagens no formato [{"role": ..., "content": ...}, ...]
16
- - history: (segundo argumento, que não vamos usar)
17
-
18
- Por isso deixamos history=None para evitar o TypeError.
19
- A função deve retornar APENAS uma string com a resposta.
20
  """
21
 
22
- # Prompt de sistema: define o "personagem" do bot
 
 
 
 
23
  system_prefix = (
24
  "Você é o Professor DL, um professor de Deep Learning. "
25
  "Responda SEMPRE em português do Brasil, de forma simples, didática e objetiva, "
26
- 'chamando a outra pessoa de "você" e usando exemplos práticos quando possível. '
27
- "Explique conceitos como redes neurais, CNN, RNN, overfitting, regularização, etc., "
28
- "sem fórmulas muito pesadas."
29
  )
30
 
31
- # Monta o texto de conversa
32
- texto = system_prefix + "\n\n"
33
-
34
- if messages:
35
- for msg in messages:
36
- role = msg.get("role", "user")
37
- content = msg.get("content", "")
38
- if role == "user":
39
- texto += f"Aluno: {content}\n"
40
- else:
41
- texto += f"Professor DL: {content}\n"
42
-
43
- # Última fala deve ser do professor
44
- texto += "Professor DL:"
45
 
46
  # Tokenização
47
  inputs = tokenizer(
48
- texto,
49
  return_tensors="pt",
50
  truncation=True,
51
  max_length=512,
@@ -55,7 +48,7 @@ def gerar_resposta(messages, history=None):
55
  with torch.no_grad():
56
  output_ids = model.generate(
57
  **inputs,
58
- max_new_tokens=120,
59
  do_sample=True,
60
  top_p=0.9,
61
  temperature=0.7,
@@ -64,7 +57,7 @@ def gerar_resposta(messages, history=None):
64
 
65
  saida = tokenizer.decode(output_ids[0], skip_special_tokens=True)
66
 
67
- # Pega apenas o trecho depois do último "Professor DL:"
68
  if "Professor DL:" in saida:
69
  resposta = saida.split("Professor DL:")[-1].strip()
70
  else:
@@ -79,33 +72,17 @@ def gerar_resposta(messages, history=None):
79
  return resposta
80
 
81
 
82
- descricao = """
83
- ### 🤖 Professor DL – Chatbot de Deep Learning
84
-
85
- Este chatbot atua como um **professor de Deep Learning**:
86
-
87
- - Explica conceitos de redes neurais profundas
88
- - Fala sobre CNN, RNN, overfitting, regularização, etc.
89
- - Responde sempre em **português**, de forma simples e didática
90
-
91
- Use este Space em aula para mostrar:
92
- 1. Como integrar **Transformers** + **Gradio** em um Hugging Face Space
93
- 2. Como adaptar o *prompt* para criar um assistente temático (neste caso, Deep Learning)
94
- """
95
-
96
- iface = gr.ChatInterface(
97
- fn=gerar_resposta,
98
- type="messages", # formato novo do Gradio
99
- title="Professor DL - Chatbot de Deep Learning",
100
- description=descricao,
101
- examples=[
102
- "O que é Deep Learning?",
103
- "Qual a diferença entre rede neural e CNN?",
104
- "O que é overfitting?",
105
- "Como começo a estudar Deep Learning na prática?",
106
- ],
107
- cache_examples=False, # evita rodar exemplos no startup e quebrar o app
108
  )
109
 
110
  if __name__ == "__main__":
111
- iface.launch()
 
 
2
  import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer
4
 
5
+ # Modelo pequeno, viável em CPU grátis do Hugging Face
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 responder(pergunta: str) -> str:
13
  """
14
+ Bot de Perguntas e Respostas sobre Deep Learning.
15
+ Recebe uma pergunta em texto e devolve uma resposta em português,
16
+ com tom de professor explicando de forma simples.
 
 
 
17
  """
18
 
19
+ pergunta = (pergunta or "").strip()
20
+ if not pergunta:
21
+ return "Me manda uma pergunta sobre Deep Learning 🙂"
22
+
23
+ # Prompt de sistema: define o "personagem"
24
  system_prefix = (
25
  "Você é o Professor DL, um professor de Deep Learning. "
26
  "Responda SEMPRE em português do Brasil, de forma simples, didática e objetiva, "
27
+ "usando exemplos práticos quando possível. "
28
+ "Explique conceitos como redes neurais, camadas, CNN, RNN, overfitting, "
29
+ "regularização, dropout, etc., sem fórmulas muito pesadas."
30
  )
31
 
32
+ prompt = (
33
+ system_prefix
34
+ + "\n\n"
35
+ + f"Aluno: {pergunta}\n"
36
+ + "Professor DL:"
37
+ )
 
 
 
 
 
 
 
 
38
 
39
  # Tokenização
40
  inputs = tokenizer(
41
+ prompt,
42
  return_tensors="pt",
43
  truncation=True,
44
  max_length=512,
 
48
  with torch.no_grad():
49
  output_ids = model.generate(
50
  **inputs,
51
+ max_new_tokens=160,
52
  do_sample=True,
53
  top_p=0.9,
54
  temperature=0.7,
 
57
 
58
  saida = tokenizer.decode(output_ids[0], skip_special_tokens=True)
59
 
60
+ # Extrai a parte depois de "Professor DL:"
61
  if "Professor DL:" in saida:
62
  resposta = saida.split("Professor DL:")[-1].strip()
63
  else:
 
72
  return resposta
73
 
74
 
75
+ demo = gr.Interface(
76
+ fn=responder,
77
+ inputs=gr.Textbox(lines=2, label="Sua pergunta sobre Deep Learning"),
78
+ outputs=gr.Textbox(lines=8, label="Resposta do Professor DL"),
79
+ title="Professor DL - Bot de Deep Learning",
80
+ description=(
81
+ "Faça perguntas sobre redes neurais, Deep Learning, CNN, RNN, overfitting, "
82
+ "regularização, etc. O Professor DL responde em português, de forma didática."
83
+ ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  )
85
 
86
  if __name__ == "__main__":
87
+ demo.launch()
88
+