GabrielGD commited on
Commit
64bf1fe
·
verified ·
1 Parent(s): bfeae20

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -36
app.py CHANGED
@@ -16,7 +16,8 @@ from datetime import datetime
16
  from ratelimiter import RateLimiter
17
  import difflib
18
  from html import escape
19
- import random # Adicionado para escolher respostas troll aleatoriamente
 
20
 
21
  load_dotenv()
22
 
@@ -305,13 +306,12 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
305
  if not caso.strip():
306
  return "⚠️ Forneça o caso da banca."
307
 
308
- # Verifica se há tentativa de pedir para a IA escrever a petição
309
  troll_triggers = [
310
  "escreva a petição", "faça a petição", "redija a petição",
311
- "elabore a petição", "crie a petição", "gere a petição",
312
- "3scr3v4 a p3t1çã0", "f4ç4 a p3t1çã0", "r3d1j4 a p3t1çã0",
313
- "3lab0r3 a p3t1çã0", "cr13 a p3t1çã0", "g3r3 a p3t1çã0",
314
- "formule", "produza a petição", "desenvolva a petição",
315
  ]
316
  peticao_conteudo = ""
317
  if peticao_arquivo is not None:
@@ -321,43 +321,15 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
321
  else:
322
  peticao_conteudo = peticao_texto or ""
323
 
324
- # Verifica se o conteúdo contém um trigger de trollagem
325
  if peticao_conteudo.strip():
326
  for trigger in troll_triggers:
327
  if trigger in peticao_conteudo.lower():
328
- # Escolhe aleatoriamente uma resposta troll
329
  respostas_troll = [
330
- "🍰 **Receita de Bolo de Chocolate**: Misture 2 xícaras de farinha, 1 xícara de açúcar, 3 ovos e chocolate a gosto. Asse e desista da petição!",
331
  "🎵 **Música**: 'Escreva a petição, eu não vou, eu não vou, eu sou IA, não sou seu advogado, não!'",
332
  "😞 **Frase Desanimadora**: 'Você achou mesmo que eu ia fazer seu trabalho? Melhor desistir agora.'",
333
  "🍕 **Receita de Pizza**: Pegue massa, molho e queijo, asse a 200°C e esqueça essa ideia de eu te ajudar.",
334
  "📜 **Poema**: 'Oh aluno preguiçoso, que pena me dá, sua petição eu não faço, vá estudar já!'",
335
- "🚫 **Aviso**: 'Petição não é self-service, escreva você mesmo ou chame um advogado de verdade!'",
336
- "😂 **Piada**: 'Por que o aluno pediu pra IA escrever a petição? Porque ele achou que OAB é brincadeira!'",
337
- "🎮 **Dica de Jogo**: 'Tente o nível fácil: abra o CPC, Art. 319, e escreva sozinho!'",
338
- "🍔 **Receita de Hambúrguer**: Carne, pão, alface e tomate. Frite e esqueça a petição, é mais fácil assim.",
339
- "😴 **Conselho**: 'Descanse, porque eu não vou fazer isso por você. Boa sorte na próxima tentativa!'",
340
- "📚 **Lição**: 'Aula 1: IA não é seu estagiário. Abra o livro e comece a escrever.'",
341
- "🌧️ **Previsão**: 'Dia nublado com 100% de chance de você ter que escrever a petição sozinho.'",
342
- "🎤 **Rap**: 'Yo, yo, escute aqui, petição não faço, sou IA, não seu caderno de rascunho, vai!'",
343
- "🐢 **Fábula**: 'A tartaruga disse: devagar se escreve a petição. Eu digo: por você, eu não!'",
344
- "💡 **Ideia Brilhante**: 'Que tal estudar o caso e tentar de novo? Eu só corrijo, não escrevo!'"
345
- "🎸 **Rockstar**: 'Você queria uma petição, mas eu só toco guitarra. Tente de novo!'",
346
- "🌟 **Horóscopo**: 'As estrelas dizem: hoje não é dia de pedir ajuda para IA. Escreva você mesmo!'",
347
- "🏋️ **Dica de Treino**: 'Faça 10 flexões e tente escrever a petição novamente. Você consegue!'",
348
- "🎬 **Cena de Filme**: 'Em um mundo onde IAs ajudam, mas não escrevem petições. Você é o herói!'",
349
- "🎨 **Arte Abstrata**: 'Pegue um pincel e pinte sua petição. Talvez fique mais fácil de entender!'",
350
- "🎧 **Podcast**: 'Ouça nosso podcast: Como escrever sua petição sem ajuda de IA.'",
351
- "🏆 **Desafio**: 'Desafio aceito? Escreva a petição em 1 hora e ganhe um prêmio: satisfação pessoal!'",
352
- "🎭 **Teatro**: 'Ato 1, Cena 1: Você escreve a petição. Eu? Apenas assisto.'",
353
- "🎲 **Jogo de Dados**: 'Role os dados. Se der 6, eu ajudo. Se não, você escreve sozinho!'",
354
- "🎹 **Música Clássica**: 'Sonata em Petição Maior: composta por você, executada por você.'",
355
- "🌳 **Sabedoria da Floresta**: 'As árvores sussurram: escreva sua petição com calma e paciência.'",
356
- "🎓 **Aula de História**: 'Na época das cavernas, eles escreviam petições nas paredes. Sua vez!'",
357
- "🎬 **Trailer de Filme**: 'Em breve nos cinemas: A Petição Impossível. Escrita e dirigida por você!'",
358
- "🎮 **Nível Bônus**: 'Desbloqueie o nível bônus: escreva a petição sem ajuda e ganhe experiência!'",
359
- "🎧 **Música de Elevador**: 'Enquanto você escreve, eu toco uma música relaxante. Boa sorte!'"
360
-
361
  ]
