Criminal.ai / app.py
DHEIVER's picture
Update app.py
61d1412 verified
raw
history blame
4.45 kB
import gradio as gr
import os
from datetime import datetime
from huggingface_hub import InferenceClient
class DefenseGenerator:
def __init__(self):
self.api_key = os.getenv("HF_API_KEY")
if not self.api_key:
raise EnvironmentError("HF_API_KEY não configurada")
self.client = InferenceClient(api_key=self.api_key)
self.document_types = {
"resposta_acusacao": "Resposta à Acusação",
"habeas_corpus": "Habeas Corpus",
"revogacao_preventiva": "Revogação de Prisão Preventiva",
"liberdade_provisoria": "Liberdade Provisória",
"relaxamento_prisao": "Relaxamento de Prisão",
"apelacao": "Recurso de Apelação",
"embargos": "Embargos de Declaração"
}
def generate_content(self, prompt: str) -> str:
try:
response = self.client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.3",
messages=[
{"role": "system", "content": "Você é um advogado criminalista experiente."},
{"role": "user", "content": prompt}
],
max_tokens=2000,
temperature=0.7
)
return response.choices[0].message["content"]
except Exception as e:
return f"Erro na geração: {str(e)}"
def gerar_documento(self, tipo: str, fatos: str, dados_basicos: dict) -> str:
prompt = f"""Gere uma peça de {self.document_types[tipo]} completa com base nos seguintes fatos:
{fatos}
Inclua todos os elementos necessários:
- Qualificação completa das partes
- Fundamentos jurídicos pertinentes
- Jurisprudência relevante
- Doutrina aplicável
- Preliminares quando cabíveis
- Mérito detalhado
- Pedidos específicos
Dados básicos para formatação:
Comarca: {dados_basicos['comarca']}
Vara: {dados_basicos['vara']}
Cliente: {dados_basicos['cliente']}
OAB: {dados_basicos['oab']}"""
return self.generate_content(prompt)
def interface():
gerador = DefenseGenerator()
with gr.Blocks() as demo:
gr.Markdown("# Gerador de Peças Criminais")
with gr.Row():
tipo = gr.Dropdown(
choices=list(gerador.document_types.keys()),
label="Tipo de Peça",
value="resposta_acusacao"
)
with gr.Row():
with gr.Column():
comarca = gr.Textbox(label="Comarca", placeholder="Ex: São Paulo")
vara = gr.Textbox(label="Vara", placeholder="Ex: 1ª")
with gr.Column():
cliente = gr.Textbox(label="Nome do Cliente", placeholder="Ex: João da Silva")
oab = gr.Textbox(label="OAB", placeholder="Ex: SP123456")
fatos = gr.Textbox(
label="Descreva os fatos e o que deseja na peça",
placeholder="Descreva a situação do cliente e o que precisa ser argumentado...",
lines=5
)
btn = gr.Button("Gerar")
output = gr.Textbox(label="Peça Gerada", lines=20, show_copy_button=True)
def process(tipo, fatos, comarca, vara, cliente, oab):
dados = {
"comarca": comarca,
"vara": vara,
"cliente": cliente,
"oab": oab
}
return gerador.gerar_documento(tipo, fatos, dados)
btn.click(
fn=process,
inputs=[tipo, fatos, comarca, vara, cliente, oab],
outputs=output
)
exemplo = gr.Examples(
examples=[
["resposta_acusacao", "Cliente preso em flagrante por furto de celular iPhone 13 da vítima Maria em 10/01/2024. É primário, tem residência fixa e trabalho. A vítima não reconheceu com certeza.", "São Paulo", "1ª", "João Silva", "SP123456"],
["habeas_corpus", "Cliente preso preventivamente há 90 dias por tráfico. Apreendidas 10g de maconha, é primário, tem residência e trabalho fixos. Não foram apreendidos outros materiais típicos de tráfico.", "São Paulo", "2ª", "Pedro Santos", "SP654321"]
],
inputs=[tipo, fatos, comarca, vara, cliente, oab]
)
return demo
if __name__ == "__main__":
demo = interface()
demo.launch()