GabrielGD commited on
Commit
51685f9
·
verified ·
1 Parent(s): 66083c9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -29
app.py CHANGED
@@ -28,12 +28,12 @@ GEMINI_API_URL = f"https://generativelanguage.googleapis.com/v1beta/models/gemin
28
  CONFIG = {
29
  "max_retry_attempts": 3,
30
  "retry_delay": 5,
31
- "timeout": 30,
32
  "temperatura": 0.2,
33
  "max_tokens": 12882
34
  }
35
 
36
- rate_limiter = RateLimiter(max_calls=100, period=60)
37
 
38
  DICAS_OAB_MELHORADO = {
39
  "Endereçamento": "Em relações de consumo, prefira o foro do domicílio do autor (Art. 101, I, CDC). Exemplo: 'Excelentíssimo Senhor Juiz de Direito da Vara Cível da Comarca de [Cidade do Autor]'.",
@@ -300,40 +300,35 @@ def chamar_api(prompt):
300
  except Exception as e:
301
  return f"❌ Erro inesperado: {str(e)}"
302
 
303
- def corrigir_peticao_com_progresso(caso, peticao_texto=None, peticao_arquivo=None, modo_treinamento=False):
304
- # Função wrapper para fornecer feedback de progresso
305
  if not caso.strip():
306
- return "⚠️ Forneça o caso da banca.", "⚠️ Erro: Caso não fornecido."
307
  if peticao_arquivo is not None:
308
- yield "", "⏳ Processando arquivo..."
309
  peticao_conteudo = process_file(peticao_arquivo)
310
  if peticao_conteudo.startswith("❌") or peticao_conteudo.startswith("⚠️"):
311
- return peticao_conteudo, "⚠️ Erro no processamento do arquivo."
312
  else:
313
  peticao_conteudo = peticao_texto or ""
314
  if not peticao_conteudo.strip():
315
- return "⚠️ Forneça uma petição.", "⚠️ Erro: Petição não fornecida."
316
 
317
- yield "", "⏳ Validando petição..."
318
  problemas = validar_peticao_basica(peticao_conteudo)
319
  aviso_validacao = f"### Validação Inicial\n\n" + "\n".join(problemas) + "\n\n" if problemas else ""
320
 
321
  cache_key = f"{caso[:50]}|{peticao_conteudo[:50]}|{modo_treinamento}"
322
  if cache_key in CORRECAO_CACHE:
323
- return aviso_validacao + CORRECAO_CACHE[cache_key], "✅ Resultado recuperado do cache."
324
 
325
- yield "", "⏳ Analisando petição com a API..."
326
  prompt_analise = estruturar_prompt_analise(caso, peticao_conteudo, modo_treinamento)
327
  analise = chamar_api(prompt_analise)
328
  if "❌" in analise or "⏱️" in analise:
329
- return aviso_validacao + analise, "⚠️ Erro na análise da API."
330
  analise_formatada = formatar_correcao(analise)
331
 
332
- yield "", "⏳ Gerando petição corrigida..."
333
  prompt_peticao = estruturar_prompt_peticao_corrigida(caso, peticao_conteudo)
334
  peticao_corrigida = chamar_api(prompt_peticao)
335
  if "❌" in peticao_corrigida or "⏱️" in peticao_corrigida:
336
- return aviso_validacao + analise_formatada + "\n\n" + peticao_corrigida, "⚠️ Erro ao gerar petição corrigida."
337
 
338
  peticao_corrigida = pos_corrigir_peticao(peticao_corrigida)
339
 
@@ -347,7 +342,7 @@ def corrigir_peticao_com_progresso(caso, peticao_texto=None, peticao_arquivo=Non
347
  if len(HISTORICO) > 10:
348
  HISTORICO.pop(0)
349
  CORRECAO_CACHE[cache_key] = analise_formatada
350
- return aviso_validacao + analise_formatada, "✅ Correção concluída!"
351
 
352
  def formatar_correcao(texto):
353
  linhas = texto.split('\n')
@@ -372,7 +367,7 @@ def formatar_correcao(texto):
372
  if "Nota Final" in texto_formatado:
373
  import re
374
  nota_pattern = r"### Nota Final.*?(\d+[.,]\d+|\d+)"
375
- match = re.search(nota_pattern, texto_formatada, re.DOTALL)
376
  if match:
377
  nota = match.group(1)
378
  texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
@@ -511,9 +506,6 @@ def interface_gradio():
511
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
512
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
513
  gr.Markdown("⚠️ Nota: Devido a limites da API, pode haver atrasos ou erros em muitas requisições rápidas.")
514
-
515
- estado_processamento = gr.Textbox(label="Status do Processamento", value="Aguardando...", interactive=False)
516
-
517
  with gr.Row():
518
  with gr.Column(scale=1):
519
  gr.Markdown("""
@@ -597,24 +589,23 @@ def interface_gradio():
597
  outputs=historico_output
598
  )
599
 
600
- # Configuração do botão de correção com progresso
601
  btn_texto.click(
602
- fn=corrigir_peticao_com_progresso,
603
- inputs=[caso_input, peticao_texto, peticao_arquivo, modo_treinamento],
604
- outputs=[resultado_output, estado_processamento]
605
  )
606
  btn_arquivo.click(
607
- fn=corrigir_peticao_com_progresso,
608
- inputs=[caso_input, peticao_texto, peticao_arquivo, modo_treinamento],
609
- outputs=[resultado_output, estado_processamento]
610
  )
611
-
612
  clear_btn.click(
613
- fn=lambda: [None, None, None, None, "", "", "", "", "", gr.update(visible=False), gr.update(visible=False), "Aguardando..."],
614
  inputs=None,
615
  outputs=[caso_input, peticao_texto, peticao_arquivo, arquivo_preview, resultado_output, dica_contextual,
616
  peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
617
- visualizacao_detalhada_output, download_btn, download_file, estado_processamento]
618
  )
619
  comparar_btn.click(
620
  fn=comparar_peticao_melhorada,
 
28
  CONFIG = {
29
  "max_retry_attempts": 3,
30
  "retry_delay": 5,
31
+ "timeout": 60,
32
  "temperatura": 0.2,
33
  "max_tokens": 12882
34
  }
35
 
36
+ rate_limiter = RateLimiter(max_calls=60, period=60)
37
 
38
  DICAS_OAB_MELHORADO = {
39
  "Endereçamento": "Em relações de consumo, prefira o foro do domicílio do autor (Art. 101, I, CDC). Exemplo: 'Excelentíssimo Senhor Juiz de Direito da Vara Cível da Comarca de [Cidade do Autor]'.",
 
300
  except Exception as e:
301
  return f"❌ Erro inesperado: {str(e)}"
302
 
303
+ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treinamento=False):
 
304
  if not caso.strip():
305
+ return "⚠️ Forneça o caso da banca."
306
  if peticao_arquivo is not None:
 
307
  peticao_conteudo = process_file(peticao_arquivo)
308
  if peticao_conteudo.startswith("❌") or peticao_conteudo.startswith("⚠️"):
309
+ return peticao_conteudo
310
  else:
311
  peticao_conteudo = peticao_texto or ""
312
  if not peticao_conteudo.strip():
313
+ return "⚠️ Forneça uma petição."
314
 
 
315
  problemas = validar_peticao_basica(peticao_conteudo)
316
  aviso_validacao = f"### Validação Inicial\n\n" + "\n".join(problemas) + "\n\n" if problemas else ""
317
 
318
  cache_key = f"{caso[:50]}|{peticao_conteudo[:50]}|{modo_treinamento}"
319
  if cache_key in CORRECAO_CACHE:
320
+ return aviso_validacao + CORRECAO_CACHE[cache_key]
321
 
 
322
  prompt_analise = estruturar_prompt_analise(caso, peticao_conteudo, modo_treinamento)
323
  analise = chamar_api(prompt_analise)
324
  if "❌" in analise or "⏱️" in analise:
325
+ return aviso_validacao + analise
326
  analise_formatada = formatar_correcao(analise)
327
 
 
328
  prompt_peticao = estruturar_prompt_peticao_corrigida(caso, peticao_conteudo)
329
  peticao_corrigida = chamar_api(prompt_peticao)
330
  if "❌" in peticao_corrigida or "⏱️" in peticao_corrigida:
331
+ return aviso_validacao + analise_formatada + "\n\n" + peticao_corrigida
332
 
333
  peticao_corrigida = pos_corrigir_peticao(peticao_corrigida)
334
 
 
342
  if len(HISTORICO) > 10:
343
  HISTORICO.pop(0)
344
  CORRECAO_CACHE[cache_key] = analise_formatada
345
+ return aviso_validacao + analise_formatada
346
 
347
  def formatar_correcao(texto):
348
  linhas = texto.split('\n')
 
367
  if "Nota Final" in texto_formatado:
368
  import re
369
  nota_pattern = r"### Nota Final.*?(\d+[.,]\d+|\d+)"
370
+ match = re.search(nota_pattern, texto_formatado, re.DOTALL)
371
  if match:
372
  nota = match.group(1)
373
  texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
 
506
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
507
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
508
  gr.Markdown("⚠️ Nota: Devido a limites da API, pode haver atrasos ou erros em muitas requisições rápidas.")
 
 
 
509
  with gr.Row():
510
  with gr.Column(scale=1):
511
  gr.Markdown("""
 
589
  outputs=historico_output
590
  )
591
 
592
+ caso_btn.click(fn=gerar_caso_ficticio, inputs=[], outputs=[caso_input])
593
  btn_texto.click(
594
+ fn=lambda caso, texto, treinamento: corrigir_peticao(caso, texto, None, treinamento),
595
+ inputs=[caso_input, peticao_texto, modo_treinamento],
596
+ outputs=[resultado_output]
597
  )
598
  btn_arquivo.click(
599
+ fn=lambda caso, arquivo, treinamento: corrigir_peticao(caso, None, arquivo, treinamento),
600
+ inputs=[caso_input, peticao_arquivo, modo_treinamento],
601
+ outputs=[resultado_output]
602
  )
 
603
  clear_btn.click(
604
+ fn=lambda: [None, None, None, None, "", "", "", "", "", gr.update(visible=False), gr.update(visible=False)],
605
  inputs=None,
606
  outputs=[caso_input, peticao_texto, peticao_arquivo, arquivo_preview, resultado_output, dica_contextual,
607
  peticao_aluno_output, peticao_corrigida_output, resumo_alteracoes_output, criticas_output,
608
+ visualizacao_detalhada_output, download_btn, download_file]
609
  )
610
  comparar_btn.click(
611
  fn=comparar_peticao_melhorada,