Update app.py
Browse files
app.py
CHANGED
@@ -6,9 +6,8 @@ from typing import Dict, List
|
|
6 |
|
7 |
class PromptGenerator:
|
8 |
def __init__(self):
|
9 |
-
# Carrega o modelo Mistral em português do Hugging Face
|
10 |
print("Carregando modelo... (pode demorar alguns minutos na primeira vez)")
|
11 |
-
self.model_name = "beomi/llama-2-ko-7b"
|
12 |
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
|
13 |
self.model = AutoModelForCausalLM.from_pretrained(
|
14 |
self.model_name,
|
@@ -18,9 +17,7 @@ class PromptGenerator:
|
|
18 |
print("Modelo carregado!")
|
19 |
|
20 |
def generate_with_model(self, prompt: str) -> str:
|
21 |
-
"""Gera texto usando o modelo local"""
|
22 |
inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
|
23 |
-
|
24 |
outputs = self.model.generate(
|
25 |
**inputs,
|
26 |
max_new_tokens=512,
|
@@ -29,10 +26,8 @@ class PromptGenerator:
|
|
29 |
do_sample=True,
|
30 |
pad_token_id=self.tokenizer.eos_token_id
|
31 |
)
|
32 |
-
|
33 |
return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
|
34 |
|
35 |
-
# Templates de prompts por categoria
|
36 |
TEMPLATES = {
|
37 |
"história": {
|
38 |
"creative": "Crie uma história {gênero} sobre {tema} com {personagens} personagens. A história deve ter {comprimento} palavras e incluir {elementos}.",
|
@@ -51,20 +46,16 @@ TEMPLATES = {
|
|
51 |
}
|
52 |
}
|
53 |
|
54 |
-
# Inicializa o gerador de prompts
|
55 |
generator = PromptGenerator()
|
56 |
|
57 |
def generate_prompt(categoria: str, subcategoria: str, tema: str, elementos: str,
|
58 |
público_alvo: str, tom: str, comprimento: int,
|
59 |
usar_llm: bool = True) -> str:
|
60 |
-
"""Gera um prompt baseado nos parâmetros e usa o modelo para expandir"""
|
61 |
-
|
62 |
if categoria not in TEMPLATES or subcategoria not in TEMPLATES[categoria]:
|
63 |
return "Categoria ou subcategoria não encontrada"
|
64 |
|
65 |
template = TEMPLATES[categoria][subcategoria]
|
66 |
|
67 |
-
# Parâmetros base para o template
|
68 |
params = {
|
69 |
"tema": tema,
|
70 |
"elementos": elementos,
|
@@ -82,14 +73,12 @@ def generate_prompt(categoria: str, subcategoria: str, tema: str, elementos: str
|
|
82 |
"analogias": "analogias cotidianas"
|
83 |
}
|
84 |
|
85 |
-
# Gera o prompt base
|
86 |
base_prompt = template.format(**params)
|
87 |
base_prompt += f"\n\nTom desejado: {tom}"
|
88 |
|
89 |
if comprimento:
|
90 |
base_prompt += f"\nComprimento aproximado: {comprimento} palavras"
|
91 |
|
92 |
-
# Se solicitado, usa o modelo para expandir o prompt
|
93 |
if usar_llm:
|
94 |
instruction = f"""
|
95 |
Você é um assistente especializado em criar prompts detalhados em português para LLMs.
|
@@ -105,58 +94,111 @@ def generate_prompt(categoria: str, subcategoria: str, tema: str, elementos: str
|
|
105 |
return base_prompt
|
106 |
|
107 |
def create_interface():
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
|
114 |
-
with gr.
|
115 |
-
with gr.
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
)
|
156 |
|
157 |
-
gerar_btn = gr.Button("Gerar Prompt")
|
158 |
-
saida = gr.Textbox(label="Prompt Gerado", lines=10)
|
159 |
-
|
160 |
def atualizar_subcategorias(categoria):
|
161 |
return gr.Dropdown(choices=list(TEMPLATES[categoria].keys()))
|
162 |
|
@@ -169,8 +211,6 @@ def create_interface():
|
|
169 |
|
170 |
return app
|
171 |
|
172 |
-
# Criar e iniciar a aplicação
|
173 |
-
app = create_interface()
|
174 |
-
|
175 |
if __name__ == "__main__":
|
|
|
176 |
app.launch()
|
|
|
6 |
|
7 |
class PromptGenerator:
|
8 |
def __init__(self):
|
|
|
9 |
print("Carregando modelo... (pode demorar alguns minutos na primeira vez)")
|
10 |
+
self.model_name = "beomi/llama-2-ko-7b"
|
11 |
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
|
12 |
self.model = AutoModelForCausalLM.from_pretrained(
|
13 |
self.model_name,
|
|
|
17 |
print("Modelo carregado!")
|
18 |
|
19 |
def generate_with_model(self, prompt: str) -> str:
|
|
|
20 |
inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
|
|
|
21 |
outputs = self.model.generate(
|
22 |
**inputs,
|
23 |
max_new_tokens=512,
|
|
|
26 |
do_sample=True,
|
27 |
pad_token_id=self.tokenizer.eos_token_id
|
28 |
)
|
|
|
29 |
return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
|
30 |
|
|
|
31 |
TEMPLATES = {
|
32 |
"história": {
|
33 |
"creative": "Crie uma história {gênero} sobre {tema} com {personagens} personagens. A história deve ter {comprimento} palavras e incluir {elementos}.",
|
|
|
46 |
}
|
47 |
}
|
48 |
|
|
|
49 |
generator = PromptGenerator()
|
50 |
|
51 |
def generate_prompt(categoria: str, subcategoria: str, tema: str, elementos: str,
|
52 |
público_alvo: str, tom: str, comprimento: int,
|
53 |
usar_llm: bool = True) -> str:
|
|
|
|
|
54 |
if categoria not in TEMPLATES or subcategoria not in TEMPLATES[categoria]:
|
55 |
return "Categoria ou subcategoria não encontrada"
|
56 |
|
57 |
template = TEMPLATES[categoria][subcategoria]
|
58 |
|
|
|
59 |
params = {
|
60 |
"tema": tema,
|
61 |
"elementos": elementos,
|
|
|
73 |
"analogias": "analogias cotidianas"
|
74 |
}
|
75 |
|
|
|
76 |
base_prompt = template.format(**params)
|
77 |
base_prompt += f"\n\nTom desejado: {tom}"
|
78 |
|
79 |
if comprimento:
|
80 |
base_prompt += f"\nComprimento aproximado: {comprimento} palavras"
|
81 |
|
|
|
82 |
if usar_llm:
|
83 |
instruction = f"""
|
84 |
Você é um assistente especializado em criar prompts detalhados em português para LLMs.
|
|
|
94 |
return base_prompt
|
95 |
|
96 |
def create_interface():
|
97 |
+
with gr.Blocks(
|
98 |
+
title="Gerador de Prompts para LLMs",
|
99 |
+
theme=gr.themes.Soft(
|
100 |
+
primary_hue="indigo",
|
101 |
+
secondary_hue="blue",
|
102 |
+
),
|
103 |
+
) as app:
|
104 |
+
gr.Markdown(
|
105 |
+
"""
|
106 |
+
# 🤖 Gerador de Prompts Inteligente
|
107 |
+
### Crie prompts estruturados e detalhados usando IA
|
108 |
+
"""
|
109 |
+
)
|
110 |
|
111 |
+
with gr.Tabs():
|
112 |
+
with gr.TabItem("✨ Gerador de Prompts"):
|
113 |
+
with gr.Group():
|
114 |
+
with gr.Row():
|
115 |
+
with gr.Column(scale=1):
|
116 |
+
categoria = gr.Dropdown(
|
117 |
+
choices=list(TEMPLATES.keys()),
|
118 |
+
label="📚 Categoria",
|
119 |
+
value="história",
|
120 |
+
container=False,
|
121 |
+
)
|
122 |
+
subcategoria = gr.Dropdown(
|
123 |
+
choices=list(TEMPLATES["história"].keys()),
|
124 |
+
label="🔍 Subcategoria",
|
125 |
+
value="creative",
|
126 |
+
container=False,
|
127 |
+
)
|
128 |
+
|
129 |
+
with gr.Column(scale=2):
|
130 |
+
tema = gr.Textbox(
|
131 |
+
label="💡 Tema Principal",
|
132 |
+
placeholder="Ex: inteligência artificial, sustentabilidade",
|
133 |
+
container=False,
|
134 |
+
)
|
135 |
+
elementos = gr.Textbox(
|
136 |
+
label="🔮 Elementos Específicos",
|
137 |
+
placeholder="Ex: conflitos, conceitos, exemplos práticos",
|
138 |
+
container=False,
|
139 |
+
)
|
140 |
+
|
141 |
+
with gr.Row():
|
142 |
+
with gr.Column(scale=1):
|
143 |
+
público_alvo = gr.Textbox(
|
144 |
+
label="👥 Público Alvo",
|
145 |
+
placeholder="Ex: iniciantes, profissionais, estudantes",
|
146 |
+
container=False,
|
147 |
+
)
|
148 |
+
tom = gr.Dropdown(
|
149 |
+
choices=["formal", "informal", "técnico", "conversacional", "educativo"],
|
150 |
+
label="🎭 Tom",
|
151 |
+
value="formal",
|
152 |
+
container=False,
|
153 |
+
)
|
154 |
+
|
155 |
+
with gr.Column(scale=2):
|
156 |
+
comprimento = gr.Slider(
|
157 |
+
minimum=100,
|
158 |
+
maximum=2000,
|
159 |
+
step=100,
|
160 |
+
label="📏 Comprimento (palavras)",
|
161 |
+
value=500,
|
162 |
+
container=False,
|
163 |
+
)
|
164 |
+
usar_llm = gr.Checkbox(
|
165 |
+
label="🤖 Usar IA para expandir prompt",
|
166 |
+
value=True,
|
167 |
+
container=False,
|
168 |
+
)
|
169 |
|
170 |
+
with gr.Row():
|
171 |
+
gerar_btn = gr.Button(
|
172 |
+
"🚀 Gerar Prompt",
|
173 |
+
variant="primary",
|
174 |
+
scale=1,
|
175 |
+
)
|
176 |
+
|
177 |
+
with gr.Row():
|
178 |
+
saida = gr.TextArea(
|
179 |
+
label="📝 Prompt Gerado",
|
180 |
+
lines=10,
|
181 |
+
container=False,
|
182 |
+
)
|
183 |
+
|
184 |
+
with gr.TabItem("ℹ️ Sobre"):
|
185 |
+
gr.Markdown(
|
186 |
+
"""
|
187 |
+
### Sobre o Gerador de Prompts
|
188 |
+
|
189 |
+
Este é um gerador de prompts inteligente que utiliza IA para criar prompts estruturados
|
190 |
+
e detalhados para diversos tipos de conteúdo. Ele pode ser usado para:
|
191 |
+
|
192 |
+
- 📚 Criação de histórias
|
193 |
+
- 📖 Análise de textos
|
194 |
+
- 💻 Documentação técnica
|
195 |
+
- 🎓 Conteúdo educacional
|
196 |
+
|
197 |
+
O gerador usa um modelo de linguagem avançado para expandir e melhorar os prompts básicos,
|
198 |
+
tornando-os mais detalhados e específicos para suas necessidades.
|
199 |
+
"""
|
200 |
)
|
201 |
|
|
|
|
|
|
|
202 |
def atualizar_subcategorias(categoria):
|
203 |
return gr.Dropdown(choices=list(TEMPLATES[categoria].keys()))
|
204 |
|
|
|
211 |
|
212 |
return app
|
213 |
|
|
|
|
|
|
|
214 |
if __name__ == "__main__":
|
215 |
+
app = create_interface()
|
216 |
app.launch()
|