DHEIVER commited on
Commit
662191a
·
verified ·
1 Parent(s): 5463acc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -12
app.py CHANGED
@@ -93,36 +93,77 @@ class PromptManager:
93
  return prompts.get(doc_type, "Tipo de documento não suportado")
94
 
95
  class DocumentGenerator:
96
- """Gerencia a geração de documentos usando GPT4All-J"""
97
 
98
  def __init__(self):
99
- self.pipe = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.2")
 
 
 
 
100
  self.prompt_manager = PromptManager()
101
 
102
  def generate(self, doc_type: str, context: Dict[str, str]) -> str:
103
  """Gera o documento baseado no tipo e contexto"""
104
  try:
105
- prompt = self.prompt_manager.get_base_prompt(doc_type, context)
 
106
 
107
- # Configuração para a geração
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  result = self.pipe(
109
- prompt,
110
- max_length=2048,
111
- temperature=0.7,
112
- top_p=0.95,
 
113
  num_return_sequences=1,
114
- do_sample=True
 
 
115
  )[0]['generated_text']
116
 
117
- return self._format_output(result)
 
 
118
 
119
  except Exception as e:
120
  logger.error(f"Erro na geração: {str(e)}")
121
- return f"Erro na geração do documento: {str(e)}"
 
 
 
 
 
122
 
123
  def _format_output(self, text: str) -> str:
124
  """Formata o texto gerado para melhor apresentação"""
125
- return text.strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
126
 
127
  class WebInterface:
128
  """Interface Gradio para o gerador de documentos"""
 
93
  return prompts.get(doc_type, "Tipo de documento não suportado")
94
 
95
  class DocumentGenerator:
96
+ """Gerencia a geração de documentos usando OpenHermes"""
97
 
98
  def __init__(self):
99
+ self.pipe = pipeline(
100
+ "text-generation",
101
+ model="jondurbin/airoboros-l2-70b-gpt4-1.4.1", # Modelo público com bom desempenho em PT
102
+ trust_remote_code=True
103
+ )
104
  self.prompt_manager = PromptManager()
105
 
106
  def generate(self, doc_type: str, context: Dict[str, str]) -> str:
107
  """Gera o documento baseado no tipo e contexto"""
108
  try:
109
+ # Prepara o prompt com instruções específicas
110
+ base_prompt = self.prompt_manager.get_base_prompt(doc_type, context)
111
 
112
+ system_prompt = """Você é um advogado criminalista experiente especializado em gerar documentos jurídicos.
113
+ Gere o documento solicitado usando linguagem formal e técnica apropriada."""
114
+
115
+ formatted_prompt = f"""### System:
116
+ {system_prompt}
117
+
118
+ ### User:
119
+ {base_prompt}
120
+
121
+ ### Assistant:
122
+ Gerando o documento solicitado em formato jurídico adequado:
123
+ """
124
+
125
+ # Configuração otimizada para documentos jurídicos
126
  result = self.pipe(
127
+ formatted_prompt,
128
+ max_new_tokens=2048, # Aumentado para documentos longos
129
+ temperature=0.3, # Reduzido para maior consistência
130
+ top_p=0.85, # Ajustado para melhor coerência
131
+ top_k=40, # Limita as opções de tokens
132
  num_return_sequences=1,
133
+ do_sample=True,
134
+ repetition_penalty=1.2, # Evita repetições
135
+ pad_token_id=self.pipe.tokenizer.eos_token_id
136
  )[0]['generated_text']
137
 
138
+ # Remove o prompt do resultado e retorna apenas o documento
139
+ final_text = result.split("### Assistant:")[-1].strip()
140
+ return self._format_output(final_text)
141
 
142
  except Exception as e:
143
  logger.error(f"Erro na geração: {str(e)}")
144
+ if "CUDA" in str(e):
145
+ return "Erro: Problema com recursos GPU. Tentando novamente com configurações reduzidas..."
146
+ elif "out of memory" in str(e):
147
+ return "Erro: Memória insuficiente. Tente um documento menor."
148
+ else:
149
+ return f"Erro na geração do documento: {str(e)}"
150
 
151
  def _format_output(self, text: str) -> str:
152
  """Formata o texto gerado para melhor apresentação"""
153
+ if not isinstance(text, str):
154
+ if isinstance(text, (list, tuple)) and len(text) > 0:
155
+ text = str(text[0])
156
+ else:
157
+ text = str(text)
158
+
159
+ # Remove linhas vazias extras
160
+ lines = [line for line in text.split('\n') if line.strip()]
161
+ formatted_text = '\n'.join(lines)
162
+
163
+ # Ajusta espaçamento de parágrafos
164
+ formatted_text = formatted_text.replace('\n\n\n', '\n\n')
165
+
166
+ return formatted_text.strip()
167
 
168
  class WebInterface:
169
  """Interface Gradio para o gerador de documentos"""