Update app.py
Browse files
app.py
CHANGED
|
@@ -50,6 +50,7 @@ DICAS_OAB = {
|
|
| 50 |
HISTORICO = []
|
| 51 |
CORRECAO_CACHE = {}
|
| 52 |
|
|
|
|
| 53 |
def preprocess_image_for_ocr(img):
|
| 54 |
try:
|
| 55 |
gray = img.convert('L')
|
|
@@ -168,6 +169,7 @@ def process_file(file_obj):
|
|
| 168 |
except Exception as e:
|
| 169 |
return f"❌ Erro ao processar o arquivo: {str(e)}"
|
| 170 |
|
|
|
|
| 171 |
def calcular_pontuacao(enderecamento, fundamentos, pedidos, fechamento):
|
| 172 |
tabela = [
|
| 173 |
("**Endereçamento**", ""),
|
|
@@ -205,6 +207,7 @@ def validar_peticao_basica(peticao):
|
|
| 205 |
problemas.append("⚠️ Fechamento formal ausente.")
|
| 206 |
return problemas
|
| 207 |
|
|
|
|
| 208 |
def estruturar_prompt_correcao(caso, peticao, modo_treinamento=False):
|
| 209 |
base_prompt = f"""
|
| 210 |
## Correção Rigorosa de Petição Inicial Cível (Critérios Realistas da OAB)
|
|
@@ -285,13 +288,14 @@ def estruturar_prompt_correcao(caso, peticao, modo_treinamento=False):
|
|
| 285 |
a) Uma explicação detalhada (mínimo 2 frases) descrevendo o erro e sua base legal (ex.: Art. 319, CPC).
|
| 286 |
b) Uma sugestão de redação corrigida baseada no caso.
|
| 287 |
c) Um exemplo prático de redação correta em outro contexto (ex.: "Em uma ação de dano moral, poderia ser: 'Requer a condenação ao pagamento de R$ 10.000,00 por danos morais, conforme Súmula 387 do STJ.'").
|
| 288 |
-
d) Uma dica prática do banco ({json.dumps(DICAS_OAB
|
| 289 |
- Verifique a coerência entre os fatos do caso e a petição, destacando inconsistências.
|
| 290 |
- Sugira estratégias jurídicas adicionais baseadas no caso (ex.: citar Art. 186, CC ou Súmula 387, STJ para danos morais).
|
| 291 |
- Não resuma; detalhe cada erro de forma pedagógica e clara.
|
| 292 |
"""
|
| 293 |
return base_prompt
|
| 294 |
|
|
|
|
| 295 |
def estruturar_prompt_geracao_caso():
|
| 296 |
return """
|
| 297 |
Crie um caso fictício detalhado para uma petição inicial cível, similar ao exemplo:
|
|
@@ -424,6 +428,7 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
|
|
| 424 |
except Exception as e:
|
| 425 |
return aviso_validacao + f"❌ Erro inesperado: {str(e)}"
|
| 426 |
|
|
|
|
| 427 |
def formatar_correção(texto):
|
| 428 |
linhas = texto.split('\n')
|
| 429 |
texto_formatado = ""
|
|
@@ -451,7 +456,7 @@ def formatar_correção(texto):
|
|
| 451 |
if match:
|
| 452 |
nota = match.group(1)
|
| 453 |
texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
|
| 454 |
-
return texto_formatado
|
| 455 |
|
| 456 |
def extrair_peticao_corrigida(correcao_completa):
|
| 457 |
try:
|
|
@@ -485,6 +490,7 @@ def calcular_progresso():
|
|
| 485 |
tendencia = "⬆️ Melhorando" if len(notas) > 1 and notas[-1] > notas[-2] else "⬇️ Estável ou piorando"
|
| 486 |
return f"📊 Progresso: Média {media:.1f}/10 | Tentativas: {len(notas)} | Tendência: {tendencia}"
|
| 487 |
|
|
|
|
| 488 |
def comparar_peticao_melhorada(caso, peticao_texto, correcao):
|
| 489 |
if not caso:
|
| 490 |
return "⚠️ Forneça um caso antes de comparar.", "", "", "", ""
|
|
@@ -548,6 +554,7 @@ Diferença Líquida: {total_adicionadas - total_removidas} linhas
|
|
| 548 |
"""
|
| 549 |
return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, visualizacao_detalhada
|
| 550 |
|
|
|
|
| 551 |
def exportar_diferencas_html(caso, peticao_texto, correcao):
|
| 552 |
_, _, resumo_estatistico, criticas_texto, visualizacao_detalhada = comparar_peticao_melhorada(caso, peticao_texto, correcao)
|
| 553 |
html_content = f"""
|
|
@@ -579,7 +586,7 @@ def exportar_diferencas_html(caso, peticao_texto, correcao):
|
|
| 579 |
HTML(string=html_content).write_pdf(temp_path)
|
| 580 |
return temp_path
|
| 581 |
except Exception as e:
|
| 582 |
-
return
|
| 583 |
finally:
|
| 584 |
if 'temp_path' in locals() and os.path.exists(temp_path):
|
| 585 |
os.unlink(temp_path)
|
|
@@ -703,7 +710,7 @@ def interface_gradio():
|
|
| 703 |
inputs=[caso_input, peticao_texto, resultado_output],
|
| 704 |
outputs=[download_file]
|
| 705 |
).then(
|
| 706 |
-
fn=lambda x: [gr.update(visible=True, value=x) if
|
| 707 |
outputs=[download_file, download_btn]
|
| 708 |
)
|
| 709 |
|
|
|
|
| 50 |
HISTORICO = []
|
| 51 |
CORRECAO_CACHE = {}
|
| 52 |
|
| 53 |
+
# Funções de pré-processamento e extração de texto permanecem inalteradas
|
| 54 |
def preprocess_image_for_ocr(img):
|
| 55 |
try:
|
| 56 |
gray = img.convert('L')
|
|
|
|
| 169 |
except Exception as e:
|
| 170 |
return f"❌ Erro ao processar o arquivo: {str(e)}"
|
| 171 |
|
| 172 |
+
# Função de cálculo de pontuação aprimorada com explicações
|
| 173 |
def calcular_pontuacao(enderecamento, fundamentos, pedidos, fechamento):
|
| 174 |
tabela = [
|
| 175 |
("**Endereçamento**", ""),
|
|
|
|
| 207 |
problemas.append("⚠️ Fechamento formal ausente.")
|
| 208 |
return problemas
|
| 209 |
|
| 210 |
+
# Prompt estruturado aprimorado com feedback pedagógico
|
| 211 |
def estruturar_prompt_correcao(caso, peticao, modo_treinamento=False):
|
| 212 |
base_prompt = f"""
|
| 213 |
## Correção Rigorosa de Petição Inicial Cível (Critérios Realistas da OAB)
|
|
|
|
| 288 |
a) Uma explicação detalhada (mínimo 2 frases) descrevendo o erro e sua base legal (ex.: Art. 319, CPC).
|
| 289 |
b) Uma sugestão de redação corrigida baseada no caso.
|
| 290 |
c) Um exemplo prático de redação correta em outro contexto (ex.: "Em uma ação de dano moral, poderia ser: 'Requer a condenação ao pagamento de R$ 10.000,00 por danos morais, conforme Súmula 387 do STJ.'").
|
| 291 |
+
d) Uma dica prática do banco ({json.dumps(DICAS_OAB)}) ou personalizada.
|
| 292 |
- Verifique a coerência entre os fatos do caso e a petição, destacando inconsistências.
|
| 293 |
- Sugira estratégias jurídicas adicionais baseadas no caso (ex.: citar Art. 186, CC ou Súmula 387, STJ para danos morais).
|
| 294 |
- Não resuma; detalhe cada erro de forma pedagógica e clara.
|
| 295 |
"""
|
| 296 |
return base_prompt
|
| 297 |
|
| 298 |
+
# Funções de geração de caso e correção permanecem similares
|
| 299 |
def estruturar_prompt_geracao_caso():
|
| 300 |
return """
|
| 301 |
Crie um caso fictício detalhado para uma petição inicial cível, similar ao exemplo:
|
|
|
|
| 428 |
except Exception as e:
|
| 429 |
return aviso_validacao + f"❌ Erro inesperado: {str(e)}"
|
| 430 |
|
| 431 |
+
# Função de formatação com mais detalhes pedagógicos
|
| 432 |
def formatar_correção(texto):
|
| 433 |
linhas = texto.split('\n')
|
| 434 |
texto_formatado = ""
|
|
|
|
| 456 |
if match:
|
| 457 |
nota = match.group(1)
|
| 458 |
texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
|
| 459 |
+
return texto_formatado
|
| 460 |
|
| 461 |
def extrair_peticao_corrigida(correcao_completa):
|
| 462 |
try:
|
|
|
|
| 490 |
tendencia = "⬆️ Melhorando" if len(notas) > 1 and notas[-1] > notas[-2] else "⬇️ Estável ou piorando"
|
| 491 |
return f"📊 Progresso: Média {media:.1f}/10 | Tentativas: {len(notas)} | Tendência: {tendencia}"
|
| 492 |
|
| 493 |
+
# Função de comparação aprimorada com feedback visual
|
| 494 |
def comparar_peticao_melhorada(caso, peticao_texto, correcao):
|
| 495 |
if not caso:
|
| 496 |
return "⚠️ Forneça um caso antes de comparar.", "", "", "", ""
|
|
|
|
| 554 |
"""
|
| 555 |
return peticao, peticao_corrigida, resumo_estatistico, criticas_texto, visualizacao_detalhada
|
| 556 |
|
| 557 |
+
# Função de exportação corrigida para o problema do download
|
| 558 |
def exportar_diferencas_html(caso, peticao_texto, correcao):
|
| 559 |
_, _, resumo_estatistico, criticas_texto, visualizacao_detalhada = comparar_peticao_melhorada(caso, peticao_texto, correcao)
|
| 560 |
html_content = f"""
|
|
|
|
| 586 |
HTML(string=html_content).write_pdf(temp_path)
|
| 587 |
return temp_path
|
| 588 |
except Exception as e:
|
| 589 |
+
return None
|
| 590 |
finally:
|
| 591 |
if 'temp_path' in locals() and os.path.exists(temp_path):
|
| 592 |
os.unlink(temp_path)
|
|
|
|
| 710 |
inputs=[caso_input, peticao_texto, resultado_output],
|
| 711 |
outputs=[download_file]
|
| 712 |
).then(
|
| 713 |
+
fn=lambda x: [gr.update(visible=True, value=x) if x else gr.update(visible=True, value=None, label="Erro ao gerar PDF"), gr.update(visible=True)],
|
| 714 |
outputs=[download_file, download_btn]
|
| 715 |
)
|
| 716 |
|