Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
97 |
|
98 |
def __init__(self):
|
99 |
-
self.pipe = pipeline(
|
|
|
|
|
|
|
|
|
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
|
|
|
106 |
|
107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
result = self.pipe(
|
109 |
-
|
110 |
-
|
111 |
-
temperature=0.
|
112 |
-
top_p=0.
|
|
|
113 |
num_return_sequences=1,
|
114 |
-
do_sample=True
|
|
|
|
|
115 |
)[0]['generated_text']
|
116 |
|
117 |
-
|
|
|
|
|
118 |
|
119 |
except Exception as e:
|
120 |
logger.error(f"Erro na geração: {str(e)}")
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
def _format_output(self, text: str) -> str:
|
124 |
"""Formata o texto gerado para melhor apresentação"""
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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"""
|