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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" ) # 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): """ Construye el prompt para el modelo LLaMA 3.1. """ 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=True ) response_content = "" for chunk in completion: if chunk.choices[0].delta.content is not None: response_content += chunk.choices[0].delta.content return response_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 # Interfaz Gradio def gradio_interface(input_text): return mejorar_resolucion(input_text) 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="Introduce una resolución judicial o una pregunta relacionada con derecho civil. El sistema mejorará el borrador o proporcionará una respuesta técnica y formal.", allow_flagging="never" # Ajuste basado en advertencias de Gradio ) iface.launch()