Criminal.ai / app.py
DHEIVER's picture
Update app.py
90c609f verified
raw
history blame
8.47 kB
import os
import gradio as gr
from huggingface_hub import InferenceClient
# Obtendo a API Key da variável de ambiente
api_key = os.getenv("HF_API_KEY")
if not api_key:
raise EnvironmentError("A variável de ambiente 'HF_API_KEY' não está configurada.")
# Criação do cliente com a API Key
client = InferenceClient(api_key=api_key)
# Função para gerar a peça jurídica em português do Brasil
def gerar_peca_juridica_criminal(informacoes_caso: str, tipo_peca: str) -> str:
if not informacoes_caso or not tipo_peca:
return "Por favor, forneça todas as informações necessárias."
templates = {
"habeas corpus": {
"estrutura": [
"EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA [VARA] DA [COMARCA]",
"QUALIFICAÇÃO DO PACIENTE",
"DOS FATOS",
"DO DIREITO",
"DO CONSTRANGIMENTO ILEGAL",
"DA MEDIDA LIMINAR",
"DOS PEDIDOS",
"PROVAS E DOCUMENTOS",
"FECHAMENTO",
],
"prompt": (
"HC técnico:\n"
"1. Qualificação completa\n"
"2. Fatos e provas do constrangimento\n"
"3. CF art 5º LXVIII e CPP 647/648\n"
"4. STF/STJ sobre o tema\n"
"5. Pedido liminar fundamentado\n"
"6. Rol de documentos"
),
"max_tokens": 400
},
# Add other templates as needed...
}
template = templates.get(tipo_peca.lower())
if not template:
return "Tipo de peça não suportado."
mensagens_estrutura = [
{
"role": "system",
"content": (
f"Como advogado criminalista, redija {tipo_peca} técnica seguindo:\n"
f"1. Estrutura formal\n"
f"2. Linguagem jurídica\n"
f"3. Fundamentação precisa\n"
f"4. Formatação correta"
)
},
{
"role": "user",
"content": (
f"Elabore seguindo estrutura:\n"
f"{chr(10).join(template['estrutura'])}\n\n"
f"Requisitos:\n{template['prompt']}\n\n"
f"Caso:\n{informacoes_caso}"
)
}
]
try:
resposta_estrutura = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.3",
messages=mensagens_estrutura,
max_tokens=template['max_tokens'],
temperature=0.7
)
estrutura_base = resposta_estrutura.choices[0].message["content"]
except Exception as e:
return f"Erro ao gerar a estrutura: {str(e)}"
mensagens_elaboracao = [
{
"role": "system",
"content": (
f"Como especialista criminal, aprimore {tipo_peca} com:\n"
"1. Legislação pertinente\n"
"2. Jurisprudência atual\n"
"3. Doutrina relevante\n"
"4. Fundamentação técnica"
)
},
{
"role": "user",
"content": f"Revise e complemente:\n{estrutura_base}"
}
]
try:
resposta_elaboracao = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.3",
messages=mensagens_elaboracao,
max_tokens=template['max_tokens'],
temperature=0.7
)
except Exception as e:
return f"Erro ao elaborar a peça: {str(e)}"
mensagens_final = [
{
"role": "system",
"content": (
f"Finalize {tipo_peca} garantindo:\n"
"1. Estrutura correta\n"
"2. Numeração parágrafos\n"
"3. Formatação adequada\n"
"4. Citações precisas"
)
},
{
"role": "user",
"content": (
f"Versão final seguindo:\n"
f"{chr(10).join(template['estrutura'])}\n\n"
f"Conteúdo base:\n{estrutura_base}\n\n"
f"Complementos:\n{resposta_elaboracao.choices[0].message['content']}"
)
}
]
try:
resposta_final = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.3",
messages=mensagens_final,
max_tokens=max(template['max_tokens'] + 100, 500),
temperature=0.5
)
except Exception as e:
return f"Erro ao finalizar a peça: {str(e)}"
return resposta_final.choices[0].message["content"]
# Função para redefinir os campos
def redefinir_campos():
return "", "", ""
# Função para exportar a peça jurídica gerada
def exportar_peca(peca_texto):
"""
Exporta a peça jurídica gerada para um arquivo .txt.
Parâmetros:
peca_texto (str): Texto da peça jurídica gerada.
Retorna:
str: Caminho do arquivo exportado.
"""
arquivo_nome = "peca_juridica_gerada.txt"
with open(arquivo_nome, "w", encoding="utf-8") as arquivo:
arquivo.write(peca_texto)
return f"Arquivo salvo como: {arquivo_nome}"
# Configuração do app Gradio com funcionalidades adicionais
def gerar_interface_gradio():
"""
Configura a interface do Gradio para gerar peças jurídicas com exemplos pré-definidos e funcionalidades adicionais.
"""
with gr.Blocks() as interface:
gr.Markdown("# Gerador de Peças Jurídicas Criminais")
gr.Markdown(
"### Preencha os campos abaixo ou escolha um exemplo, e selecione o tipo de peça jurídica que deseja gerar."
)
with gr.Row():
entrada_caso = gr.Textbox(
label="Informações do Caso",
placeholder="Descreva o caso detalhadamente ou selecione um exemplo abaixo.",
lines=5
)
exemplo_caso = gr.Dropdown(
label="Exemplos de Casos",
choices=[
"O cliente foi acusado injustamente de furto qualificado, mas há provas de que estava em outro local no momento do crime.",
"O cliente foi preso em flagrante por porte de entorpecentes, mas os policiais não apresentaram o mandado de busca.",
"O cliente foi acusado de agressão, mas existem testemunhas que comprovam sua ausência no local do ocorrido."
],
value=None,
interactive=True
)
entrada_tipo = gr.Dropdown(
label="Tipo de Peça Jurídica",
choices=["habeas corpus", "petição inicial", "defesa prévia", "apelação criminal"],
value=None # Define o valor inicial como nenhum
)
def atualizar_caso(caso_exemplo):
"""
Atualiza o campo de texto com o exemplo escolhido pelo usuário.
"""
return caso_exemplo
exemplo_caso.change(
atualizar_caso,
inputs=exemplo_caso,
outputs=entrada_caso
)
with gr.Row():
botao_gerar = gr.Button("Gerar Peça Jurídica")
botao_redefinir = gr.Button("Redefinir Campos")
saida_texto = gr.Textbox(
label="Peça Jurídica Gerada",
lines=15,
placeholder="A peça jurídica gerada aparecerá aqui."
)
botao_gerar.click(
gerar_peca_juridica_criminal,
inputs=[entrada_caso, entrada_tipo],
outputs=saida_texto
)
botao_redefinir.click(
redefinir_campos,
inputs=None,
outputs=[entrada_caso, entrada_tipo, saida_texto]
)
with gr.Row():
botao_exportar = gr.Button("Exportar Peça Jurídica para .txt")
saida_arquivo = gr.Textbox(
label="Arquivo Exportado",
interactive=False,
placeholder="O caminho do arquivo exportado será exibido aqui."
)
botao_exportar.click(
exportar_peca,
inputs=saida_texto,
outputs=saida_arquivo
)
return interface
# Executa o app
if __name__ == "__main__":
app = gerar_interface_gradio()
app.launch()