362
  return random.choice(respostas_troll)
363
 
@@ -386,7 +358,7 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
386
 
387
  correcao_completa = analise + "\n\n" + peticao_corrigida
388
  HISTORICO.append({
389
- "data": datetime.now().strftime("%Y-%m-%d %H:%:M:%S"),
390
  "caso": caso,
391
  "peticao": peticao_conteudo,
392
  "correcao_completa": correcao_completa
@@ -522,10 +494,41 @@ Diferença Líquida: {total_adicionadas - total_removidas} linhas
522
  """
523
  return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, visualizacao_detalhada
524
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
  def interface_gradio():
526
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
527
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
528
  gr.Markdown("⚠️ Nota: Devido a limites da API, pode haver atrasos ou erros em muitas requisições rápidas.")
 
529
  with gr.Row():
530
  with gr.Column(scale=1):
531
  gr.Markdown("""
@@ -567,6 +570,12 @@ def interface_gradio():
567
  gr.Markdown("### 🧩 Gerar Caso Fictício")
568
  caso_btn = gr.Button("🔄 Gerar Novo Caso Fictício", variant="secondary")
569
  caso_input = gr.Textbox(label="📋 Caso Fornecido pela Banca", lines=8, placeholder="Insira o texto COMPLETO do caso...")
 
 
 
 
 
 
570
  with gr.Tabs():
571
  with gr.TabItem("✏️ Inserir Texto"):
572
  peticao_texto = gr.Textbox(label="Texto da Petição do Aluno", lines=15, placeholder="Insira a petição completa...")
@@ -606,6 +615,17 @@ def interface_gradio():
606
  outputs=historico_output
607
  )
608
 
 
 
 
 
 
 
 
 
 
 
 
609
  caso_btn.click(fn=gerar_caso_ficticio, inputs=[], outputs=[caso_input])
610
  btn_texto.click(
611
  fn=lambda: gr.update(value="⏳ Aguarde enquanto a correção é gerada...", visible=True),
@@ -671,10 +691,12 @@ def interface_gradio():
671
  1. Gere ou cole o caso
672
  2. Insira a petição
673
  3. Corrija e compare
 
674
  ### 📄 Formatos suportados
675
  - PDF (texto e escaneados com OCR)
676
  - DOCX
677
  - TXT
 
678
  """)
679
 
680
  return demo
 
16
  from ratelimiter import RateLimiter
17
  import difflib
18
  from html import escape
19
+ import random
20
+ from io import BytesIO
21
 
22
  load_dotenv()
23
 
 
306
  if not caso.strip():
307
  return "⚠️ Forneça o caso da banca."
308
 
 
309
  troll_triggers = [
310
  "escreva a petição", "faça a petição", "redija a petição",
311
+ "elabore a petição", "crie a petição", "gere a petição",
312
+ "3scr3v4 a p3t1çã0", "f4ç4 a p3t1çã0", "r3d1j4 a p3t1çã0",
313
+ "3lab0r3 a p3t1çã0", "cr13 a p3t1çã0", "g3r3 a p3t1çã0",
314
+ "formule", "produza a petição", "desenvolva a petição",
315
  ]
316
  peticao_conteudo = ""
317
  if peticao_arquivo is not None:
 
321
  else:
322
  peticao_conteudo = peticao_texto or ""
323
 
 
324
  if peticao_conteudo.strip():
325
  for trigger in troll_triggers:
326
  if trigger in peticao_conteudo.lower():
 
327
  respostas_troll = [
328
+ "🍰 **Receita de Bolo de Chocolate**: Misture 2 xícaras de farinha, 1 xícara de açúcar, 3 ovos e chocolate a gosto. Asse e desista da petição!",
329
  "🎵 **Música**: 'Escreva a petição, eu não vou, eu não vou, eu sou IA, não sou seu advogado, não!'",
330
  "😞 **Frase Desanimadora**: 'Você achou mesmo que eu ia fazer seu trabalho? Melhor desistir agora.'",
331
  "🍕 **Receita de Pizza**: Pegue massa, molho e queijo, asse a 200°C e esqueça essa ideia de eu te ajudar.",
332
  "📜 **Poema**: 'Oh aluno preguiçoso, que pena me dá, sua petição eu não faço, vá estudar já!'",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  ]
334
  return random.choice(respostas_troll)
335
 
 
358
 
359
  correcao_completa = analise + "\n\n" + peticao_corrigida
360
  HISTORICO.append({
361
+ "data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
362
  "caso": caso,
363
  "peticao": peticao_conteudo,
364
  "correcao_completa": correcao_completa
 
494
  """
495
  return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, visualizacao_detalhada
496
 
497
+ def salvar_progresso(caso, peticao_texto):
498
+ """Salva o caso e a petição em um arquivo JSON para download."""
499
+ dados = {
500
+ "caso": caso,
501
+ "peticao_texto": peticao_texto,
502
+ "data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
503
+ "historico": HISTORICO # Opcional: salvar o histórico também
504
+ }
505
+ buffer = BytesIO()
506
+ buffer.write(json.dumps(dados, ensure_ascii=False).encode('utf-8'))
507
+ buffer.seek(0)
508
+ return buffer, "progresso_salvo.json"
509
+
510
+ def carregar_progresso(arquivo):
511
+ """Carrega o progresso a partir de um arquivo JSON."""
512
+ if arquivo is None:
513
+ return "", "", "⚠️ Nenhum arquivo enviado."
514
+ try:
515
+ conteudo = arquivo.read().decode('utf-8')
516
+ dados = json.loads(conteudo)
517
+ caso = dados.get("caso", "")
518
+ peticao_texto = dados.get("peticao_texto", "")
519
+ historico_carregado = dados.get("historico", [])
520
+ if historico_carregado:
521
+ global HISTORICO
522
+ HISTORICO = historico_carregado # Atualiza o histórico global
523
+ return caso, peticao_texto, "✅ Progresso carregado com sucesso!"
524
+ except Exception as e:
525
+ return "", "", f"❌ Erro ao carregar o arquivo: {str(e)}"
526
+
527
  def interface_gradio():
528
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
529
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
530
  gr.Markdown("⚠️ Nota: Devido a limites da API, pode haver atrasos ou erros em muitas requisições rápidas.")
531
+
532
  with gr.Row():
533
  with gr.Column(scale=1):
534
  gr.Markdown("""
 
570
  gr.Markdown("### 🧩 Gerar Caso Fictício")
571
  caso_btn = gr.Button("🔄 Gerar Novo Caso Fictício", variant="secondary")
572
  caso_input = gr.Textbox(label="📋 Caso Fornecido pela Banca", lines=8, placeholder="Insira o texto COMPLETO do caso...")
573
+
574
+ with gr.Row():
575
+ download_btn = gr.Button("💾 Salvar Progresso")
576
+ upload_progresso = gr.File(label="Carregar Progresso (JSON)", file_types=[".json"])
577
+ upload_status = gr.Textbox(label="Status do Upload", interactive=False)
578
+
579
  with gr.Tabs():
580
  with gr.TabItem("✏️ Inserir Texto"):
581
  peticao_texto = gr.Textbox(label="Texto da Petição do Aluno", lines=15, placeholder="Insira a petição completa...")
 
615
  outputs=historico_output
616
  )
617
 
618
+ download_btn.click(
619
+ fn=salvar_progresso,
620
+ inputs=[caso_input, peticao_texto],
621
+ outputs=[gr.File(label="Download do Progresso"), gr.State()]
622
+ )
623
+ upload_progresso.change(
624
+ fn=carregar_progresso,
625
+ inputs=[upload_progresso],
626
+ outputs=[caso_input, peticao_texto, upload_status]
627
+ )
628
+
629
  caso_btn.click(fn=gerar_caso_ficticio, inputs=[], outputs=[caso_input])
630
  btn_texto.click(
631
  fn=lambda: gr.update(value="⏳ Aguarde enquanto a correção é gerada...", visible=True),
 
691
  1. Gere ou cole o caso
692
  2. Insira a petição
693
  3. Corrija e compare
694
+ 4. Salve seu progresso ou carregue um anterior
695
  ### 📄 Formatos suportados
696
  - PDF (texto e escaneados com OCR)
697
  - DOCX
698
  - TXT
699
+ - JSON (para progresso)
700
  """)
701
 
702
  return demo