Teste_AulaMN / app.py
ProfRod100's picture
Update app.py
5f6bbaa verified
raw
history blame
3.25 kB
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# Modelo pequeno, viável em CPU grátis
MODEL_NAME = "microsoft/DialoGPT-small"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to("cpu")
def gerar_resposta(messages):
"""
Novo formato do Gradio (type='messages'):
messages = [
{"role": "user" | "assistant", "content": "texto"},
...
]
A função deve receber apenas 'messages' e retornar uma string
com a resposta do bot.
"""
# Prompt de sistema: define o "personagem" do bot
system_prefix = (
"Você é o Professor DL, um professor de Deep Learning. "
"Responda SEMPRE em português do Brasil, de forma simples, didática e objetiva, "
"usando exemplos práticos quando possível. "
"Explique conceitos como redes neurais, CNN, RNN, overfitting, regularização, etc., "
"sem fórmulas muito pesadas."
)
# Monta o texto de conversa
texto = system_prefix + "\n\n"
for msg in messages:
role = msg.get("role", "user")
content = msg.get("content", "")
if role == "user":
texto += f"Aluno: {content}\n"
else:
texto += f"Professor DL: {content}\n"
# Última fala deve ser do professor
texto += "Professor DL:"
# Tokenização
inputs = tokenizer(
texto,
return_tensors="pt",
truncation=True,
max_length=512,
)
# Geração
with torch.no_grad():
output_ids = model.generate(
**inputs,
max_new_tokens=120,
do_sample=True,
top_p=0.9,
temperature=0.7,
pad_token_id=tokenizer.eos_token_id,
)
saida = tokenizer.decode(output_ids[0], skip_special_tokens=True)
# Pega apenas o trecho depois do último "Professor DL:"
if "Professor DL:" in saida:
resposta = saida.split("Professor DL:")[-1].strip()
else:
resposta = saida.strip()
if not resposta:
resposta = (
"Boa pergunta! Tenta reformular ou ser um pouco mais específico "
"sobre o que você quer saber em Deep Learning."
)
return resposta
descricao = """
### 🤖 Professor DL – Chatbot de Deep Learning
Este chatbot foi treinado para atuar como um **professor de Deep Learning**:
- Explica conceitos de redes neurais profundas
- Fala sobre CNN, RNN, overfitting, regularização, etc.
- Responde sempre em **português**, de forma simples e didática
Use este Space em aula para mostrar:
1. Como integrar **Transformers** + **Gradio** em um Hugging Face Space
2. Como adaptar o *prompt* para criar um assistente temático (neste caso, Deep Learning)
"""
iface = gr.ChatInterface(
fn=gerar_resposta,
type="messages", # formato novo do Gradio
title="Professor DL - Chatbot de Deep Learning",
description=descricao,
examples=[
"O que é Deep Learning?",
"Qual a diferença entre rede neural e CNN?",
"O que é overfitting?",
"Como começo a estudar Deep Learning na prática?",
],
)
if __name__ == "__main__":
iface.launch()