Spaces:
Running
Running
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-1121", | |
generation_config={ | |
"temperature": 0.5, | |
"top_p": 0.9, | |
"top_k": 40, | |
"max_output_tokens": 5000, | |
"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": 5000, | |
"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() |