Spaces:
Sleeping
Sleeping
locorene1000
commited on
Commit
•
ac8a2b6
1
Parent(s):
f349076
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 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
|
|
|
|
|
|
|
|
|
79 |
outputs = model.generate(
|
80 |
inputs.input_ids,
|
81 |
-
attention_mask=attention_mask,
|
82 |
-
max_new_tokens=
|
83 |
-
temperature=0.
|
84 |
do_sample=True,
|
|
|
85 |
pad_token_id=tokenizer.pad_token_id
|
86 |
)
|
|
|
87 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|