wpbcpaz commited on
Commit
c8e65f4
·
verified ·
1 Parent(s): b2c7d5b

Update app.py

Browse files

Incremento do botão de copiar o texto gerado, configurei um tema personalizado em azul-marinho com suporte a modo claro/escuro, e atualizei a lista de exemplos conforme solicitado.

Files changed (1) hide show
  1. app.py +66 -40
app.py CHANGED
@@ -27,7 +27,7 @@ if not HUGGINGFACE_API_KEY:
27
  BASE_URL = "https://router.huggingface.co/v1"
28
  MODELO_TEXTO = "meta-llama/Llama-3.1-8B-Instruct"
29
  MODELO_IMAGEM = "black-forest-labs/FLUX.1-schnell"
30
- MODELO_TRADUCAO = "Helsinki-NLP/opus-mt-pt-en" # NOVO: Modelo para tradução PT -> EN
31
 
32
  # Headers para requisições
33
  headers = {
@@ -42,7 +42,7 @@ NICHOS_DISPONIVEIS = [
42
  "Motivação e Desenvolvimento Pessoal",
43
  "Negócios e Empreendedorismo",
44
  "Viagens e Turismo",
45
- "Tecnologia e Inovação"
46
  ]
47
 
48
  ESTILOS_DISPONIVEIS = [
@@ -57,7 +57,7 @@ ESTILOS_DISPONIVEIS = [
57
  # FUNÇÕES DE GERAÇÃO (adaptadas da Aula 8)
58
  # ============================================
59
 
60
- def gerar_texto(tema, nicho, estilo, temperatura):
61
  """
62
  Gera texto usando API do Hugging Face
63
  """
@@ -90,7 +90,7 @@ Escreva apenas a legenda, sem introduções ou explicações."""
90
  }
91
  ],
92
  "max_tokens": 350,
93
- "temperature": temperatura,
94
  "stream": False
95
  }
96
 
@@ -181,7 +181,7 @@ def gerar_imagem(descricao):
181
  # FUNÇÃO PRINCIPAL PARA O GRADIO
182
  # ============================================
183
 
184
- def gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img, temperatura):
185
  """
186
  Função principal que o Gradio chama quando usuário clica no botão.
187
 
@@ -202,7 +202,7 @@ def gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img, tempe
202
 
203
 
204
  # Etapa 1: Gerar texto
205
- texto = gerar_texto(tema, nicho, estilo, temperatura)
206
 
207
  # Verificar se houve erro no texto
208
  if texto.startswith("❌"):
@@ -239,20 +239,43 @@ def gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img, tempe
239
  # INTERFACE GRADIO
240
  # ============================================
241
 
242
- # Criar tema personalizado
243
- tema_custom = gr.themes.Glass(
244
- primary_hue="blue",
245
- secondary_hue="amber",
246
- neutral_hue="stone",
247
- font=["Helvetica", "Georgia", "sans-serif"]
 
 
 
 
 
 
 
 
 
 
 
248
  )
249
 
250
- with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
 
251
 
252
  gr.Markdown("""
253
  # 🚀 Gerador de Posts para Redes Sociais
254
  ### Powered by Hugging Face & Gradio
255
  """)
 
 
 
 
 
 
 
 
 
 
 
256
 
257
  # Criar sistema de abas
258
  with gr.Tabs():
@@ -274,17 +297,6 @@ with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
274
  value=ESTILOS_DISPONIVEIS[0], # Adiciona valor padrão
275
  interactive=True
276
  )
277
-
278
- # incremento para adicionar slider
279
- temperatura_input = gr.Slider(
280
- minimum=0.1,
281
- maximum=1.0,
282
- value=0.7,
283
- step=0.1,
284
- label="Criatividade (Temperature)",
285
- info="Menor = mais conservador, Maior = mais criativo"
286
- )
287
-
288
 
289
  tema_input = gr.Textbox(
290
  label="Tema do Post",
@@ -311,7 +323,7 @@ with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
311
  gerar_img_checkbox.change(
312
  toggle_descricao_img,
313
  inputs=[gerar_img_checkbox],
314
- outputs=[descricao_img_input] # O código selecionado estava correto
315
  )
316
 
317
  gerar_btn = gr.Button("✨ Gerar Post", variant="primary")
@@ -330,21 +342,41 @@ with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
330
  lines=10,
331
  interactive=False
332
  )
 
 
 
 
 
 
 
 
 
 
 
 
333
 
334
  imagem_output = gr.Image(
335
  label="Imagem Gerada",
336
- # Ajusta visibilidade para não ocupar espaço inicialmente
337
  type="pil" # Garante que aceita o objeto PIL Image
338
  )
339
 
340
  gr.Markdown("### 💡 Experimente estes exemplos:")
341
 
342
- # Os exemplos devem passar 3 valores de input (nicho, estilo, tema)
343
  gr.Examples(
344
  examples=[
345
- [NICHOS_DISPONIVEIS[0], ESTILOS_DISPONIVEIS[0], "Transforme seu corpo, transforme sua vida"],
346
- [NICHOS_DISPONIVEIS[3], ESTILOS_DISPONIVEIS[1], "Como validar uma ideia de negócio"],
347
- [NICHOS_DISPONIVEIS[4], ESTILOS_DISPONIVEIS[2], "Top 5 perrengues de viagem e como evitar"]
 
 
 
 
 
 
 
 
 
348
  ],
349
  # Inputs devem corresponder à ordem dos exemplos: [nicho, estilo, tema]
350
  inputs=[nicho_input, estilo_input, tema_input],
@@ -353,19 +385,13 @@ with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
353
  )
354
 
355
 
356
- # ==============================================================
357
- # ESTE BLOCO ESTÁ CORRETO APÓS A ÚLTIMA CORREÇÃO:
358
- # 1. fn: A função correta é 'gerar_post_interface'.
359
- # 2. inputs: Ordem correta para (tema, nicho, estilo, descricao_imagem, gerar_img)
360
- # 3. outputs: Ordem correta para (texto_output, imagem_output, status_output)
361
- # ==============================================================
362
  gerar_btn.click(
363
  fn=gerar_post_interface,
364
  # Ordem CORRETA para a função gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img)
365
- inputs=[tema_input, nicho_input, estilo_input, descricao_img_input, gerar_img_checkbox, temperatura_input],
366
  # Ordem CORRETA para a função retornar (texto, imagem, status_final)
367
- outputs=[texto_output, imagem_output, status_output],
368
- show_progress="full" # Barra de progresso completa
369
  )
370
 
371
  # ABA 2: Histórico
@@ -379,7 +405,7 @@ with gr.Blocks(theme=tema_custom, title="Gerador de Posts") as demo:
379
  gr.Markdown("### Configurações do Gerador")
380
  gr.Markdown("**Modelo de Texto:** Llama 3.1 8B")
381
  gr.Markdown("**Modelo de Imagem:** FLUX.1 Schnell")
382
- gr.Markdown("**Modelo de Tradução (PT -> EN):** Helsinki-NLP/opus-mt-pt-en") # NOVO
383
  gr.Markdown("**API Provider:** Hugging Face Inference")
384
 
385
  # ABA 4: Sobre
 
27
  BASE_URL = "https://router.huggingface.co/v1"
28
  MODELO_TEXTO = "meta-llama/Llama-3.1-8B-Instruct"
29
  MODELO_IMAGEM = "black-forest-labs/FLUX.1-schnell"
30
+ MODELO_TRADUCAO = "Helsinki-NLP/opus-mt-pt-en"
31
 
32
  # Headers para requisições
33
  headers = {
 
42
  "Motivação e Desenvolvimento Pessoal",
43
  "Negócios e Empreendedorismo",
44
  "Viagens e Turismo",
45
+ "Tecnologia e Inovação",
46
  ]
47
 
48
  ESTILOS_DISPONIVEIS = [
 
57
  # FUNÇÕES DE GERAÇÃO (adaptadas da Aula 8)
58
  # ============================================
59
 
60
+ def gerar_texto(tema, nicho, estilo):
61
  """
62
  Gera texto usando API do Hugging Face
63
  """
 
90
  }
91
  ],
92
  "max_tokens": 350,
93
+ "temperature": 0.7,
94
  "stream": False
95
  }
