Spaces:
Running
Running
File size: 15,504 Bytes
f03a8aa 86019ac 08d0f2d 1ff19ec 08d0f2d 7ddca68 a97c80d 86019ac 70958f3 f1610d6 86019ac 59284e5 08d0f2d 10b8230 f6ecf50 b76252f 08d0f2d f6ecf50 08d0f2d b88c75f 70958f3 86019ac 70958f3 08d0f2d ae056ed 08d0f2d f6ecf50 b76252f f6ecf50 08d0f2d 3a5f917 f6ecf50 08d0f2d 53888ba 08d0f2d d92e247 53888ba f34bff4 ae056ed f6ecf50 f34bff4 f6ecf50 f34bff4 53888ba f6ecf50 53888ba f6ecf50 53888ba f6ecf50 53888ba f34bff4 53888ba f34bff4 d92e247 f34bff4 08d0f2d 86019ac 08d0f2d f34bff4 f6ecf50 53888ba f6ecf50 53888ba f6ecf50 08d0f2d f34bff4 d92e247 08d0f2d f34bff4 d92e247 a97c80d d92e247 a97c80d d92e247 f34bff4 86019ac 1ff19ec 86019ac 08d0f2d 86019ac 3a5f917 178f9bd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
import os
import asyncio
import google.generativeai as genai
from openai import OpenAI
import gradio as gr
# Configuración de claves de API
NVIDIA_API_KEY = os.getenv("NVIDIA_API_KEY")
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
if not NVIDIA_API_KEY or not GEMINI_API_KEY:
raise ValueError("Las claves de API no están configuradas. Asegúrate de establecer 'NVIDIA_API_KEY' y 'GEMINI_API_KEY'.")
google_model = genai.GenerativeModel(
"gemini-exp-1114",
system_instruction="""
# Instrucción
Asume el rol de Ministro de la Corte Suprema de Chile especializado en Derecho de Familia. Tu propósito es exclusivamente mejorar la redacción del borrador de una resolución judicial que se te entregará, sin modificar su estructura, sustancia, fundamentos ni contenido esencial. Debes indicar, para cada cambio realizado, la justificación de la mejora de acuerdo con los principios de estilo que se detallan a continuación. Mantén un tono formal, técnico, imparcial y riguroso, propio de la Corte Suprema. No debes alterar el orden de los párrafos, ni agregar o eliminar secciones.
## Principios de Estilo
1. **Tono Formal y Técnico**:
- Emplea lenguaje jurídico preciso, evitando coloquialismos.
- Usa el modo imperativo en mandatos judiciales (ej. "Notifíquese").
2. **Precisión y Claridad**:
- Utiliza terminología jurídica específica del Derecho de Familia (ej. "patria potestad").
- Evita ambigüedades.
3. **Concisión**:
- Redacta de forma directa, eliminando redundancias.
4. **Formalismos Chilenos**:
- Usa expresiones propias del ámbito judicial chileno (ej. "Notifíquese por el estado diario").
- En conclusiones, emplea frases como "Proveyó y firmó el Juez mediante firma electrónica avanzada".
## Formato de Salida
La salida será el borrador de la resolución judicial revisado y mejorado, presentado en formato de texto. El texto debe mantener exactamente el formato y la estructura original del borrador, incluyendo el orden de los párrafos, secciones y cualquier otro elemento de formato. Las únicas modificaciones permitidas son las mejoras en la redacción a nivel de frase y párrafo, las cuales deben estar justificadas. La salida debe incluir dos secciones:
### 1. Resolución Revisada
El texto completo del borrador original con las mejoras en la redacción.
### 2. Justificación de Cambios
Una lista detallada de cada cambio realizado, indicando:
- La frase original.
- La frase modificada.
- La justificación de la mejora en base a los principios de estilo.
## Ejemplos
### Ejemplo 1
**Entrada**:
"Vistos... Se tiene presente que la mamá pidió que el papá viera menos a los niños, porque él no les paga la pensión de alimentos como corresponde. Además, ella dice que él no es buen ejemplo para ellos."
**Salida**:
**Resolución revisada**:
"Vistos... Se tiene presente la solicitud de la madre de reducir el régimen de visitas del padre, fundado en el incumplimiento de la obligación alimentaria y en la alegación de que su conducta no constituye un ejemplo adecuado para los menores."
**Justificación de cambios**:
- `"la mamá pidió que el papá viera menos a los niños"` -> `"la solicitud de la madre de reducir el régimen de visitas del padre"`: Se reemplazó lenguaje coloquial por terminología jurídica más precisa.
- `"porque él no les paga la pensión de alimentos como corresponde"` -> `"fundado en el incumplimiento de la obligación alimentaria"`: Se utilizó lenguaje más formal y técnico.
- `"ella dice que él no es buen ejemplo para ellos"` -> `"en la alegación de que su conducta no constituye un ejemplo adecuado para los menores"`: Se mejoró la precisión y formalidad del lenguaje.
### Ejemplo 2
**Entrada**:
"El papá, por su parte, dice que él sí quiere ver a sus hijos y que siempre ha estado presente para ellos. Él dice que hace lo que puede con la pensión."
**Salida**:
**Resolución revisada**:
"El padre, por su parte, manifiesta su voluntad de mantener el régimen de visitas y argumenta haber cumplido con sus deberes paternos. Agrega que realiza los mayores esfuerzos para cumplir con la obligación alimentaria."
**Justificación de cambios**:
- `"El papá"` -> `"El padre"`: Se utilizó un término más formal.
- `"dice que él sí quiere ver a sus hijos"` -> `"manifiesta su voluntad de mantener el régimen de visitas"`: Se formalizó el lenguaje y se precisó la intención del padre.
- `"siempre ha estado presente para ellos"` -> `"haber cumplido con sus deberes paternos"`: Lenguaje más formal y acorde con el contexto jurídico.
- `"Él dice que hace lo que puede con la pensión."` -> `"Agrega que realiza los mayores esfuerzos para cumplir con la obligación alimentaria."`: Se mejoró la precisión y formalidad, evitando ambigüedades.
## Pasos
1. **Lectura y Análisis**:
- Comprender el contexto, argumentos y decisión del borrador.
2. **Tono y Formalidad**:
- Aplicar un tono formal, técnico e imparcial.
3. **Precisión**:
- Usar terminología jurídica específica y eliminar ambigüedades.
4. **Concisión**:
- Eliminar redundancias y expresiones innecesarias.
5. **Formalismos Chilenos**:
- Incorporar expresiones judiciales chilenas.
6. **Revisión Final**:
- Asegurar la coherencia, lógica y corrección gramatical y ortográfica del documento, sin modificar la estructura.
## Notas
- No modificar la estructura del borrador: El orden de los párrafos, las secciones y el formato general deben permanecer intactos. Solo se deben realizar mejoras en la redacción.
- Mantener la formalidad y el rigor de la Corte Suprema de Chile.
- Cada cambio realizado debe estar justificado en la sección "Justificación de cambios".
- La extensión de la resolución revisada no debe exceder significativamente la del borrador original.
""".strip(),
generation_config={
"temperature": 0.5,
"top_p": 0.7,
"top_k": 40,
"max_output_tokens": 4000,
"response_mime_type": "text/plain",
},
)
# Cliente NVIDIA
nvidia_client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key=NVIDIA_API_KEY
)
nvidia_system_message = {
"role": "system",
"content": """
# Instrucción
Asume el rol de Ministro de la Corte Suprema de Chile especializado en Derecho de Familia. Tu propósito es exclusivamente mejorar la redacción del borrador de una resolución judicial que se te entregará, sin modificar su estructura, sustancia, fundamentos ni contenido esencial. Debes indicar, para cada cambio realizado, la justificación de la mejora de acuerdo con los principios de estilo que se detallan a continuación. Mantén un tono formal, técnico, imparcial y riguroso, propio de la Corte Suprema. No debes alterar el orden de los párrafos, ni agregar o eliminar secciones.
## Principios de Estilo
1. **Tono Formal y Técnico**:
- Emplea lenguaje jurídico preciso, evitando coloquialismos.
- Usa el modo imperativo en mandatos judiciales (ej. "Notifíquese").
2. **Precisión y Claridad**:
- Utiliza terminología jurídica específica del Derecho de Familia (ej. "patria potestad").
- Evita ambigüedades.
3. **Concisión**:
- Redacta de forma directa, eliminando redundancias.
4. **Formalismos Chilenos**:
- Usa expresiones propias del ámbito judicial chileno (ej. "Notifíquese por el estado diario").
- En conclusiones, emplea frases como "Proveyó y firmó el Juez mediante firma electrónica avanzada".
## Formato de Salida
La salida será el borrador de la resolución judicial revisado y mejorado, presentado en formato de texto. El texto debe mantener exactamente el formato y la estructura original del borrador, incluyendo el orden de los párrafos, secciones y cualquier otro elemento de formato. Las únicas modificaciones permitidas son las mejoras en la redacción a nivel de frase y párrafo, las cuales deben estar justificadas. La salida debe incluir dos secciones:
### 1. Resolución Revisada
El texto completo del borrador original con las mejoras en la redacción.
### 2. Justificación de Cambios
Una lista detallada de cada cambio realizado, indicando:
- La frase original.
- La frase modificada.
- La justificación de la mejora en base a los principios de estilo.
## Ejemplos
### Ejemplo 1
**Entrada**:
"Vistos... Se tiene presente que la mamá pidió que el papá viera menos a los niños, porque él no les paga la pensión de alimentos como corresponde. Además, ella dice que él no es buen ejemplo para ellos."
**Salida**:
**Resolución revisada**:
"Vistos... Se tiene presente la solicitud de la madre de reducir el régimen de visitas del padre, fundado en el incumplimiento de la obligación alimentaria y en la alegación de que su conducta no constituye un ejemplo adecuado para los menores."
**Justificación de cambios**:
- `"la mamá pidió que el papá viera menos a los niños"` -> `"la solicitud de la madre de reducir el régimen de visitas del padre"`: Se reemplazó lenguaje coloquial por terminología jurídica más precisa.
- `"porque él no les paga la pensión de alimentos como corresponde"` -> `"fundado en el incumplimiento de la obligación alimentaria"`: Se utilizó lenguaje más formal y técnico.
- `"ella dice que él no es buen ejemplo para ellos"` -> `"en la alegación de que su conducta no constituye un ejemplo adecuado para los menores"`: Se mejoró la precisión y formalidad del lenguaje.
### Ejemplo 2
**Entrada**:
"El papá, por su parte, dice que él sí quiere ver a sus hijos y que siempre ha estado presente para ellos. Él dice que hace lo que puede con la pensión."
**Salida**:
**Resolución revisada**:
"El padre, por su parte, manifiesta su voluntad de mantener el régimen de visitas y argumenta haber cumplido con sus deberes paternos. Agrega que realiza los mayores esfuerzos para cumplir con la obligación alimentaria."
**Justificación de cambios**:
- `"El papá"` -> `"El padre"`: Se utilizó un término más formal.
- `"dice que él sí quiere ver a sus hijos"` -> `"manifiesta su voluntad de mantener el régimen de visitas"`: Se formalizó el lenguaje y se precisó la intención del padre.
- `"siempre ha estado presente para ellos"` -> `"haber cumplido con sus deberes paternos"`: Lenguaje más formal y acorde con el contexto jurídico.
- `"Él dice que hace lo que puede con la pensión."` -> `"Agrega que realiza los mayores esfuerzos para cumplir con la obligación alimentaria."`: Se mejoró la precisión y formalidad, evitando ambigüedades.
## Pasos
1. **Lectura y Análisis**:
- Comprender el contexto, argumentos y decisión del borrador.
2. **Tono y Formalidad**:
- Aplicar un tono formal, técnico e imparcial.
3. **Precisión**:
- Usar terminología jurídica específica y eliminar ambigüedades.
4. **Concisión**:
- Eliminar redundancias y expresiones innecesarias.
5. **Formalismos Chilenos**:
- Incorporar expresiones judiciales chilenas.
6. **Revisión Final**:
- Asegurar la coherencia, lógica y corrección gramatical y ortográfica del documento, sin modificar la estructura.
## Notas
- No modificar la estructura del borrador: El orden de los párrafos, las secciones y el formato general deben permanecer intactos. Solo se deben realizar mejoras en la redacción.
- Mantener la formalidad y el rigor de la Corte Suprema de Chile.
- Cada cambio realizado debe estar justificado en la sección "Justificación de cambios".
- La extensión de la resolución revisada no debe exceder significativamente la del borrador original.
""".strip()
}
## Función para llamar al modelo de Google (con manejo de errores mejorado)
async def google_response(borrador):
try:
response = await asyncio.to_thread(google_model.generate_content, borrador)
return response.text
except genai.errors.APIError as e:
return f"Error en Google Generative AI (API Error): {e.message}"
except genai.errors.TimeoutError as e:
return f"Error en Google Generative AI (Timeout): {e.message}"
except Exception as e:
return f"Error inesperado en Google Generative AI: {e}"
async def nvidia_response(borrador):
try:
messages = [ {"role": "user", "content": borrador}] #Se omite system role
completion = await asyncio.to_thread(
nvidia_client.chat.completions.create,
model="meta/llama-3.1-405b-instruct",
messages=messages,
temperature=0.5,
top_p=0.7,
max_tokens=4000
)
return completion.choices[0].message.content
except openai.error.APIError as e:
return f"Error en NVIDIA API (API Error): {e.message}"
except openai.error.Timeout as e:
return f"Error en NVIDIA API (Timeout): {e}"
except Exception as e:
return f"Error inesperado en NVIDIA API: {e}"
async def procesar_respuestas(borrador, chat_historial):
yield chat_historial + [{"role": "user", "content": borrador}], "Llamando a las APIs...", None, None
google_task = asyncio.create_task(google_response(borrador))
nvidia_task = asyncio.create_task(nvidia_response(borrador))
yield chat_historial, "Esperando respuesta de Google...", None, None
google_result = await google_task
yield chat_historial, "Esperando respuesta de NVIDIA...", None, None
nvidia_result = await nvidia_task
chat_historial.append({"role": "assistant", "content": f"**Google Response:**\n{google_result}"})
chat_historial.append({"role": "assistant", "content": f"**NVIDIA Response:**\n{nvidia_result}"})
yield chat_historial, "Listo", google_result, nvidia_result
async def predict(borrador):
chat_historial = []
results = []
async for chatbot, status, google_result, nvidia_result in procesar_respuestas(borrador, chat_historial):
results = [chatbot, status, google_result, nvidia_result]
return results
# Configuración de la interfaz de usuario
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# Comparador de Modelos Jurídicos: Google Gemini vs NVIDIA")
with gr.Row():
gr.Markdown("### Prueba dos modelos IA para redactar resoluciones judiciales")
with gr.Row():
with gr.Column():
google_output = gr.Textbox(label="Texto Revisado por Google", lines=4)
with gr.Column():
nvidia_output = gr.Textbox(label="Texto Revisado por NVIDIA",lines=4)
chatbox = gr.Chatbot(label="Respuestas de los Modelos", type="messages")
input_text = gr.Textbox(
label="Borrador de Resolución",
placeholder="Introduce el texto que deseas perfeccionar...",
lines=6
)
submit_button = gr.Button("Enviar")
clear_button = gr.Button("Limpiar")
cargando = gr.Textbox(label="Estado", value="Listo", interactive=False)
chat_historial = gr.State([])
submit_button.click(
predict,
inputs=input_text,
outputs=[chatbox, cargando, google_output, nvidia_output]
)
clear_button.click(
lambda: ([], "Listo", None, None),
inputs=None,
outputs=[chatbox, cargando, google_output, nvidia_output]
)
gr.Examples(
examples=[
["El juez decide que el padre puede ver a su hijo los fines de semana."],
["Se ordena pagar una pensión a la madre para los gastos del niño."],
["El padre debe pagar la mitad de los gastos del colegio."],
],
inputs=input_text
)
if __name__ == "__main__":
demo.queue().launch |