File size: 4,447 Bytes
716ba45
50c782f
1a11491
50c782f
716ba45
1c9032d
1a11491
 
 
 
 
 
61d1412
 
 
 
 
 
 
 
92f52a0
 
61d1412
23b1f8d
 
 
61d1412
 
 
 
 
 
23b1f8d
 
 
61d1412
23b1f8d
61d1412
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1a11491
50c782f
1c9032d
9b1e761
23b1f8d
61d1412
50c782f
4ae1270
61d1412
 
c660ad9
61d1412
9b1e761
23b1f8d
3a67a8e
50c782f
61d1412
 
50c782f
 
61d1412
 
92f52a0
61d1412
 
 
 
c660ad9
23b1f8d
61d1412
 
50c782f
61d1412
23b1f8d
 
 
61d1412
 
23b1f8d
61d1412
23b1f8d
61d1412
23b1f8d
61d1412
23b1f8d
3a67a8e
92f52a0
61d1412
 
 
 
 
 
c660ad9
 
50c782f
 
716ba45
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
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()