Update app.py
Browse files
app.py
CHANGED
|
@@ -319,7 +319,7 @@ def estruturar_prompt_correcao(caso, peticao, modo_treinamento=False):
|
|
| 319 |
def estruturar_prompt_geracao_caso():
|
| 320 |
return """
|
| 321 |
Crie um caso fictício detalhado para uma petição inicial cível, similar ao exemplo:
|
| 322 |
-
"Ana, modelo profissional, residente em Manaus, viajou para São Paulo, para o casamento de sua filha. Para lavar, pintar seus cabelos e realizar um penteado para o casamento, Ana procurou os serviços de João Macedo, cabeleireiro e dono do salão de beleza 'Hair', sediado na cidade de São Paulo, que lhe cobrou R$500,00 (quinhentos reais) pela prestação do serviço. Após lavar os cabelos de Ana, João aplicou-lhe uma tintura da marca francesa ABC, importada pela empresa Brasil Connection Ltda, sediada na cidade de Curitiba (PR). Meia hora após a aplicação da tintura, Ana sofreu uma reação alérgica, que demandou atendimento médico-hospitalar, no valor de R$1.000,00 (um mil reais), bem como dois dias de absoluto repouso que impossibilitou sua presença no casamento de sua filha. Além disso, perdeu grande parte de seu cabelo, tendo permanecido com manchas em seu rosto por dois meses, perdendo um ensaio fotográfico, para o qual já havia sido contratada, pelo valor de R$50
|
| 323 |
O caso deve:
|
| 324 |
1. Conter uma situação clara de violação de direitos que justifique uma ação cível
|
| 325 |
2. Incluir valores específicos de danos materiais e/ou morais
|
|
@@ -418,23 +418,23 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
|
|
| 418 |
time.sleep(CONFIG["retry_delay"] * (tentativa + 1))
|
| 419 |
continue
|
| 420 |
return aviso_validacao + "❌ A API retornou uma resposta vazia. Tente novamente."
|
| 421 |
-
|
| 422 |
-
if "### Petição Corrigida" in
|
| 423 |
-
analise_fim =
|
| 424 |
-
analise =
|
| 425 |
else:
|
| 426 |
-
analise =
|
| 427 |
-
|
| 428 |
HISTORICO.append({
|
| 429 |
"data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
| 430 |
"caso": caso,
|
| 431 |
"peticao": peticao_conteudo,
|
| 432 |
-
"correcao_completa":
|
| 433 |
})
|
| 434 |
if len(HISTORICO) > 10: # Limite de histórico
|
| 435 |
HISTORICO.pop(0)
|
| 436 |
-
CORRECAO_CACHE[cache_key] =
|
| 437 |
-
return aviso_validacao +
|
| 438 |
except requests.Timeout:
|
| 439 |
if tentativa < CONFIG["max_retry_attempts"] - 1:
|
| 440 |
time.sleep(CONFIG["retry_delay"] * (tentativa + 1))
|
|
@@ -448,7 +448,7 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
|
|
| 448 |
except Exception as e:
|
| 449 |
return aviso_validacao + f"❌ Erro inesperado: {str(e)}"
|
| 450 |
|
| 451 |
-
def
|
| 452 |
linhas = texto.split('\n')
|
| 453 |
texto_formatado = ""
|
| 454 |
for linha in linhas:
|
|
@@ -475,17 +475,23 @@ def formatar_correção(texto):
|
|
| 475 |
if match:
|
| 476 |
nota = match.group(1)
|
| 477 |
texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
|
| 478 |
-
return texto_formatado
|
| 479 |
|
| 480 |
def extrair_peticao_corrigida(correcao_completa):
|
| 481 |
try:
|
|
|
|
| 482 |
if "### Petição Corrigida" in correcao_completa:
|
| 483 |
inicio = correcao_completa.index("### Petição Corrigida") + len("### Petição Corrigida")
|
| 484 |
peticao_texto = correcao_completa[inicio:].strip()
|
|
|
|
| 485 |
fim = peticao_texto.find("###") if "###" in peticao_texto else len(peticao_texto)
|
| 486 |
peticao_texto = peticao_texto[:fim].strip()
|
| 487 |
return peticao_texto
|
| 488 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 489 |
except Exception as e:
|
| 490 |
return f"❌ Erro ao extrair petição corrigida: {str(e)}"
|
| 491 |
|
|
@@ -520,7 +526,11 @@ def comparar_peticao_melhorada(caso, peticao_texto, correcao):
|
|
| 520 |
ultima_correcao = HISTORICO[-1]["correcao_completa"] if HISTORICO else ""
|
| 521 |
if not ultima_correcao:
|
| 522 |
return "⚠️ Nenhuma correção disponível no histórico.", "", "", "", ""
|
|
|
|
|
|
|
| 523 |
peticao_corrigida = extrair_peticao_corrigida(ultima_correcao)
|
|
|
|
|
|
|
| 524 |
|
| 525 |
orig_lines = peticao.split('\n')
|
| 526 |
corr_lines = peticao_corrigida.split('\n')
|
|
@@ -603,7 +613,7 @@ def exportar_diferencas_html(caso, peticao_texto, correcao):
|
|
| 603 |
HTML(string=html_content).write_pdf(temp_path)
|
| 604 |
return temp_path
|
| 605 |
except Exception as e:
|
| 606 |
-
return f"❌ Erro ao gerar PDF: {str(e)}"
|
| 607 |
finally:
|
| 608 |
if 'temp_path' in locals() and os.path.exists(temp_path):
|
| 609 |
os.unlink(temp_path)
|
|
|
|
| 319 |
def estruturar_prompt_geracao_caso():
|
| 320 |
return """
|
| 321 |
Crie um caso fictício detalhado para uma petição inicial cível, similar ao exemplo:
|
| 322 |
+
"Ana, modelo profissional, residente em Manaus, viajou para São Paulo, para o casamento de sua filha. Para lavar, pintar seus cabelos e realizar um penteado para o casamento, Ana procurou os serviços de João Macedo, cabeleireiro e dono do salão de beleza 'Hair', sediado na cidade de São Paulo, que lhe cobrou R$500,00 (quinhentos reais) pela prestação do serviço. Após lavar os cabelos de Ana, João aplicou-lhe uma tintura da marca francesa ABC, importada pela empresa Brasil Connection Ltda, sediada na cidade de Curitiba (PR). Meia hora após a aplicação da tintura, Ana sofreu uma reação alérgica, que demandou atendimento médico-hospitalar, no valor de R$1.000,00 (um mil reais), bem como dois dias de absoluto repouso que impossibilitou sua presença no casamento de sua filha. Além disso, perdeu grande parte de seu cabelo, tendo permanecido com manchas em seu rosto por dois meses, perdendo um ensaio fotográfico, para o qual já havia sido contratada, pelo valor de R$50.000,00 (cinquenta mil reais). Posteriormente constatou-se que a tintura utilizada continha substâncias químicas extremamente perigosas à vida e à saúde das pessoas e a fabricante ABC já havia sido condenada pela justiça francesa a encerrar a fabricação e comercialização do produto. Indignada com os danos sofridos, Ana procura um advogado para pleitear o devido ressarcimento."
|
| 323 |
O caso deve:
|
| 324 |
1. Conter uma situação clara de violação de direitos que justifique uma ação cível
|
| 325 |
2. Incluir valores específicos de danos materiais e/ou morais
|
|
|
|
| 418 |
time.sleep(CONFIG["retry_delay"] * (tentativa + 1))
|
| 419 |
continue
|
| 420 |
return aviso_validacao + "❌ A API retornou uma resposta vazia. Tente novamente."
|
| 421 |
+
correcao_completa = response_data["candidates"][0]["content"]["parts"][0]["text"]
|
| 422 |
+
if "### Petição Corrigida" in correcao_completa:
|
| 423 |
+
analise_fim = correcao_completa.index("### Petição Corrigida")
|
| 424 |
+
analise = correcao_completa[:analise_fim].strip()
|
| 425 |
else:
|
| 426 |
+
analise = correcao_completa.strip()
|
| 427 |
+
correcao_formatada = formatar_correcao(analise)
|
| 428 |
HISTORICO.append({
|
| 429 |
"data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
| 430 |
"caso": caso,
|
| 431 |
"peticao": peticao_conteudo,
|
| 432 |
+
"correcao_completa": correcao_completa
|
| 433 |
})
|
| 434 |
if len(HISTORICO) > 10: # Limite de histórico
|
| 435 |
HISTORICO.pop(0)
|
| 436 |
+
CORRECAO_CACHE[cache_key] = correcao_formatada
|
| 437 |
+
return aviso_validacao + correcao_formatada
|
| 438 |
except requests.Timeout:
|
| 439 |
if tentativa < CONFIG["max_retry_attempts"] - 1:
|
| 440 |
time.sleep(CONFIG["retry_delay"] * (tentativa + 1))
|
|
|
|
| 448 |
except Exception as e:
|
| 449 |
return aviso_validacao + f"❌ Erro inesperado: {str(e)}"
|
| 450 |
|
| 451 |
+
def formatar_correcao(texto):
|
| 452 |
linhas = texto.split('\n')
|
| 453 |
texto_formatado = ""
|
| 454 |
for linha in linhas:
|
|
|
|
| 475 |
if match:
|
| 476 |
nota = match.group(1)
|
| 477 |
texto_formatado = texto_formatado.replace(f"### ⭐ Nota Final\n\n{nota}", f"### ⭐ Nota Final: {nota}/10\n\n")
|
| 478 |
+
return texto_formatado
|
| 479 |
|
| 480 |
def extrair_peticao_corrigida(correcao_completa):
|
| 481 |
try:
|
| 482 |
+
# Verifica se a seção "### Petição Corrigida" está presente na resposta
|
| 483 |
if "### Petição Corrigida" in correcao_completa:
|
| 484 |
inicio = correcao_completa.index("### Petição Corrigida") + len("### Petição Corrigida")
|
| 485 |
peticao_texto = correcao_completa[inicio:].strip()
|
| 486 |
+
# Encontra o final da petição corrigida, caso haja outra seção marcada com "###"
|
| 487 |
fim = peticao_texto.find("###") if "###" in peticao_texto else len(peticao_texto)
|
| 488 |
peticao_texto = peticao_texto[:fim].strip()
|
| 489 |
return peticao_texto
|
| 490 |
+
else:
|
| 491 |
+
# Se a seção não for encontrada, tenta extrair a petição corrigida de outra forma
|
| 492 |
+
# Aqui, você pode adicionar lógica adicional para tentar localizar a petição corrigida
|
| 493 |
+
# de outras maneiras, se necessário.
|
| 494 |
+
return "⚠️ A seção '### Petição Corrigida' não foi encontrada na resposta da API. Verifique a resposta e tente novamente."
|
| 495 |
except Exception as e:
|
| 496 |
return f"❌ Erro ao extrair petição corrigida: {str(e)}"
|
| 497 |
|
|
|
|
| 526 |
ultima_correcao = HISTORICO[-1]["correcao_completa"] if HISTORICO else ""
|
| 527 |
if not ultima_correcao:
|
| 528 |
return "⚠️ Nenhuma correção disponível no histórico.", "", "", "", ""
|
| 529 |
+
|
| 530 |
+
# Tenta extrair a petição corrigida da última correção
|
| 531 |
peticao_corrigida = extrair_peticao_corrigida(ultima_correcao)
|
| 532 |
+
if "⚠️" in peticao_corrigida or "❌" in peticao_corrigida:
|
| 533 |
+
return peticao_corrigida, "", "", "", ""
|
| 534 |
|
| 535 |
orig_lines = peticao.split('\n')
|
| 536 |
corr_lines = peticao_corrigida.split('\n')
|
|
|
|
| 613 |
HTML(string=html_content).write_pdf(temp_path)
|
| 614 |
return temp_path
|
| 615 |
except Exception as e:
|
| 616 |
+
return f"❌ Erro ao gerar PDF: {str(e)}"
|
| 617 |
finally:
|
| 618 |
if 'temp_path' in locals() and os.path.exists(temp_path):
|
| 619 |
os.unlink(temp_path)
|