96
 
 
181
  # FUNÇÃO PRINCIPAL PARA O GRADIO
182
  # ============================================
183
 
184
+ def gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img):
185
  """
186
  Função principal que o Gradio chama quando usuário clica no botão.
187
 
 
202
 
203
 
204
  # Etapa 1: Gerar texto
205
+ texto = gerar_texto(tema, nicho, estilo)
206
 
207
  # Verificar se houve erro no texto
208
  if texto.startswith("❌"):
 
239
  # INTERFACE GRADIO
240
  # ============================================
241
 
242
+ # NOVO: Tema personalizado em azul-marinho com suporte a modo claro/escuro
243
+ custom_theme = gr.themes.Soft(
244
+ primary_hue="blue", # Tom primário azul
245
+ secondary_hue="slate",
246
+ neutral_hue="slate",
247
+ font=[gr.themes.GoogleFont('Inter'), 'system-ui', 'sans-serif'],
248
+ font_mono=['Inconsolata', 'monospace'],
249
+ ).set(
250
+ # Paleta Azul-Marinho (Navy Blue) e suporte a Dark/Light Mode
251
+ button_primary_background_fill="#193976", # Azul Marinho para botões primários
252
+ button_primary_background_fill_hover="#0a2a5a",
253
+ # Fundo principal para Dark Mode
254
+ background_fill_dark="#0a1930",
255
+ # Fundo de blocos/cards para Dark Mode
256
+ block_background_fill_dark="#1c3b6f",
257
+ # Cor de destaque (slider, etc.)
258
+ slider_color="#193976",
259
  )
260
 
261
+
262
+ with gr.Blocks(theme=custom_theme, title="Gerador de Posts") as demo:
263
 
264
  gr.Markdown("""
