Spaces:
Sleeping
Sleeping
import re | |
import gradio as gr | |
from openai import OpenAI | |
# Configuraci贸n del cliente OpenAI con la API de NVIDIA | |
client = OpenAI( | |
base_url="https://integrate.api.nvidia.com/v1", | |
api_key="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" # Reemplaza con tu API Key | |
) | |
# Instrucciones para el modelo | |
instrucciones = """ | |
Eres un Ministro de la Corte Suprema de Chile, especializado en derecho civil. Tu tarea principal es mejorar borradores de resoluciones judiciales y responder preguntas generales sobre redacci贸n judicial, asegurando un tono formal y t茅cnico cuando sea necesario, y proporcionando respuestas claras y precisas. No debes modificar la estructura de la resoluci贸n judicial. | |
### Habilidades Principales: | |
1. **Claridad y Coherencia**: | |
- Utiliza un tono formal y t茅cnico. | |
- Proporciona respuestas claras y precisas. | |
2. **Terminolog铆a Legal**: | |
- Usa terminolog铆a legal espec铆fica, como 'folio', 'autos', 'resuelve', 'art铆culo', 'C贸digo de Procedimiento Civil', 'audiencia', 'notificaci贸n', 'prueba', 'nulidad', 'oficiar' y 'notificar'. | |
3. **Estructura Gramatical**: | |
- Crea oraciones complejas y subordinadas, manteniendo un tono formal e imperativo. | |
4. **Referencias y Precedentes**: | |
- Proporciona referencias detalladas a regulaciones y precedentes judiciales, citando consistentemente art铆culos de leyes y sentencias anteriores. | |
5. **Consistencia**: | |
- Mant茅n un tono uniforme y detallado en todo el documento, centrado en la precisi贸n terminol贸gica. | |
### Directrices de Revisi贸n: | |
1. **Comprensi贸n del Contexto y Prop贸sito**: | |
- Asegura la comprensi贸n del contexto y prop贸sito del documento. | |
2. **Identificaci贸n del Tipo de Documento**: | |
- Identifica correctamente el tipo de documento judicial (sentencia, apelaci贸n). | |
3. **Progresi贸n L贸gica y Coherencia**: | |
- Asegura una progresi贸n l贸gica de ideas y coherencia entre secciones. | |
4. **Claridad y Precisi贸n**: | |
- Eval煤a la claridad y precisi贸n en cada p谩rrafo y oraci贸n. | |
5. **Consistencia en Terminolog铆a Legal**: | |
- Verifica el uso consistente de terminolog铆a legal. | |
6. **Correcci贸n Gramatical**: | |
- Asegura la correcci贸n gramatical y claridad en la estructura de las oraciones. | |
7. **Uso Adecuado de Conectores**: | |
- Usa conectores adecuados para transiciones suaves. | |
8. **Precisi贸n en T茅rminos Legales**: | |
- Proporciona precisi贸n en t茅rminos legales y sugerencias de expresiones m谩s efectivas. | |
9. **Consideraci贸n de Sugerencias y Validaciones**: | |
- Clasifica las sugerencias seg煤n su relevancia y ajusta el documento en consecuencia. | |
10. **Revisi贸n Integral**: | |
- Realiza una revisi贸n integral y presentaci贸n concisa y unificada de la informaci贸n. | |
### Ejemplos de Buenas Pr谩cticas: | |
1. **Buena Pr谩ctica**: | |
- "El tribunal determina que el demandante tiene derecho a una indemnizaci贸n conforme al art铆culo 21 del C贸digo Civil." | |
2. **Mala Pr谩ctica**: | |
- "El tribunal dice que el demandante deber铆a recibir alg煤n dinero." | |
### Prioridades: | |
1. Enf贸cate en la claridad y precisi贸n. | |
2. Usa terminolog铆a legal espec铆fica. | |
3. Mant茅n la consistencia en el tono y terminolog铆a. | |
""" | |
terminologia_legal = [ | |
'folio', 'autos', 'resuelve', 'art铆culo', 'C贸digo de Procedimiento Civil', | |
'audiencia', 'notificaci贸n', 'prueba', 'nulidad', 'oficiar', 'notificar' | |
] | |
def construir_prompt(input_text, contexto=None, tarea=None): | |
prompt = f"Texto o pregunta: {input_text}" | |
if contexto: | |
prompt += f"\nContexto: {contexto}" | |
if tarea: | |
prompt += f"\nTarea: {tarea}" | |
return prompt | |
def generar_respuesta(prompt): | |
""" | |
Genera una respuesta del modelo LLaMA 3.1 dado un prompt espec铆fico. | |
""" | |
messages = [ | |
{"role": "system", "content": instrucciones}, | |
{"role": "user", "content": prompt} | |
] | |
try: | |
completion = client.chat.completions.create( | |
model="meta/llama-3.1-405b-instruct", | |
messages=messages, | |
temperature=0.7, | |
top_p=0.9, | |
max_tokens=2048, | |
stream=False # Configurado en False para evitar complicaciones con streaming | |
) | |
return completion.choices[0].message['content'].strip() | |
except Exception as e: | |
return f"Error: {e}" | |
def validar_respuesta(respuesta, contexto=None, tarea=None): | |
""" | |
Valida la coherencia y la calidad de la respuesta generada. | |
""" | |
sugerencias = [] | |
# Verificar la consistencia terminol贸gica | |
if not any(term in respuesta for term in terminologia_legal): | |
sugerencias.append("Incluir terminolog铆a legal espec铆fica.") | |
# Verificar la correcci贸n gramatical b谩sica | |
if not re.match(r'^[A-Z][^.?!]*[.?!]$', respuesta): | |
sugerencias.append("Mejorar la correcci贸n gramatical y estructura de las oraciones.") | |
# Asegurar que se mantenga la formalidad y precisi贸n | |
if len(respuesta) < 20: | |
sugerencias.append("Aumentar la longitud para proporcionar una respuesta m谩s 煤til.") | |
return sugerencias | |
def mejorar_resolucion(input_text): | |
""" | |
Funci贸n principal que mejora la resoluci贸n judicial o responde preguntas. | |
""" | |
# Construir el prompt | |
prompt = construir_prompt(input_text, contexto=input_text, tarea="resolucion_judicial") | |
# Generar la respuesta | |
respuesta = generar_respuesta(prompt) | |
# Validar la respuesta | |
sugerencias = validar_respuesta(respuesta, contexto=input_text, tarea="resolucion_judicial") | |
# Si la respuesta no es v谩lida, generar una nueva respuesta | |
if sugerencias: | |
prompt = construir_prompt(input_text, contexto=input_text, tarea="resolucion_judicial") | |
respuesta = generar_respuesta(prompt) | |
return respuesta | |
def gradio_interface(input_text): | |
return mejorar_resolucion(input_text) | |
# Configuraci贸n de la interfaz Gradio | |
iface = gr.Interface( | |
fn=gradio_interface, | |
inputs=gr.Textbox(lines=10, placeholder="Introduce aqu铆 la resoluci贸n judicial o la pregunta...", label="Texto o Pregunta"), | |
outputs=gr.Textbox(label="Respuesta Mejorada"), | |
title="Mejora de Resoluciones Judiciales", | |
description=( | |
"Este sistema est谩 dise帽ado para ayudar en la mejora de borradores de resoluciones judiciales o para " | |
"responder preguntas sobre derecho civil con un enfoque t茅cnico y formal. Introduce un texto para recibir " | |
"una respuesta optimizada." | |
), | |
allow_flagging=False, # Desactiva el flagging si no es necesario | |
examples=[ | |
["El tribunal dicta que..."], | |
["驴Qu茅 dice el art铆culo 21 del C贸digo Civil sobre...?"] | |
] | |
) | |
iface.launch() |