DHEIVER commited on
Commit
92f52a0
·
verified ·
1 Parent(s): 50c782f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +150 -25
app.py CHANGED
@@ -10,6 +10,50 @@ class DocumentGenerator:
10
  raise EnvironmentError("HF_API_KEY não configurada")
11
  self.client = InferenceClient(api_key=self.api_key)
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  def generate_section(self, messages: list, section: str) -> str:
14
  try:
15
  response = self.client.chat.completions.create(
@@ -23,21 +67,30 @@ class DocumentGenerator:
23
  raise Exception(f"Erro na geração da seção {section}: {str(e)}")
24
 
25
  def gerar_documento(self, tipo_documento: str, dados: dict) -> str:
 
 
 
 
 
 
26
  messages = [
27
- {"role": "system", "content": "Você é um assistente especializado em peças jurídicas criminais."},
28
  {"role": "user", "content": f"Dados para geração de {tipo_documento}:\n{str(dados)}"}
29
  ]
30
 
31
- if tipo_documento == "denuncia":
32
- sections = ["qualificacao", "narrativa", "tipificacao", "pedido"]
33
- else:
34
- sections = ["relatorio", "fundamentacao", "pedido"]
35
-
36
  documento = ""
37
- for section in sections:
38
- documento += self.generate_section(messages, section) + "\n\n"
39
-
40
- dados['data'] = datetime.now().strftime("%d/%m/%Y")
 
 
 
 
 
 
 
 
41
  return documento
42
 
43
  def interface():
@@ -63,7 +116,9 @@ def interface():
63
  return gerador.gerar_documento(tipo_doc, dados)
64
 
65
  with gr.Blocks(title="Gerador de Peças Jurídicas Criminais") as demo:
66
- gr.Markdown("# Gerador de Peças Jurídicas Criminais")
 
 
67
 
68
  with gr.Row():
69
  tipo_documento = gr.Radio(
@@ -74,41 +129,62 @@ def interface():
74
 
75
  with gr.Row():
76
  with gr.Column():
77
- comarca = gr.Textbox(label="Comarca")
78
- vara = gr.Textbox(label="Vara")
79
- estado = gr.Textbox(label="Estado")
80
- nome_reu = gr.Textbox(label="Nome do Réu")
 
 
 
 
 
 
 
 
 
 
 
 
81
  qualificacao = gr.Textbox(
82
  label="Qualificação do Réu",
83
- placeholder="brasileiro, casado, etc..."
84
  )
85
 
86
  with gr.Column():
87
  narrativa = gr.Textbox(
88
  label="Narrativa dos Fatos",
89
- lines=5
 
 
 
 
 
90
  )
91
- artigo = gr.Textbox(label="Artigo(s) do CP")
92
  testemunhas = gr.Textbox(
93
  label="Testemunhas",
94
  lines=3,
95
- placeholder="1. Nome da testemunha\n2. Nome da testemunha"
96
  )
97
 
98
  with gr.Row(visible=False) as campos_alegacoes:
99
  with gr.Column():
100
- numero_processo = gr.Textbox(label="Número do Processo")
 
 
 
101
  narrativa_processual = gr.Textbox(
102
  label="Narrativa Processual",
103
- lines=5
 
104
  )
105
  fundamentacao = gr.Textbox(
106
  label="Fundamentação",
107
- lines=5
 
108
  )
109
  pedido_final = gr.Textbox(
110
  label="Pedido Final",
111
- placeholder="condenação do réu nas sanções do art. X..."
112
  )
113
 
114
  def atualizar_campos(escolha):
@@ -117,9 +193,45 @@ def interface():
117
  tipo_documento.change(atualizar_campos, tipo_documento, campos_alegacoes)
118
 
119
  with gr.Row():
120
- gerar_btn = gr.Button("Gerar Documento")
 
121
 
122
- saida = gr.Textbox(label="Documento Gerado", lines=10)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  gerar_btn.click(
125
  processar,
@@ -130,6 +242,19 @@ def interface():
130
  ],
131
  outputs=saida
132
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
  return demo
135
 
 
10
  raise EnvironmentError("HF_API_KEY não configurada")
11
  self.client = InferenceClient(api_key=self.api_key)
12
 
13
+ self.templates = {
14
+ "denuncia": {
15
+ "system": """Você é um promotor de justiça experiente, especializado em redigir denúncias criminais.
16
+ Seu objetivo é gerar denúncias precisas e tecnicamente corretas.""",
17
+ "sections": {
18
+ "cabecalho": "EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}",
19
+ "qualificacao": """O MINISTÉRIO PÚBLICO DO ESTADO DE {estado}, por seu Promotor de Justiça que esta subscreve, no uso de suas atribuições legais, vem perante Vossa Excelência oferecer DENÚNCIA em face de:
20
+
21
+ {nome_reu}, {qualificacao_reu}""",
22
+ "narrativa": "{narrativa}",
23
+ "tipificacao": """Assim agindo, {nome_reu} incorreu nas sanções do artigo {artigo} do Código Penal.""",
24
+ "pedido": """Ante o exposto, o Ministério Público requer:
25
+
26
+ 1. O recebimento e autuação da presente denúncia;
27
+ 2. A citação do denunciado para responder à acusação por escrito, no prazo de 10 (dez) dias;
28
+ 3. A intimação das testemunhas abaixo arroladas;
29
+ 4. Ao final, a condenação do denunciado nas penas do artigo {artigo} do Código Penal.
30
+
31
+ Rol de Testemunhas:
32
+ {testemunhas}
33
+
34
+ {comarca}, {data}
35
+
36
+ Promotor(a) de Justiça"""
37
+ }
38
+ },
39
+ "alegacoes_finais": {
40
+ "system": """Você é um promotor de justiça experiente, especializado em redigir alegações finais criminais.
41
+ Seu objetivo é gerar alegações finais precisas e tecnicamente corretas.""",
42
+ "sections": {
43
+ "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}
44
+
45
+ Processo nº: {numero_processo}""",
46
+ "relatorio": "{narrativa_processual}",
47
+ "fundamentacao": "{fundamentacao}",
48
+ "pedido": """Ante o exposto, o Ministério Público requer a {pedido_final}.
49
+
50
+ {comarca}, {data}
51
+
52
+ Promotor(a) de Justiça"""
53
+ }
54
+ }
55
+ }
56
+
57
  def generate_section(self, messages: list, section: str) -> str:
58
  try:
59
  response = self.client.chat.completions.create(
 
67
  raise Exception(f"Erro na geração da seção {section}: {str(e)}")
68
 
69
  def gerar_documento(self, tipo_documento: str, dados: dict) -> str:
70
+ template = self.templates.get(tipo_documento)
71
+ if not template:
72
+ return "Tipo de documento não encontrado"
73
+
74
+ dados['data'] = datetime.now().strftime("%d/%m/%Y")
75
+
76
  messages = [
77
+ {"role": "system", "content": template["system"]},
78
  {"role": "user", "content": f"Dados para geração de {tipo_documento}:\n{str(dados)}"}
79
  ]
80
 
 
 
 
 
 
81
  documento = ""
82
+ for section_name, section_template in template["sections"].items():
83
+ try:
84
+ if any(key in section_template for key in dados.keys()):
85
+ # Se o template tem placeholders, usa os dados fornecidos
86
+ section_content = section_template.format(**dados)
87
+ else:
88
+ # Senão, gera conteúdo via Mistral
89
+ section_content = self.generate_section(messages, section_name)
90
+ documento += section_content + "\n\n"
91
+ except Exception as e:
92
+ documento += f"[Erro na seção {section_name}: {str(e)}]\n\n"
93
+
94
  return documento
95
 
96
  def interface():
 
116
  return gerador.gerar_documento(tipo_doc, dados)
117
 
118
  with gr.Blocks(title="Gerador de Peças Jurídicas Criminais") as demo:
119
+ gr.Markdown("""# Gerador de Peças Jurídicas Criminais
120
+
121
+ Preencha os campos abaixo para gerar automaticamente denúncias e alegações finais criminais.""")
122
 
123
  with gr.Row():
124
  tipo_documento = gr.Radio(
 
129
 
130
  with gr.Row():
131
  with gr.Column():
132
+ comarca = gr.Textbox(
133
+ label="Comarca",
134
+ placeholder="São Paulo"
135
+ )
136
+ vara = gr.Textbox(
137
+ label="Vara",
138
+ placeholder="1ª"
139
+ )
140
+ estado = gr.Textbox(
141
+ label="Estado",
142
+ placeholder="São Paulo"
143
+ )
144
+ nome_reu = gr.Textbox(
145
+ label="Nome do Réu",
146
+ placeholder="João da Silva"
147
+ )
148
  qualificacao = gr.Textbox(
149
  label="Qualificação do Réu",
150
+ placeholder="brasileiro, casado, comerciante, RG 12.345.678-9 SSP/SP"
151
  )
152
 
153
  with gr.Column():
154
  narrativa = gr.Textbox(
155
  label="Narrativa dos Fatos",
156
+ lines=5,
157
+ placeholder="No dia 10 de janeiro de 2024, por volta das 14h..."
158
+ )
159
+ artigo = gr.Textbox(
160
+ label="Artigo(s) do CP",
161
+ placeholder="155, caput"
162
  )
 
163
  testemunhas = gr.Textbox(
164
  label="Testemunhas",
165
  lines=3,
166
+ placeholder="1. Maria Santos - Policial Militar\n2. José Oliveira - Testemunha presencial"
167
  )
168
 
169
  with gr.Row(visible=False) as campos_alegacoes:
170
  with gr.Column():
171
+ numero_processo = gr.Textbox(
172
+ label="Número do Processo",
173
+ placeholder="0000000-00.0000.0.00.0000"
174
+ )
175
  narrativa_processual = gr.Textbox(
176
  label="Narrativa Processual",
177
+ lines=5,
178
+ placeholder="Trata-se de ação penal..."
179
  )
180
  fundamentacao = gr.Textbox(
181
  label="Fundamentação",
182
+ lines=5,
183
+ placeholder="A materialidade delitiva está comprovada..."
184
  )
185
  pedido_final = gr.Textbox(
186
  label="Pedido Final",
187
+ placeholder="condenação do réu nas sanções do art. 155, caput, do Código Penal"
188
  )
189
 
190
  def atualizar_campos(escolha):
 
193
  tipo_documento.change(atualizar_campos, tipo_documento, campos_alegacoes)
194
 
195
  with gr.Row():
196
+ gerar_btn = gr.Button("Gerar Documento", variant="primary")
197
+ limpar_btn = gr.Button("Limpar Campos")
198
 
199
+ saida = gr.Textbox(
200
+ label="Documento Gerado",
201
+ lines=15,
202
+ show_copy_button=True
203
+ )
204
+
205
+ # Exemplo de dados
206
+ exemplo_denuncia = {
207
+ "tipo_doc": "denuncia",
208
+ "comarca": "São Paulo",
209
+ "vara": "1ª",
210
+ "estado": "São Paulo",
211
+ "nome_reu": "João da Silva",
212
+ "qualificacao": "brasileiro, casado, comerciante, RG 12.345.678-9 SSP/SP",
213
+ "narrativa": "No dia 10 de janeiro de 2024, por volta das 14h, na Rua das Flores, 123, Centro, nesta cidade, o denunciado subtraiu para si um telefone celular iPhone 13, avaliado em R$ 5.000,00, pertencente à vítima Maria Santos.",
214
+ "artigo": "155, caput",
215
+ "testemunhas": "1. Maria Santos - Vítima\n2. Pedro Oliveira - Policial Militar\n3. Ana Costa - Testemunha presencial",
216
+ "numero_processo": "",
217
+ "narrativa_processual": "",
218
+ "fundamentacao": "",
219
+ "pedido_final": ""
220
+ }
221
+
222
+ gr.Examples(
223
+ examples=[[exemplo_denuncia[k] for k in [
224
+ "tipo_doc", "comarca", "vara", "estado", "nome_reu", "qualificacao",
225
+ "narrativa", "artigo", "testemunhas", "numero_processo",
226
+ "narrativa_processual", "fundamentacao", "pedido_final"
227
+ ]]],
228
+ inputs=[
229
+ tipo_documento, comarca, vara, estado, nome_reu, qualificacao,
230
+ narrativa, artigo, testemunhas, numero_processo,
231
+ narrativa_processual, fundamentacao, pedido_final
232
+ ],
233
+ label="Exemplos"
234
+ )
235
 
236
  gerar_btn.click(
237
  processar,
 
242
  ],
243
  outputs=saida
244
  )
245
+
246
+ def limpar():
247
+ return [""] * 13
248
+
249
+ limpar_btn.click(
250
+ limpar,
251
+ inputs=None,
252
+ outputs=[
253
+ tipo_documento, comarca, vara, estado, nome_reu, qualificacao,
254
+ narrativa, artigo, testemunhas, numero_processo,
255
+ narrativa_processual, fundamentacao, pedido_final
256
+ ]
257
+ )
258
 
259
  return demo
260