File size: 2,377 Bytes
7983148
67a5668
 
8823c04
67a5668
45d0a11
67a5668
8823c04
45d0a11
 
67a5668
 
8823c04
67a5668
 
 
 
 
 
 
 
 
 
 
 
 
8823c04
67a5668
7983148
67a5668
b26ce6a
 
 
7983148
45d0a11
67a5668
 
 
45d0a11
67a5668
7983148
67a5668
 
 
 
45d0a11
67a5668
 
 
 
 
b12fb1b
 
 
 
 
 
 
 
 
7983148
67a5668
 
 
b12fb1b
 
 
 
67a5668
b12fb1b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
    )