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\n" | |
"O acusado, [Nome do Cliente], é um cidadão brasileiro, nascido em [Data de Nascimento] no município de [Local de Nascimento], " | |
"titular do documento de identidade [Tipo de Documento de Identidade] no número [Número do Documento de Identidade], " | |
"efetivo domiciliado na [Endereço de Domicílio do Cliente].", | |
"DOS FATOS\n" | |
"A Polícia de [Local do Crime] detém o acusado desde [Data da Detenção], por motivos de suposto furto qualificado, " | |
"cometido no dia [Data do Crime] às [Horas do Crime], no local de [Local do Crime]. " | |
"Entretanto, há provas documentais e testemunha ocular que comprovam a presença do acusado na cidade distante [Local Distante do Crime] no momento do crime.", | |
"DO DIREITO\n" | |
"O artigo 5º LXVIII da Constituição Federal dispõe que 'toda pessoa pode ser presa quando há fundamentos razoáveis para acreditar que ela cometeu ou está prestes a cometer um crime'. " | |
"O Código de Processo Penal estabelece, nos artigos 647 e 648, que 'a prisão não pode ser imposta a menos que haja fundamentos razoáveis...'", | |
"DO CONSTRANGIMENTO ILEGAL\n" | |
"A prisão do acusado, sem a devida fundamentação, caracteriza constrangimento ilegal, uma vez que há evidências de sua inocência.", | |
"DA MEDIDA LIMINAR\n" | |
"Requer-se a concessão de medida liminar para a liberdade do paciente.", | |
"DOS PEDIDOS\n" | |
"Diante do exposto, requer-se a concessão do habeas corpus.", | |
"PROVAS E DOCUMENTOS\n" | |
"Anexamos documentos que comprovam a inocência do acusado.", | |
"FECHAMENTO\n" | |
"Nestes termos, pede deferimento." | |
], | |
"max_tokens": 500 | |
}, | |
# Add other templates as needed... | |
} | |
template = templates.get(tipo_peca.lower()) | |
if not template: | |
return "Tipo de peça não suportado." | |
# Preencher os campos da peça jurídica com base nas informações do caso | |
informacoes = { | |
"Nome do Cliente": "João da Silva", # Exemplo | |
"Data de Nascimento": "01/01/1990", # Exemplo | |
"Local de Nascimento": "São Paulo", | |
"Tipo de Documento de Identidade": "RG", | |
"Número do Documento de Identidade": "123456789", | |
"Endereço de Domicílio do Cliente": "Rua Exemplo, 123, São Paulo - SP", | |
"Local do Crime": "São Paulo", | |
"Data da Detenção": "15/12/2023", | |
"Data do Crime": "14/12/2023", | |
"Horas do Crime": "14:00", | |
"Local Distante do Crime": "Campinas", | |
"VARA": "1ª Vara Criminal", # Exemplo | |
"COMARCA": "São Paulo" # Exemplo | |
} | |
# Montar o texto da peça jurídica | |
texto_final = "\n\n".join([ | |
linha.replace(placeholder, informacoes[placeholder]) | |
for linha in template["estrutura"] | |
for placeholder in informacoes.keys() | |
if placeholder in linha | |
]) | |
# Realizar a requisição única para aprimoramento | |
try: | |
mensagens = [ | |
{ | |
"role": "system", | |
"content": ( | |
f"Como advogado criminalista, redija um {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": texto_final | |
} | |
] | |
resposta_final = client.chat.completions.create( | |
model="mistralai/Mistral-7B-Instruct-v0.3", | |
messages=mensagens, | |
max_tokens=template['max_tokens'], | |
temperature=0.7 | |
) | |
return resposta_final.choices[0].message["content"] | |
except Exception as e: | |
return f"Erro ao gerar a peça: {str(e)}" | |
# 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() | |