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

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +88 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 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
+
20
+ mensagem = mensagem.strip()
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(
35
+ **inputs,
36
+ max_new_tokens=80,
37
+ do_sample=True,
38
+ top_p=0.9,
39
+ temperature=0.7,
40
+ pad_token_id=tokenizer.eos_token_id,
41
+ )
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(
76
+ fn=gerar_resposta,
77
+ title="Chatbot com Transformers - Demonstração",
78
+ description=descricao,
79
+ examples=[
80
+ "Oi, quem é você?",
81
+ "O que é Inteligência Artificial?",
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()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ transformers
3
+ torch