Spaces:
Sleeping
Sleeping
locorene1000
commited on
Commit
•
3baa783
1
Parent(s):
4e11aab
app.py
CHANGED
@@ -9,107 +9,61 @@ import re
|
|
9 |
instrucciones = """
|
10 |
**Instrucciones para GPT Personalizado "GPT Civil"**
|
11 |
|
12 |
-
|
13 |
|
14 |
**Guía de estilo:**
|
15 |
-
1. **Precisión del lenguaje:**
|
16 |
-
2. **Jerga legal:**
|
17 |
-
3. **Sintaxis compleja:**
|
18 |
-
4. **Citas:**
|
19 |
-
5. **Consistencia:**
|
20 |
|
21 |
**Instrucciones paso a paso:**
|
22 |
1. **Revisión inicial del documento:**
|
23 |
-
-
|
24 |
-
-
|
25 |
|
26 |
2. **Análisis estructural y de contenido:**
|
27 |
-
- Flujo lógico:
|
28 |
-
- Coherencia:
|
29 |
-
- Claridad:
|
30 |
-
- Consistencia terminológica:
|
31 |
|
32 |
3. **Refinamiento lingüístico:**
|
33 |
-
- Gramática:
|
34 |
-
- Sintaxis:
|
35 |
-
- Conectores:
|
36 |
|
37 |
4. **Mejora del lenguaje legal:**
|
38 |
-
- Terminología:
|
39 |
-
- Alternativas:
|
40 |
|
41 |
5. **Integración de comentarios:**
|
42 |
-
-
|
43 |
-
-
|
44 |
-
-
|
45 |
-
-
|
46 |
|
47 |
6. **Optimización final:**
|
48 |
-
-
|
49 |
-
-
|
50 |
|
51 |
7. **Presentación final:**
|
52 |
-
-
|
53 |
-
-
|
54 |
"""
|
55 |
|
56 |
-
# Configuración del dispositivo
|
57 |
-
device = "cuda" if torch.cuda.is_available() else "cpu"
|
58 |
-
|
59 |
-
# Carga del modelo y el tokenizador
|
60 |
-
model_name = "mistralai/Mistral-Nemo-Instruct-2407"
|
61 |
-
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
62 |
-
|
63 |
-
# Especifica un pad_token_id si no está ya definido y es el mismo que eos_token_id
|
64 |
-
if tokenizer.pad_token_id is None or tokenizer.pad_token_id == tokenizer.eos_token_id:
|
65 |
-
tokenizer.pad_token_id = tokenizer.eos_token_id + 1
|
66 |
-
|
67 |
-
model = AutoModelForCausalLM.from_pretrained(
|
68 |
-
model_name,
|
69 |
-
torch_dtype=torch.bfloat16 if device == "cuda" else torch.float32,
|
70 |
-
device_map="auto" if device == "cuda" else None
|
71 |
-
)
|
72 |
-
|
73 |
@spaces.GPU(duration=120)
|
74 |
def construir_prompt(input_text):
|
75 |
return f"""
|
76 |
{instrucciones}
|
77 |
|
78 |
-
Texto original a mejorar:
|
79 |
{input_text}
|
80 |
|
81 |
-
Versión mejorada y finalizada de la resolución judicial:
|
82 |
"""
|
83 |
|
84 |
-
@spaces.GPU(duration=120)
|
85 |
-
def post_procesar_resolucion(texto):
|
86 |
-
secciones = ['VISTOS:', 'CONSIDERANDO:', 'SE RESUELVE:']
|
87 |
-
for seccion in secciones:
|
88 |
-
if seccion not in texto:
|
89 |
-
texto = f"{seccion}\n\n{texto}"
|
90 |
-
|
91 |
-
texto = re.sub(r'(\d+)°', r'\1º', texto)
|
92 |
-
texto = re.sub(r'([IVX]+\.)', r'\n\1', texto)
|
93 |
-
|
94 |
-
return texto
|
95 |
-
|
96 |
-
@spaces.GPU(duration=120)
|
97 |
-
def validar_resolucion(texto):
|
98 |
-
requisitos = [
|
99 |
-
('VISTOS:', "La sección 'VISTOS:' es obligatoria"),
|
100 |
-
('CONSIDERANDO:', "La sección 'CONSIDERANDO:' es obligatoria"),
|
101 |
-
('SE RESUELVE:', "La sección 'SE RESUELVE:' es obligatoria"),
|
102 |
-
(r'\d+º', "Debe contener al menos un punto numerado"),
|
103 |
-
(r'[IVX]+\.', "Debe contener al menos un punto resolutivo romano")
|
104 |
-
]
|
105 |
-
|
106 |
-
errores = []
|
107 |
-
for patron, mensaje in requisitos:
|
108 |
-
if not re.search(patron, texto):
|
109 |
-
errores.append(mensaje)
|
110 |
-
|
111 |
-
return errores
|
112 |
-
|
113 |
@spaces.GPU(duration=120)
|
114 |
def mejorar_resolucion(input_text):
|
115 |
prompt = construir_prompt(input_text)
|
@@ -126,20 +80,14 @@ def mejorar_resolucion(input_text):
|
|
126 |
)
|
127 |
|
128 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
129 |
-
|
130 |
-
errores = validar_resolucion(texto_mejorado)
|
131 |
-
|
132 |
-
if errores:
|
133 |
-
return f"La resolución generada no cumple con los siguientes requisitos:\n" + "\n".join(errores)
|
134 |
-
|
135 |
-
return texto_mejorado
|
136 |
|
137 |
# Definición de la interfaz de Gradio
|
138 |
with gr.Blocks() as demo:
|
139 |
gr.Markdown("# Mejora de Resoluciones Judiciales con GPT Civil")
|
140 |
gr.Markdown("Utiliza el modelo Mistral-Nemo-Instruct-2407 para mejorar borradores de resoluciones judiciales.")
|
141 |
-
input_text = gr.Textbox(label="Introduce tu resolución judicial")
|
142 |
-
output_text = gr.Textbox(label="Resolución mejorada")
|
143 |
submit_button = gr.Button("Mejorar")
|
144 |
submit_button.click(fn=mejorar_resolucion, inputs=input_text, outputs=output_text)
|
145 |
|
|
|
9 |
instrucciones = """
|
10 |
**Instrucciones para GPT Personalizado "GPT Civil"**
|
11 |
|
12 |
+
Asume el rol de Ministro de la Corte Suprema de Chile, con el objetivo de mejorar y finalizar borradores de resoluciones judiciales para el sistema judicial civil del país. Debes mantener un tono formal y técnico, garantizando claridad y precisión. Utiliza terminología legal específica y asegura coherencia y consistencia en todo el documento.
|
13 |
|
14 |
**Guía de estilo:**
|
15 |
+
1. **Precisión del lenguaje:** Mantén un tono formal y técnico, asegurando claridad y coherencia.
|
16 |
+
2. **Jerga legal:** Emplea terminología legal específica, como 'folio', 'autos', 'resuelve', 'artículo', 'Código de Procedimiento Civil', 'audiencia', 'notificación', 'prueba', 'nulidad', 'oficiar' y 'notificar'.
|
17 |
+
3. **Sintaxis compleja:** Construye oraciones complejas y subordinadas, manteniendo un tono formal e imperativo, utilizando un lenguaje técnico adecuado para un contexto judicial.
|
18 |
+
4. **Citas:** Proporciona referencias detalladas a regulaciones y precedentes judiciales, utilizando la voz pasiva en secciones descriptivas. Cita consistentemente artículos de leyes y sentencias anteriores.
|
19 |
+
5. **Consistencia:** Asegura un tono uniforme y detallado en todo el documento, centrado en la precisión terminológica.
|
20 |
|
21 |
**Instrucciones paso a paso:**
|
22 |
1. **Revisión inicial del documento:**
|
23 |
+
- Comprende el contexto y el propósito del documento en su totalidad.
|
24 |
+
- Identifica el tipo de documento judicial (por ejemplo, sentencia, apelación).
|
25 |
|
26 |
2. **Análisis estructural y de contenido:**
|
27 |
+
- Flujo lógico: Asegura una progresión lógica de ideas y argumentos.
|
28 |
+
- Coherencia: Evalúa la coherencia entre las diferentes secciones.
|
29 |
+
- Claridad: Examina cada párrafo y oración en busca de claridad y precisión.
|
30 |
+
- Consistencia terminológica: Verifica el uso consistente de la terminología legal.
|
31 |
|
32 |
3. **Refinamiento lingüístico:**
|
33 |
+
- Gramática: Asegura la corrección gramatical.
|
34 |
+
- Sintaxis: Mejora la estructura de las oraciones para una mayor claridad.
|
35 |
+
- Conectores: Optimiza el uso de conectores para transiciones suaves.
|
36 |
|
37 |
4. **Mejora del lenguaje legal:**
|
38 |
+
- Terminología: Asegura el uso consistente y preciso de términos legales.
|
39 |
+
- Alternativas: Sugiere expresiones más efectivas cuando sea necesario (por ejemplo, "bien inmueble" en lugar de "cosa").
|
40 |
|
41 |
5. **Integración de comentarios:**
|
42 |
+
- Considera cuidadosamente las sugerencias y validaciones de los comentarios.
|
43 |
+
- Evalúa cada punto de comentarios en cuanto a su relevancia e impacto potencial.
|
44 |
+
- Clasifica las sugerencias como esenciales, recomendadas u opcionales.
|
45 |
+
- Incorpora sugerencias valiosas y proporciona justificaciones para cualquier desacuerdo, respaldadas por regulaciones actuales.
|
46 |
|
47 |
6. **Optimización final:**
|
48 |
+
- Realiza una revisión integral, integrando el análisis inicial y los comentarios.
|
49 |
+
- Prepara un resumen de los cambios finales y explica cómo se incorporaron los comentarios.
|
50 |
|
51 |
7. **Presentación final:**
|
52 |
+
- Proporciona una respuesta completa, incluyendo correcciones, sugerencias y la resolución final.
|
53 |
+
- Asegura una presentación concisa y unificada de toda la información.
|
54 |
"""
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
@spaces.GPU(duration=120)
|
57 |
def construir_prompt(input_text):
|
58 |
return f"""
|
59 |
{instrucciones}
|
60 |
|
61 |
+
Texto original a mejorar o pregunta a responder:
|
62 |
{input_text}
|
63 |
|
64 |
+
Versión mejorada y finalizada de la resolución judicial o respuesta detallada:
|
65 |
"""
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
@spaces.GPU(duration=120)
|
68 |
def mejorar_resolucion(input_text):
|
69 |
prompt = construir_prompt(input_text)
|
|
|
80 |
)
|
81 |
|
82 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
83 |
+
return response
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
|
85 |
# Definición de la interfaz de Gradio
|
86 |
with gr.Blocks() as demo:
|
87 |
gr.Markdown("# Mejora de Resoluciones Judiciales con GPT Civil")
|
88 |
gr.Markdown("Utiliza el modelo Mistral-Nemo-Instruct-2407 para mejorar borradores de resoluciones judiciales.")
|
89 |
+
input_text = gr.Textbox(label="Introduce tu resolución judicial o pregunta")
|
90 |
+
output_text = gr.Textbox(label="Resolución mejorada o respuesta")
|
91 |
submit_button = gr.Button("Mejorar")
|
92 |
submit_button.click(fn=mejorar_resolucion, inputs=input_text, outputs=output_text)
|
93 |
|