Spaces:
Sleeping
Sleeping
| 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() | |