File size: 7,678 Bytes
82a745d
716ba45
d4469c1
716ba45
d4469c1
 
 
 
716ba45
d4469c1
 
99c1a44
5de62ce
d4469c1
200622a
 
 
21ce01b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b3dfb61
 
 
200622a
b3dfb61
 
 
 
200622a
b3dfb61
 
 
 
 
200622a
b3dfb61
 
 
d4469c1
 
 
200622a
 
d4469c1
 
 
 
b3dfb61
200622a
d4469c1
 
99c1a44
b3dfb61
d4469c1
b3dfb61
 
 
d4469c1
70a99c2
b3dfb61
 
c3f8d4f
70a99c2
 
21ce01b
 
 
 
 
 
 
70a99c2
 
 
200622a
70a99c2
 
 
200622a
70a99c2
200622a
b3dfb61
 
70a99c2
 
200622a
b3dfb61
 
200622a
b3dfb61
 
 
 
200622a
b3dfb61
200622a
b3dfb61
 
 
70a99c2
b3dfb61
 
200622a
b3dfb61
 
 
9fcb1ea
b3dfb61
7060ba3
3a67a8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d4469c1
 
3a67a8e
d4469c1
 
b9be663
d4469c1
3a67a8e
d4469c1
2552fb1
d4469c1
 
 
3a67a8e
d4469c1
bd07d48
5de62ce
 
 
 
 
 
 
 
424f551
5de62ce
 
 
3a67a8e
d4469c1
3a67a8e
424f551
bd07d48
428cd1d
5de62ce
 
 
 
 
 
 
 
 
 
 
 
3a67a8e
 
 
 
b9be663
 
 
 
 
d4469c1
 
 
 
 
 
3a67a8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
716ba45
d4469c1
716ba45
d4469c1
716ba45
d4469c1
0088715
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
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, tipo_peca):
    if not tipo_peca or not informacoes_caso:
        return "Por favor, forneça todas as informações necessárias."

    template = {
        "estrutura": [
            "EXCELENTÍSSIMO(A) JUIZ(A)",
            "FATOS",
            "DIREITO",
            "PEDIDOS"
        ],
        "prompt": (
            "Gere HC conciso com:\n"
            "- Fatos essenciais\n"
            "- Art. 5º LXVIII CF, 647/648 CPP\n"
            "- 1-2 precedentes chave\n"
            "- Pedido liminar e principal"
        )
    }

    mensagens_estrutura = [
        {
            "role": "system",
            "content": "Redija HC objetivo. Foque no constrangimento ilegal."
        },
        {
            "role": "user",
            "content": f"{template['prompt']}\nCaso: {informacoes_caso}"
        }
    ]
        },
        "petição inicial": {
            "estrutura": [
                "QUALIFICAÇÃO",
                "DOS FATOS",
                "DO DIREITO",
                "DOS PEDIDOS"
            ],
            "prompt": "Elabore uma petição inicial criminal contemplando os requisitos do Art. 41 do CPP"
        }
    }

    template = templates.get(tipo_peca.lower(), {
        "estrutura": ["INTRODUÇÃO", "DESENVOLVIMENTO", "CONCLUSÃO"],
        "prompt": f"Elabore uma {tipo_peca} criminal fundamentada."
    })

    mensagens_estrutura = [
        {
            "role": "system",
            "content": (
                "Você é um advogado criminalista especialista. "
                "Formate a peça conforme a estrutura jurídica brasileira."
            )
        },
        {
            "role": "user",
            "content": f"{template['prompt']}\n\nCaso: {informacoes_caso}\n\n"
                      f"Estruture com:\n{chr(10).join(template['estrutura'])}"
        }
    ]

    resposta_estrutura = client.chat.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.3",
        messages=mensagens_estrutura,
        max_tokens=1500,
        temperature=0.7
    )

    estrutura_base = resposta_estrutura.choices[0].message["content"]

    mensagens_elaboracao = [
        {
            "role": "system",
            "content": "Fundamente com artigos e 1 precedente chave por argumento."
        },
        {
            "role": "user",
            "content": f"Revise mantendo apenas argumentos essenciais:\n{estrutura_base}"
        }
    ]
        },
        {
            "role": "user",
            "content": f"Aprimore esta peça:\n{estrutura_base}"
        }
    ]

    resposta_elaboracao = client.chat.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.3",
        messages=mensagens_elaboracao,
        max_tokens=1500,
        temperature=0.7
    )

    mensagens_final = [
        {
            "role": "system",
            "content": "Faça a revisão técnica final garantindo precisão e formatação."
        },
        {
            "role": "user",
            "content": (
                f"Revise e formate:\n"
                f"{estrutura_base}\n\n"
                f"Complementos:\n{resposta_elaboracao.choices[0].message['content']}"
            )
        }
    ]

    resposta_final = client.chat.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.3",
        messages=mensagens_final,
        max_tokens=1500,
        temperature=0.5
    )

    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()