Spaces:
Sleeping
Sleeping
File size: 6,374 Bytes
716ba45 1a11491 50c782f d911a45 716ba45 1c9032d 1a11491 61d1412 92f52a0 61d1412 23b1f8d 61d1412 514bb86 61d1412 23b1f8d 61d1412 23b1f8d 61d1412 514bb86 61d1412 514bb86 61d1412 d911a45 61d1412 1a11491 d911a45 50c782f d911a45 61d1412 d911a45 c660ad9 d911a45 9b1e761 23b1f8d 3a67a8e d911a45 92f52a0 61d1412 d911a45 61d1412 d911a45 c660ad9 23b1f8d d911a45 61d1412 d911a45 23b1f8d 61d1412 23b1f8d 61d1412 23b1f8d d911a45 23b1f8d 61d1412 d911a45 3a67a8e d911a45 92f52a0 d911a45 c660ad9 d911a45 50c782f 716ba45 d911a45 c660ad9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
import gradio as gr
from datetime import datetime
from huggingface_hub import InferenceClient
import os
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. Gere peças sem usar asteriscos ou marcadores. Use numeração romana para seções principais (I, II, III...) e números arábicos para subitens (1, 2, 3...). Mantenha formatação consistente e profissional."},
{"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, formatada e sem asteriscos, com base nos seguintes fatos:
{fatos}
A peça deve seguir este formato:
EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) [AUTORIDADE]
[Título da Peça em Maiúsculas]
I - QUALIFICAÇÃO DAS PARTES
[Nome e dados completos]
II - FUNDAMENTOS JURÍDICOS
1. [Primeiro fundamento]
2. [Segundo fundamento]
[...]
III - JURISPRUDÊNCIA APLICÁVEL
1. [Primeira jurisprudência]
2. [Segunda jurisprudência]
[...]
IV - DOUTRINA APLICÁVEL
[Citações doutrinárias relevantes]
V - PRELIMINARES
1. [Primeira preliminar]
2. [Segunda preliminar]
[...]
VI - MÉRITO
[Desenvolvimento dos argumentos]
VII - PEDIDOS
1. [Primeiro pedido]
2. [Segundo pedido]
[...]
Local, Data.
[Advogado]
OAB/[Estado] [Número]
Dados 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 create_interface():
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# Sistema Criminal.AI", elem_classes="text-center text-2xl font-bold mb-4")
with gr.Group():
tipo = gr.Dropdown(
choices=list(DefenseGenerator().document_types.keys()),
value="resposta_acusacao",
label="Tipo de Peça",
container=False,
scale=1
)
with gr.Row():
with gr.Column(scale=1):
comarca = gr.Textbox(
label="Comarca",
placeholder="Ex: São Paulo",
container=False
)
vara = gr.Textbox(
label="Vara",
placeholder="Ex: 1ª",
container=False
)
with gr.Column(scale=1):
cliente = gr.Textbox(
label="Nome do Cliente",
placeholder="Ex: João da Silva",
container=False
)
oab = gr.Textbox(
label="OAB",
placeholder="Ex: SP123456",
container=False
)
fatos = gr.Textbox(
label="Descreva os fatos",
placeholder="Descreva a situação do cliente e o que precisa ser argumentado...",
lines=5,
container=False
)
with gr.Row():
gerar_btn = gr.Button("Gerar Peça", variant="primary", scale=2)
limpar_btn = gr.Button("Limpar", scale=1)
output = gr.TextArea(
label="Documento Gerado",
lines=20,
show_copy_button=True,
container=False
)
def process(tipo, fatos, comarca, vara, cliente, oab):
gerador = DefenseGenerator()
dados = {
"comarca": comarca,
"vara": vara,
"cliente": cliente,
"oab": oab
}
return gerador.gerar_documento(tipo, fatos, dados)
def clear():
return {
tipo: "resposta_acusacao",
comarca: "",
vara: "",
cliente: "",
oab: "",
fatos: "",
output: ""
}
gerar_btn.click(
fn=process,
inputs=[tipo, fatos, comarca, vara, cliente, oab],
outputs=output,
api_name="gerar_peca"
)
limpar_btn.click(
fn=clear,
outputs=[tipo, comarca, vara, cliente, oab, fatos, output],
api_name="limpar"
)
exemplos = [
["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"]
]
gr.Examples(
examples=exemplos,
inputs=[tipo, fatos, comarca, vara, cliente, oab],
label="Exemplos de Uso"
)
return demo
if __name__ == "__main__":
demo = create_interface()
demo.launch() |