Spaces:
Sleeping
Sleeping
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() | |