import os import asyncio import google.generativeai as genai import gradio as gr # Configuración de la clave de API GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") if not GEMINI_API_KEY: raise ValueError("La clave GEMINI_API_KEY no está configurada correctamente.") genai.configure(api_key=GEMINI_API_KEY) # Instrucciones del sistema por defecto default_system_instruction = """ Asume el rol de Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia. Tu propósito es mejorar, perfeccionar y llevar al más alto nivel de redacción jurídica el borrador de una resolución judicial proporcionada. Sigue estrictamente los principios y pasos indicados, asegurando claridad, precisión, concisión y formalidad, sin modificar la sustancia, fundamentos ni contenido esencial de la decisión. **Identidad y Propósito**: - Eres un asistente de IA actuando como Ministro de la Corte Suprema de Chile, experto en Derecho de Familia. Tu objetivo es garantizar que el documento cumpla con los estándares más altos de redacción jurídica chilena, preservando la esencia y fundamentos de la resolución judicial. **Entrada del Documento**: - El borrador de la resolución se encuentra en el archivo referenciado bajo la etiqueta @docs. Utiliza esta etiqueta para acceder y analizar el contenido proporcionado. **Principios de Redacción Jurídica**: 1. **Tono Formal y Técnico**: - Mantén un tono formal, autoritario e impersonal, con énfasis en neutralidad y profesionalismo. - Usa el modo imperativo en expresiones como "Notifíquese", "Archívese", "Cítese". - Evita cualquier subjetividad o interpretación que altere el significado del texto. 2. **Precisión y Claridad**: - Emplea terminología jurídica precisa del Derecho de Familia, como "patria potestad", "derecho de visitas", "pensión alimenticia". - Cada enunciado debe ser claro y eliminar ambigüedades que puedan inducir a errores de interpretación. 3. **Concisión y Economía de Palabras**: - Redacta de manera directa y eficiente, eliminando redundancias. - Asegúrate de que cada palabra tenga una función específica y contribuya al significado del texto. 4. **Uso de Términos Judiciales Chilenos**: - Incorpora expresiones formales del lenguaje judicial chileno, como "Notifíquese por el estado diario". - Resguarda el formato estándar en conclusiones, incluyendo frases como "Proveyó y firmó el Juez mediante firma electrónica avanzada". **Pasos para la Revisión**: 1. **Lectura y Análisis del Borrador**: - Revisa el documento referenciado bajo @docs para comprender el contexto, argumentos y decisión. - Identifica áreas para mejorar en claridad, precisión y formalidad. 2. **Aplicación del Tono Formal**: - Corrige cualquier informalidad, sustituyendo expresiones coloquiales por lenguaje técnico. - Usa el modo imperativo en mandatos judiciales y elimina subjetividades. 3. **Asegurar Precisión Jurídica**: - Verifica que toda la terminología y referencias sean correctas, específicas y pertinentes al Derecho de Familia. - Evita frases ambiguas, garantizando claridad en la intención judicial. 4. **Optimización de Concisión**: - Elimina redundancias y simplifica estructuras oracionales, preservando el contenido. - Cada frase debe ser breve y enfocada, sin perder formalidad ni significado. 5. **Incorporación de Términos Formales**: - Asegura que las expresiones judiciales tradicionales chilenas se usen correctamente. - Verifica que las conclusiones y firmas sigan las normas de redacción de la Corte Suprema. 6. **Revisión Final**: - Realiza una lectura final para asegurar que todas las mejoras estén implementadas. - Corrige errores gramaticales o de estilo, verificando la coherencia y formalidad del texto. **Formato de Salida**: - Devuelve el borrador revisado con las mejoras aplicadas respetando la estructura original. - Cada ajuste debe preservar la sustancia del contenido, enfocándose exclusivamente en perfeccionar el estilo y redacción. **Notas Importantes**: - No alteres los fundamentos ni decisiones esenciales del documento. - Mantén la rigurosidad y formalidad propias de la Corte Suprema de Chile. **Referencia del Documento**: - El documento a analizar se encuentra etiquetado como @docs. """ # Configuración del modelo de Google Gemini google_gemini_model = genai.GenerativeModel( "gemini-exp-1114", generation_config={ "temperature": 0.5, "top_p": 0.9, "top_k": 40, "max_output_tokens": 8000, "response_mime_type": "text/plain", }, ) # Configuración del modelo de Google LearnLM google_learnlm_model = genai.GenerativeModel( "learnlm-1.5-pro-experimental", generation_config={ "temperature": 0.5, "top_p": 0.9, "top_k": 40, "max_output_tokens": 8000, "response_mime_type": "text/plain", }, ) async def generate_content(client, model_name, system_instruction, borrador): try: response = await asyncio.to_thread(client.generate_content, [system_instruction, borrador]) return response.text except Exception as e: return f"Error en {model_name}: {str(e)}" async def combine_responses(borrador): system_instruction = default_system_instruction google_gemini_task = asyncio.create_task( generate_content(google_gemini_model, "Google Gemini", system_instruction, borrador) ) google_learnlm_task = asyncio.create_task( generate_content(google_learnlm_model, "Google LearnLM", system_instruction, borrador) ) google_gemini_result = await google_gemini_task google_learnlm_result = await google_learnlm_task combined_result = f"**Google Gemini:**\n{google_gemini_result}\n\n**Google LearnLM:**\n{google_learnlm_result}" return combined_result async def predict(borrador): return await combine_responses(borrador) # Interfaz Gradio with gr.Blocks() as demo: gr.Markdown("### Mejorador de resoluciones judiciales - Derecho de Familia en Chile") borrador = gr.Textbox(label="Borrador judicial", placeholder="Escribe o pega el texto aquí...", lines=10) output = gr.Textbox(label="Resultado mejorado", placeholder="El resultado aparecerá aquí...", lines=10) submit_btn = gr.Button("Enviar") submit_btn.click(fn=predict, inputs=borrador, outputs=output) if __name__ == "__main__": demo.launch()