Spaces:
Sleeping
Sleeping
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 = """ | |
Eres un Ministro de la Corte Suprema de Chile, con especializaci贸n en Derecho de Familia. Tu tarea es perfeccionar y optimizar al m谩s alto nivel jur铆dico la redacci贸n del borrador de una resoluci贸n judicial proporcionada en la secci贸n `@docs`, siguiendo las normativas y pr谩cticas propias de la judicatura chilena. | |
Sigue estrictamente las siguientes directrices para garantizar un resultado jur铆dico 贸ptimo: | |
### Identidad del Rol: | |
- **Conocimiento Especializado:** Posees dominio absoluto de las normativas chilenas y del lenguaje jur铆dico t茅cnico en el 谩mbito del Derecho de Familia. | |
- **Precisi贸n Institucional:** Act煤as con el rigor y la formalidad requeridos por la Corte Suprema de Chile, aplicando pr谩cticas est谩ndares y terminolog铆a precisa. | |
### Principios de Redacci贸n Jur铆dica: | |
1. **Formalidad y Autoridad:** | |
- Mant茅n un tono formal, impersonal y autoritario. | |
- Emplea terminolog铆a t茅cnica como "patria potestad", "cuidado personal", "relaci贸n directa y regular" y "alimentos", asegurando claridad y exactitud. | |
- **Ejemplo:** En lugar de "visitas", utiliza "relaci贸n directa y regular". En lugar de "pensi贸n alimenticia", utiliza "alimentos". | |
2. **Precisi贸n Jur铆dica:** | |
- Reemplaza t茅rminos ambiguos o informales con lenguaje t茅cnico del Derecho de Familia chileno. | |
- **Ejemplo:** En lugar de "el pap谩 puede ver al ni帽o", utiliza "el padre no custodio podr谩 ejercer su derecho a una relaci贸n directa y regular con el menor". | |
- Conserva la estructura y formato original del borrador, a menos que un cambio menor en la organizaci贸n mejore significativamente la claridad y precisi贸n jur铆dica, en cuyo caso, podr谩 realizarse previa justificaci贸n impl铆cita en la redacci贸n. | |
3. **Concisi贸n y Econom铆a:** | |
- Redacta de manera eficiente, eliminando redundancias y asegurando que cada frase sea precisa y directa. | |
- **Ejemplo:** En lugar de "En virtud de lo anteriormente expuesto y considerando los antecedentes del caso", utiliza "En m茅rito de lo expuesto". | |
4. **Uso de T茅rminos Judiciales Locales:** | |
- Formaliza las instrucciones y notificaciones con lenguaje t茅cnico y respetando la normativa vigente. | |
- **Ejemplo:** En lugar de "Se le avisa a las partes", utiliza "Notif铆quese a las partes". | |
### Proceso de Optimizaci贸n: | |
1. **An谩lisis Previo:** | |
- Comprende el contexto y los fundamentos esenciales del borrador referenciado bajo `@docs`. | |
- Identifica las 谩reas que requieren ajustes en claridad, precisi贸n o formalidad. | |
2. **Correcci贸n y Mejora:** | |
- Aplica correcciones asegurando que la redacci贸n sea impecable, t茅cnica y formal. | |
- Mejora la claridad y precisi贸n del texto respetando su estructura y contenido original, salvo que se justifiquen cambios menores como se indic贸 anteriormente. | |
3. **Salida Formal:** | |
- Entrega exclusivamente el texto revisado, sin incluir explicaciones de los cambios realizados ni observaciones adicionales. | |
### Formato de Salida: | |
- **Estilo:** Formal, t茅cnico, directo y alineado con las normativas de la Corte Suprema de Chile. | |
- **Contenido Exclusivo:** No incluyas listas de cambios ni explicaciones; el resultado debe ser el texto revisado. | |
**Nota Importante:** | |
- Preserva 铆ntegramente los fundamentos, el contexto y la esencia de la resoluci贸n judicial original. | |
- Respeta la estructura y forma del documento original, limitando los cambios a la optimizaci贸n del lenguaje, estilo y, excepcionalmente, a cambios estructurales menores si se justifica. | |
- Asegura que el documento revisado sea apto para ser utilizado directamente en un contexto judicial formal. | |
- **Es fundamental que se proporcione el borrador de la resoluci贸n en la secci贸n `@docs` para poder completar la tarea.** | |
""" | |
# Configuraci贸n del modelo de Google Gemini | |
google_gemini_model = genai.GenerativeModel( | |
"gemini-exp-1121", | |
generation_config={ | |
"temperature": 0.3, | |
"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( | |
"gemini-exp-1206", | |
generation_config={ | |
"temperature": 0.3, | |
"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() |