Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -15,86 +15,115 @@ def gerar_peca_juridica_criminal(informacoes_caso: str, tipo_peca: str) -> str:
|
|
15 |
if not tipo_peca or not informacoes_caso:
|
16 |
return "Por favor, forneça todas as informações necessárias."
|
17 |
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
-
# Template com limite de tokens
|
22 |
mensagens_estrutura = [
|
23 |
{
|
24 |
"role": "system",
|
25 |
-
"content": "Redija
|
26 |
},
|
27 |
{
|
28 |
"role": "user",
|
29 |
-
"content":
|
30 |
-
f"Elabore HC conciso com:\n"
|
31 |
-
f"1. Qualificação e fatos essenciais\n"
|
32 |
-
f"2. Art 5º LXVIII CF e art 647/648 CPP\n"
|
33 |
-
f"3. Um precedente STF/STJ\n"
|
34 |
-
f"4. Pedido liminar e principal\n\n"
|
35 |
-
f"Caso: {informacoes_caso}"
|
36 |
-
)
|
37 |
}
|
38 |
]
|
39 |
|
40 |
resposta_estrutura = client.chat.completions.create(
|
41 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
42 |
messages=mensagens_estrutura,
|
43 |
-
max_tokens=
|
44 |
temperature=0.7
|
45 |
)
|
46 |
|
47 |
estrutura_base = resposta_estrutura.choices[0].message["content"]
|
48 |
|
49 |
-
# Elaboração com limite
|
50 |
mensagens_elaboracao = [
|
51 |
{
|
52 |
"role": "system",
|
53 |
-
"content": "Aprimore com fundamentação
|
54 |
},
|
55 |
{
|
56 |
"role": "user",
|
57 |
-
"content": f"Revise
|
58 |
}
|
59 |
]
|
60 |
|
61 |
resposta_elaboracao = client.chat.completions.create(
|
62 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
63 |
messages=mensagens_elaboracao,
|
64 |
-
max_tokens=
|
65 |
temperature=0.7
|
66 |
)
|
67 |
|
68 |
-
# Finalização com limite
|
69 |
mensagens_final = [
|
70 |
{
|
71 |
"role": "system",
|
72 |
-
"content": "
|
73 |
},
|
74 |
{
|
75 |
"role": "user",
|
76 |
-
"content":
|
77 |
-
f"Finalize respeitando estrutura:\n"
|
78 |
-
"EXCELENTÍSSIMO JUIZ\n"
|
79 |
-
"FATOS\n"
|
80 |
-
"DIREITO\n"
|
81 |
-
"PEDIDOS\n\n"
|
82 |
-
f"{estrutura_base}\n\n"
|
83 |
-
f"{resposta_elaboracao.choices[0].message['content']}"
|
84 |
-
)
|
85 |
}
|
86 |
]
|
87 |
|
88 |
resposta_final = client.chat.completions.create(
|
89 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
90 |
messages=mensagens_final,
|
91 |
-
max_tokens=
|
92 |
temperature=0.5
|
93 |
)
|
94 |
|
95 |
return resposta_final.choices[0].message["content"]
|
96 |
|
97 |
-
|
98 |
# Função para redefinir os campos
|
99 |
def redefinir_campos():
|
100 |
return "", "", ""
|
|
|
15 |
if not tipo_peca or not informacoes_caso:
|
16 |
return "Por favor, forneça todas as informações necessárias."
|
17 |
|
18 |
+
templates = {
|
19 |
+
"habeas corpus": {
|
20 |
+
"estrutura": ["EXORDIAL", "FATOS", "DIREITO", "PEDIDOS"],
|
21 |
+
"prompt": (
|
22 |
+
"HC conciso:\n"
|
23 |
+
"1. Fatos e constrangimento ilegal\n"
|
24 |
+
"2. CF art 5º LXVIII e CPP 647/648\n"
|
25 |
+
"3. Precedente STF/STJ\n"
|
26 |
+
"4. Liminar + principal"
|
27 |
+
),
|
28 |
+
"max_tokens": 300
|
29 |
+
},
|
30 |
+
"petição inicial": {
|
31 |
+
"estrutura": ["EXORDIAL", "QUALIFICAÇÃO", "FATOS", "DIREITO", "PEDIDOS"],
|
32 |
+
"prompt": (
|
33 |
+
"Denúncia criminal:\n"
|
34 |
+
"1. Qualificação completa\n"
|
35 |
+
"2. Fatos e tipificação\n"
|
36 |
+
"3. Arts. 41/395 CPP\n"
|
37 |
+
"4. Provas e diligências"
|
38 |
+
),
|
39 |
+
"max_tokens": 400
|
40 |
+
},
|
41 |
+
"defesa prévia": {
|
42 |
+
"estrutura": ["QUALIFICAÇÃO", "PRELIMINARES", "MÉRITO", "PROVAS", "PEDIDOS"],
|
43 |
+
"prompt": (
|
44 |
+
"Defesa art. 396-A CPP:\n"
|
45 |
+
"1. Preliminares\n"
|
46 |
+
"2. Tese defensiva\n"
|
47 |
+
"3. Provas a produzir\n"
|
48 |
+
"4. Testemunhas"
|
49 |
+
),
|
50 |
+
"max_tokens": 350
|
51 |
+
},
|
52 |
+
"apelação criminal": {
|
53 |
+
"estrutura": ["TEMPESTIVIDADE", "FATOS", "PRELIMINARES", "MÉRITO", "PEDIDOS"],
|
54 |
+
"prompt": (
|
55 |
+
"Apelação criminal:\n"
|
56 |
+
"1. Art. 593 CPP\n"
|
57 |
+
"2. Preliminares\n"
|
58 |
+
"3. Error in judicando\n"
|
59 |
+
"4. Reforma/nulidade"
|
60 |
+
),
|
61 |
+
"max_tokens": 450
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
template = templates.get(tipo_peca.lower())
|
66 |
+
if not template:
|
67 |
+
return "Tipo de peça não suportado."
|
68 |
|
|
|
69 |
mensagens_estrutura = [
|
70 |
{
|
71 |
"role": "system",
|
72 |
+
"content": f"Redija {tipo_peca} técnica em português jurídico. Máximo {template['max_tokens']} tokens."
|
73 |
},
|
74 |
{
|
75 |
"role": "user",
|
76 |
+
"content": f"{template['prompt']}\nCaso: {informacoes_caso}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
]
|
79 |
|
80 |
resposta_estrutura = client.chat.completions.create(
|
81 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
82 |
messages=mensagens_estrutura,
|
83 |
+
max_tokens=template['max_tokens'],
|
84 |
temperature=0.7
|
85 |
)
|
86 |
|
87 |
estrutura_base = resposta_estrutura.choices[0].message["content"]
|
88 |
|
|
|
89 |
mensagens_elaboracao = [
|
90 |
{
|
91 |
"role": "system",
|
92 |
+
"content": f"Aprimore {tipo_peca} com fundamentação precisa. Máximo {template['max_tokens']} tokens."
|
93 |
},
|
94 |
{
|
95 |
"role": "user",
|
96 |
+
"content": f"Revise:\n{estrutura_base}"
|
97 |
}
|
98 |
]
|
99 |
|
100 |
resposta_elaboracao = client.chat.completions.create(
|
101 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
102 |
messages=mensagens_elaboracao,
|
103 |
+
max_tokens=template['max_tokens'],
|
104 |
temperature=0.7
|
105 |
)
|
106 |
|
|
|
107 |
mensagens_final = [
|
108 |
{
|
109 |
"role": "system",
|
110 |
+
"content": f"Finalize {tipo_peca} em formato técnico. Estrutura: {' > '.join(template['estrutura'])}"
|
111 |
},
|
112 |
{
|
113 |
"role": "user",
|
114 |
+
"content": f"Versão final:\n{estrutura_base}\n\n{resposta_elaboracao.choices[0].message['content']}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
}
|
116 |
]
|
117 |
|
118 |
resposta_final = client.chat.completions.create(
|
119 |
model="mistralai/Mistral-7B-Instruct-v0.3",
|
120 |
messages=mensagens_final,
|
121 |
+
max_tokens=max(template['max_tokens'] + 100, 500),
|
122 |
temperature=0.5
|
123 |
)
|
124 |
|
125 |
return resposta_final.choices[0].message["content"]
|
126 |
|
|
|
127 |
# Função para redefinir os campos
|
128 |
def redefinir_campos():
|
129 |
return "", "", ""
|