DHEIVER commited on
Commit
eeed458
·
verified ·
1 Parent(s): 29a6da8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +103 -63
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" # Modelo base que funciona bem com português
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
- """Cria a interface do Gradio"""
109
-
110
- with gr.Blocks(title="Gerador de Prompts para LLMs") as app:
111
- gr.Markdown("# 🤖 Gerador de Prompts Inteligente")
112
- gr.Markdown("Crie prompts estruturados e detalhados usando IA")
 
 
 
 
 
 
 
 
113
 
114
- with gr.Row():
115
- with gr.Column():
116
- categoria = gr.Dropdown(
117
- choices=list(TEMPLATES.keys()),
118
- label="Categoria",
119
- value="história"
120
- )
121
- subcategoria = gr.Dropdown(
122
- choices=list(TEMPLATES["história"].keys()),
123
- label="Subcategoria",
124
- value="creative"
125
- )
126
- tema = gr.Textbox(
127
- label="Tema Principal",
128
- placeholder="Ex: inteligência artificial, sustentabilidade"
129
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
- with gr.Column():
132
- elementos = gr.Textbox(
133
- label="Elementos Específicos",
134
- placeholder="Ex: conflitos, conceitos, exemplos práticos"
135
- )
136
- público_alvo = gr.Textbox(
137
- label="Público Alvo",
138
- placeholder="Ex: iniciantes, profissionais, estudantes"
139
- )
140
- tom = gr.Dropdown(
141
- choices=["formal", "informal", "técnico", "conversacional", "educativo"],
142
- label="Tom",
143
- value="formal"
144
- )
145
- comprimento = gr.Slider(
146
- minimum=100,
147
- maximum=2000,
148
- step=100,
149
- label="Comprimento (palavras)",
150
- value=500
151
- )
152
- usar_llm = gr.Checkbox(
153
- label="Usar IA para expandir prompt",
154
- value=True
 
 
 
 
 
 
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()