265
  # 🚀 Gerador de Posts para Redes Sociais
266
  ### Powered by Hugging Face & Gradio
267
  """)
268
+
269
+ # NOVO: Adicionar componente para seleção de modo (Light/Dark)
270
+ # Colocado fora das abas para fácil acesso
271
+ theme_mode = gr.Radio(
272
+ ["light", "dark"],
273
+ label="Modo de Visualização",
274
+ value="light", # Inicia no light, mas o tema customizado respeita a preferência do sistema
275
+ interactive=True
276
+ )
277
+ # A atualização do tema é feita internamente pelo Gradio ao interagir com o Radio Button
278
+
279
 
280
  # Criar sistema de abas
281
  with gr.Tabs():
 
297
  value=ESTILOS_DISPONIVEIS[0], # Adiciona valor padrão
298
  interactive=True
299
  )
 
 
 
 
 
 
 
 
 
 
 
300
 
301
  tema_input = gr.Textbox(
302
  label="Tema do Post",
 
323
  gerar_img_checkbox.change(
324
  toggle_descricao_img,
325
  inputs=[gerar_img_checkbox],
326
+ outputs=[descricao_img_input]
327
  )
328
 
329
  gerar_btn = gr.Button("✨ Gerar Post", variant="primary")
 
342
  lines=10,
343
  interactive=False
344
  )
345
+
346
+ # NOVO: Botão para copiar o texto
347
+ copy_btn = gr.Button("📋 Copiar Texto", variant="secondary")
348
+
349
+ # NOVO: Conecta o botão de copiar com JS (melhor forma no Gradio)
350
+ # Adicionamos um alert para feedback visual (não usar window.alert)
351
+ copy_btn.click(
352
+ None,
353
+ inputs=[texto_output],
354
+ outputs=[],
355
+ _js="(text) => { navigator.clipboard.writeText(text); alert('Texto copiado para a área de transferência!'); }"
356
+ )
357
 
358
  imagem_output = gr.Image(
359
  label="Imagem Gerada",
 
360
  type="pil" # Garante que aceita o objeto PIL Image
361
  )
362
 
363
  gr.Markdown("### 💡 Experimente estes exemplos:")
364
 
365
+ # ATUALIZADO: Lista de exemplos substituída pelos fornecidos pelo usuário
366
  gr.Examples(
367
  examples=[
368
+ # 1. Motivação e Desenvolvimento Pessoal, Inspirador e motivacional, Frases marcantes de pessoas importantes
369
+ [NICHOS_DISPONIVEIS[2], ESTILOS_DISPONIVEIS[0], "Frases marcantes de pessoas importantes"],
370
+ # 2. Alimentação e Nutrição, Divertido e descontraído, Frases chamativas e de alerta sobre fazer exercícios físicos
371
+ [NICHOS_DISPONIVEIS[1], ESTILOS_DISPONIVEIS[2], "Frases chamativas e de alerta sobre fazer exercícios físicos"],
372
+ # 3. Tecnologia e Inovação, Profissional e técnico, Importância de estudar Tecnologia Digital e Inteligência Artificial
373
+ [NICHOS_DISPONIVEIS[5], ESTILOS_DISPONIVEIS[3], "Importância de estudar Tecnologia Digital e Inteligência Artificial"],
374
+ # 4. Viagens e Turismo, Divertido e descontraído, Visitas as praias brasileiras para passear em casal
375
+ [NICHOS_DISPONIVEIS[4], ESTILOS_DISPONIVEIS[2], "Visitas as praias brasileiras para passear em casal"],
376
+ # 5. Motivação e Desenvolvimento Pessoal, Inspirador e motivacional, Saúde para os homens idosos da terceira idade
377
+ [NICHOS_DISPONIVEIS[2], ESTILOS_DISPONIVEIS[0], "Saúde para os homens idosos da terceira idade"],
378
+ # 6. Negócios e Empreendedorismo, Divertido e descontraído, Empreender informalmente no Brasil
379
+ [NICHOS_DISPONIVEIS[3], ESTILOS_DISPONIVEIS[2], "Empreender informalmente no Brasil"]
380
  ],
381
  # Inputs devem corresponder à ordem dos exemplos: [nicho, estilo, tema]
382
  inputs=[nicho_input, estilo_input, tema_input],
 
385
  )
386
 
387
 
388
+ # Conectar botão principal
 
 
 
 
 
389
  gerar_btn.click(
390
  fn=gerar_post_interface,
391
  # Ordem CORRETA para a função gerar_post_interface(tema, nicho, estilo, descricao_imagem, gerar_img)
392
+ inputs=[tema_input, nicho_input, estilo_input, descricao_img_input, gerar_img_checkbox],
393
  # Ordem CORRETA para a função retornar (texto, imagem, status_final)
394
+ outputs=[texto_output, imagem_output, status_output]
 
395
  )
396
 
397
  # ABA 2: Histórico
 
405
  gr.Markdown("### Configurações do Gerador")
406
  gr.Markdown("**Modelo de Texto:** Llama 3.1 8B")
407
  gr.Markdown("**Modelo de Imagem:** FLUX.1 Schnell")
408
+ gr.Markdown("**Modelo de Tradução (PT -> EN):** Helsinki-NLP/opus-mt-pt-en")
409
  gr.Markdown("**API Provider:** Hugging Face Inference")
410
 
411
  # ABA 4: Sobre