locorene1000 commited on
Commit
ac8a2b6
1 Parent(s): f349076
Files changed (1) hide show
  1. app.py +53 -10
app.py CHANGED
@@ -3,6 +3,7 @@ import torch
3
  from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
4
  import gradio as gr
5
  import spaces
 
6
 
7
  # Instrucciones específicas para el modelo
8
  instrucciones = """
@@ -69,23 +70,65 @@ model = AutoModelForCausalLM.from_pretrained(
69
  device_map="auto" if device == "cuda" else None
70
  )
71
 
72
- @spaces.GPU(duration=120)
73
- def mejorar_resolucion(input_text):
74
- # Construcción del prompt con instrucciones y entrada del usuario
75
- prompt = f"{instrucciones}\n\n{input_text}"
76
- inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=512).to(device)
77
- attention_mask = inputs['attention_mask']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
 
 
 
 
79
  outputs = model.generate(
80
  inputs.input_ids,
81
- attention_mask=attention_mask,
82
- max_new_tokens=128, # Ajusta a 128 para una salida más rápida
83
- temperature=0.3, # Recomendado para Mistral Nemo
84
  do_sample=True,
 
85
  pad_token_id=tokenizer.pad_token_id
86
  )
 
87
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
88
- return response
 
 
 
 
 
 
89
 
90
  # Definición de la interfaz de Gradio
91
  with gr.Blocks() as demo:
 
3
  from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
4
  import gradio as gr
5
  import spaces
6
+ import re
7
 
8
  # Instrucciones específicas para el modelo
9
  instrucciones = """
 
70
  device_map="auto" if device == "cuda" else None
71
  )
72
 
73
+ def construir_prompt(input_text):
74
+ return f"""
75
+ {instrucciones}
76
+
77
+ Texto original a mejorar:
78
+ {input_text}
79
+
80
+ Versión mejorada y finalizada de la resolución judicial:
81
+ """
82
+
83
+ def post_procesar_resolucion(texto):
84
+ secciones = ['VISTOS:', 'CONSIDERANDO:', 'SE RESUELVE:']
85
+ for seccion in secciones:
86
+ if seccion not in texto:
87
+ texto = f"{seccion}\n\n{texto}"
88
+
89
+ texto = re.sub(r'(\d+)°', r'\1º', texto)
90
+ texto = re.sub(r'([IVX]+\.)', r'\n\1', texto)
91
+
92
+ return texto
93
+
94
+ def validar_resolucion(texto):
95
+ requisitos = [
96
+ ('VISTOS:', "La sección 'VISTOS:' es obligatoria"),
97
+ ('CONSIDERANDO:', "La sección 'CONSIDERANDO:' es obligatoria"),
98
+ ('SE RESUELVE:', "La sección 'SE RESUELVE:' es obligatoria"),
99
+ (r'\d+º', "Debe contener al menos un punto numerado"),
100
+ (r'[IVX]+\.', "Debe contener al menos un punto resolutivo romano")
101
+ ]
102
+
103
+ errores = []
104
+ for patron, mensaje in requisitos:
105
+ if not re.search(patron, texto):
106
+ errores.append(mensaje)
107
+
108
+ return errores
109
 
110
+ def mejorar_resolucion(input_text):
111
+ prompt = construir_prompt(input_text)
112
+ inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=1024).to(device)
113
+
114
  outputs = model.generate(
115
  inputs.input_ids,
116
+ attention_mask=inputs['attention_mask'],
117
+ max_new_tokens=512,
118
+ temperature=0.7,
119
  do_sample=True,
120
+ num_return_sequences=1,
121
  pad_token_id=tokenizer.pad_token_id
122
  )
123
+
124
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
125
+ texto_mejorado = post_procesar_resolucion(response.split("Versión mejorada y finalizada de la resolución judicial:")[-1].strip())
126
+ errores = validar_resolucion(texto_mejorado)
127
+
128
+ if errores:
129
+ return f"La resolución generada no cumple con los siguientes requisitos:\n" + "\n".join(errores)
130
+
131
+ return texto_mejorado
132
 
133
  # Definición de la interfaz de Gradio
134
  with gr.Blocks() as demo: