File size: 3,751 Bytes
ea865d5
b974190
d86f558
b974190
 
d86f558
 
2cf26e9
d86f558
ea865d5
d86f558
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea865d5
 
d86f558
 
 
b974190
 
 
 
d86f558
 
b974190
d86f558
b974190
 
 
 
d86f558
b974190
d86f558
b974190
 
d86f558
b974190
d86f558
b974190
 
d86f558
 
b974190
d86f558
b974190
 
 
 
d86f558
2cf26e9
d86f558
 
 
 
 
 
 
 
 
b974190
d86f558
ea865d5
d86f558
eeed458
 
d86f558
 
eeed458
 
ea865d5
d86f558
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea865d5
d86f558
 
 
2cf26e9
 
ea865d5
d86f558
 
 
2cf26e9
ea865d5
 
 
 
eeed458
b974190
d86f558
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import logging

# Configuração básica de logging
logging.basicConfig(level=logging.INFO)

# Templates simplificados
TEMPLATES = {
    "história": [
        "Crie uma história sobre {tema}",
        "Escreva um conto sobre {tema}",
        "Desenvolva uma narrativa sobre {tema}"
    ],
    "tutorial": [
        "Crie um tutorial sobre {tema}",
        "Explique como fazer {tema}",
        "Desenvolva um guia sobre {tema}"
    ],
    "explicação": [
        "Explique {tema} de forma simples",
        "Descreva como funciona {tema}",
        "Faça uma análise de {tema}"
    ]
}

class SimplePromptGenerator:
    def __init__(self):
        self.model_name = "pierreguillou/gpt2-small-portuguese"  # Modelo menor em português
        self.load_model()
        
    def load_model(self):
        try:
            logging.info("Carregando modelo...")
            self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
            self.model = AutoModelForCausalLM.from_pretrained(
                self.model_name,
                torch_dtype=torch.float16,
                device_map="auto",
                low_cpu_mem_usage=True
            )
            logging.info("Modelo carregado!")
        except Exception as e:
            logging.error(f"Erro ao carregar modelo: {e}")
            raise

    def generate(self, prompt: str, max_length: int = 100) -> str:
        try:
            inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
            outputs = self.model.generate(
                **inputs,
                max_new_tokens=max_length,
                temperature=0.7,
                do_sample=True,
                pad_token_id=self.tokenizer.eos_token_id
            )
            return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
        except Exception as e:
            logging.error(f"Erro na geração: {e}")
            return f"Erro: {str(e)}"

def create_interface():
    generator = SimplePromptGenerator()
    
    def gerar_prompt(categoria, tema, comprimento):
        if not tema:
            return "Por favor, insira um tema."
            
        template = TEMPLATES[categoria][0].format(tema=tema)
        prompt = f"Gere um texto em português:\n{template}"
        
        return generator.generate(prompt, max_length=comprimento)

    with gr.Blocks(theme=gr.themes.Soft()) as app:
        gr.Markdown(
            """
            # 🤖 Gerador de Prompts
            ### Crie textos em português usando IA
            """
        )
        
        with gr.Row():
            with gr.Column():
                categoria = gr.Dropdown(
                    choices=list(TEMPLATES.keys()),
                    label="📚 Categoria",
                    value="história"
                )
                tema = gr.Textbox(
                    label="💡 Tema",
                    placeholder="Digite o tema aqui..."
                )
                comprimento = gr.Slider(
                    minimum=50,
                    maximum=200,
                    value=100,
                    step=10,
                    label="📏 Comprimento (palavras)"
                )
                gerar_btn = gr.Button("🚀 Gerar", variant="primary")
        
        saida = gr.Textbox(
            label="📝 Texto Gerado",
            lines=10
        )
        
        gerar_btn.click(
            gerar_prompt,
            inputs=[categoria, tema, comprimento],
            outputs=saida
        )
    
    return app

if __name__ == "__main__":
    app = create_interface()
    app.queue()
    app.launch(server_name="0.0.0.0", server_port=7860)