Spaces:
Running
Running
import gradio as gr | |
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM | |
import torch | |
# === Modelos leves recomendados === | |
MODEL_OPTIONS = { | |
"DistilGPT2": "distilgpt2", # muito rápido e leve (~80MB) | |
"TinyLLaMA": "TinyLlama/TinyLlama-1.1B-Chat-v1.0" | |
} | |
# === Escolha o modelo padrão mais leve === | |
MODEL_NAME = MODEL_OPTIONS["DistilGPT2"] | |
# === Carrega modelo e tokenizer uma vez === | |
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) | |
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME) | |
gerador = pipeline( | |
"text-generation", | |
model=model, | |
tokenizer=tokenizer, | |
device=0 if torch.cuda.is_available() else -1, | |
max_new_tokens=200, | |
temperature=0.7, | |
top_p=0.9, | |
do_sample=True | |
) | |
# === Função principal === | |
def responder_como_aldo(pergunta): | |
prompt = f"""Você é o professor Dr. Aldo Henrique, especialista em C, Java, Web e IA. Responda de forma clara, acadêmica e precisa. | |
Pergunta: {pergunta} | |
Resposta:""" | |
try: | |
resposta = gerador(prompt, max_new_tokens=200)[0]["generated_text"] | |
resposta_limpa = resposta.replace(prompt, "").strip() | |
return resposta_limpa if resposta_limpa else "Desculpe, não consegui gerar uma resposta adequada." | |
except Exception as e: | |
return f"Erro: {str(e)}" | |
# === Interface Gradio === | |
with gr.Blocks(title="Pergunte ao Dr. Aldo Henrique") as interface: | |
gr.Markdown("## 🤖 Pergunte ao Dr. Aldo Henrique") | |
gr.Markdown(f"**Modelo carregado:** `{MODEL_NAME}`") | |
entrada = gr.Textbox(label="Pergunta", placeholder="Ex: Como usar ponteiros em C?", lines=4) | |
saida = gr.Textbox(label="Resposta do Dr. Aldo", lines=8, interactive=False) | |
botao = gr.Button("Responder") | |
exemplos = gr.Examples( | |
examples=[ | |
["Como implementar uma lista ligada em C?"], | |
["Qual a diferença entre == e equals() em Java?"], | |
["Como funciona o machine learning?"], | |
["Explique os conceitos de HTML, CSS e JavaScript"], | |
["O que são algoritmos de ordenação?"] | |
], | |
inputs=entrada | |
) | |
botao.click(fn=responder_como_aldo, inputs=entrada, outputs=saida) | |
# === Lançamento com configurações otimizadas para HuggingFace === | |
if __name__ == "__main__": | |
interface.launch( | |
server_name="0.0.0.0", | |
server_port=7860, | |
share=False | |
) |