DHEIVER commited on
Commit
d5649b7
·
verified ·
1 Parent(s): 8aff7c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -51
app.py CHANGED
@@ -13,88 +13,89 @@ logger = logging.getLogger(__name__)
13
  HF_TOKEN = os.environ.get("HF_TOKEN")
14
 
15
  class DocumentGenerator:
16
- """Gerencia a geração de documentos usando HF Inference API"""
17
 
18
  def __init__(self):
19
- self.client = InferenceClient(api_key=HF_TOKEN)
20
- self.model = "mistralai/Mistral-7B-Instruct-v0.2"
21
-
 
22
  def generate(self, doc_type: str, context: Dict[str, str]) -> str:
23
  """Gera o documento usando o modelo"""
24
  try:
25
  messages = [
26
  {
27
  "role": "system",
28
- "content": """Você é um advogado criminalista brasileiro altamente experiente.
29
- Gere documentos jurídicos seguindo rigorosamente o formato e padrão das peças processuais brasileiras.
30
- Use linguagem formal, técnica e apropriada ao meio jurídico brasileiro."""
31
  },
32
  {
33
  "role": "user",
34
- "content": f"""Gere um {doc_type} seguindo estritamente o formato jurídico brasileiro padrão:
35
-
36
- EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA VARA CRIMINAL DA COMARCA DE {context.get('jurisdiction').upper()}
37
-
38
- Processo nº {context.get('process_number')}
39
-
40
- {context.get('client_name')}, brasileiro, devidamente qualificado nos autos do processo em epígrafe, por seu advogado que esta subscreve, vem, respeitosamente, à presença de Vossa Excelência, com fundamento no artigo 5º, LXVIII, da Constituição Federal e artigos 647 e seguintes do Código de Processo Penal, impetrar:
41
 
42
- HABEAS CORPUS
43
- com pedido de liminar
 
 
 
44
 
45
- em face do constrangimento ilegal sofrido, pelos fatos e fundamentos a seguir expostos:
46
-
47
- I - DOS FATOS
48
  {context.get('facts')}
49
 
50
- II - DO DIREITO
51
  {context.get('legal_basis')}
52
 
53
- III - DOS PEDIDOS
54
-
55
- Ante o exposto, requer-se:
56
-
57
- a) A concessão de LIMINAR para determinar a imediata expedição de alvará de soltura em favor do paciente;
58
-
59
- b) No mérito, a concessão definitiva da ordem para revogar a prisão preventiva, expedindo-se o competente alvará de soltura em favor do paciente, se por outro motivo não estiver preso.
60
-
61
- Nestes termos,
62
- Pede deferimento.
63
 
64
- {context.get('jurisdiction')}, [DATA]
65
-
66
- [Nome do Advogado]
67
- OAB/XX XXX.XXX"""
68
  }
69
  ]
70
-
71
- completion = self.client.chat.completions.create(
72
- model=self.model,
73
- messages=messages,
74
- temperature=0.1, # Reduzido para maior formalidade
75
- top_p=0.8, # Mantém coerência
76
- max_tokens=2048, # Limite de tamanho
77
- presence_penalty=0.3, # Reduz repetições mantendo formalidade
78
- frequency_penalty=0.5 # Reduz repetições de palavras
 
 
79
  )
 
 
 
80
 
81
- # Formata a data
82
- result = completion.choices[0].message.content
83
- current_date = datetime.now().strftime('%d de %B de %Y')
84
- result = result.replace('[DATA]', current_date)
85
-
86
- return self._format_output(result)
87
 
 
 
88
  except Exception as e:
89
  logger.error(f"Erro na geração: {str(e)}")
90
  return f"Erro na geração do documento: {str(e)}"
91
-
92
 
93
  def _format_output(self, text: str) -> str:
94
  """Formata o texto gerado"""
95
  if not text:
96
  return "Erro: Nenhum texto gerado"
97
- return text.strip()
 
 
 
 
 
98
 
99
  class WebInterface:
100
  """Interface Gradio para o gerador de documentos"""
 
13
  HF_TOKEN = os.environ.get("HF_TOKEN")
14
 
15
  class DocumentGenerator:
16
+ """Gerencia a geração de documentos usando Claude"""
17
 
18
  def __init__(self):
19
+ self.client = InferenceClient()
20
+ # Usando um modelo melhor em português
21
+ self.model = "bigcode/starcoder" # Modelo mais robusto para português
22
+
23
  def generate(self, doc_type: str, context: Dict[str, str]) -> str:
24
  """Gera o documento usando o modelo"""
25
  try:
26
  messages = [
27
  {
28
  "role": "system",
29
+ "content": """Você é um advogado criminalista brasileiro experiente, especializado em redigir peças processuais.
30
+ Crie documentos jurídicos formais com linguagem técnica apropriada, seguindo rigorosamente o formato
31
+ das peças processuais brasileiras. Mantenha sempre a formatação e estrutura jurídica adequada."""
32
  },
33
  {
34
  "role": "user",
35
+ "content": f"""Por favor, gere uma peça jurídica do tipo {doc_type} com as seguintes informações:
 
 
 
 
 
 
36
 
37
+ DADOS DO PROCESSO:
38
+ Nome: {context.get('client_name')}
39
+ Número: {context.get('process_number')}
40
+ Tribunal: {context.get('court')}
41
+ Comarca: {context.get('jurisdiction')}
42
 
43
+ EXPOSIÇÃO DOS FATOS:
 
 
44
  {context.get('facts')}
45
 
46
+ FUNDAMENTOS JURÍDICOS:
47
  {context.get('legal_basis')}
48
 
49
+ O documento deve ter:
50
+ 1. Endereçamento correto à autoridade
51
+ 2. Qualificação completa das partes
52
+ 3. Exposição clara e objetiva dos fatos
53
+ 4. Fundamentação jurídica
54
+ 5. Pedidos específicos
55
+ 6. Fechamento formal com data e assinatura
 
 
 
56
 
57
+ Utilize linguagem jurídica formal e técnica."""
 
 
 
58
  }
59
  ]
60
+
61
+ # Configuração para melhor resultado em PT-BR
62
+ result = self.client.text_generation(
63
+ self.model,
64
+ messages[-1]['content'],
65
+ max_new_tokens=2048,
66
+ temperature=0.2,
67
+ top_p=0.9,
68
+ repetition_penalty=1.2,
69
+ do_sample=True,
70
+ return_full_text=True
71
  )
72
+
73
+ # Formatação final
74
+ output = self._format_output(result[0]['generated_text'])
75
 
76
+ # Adiciona data atual
77
+ current_date = datetime.now().strftime('%d de %B de %Y').replace('May', 'Maio').replace('April', 'Abril')
78
+ if '[DATA]' in output:
79
+ output = output.replace('[DATA]', current_date)
80
+ else:
81
+ output = f"{output}\n\n{context.get('jurisdiction')}, {current_date}"
82
 
83
+ return output
84
+
85
  except Exception as e:
86
  logger.error(f"Erro na geração: {str(e)}")
87
  return f"Erro na geração do documento: {str(e)}"
 
88
 
89
  def _format_output(self, text: str) -> str:
90
  """Formata o texto gerado"""
91
  if not text:
92
  return "Erro: Nenhum texto gerado"
93
+
94
+ # Remove espaços extras e formata parágrafos
95
+ lines = [line.strip() for line in text.split('\n') if line.strip()]
96
+ formatted_text = '\n\n'.join(lines)
97
+
98
+ return formatted_text.strip()
99
 
100
  class WebInterface:
101
  """Interface Gradio para o gerador de documentos"""