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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -52
app.py CHANGED
@@ -5,92 +5,75 @@ from transformers import AutoModelForCausalLM, AutoTokenizer
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
  """
17
- Função chamada pelo ChatInterface.
18
- - mensagem: texto digitado pelo usuário
19
- - historico: lista de tuplas (user, bot) que o Gradio mantém
20
- A função DEVE retornar apenas a resposta (string).
 
 
 
 
 
21
  """
22
 
23
- if historico is None:
24
- historico = []
 
 
 
 
 
 
25
 
26
- mensagem = mensagem.strip()
27
- if not mensagem:
28
- return "Me manda uma pergunta primeiro? :)"
29
 
30
- # Monta um contexto simples com base no histórico
31
- conversa = ""
32
- for user_msg, bot_msg in historico:
33
- conversa += f"Usuário: {user_msg}\nBot: {bot_msg}\n"
34
- conversa += f"Usuário: {mensagem}\nBot:"
35
-
36
- # Tokeniza e gera texto com o modelo
37
  inputs = tokenizer(
38
- conversa,
39
  return_tensors="pt",
40
  truncation=True,
41
  max_length=512
42
- ).to(device)
43
 
 
44
  with torch.no_grad():
45
  output_ids = model.generate(
46
  **inputs,
47
- max_new_tokens=80,
48
  do_sample=True,
49
  top_p=0.9,
50
  temperature=0.7,
51
  pad_token_id=tokenizer.eos_token_id,
52
  )
53
 
54
- texto_gerado = tokenizer.decode(output_ids[0], skip_special_tokens=True)
55
 
56
- # Pega apenas o trecho depois do último "Bot:"
57
- if "Bot:" in texto_gerado:
58
- resposta = texto_gerado.split("Bot:")[-1].strip()
59
  else:
60
- resposta = texto_gerado.strip()
61
-
62
- if not resposta:
63
- resposta = (
64
- "Estou pensando aqui, mas não consegui formular uma resposta melhor ainda. "
65
- "Tenta perguntar de outro jeito? :)"
66
- )
67
 
68
- # IMPORTANTE: retornamos APENAS a resposta (string)
69
  return resposta
70
 
71
 
72
- descricao = """
73
- ### Chatbot com IA Real (Transformers) 🤖
74
-
75
- Este Space demonstra um chatbot usando um modelo de linguagem da biblioteca **Transformers**:
76
- - Modelo: `microsoft/DialoGPT-small`
77
- - Backend: `transformers` + `torch`
78
- - Interface: **Gradio ChatInterface**
79
-
80
- Não precisa de chave de API externa e roda em CPU no Hugging Face Spaces.
81
- """
82
-
83
  iface = gr.ChatInterface(
84
  fn=gerar_resposta,
85
- title="Chatbot com Transformers - Demonstração",
86
- description=descricao,
 
87
  examples=[
88
  "Oi, quem é você?",
89
- "O que é Inteligência Artificial?",
90
- "Me dá uma dica para estudar programação?",
91
  "Como posso aprender sobre segurança da informação?",
 
92
  ],
93
- cache_examples=False, # evita execução automática na inicialização
94
  )
95
 
96
  if __name__ == "__main__":
 
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 dá uma dica de programação",
76
  ],
 
77
  )
78
 
79
  if __name__ == "__main__":