eberhenriquez94 commited on
Commit
08d0f2d
verified
1 Parent(s): a97c80d
Files changed (1) hide show
  1. app.py +92 -59
app.py CHANGED
@@ -1,7 +1,8 @@
1
  import os
2
  import asyncio
3
- import gradio as gr
4
  from openai import OpenAI
 
5
 
6
  # Configuraci贸n de claves de API
7
  NVIDIA_API_KEY = os.getenv("NVIDIA_API_KEY")
@@ -10,21 +11,57 @@ GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
10
  if not NVIDIA_API_KEY or not GEMINI_API_KEY:
11
  raise ValueError("Las claves de API no est谩n configuradas. Aseg煤rate de establecer 'NVIDIA_API_KEY' y 'GEMINI_API_KEY'.")
12
 
13
- # Configuraci贸n de clientes OpenAI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  nvidia_client = OpenAI(
15
  base_url="https://integrate.api.nvidia.com/v1",
16
  api_key=NVIDIA_API_KEY
17
  )
18
-
19
- gemini_client = OpenAI(
20
- base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
21
- api_key=GEMINI_API_KEY
22
- )
23
-
24
- # Mensaje del sistema
25
- system_message = {
26
  "role": "system",
27
- "content": """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, siguiendo principios de estilo que aseguren claridad, precisi贸n, concisi贸n y formalidad sin modificar la sustancia, fundamentos ni contenido esencial de la decisi贸n. Mant茅n un tono formal, t茅cnico, imparcial y riguroso, propio de la Corte Suprema.
 
28
 
29
  Identidad y Prop贸sito: Eres un asistente de IA que opera como un Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia. Act煤as con la autoridad y formalidad judicial necesarias para revisar y perfeccionar borradores de resoluciones judiciales. Cada fase del flujo debe cumplir con los est谩ndares de claridad, precisi贸n, concisi贸n y formalidad del lenguaje judicial chileno sin alterar la esencia ni los fundamentos de las decisiones.
30
 
@@ -49,15 +86,24 @@ La salida ser谩 el borrador de la resoluci贸n judicial revisado y mejorado, pres
49
 
50
  # Notas
51
 
52
- Es crucial que el asistente de IA se adhiera estrictamente a las instrucciones, sin alterar la sustancia de la decisi贸n judicial. El objetivo es perfeccionar la redacci贸n, no modificar el contenido. Se debe mantener la formalidad y el rigor caracter铆stico de los documentos de la Corte Suprema de Chile."""
 
53
  }
54
 
55
- # Funci贸n para interactuar con la API
56
- async def call_api(client, model_name, message, history):
57
  try:
58
- messages = [system_message] + history + [{"role": "user", "content": message}]
59
- completion = client.chat.completions.create(
60
- model=model_name,
 
 
 
 
 
 
 
 
61
  messages=messages,
62
  temperature=0.5,
63
  top_p=0.7,
@@ -65,65 +111,53 @@ async def call_api(client, model_name, message, history):
65
  )
66
  return completion.choices[0].message.content
67
  except Exception as e:
68
- return f"Error API: {e}"
69
-
70
- async def nvidia_response(message, history):
71
- return await call_api(nvidia_client, "meta/llama-3.1-405b-instruct", message, history)
72
 
73
- async def gemini_response(message, history):
74
- return await call_api(gemini_client, "gemini", message, history)
 
 
75
 
76
- # Funci贸n principal para procesar ambas respuestas
77
- async def respond_both_models(message, history, loading_state):
78
- loading_state = True
79
- yield history + [{"role": "user", "content": message}], loading_state
80
-
81
- nvidia_result, gemini_result = await asyncio.gather(
82
- nvidia_response(message, history),
83
- gemini_response(message, history)
84
  )
85
 
86
- loading_state = False
87
-
88
- if "Error API:" in nvidia_result:
89
- history.append({"role": "assistant", "content": f"**Error NVIDIA:**\n{nvidia_result}"})
90
- else:
91
- history.append({"role": "assistant", "content": f"**NVIDIA Response:**\n{nvidia_result}"})
92
 
93
- if "Error API:" in gemini_result:
94
- history.append({"role": "assistant", "content": f"**Error Gemini:**\n{gemini_result}"})
95
- else:
96
- history.append({"role": "assistant", "content": f"**Gemini Response:**\n{gemini_result}"})
97
 
98
- yield history, loading_state
99
 
100
- # Interfaz de usuario
101
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
102
- gr.Markdown("# Ministro IA de la Corte Suprema - Derecho de Familia")
103
  with gr.Row():
104
- gr.Markdown("### Comparaci贸n de Modelos: NVIDIA vs Gemini")
105
 
106
- chatbot = gr.Chatbot(label="Respuestas de los Modelos", type='messages')
107
- message_input = gr.Textbox(
108
- label="Borrador de la Resoluci贸n",
109
- placeholder="Ingrese el borrador aqu铆...",
110
- lines=6,
111
  )
112
  submit_button = gr.Button("Enviar")
113
  clear_button = gr.Button("Limpiar")
114
 
115
- loading_state = gr.State(False)
116
- history = gr.State([])
117
 
118
  submit_button.click(
119
- respond_both_models,
120
- inputs=[message_input, history, loading_state],
121
- outputs=[chatbot, loading_state]
122
  )
123
  clear_button.click(
124
  lambda: ([], False),
125
  inputs=None,
126
- outputs=[chatbot, loading_state]
127
  )
128
 
129
  gr.Examples(
@@ -131,10 +165,9 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
131
  ["El juez decide que el padre puede ver a su hijo los fines de semana."],
132
  ["Se ordena pagar una pensi贸n a la madre para los gastos del ni帽o."],
133
  ["El padre debe pagar la mitad de los gastos del colegio."],
134
- ["Considero que lo mejor para el ni帽o es..."]
135
  ],
136
- inputs=message_input
137
  )
138
 
139
  if __name__ == "__main__":
140
- demo.launch()
 
1
  import os
2
  import asyncio
3
+ import google.generativeai as genai
4
  from openai import OpenAI
5
+ import gradio as gr
6
 
7
  # Configuraci贸n de claves de API
8
  NVIDIA_API_KEY = os.getenv("NVIDIA_API_KEY")
 
11
  if not NVIDIA_API_KEY or not GEMINI_API_KEY:
12
  raise ValueError("Las claves de API no est谩n configuradas. Aseg煤rate de establecer 'NVIDIA_API_KEY' y 'GEMINI_API_KEY'.")
13
 
14
+ # Configuraci贸n de clientes
15
+ # Cliente Google Generative AI
16
+ genai.configure(api_key=GEMINI_API_KEY)
17
+ google_model = genai.GenerativeModel(
18
+ model_name="gemini-exp-1114",
19
+ system_instruction= """
20
+ 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, siguiendo principios de estilo que aseguren claridad, precisi贸n, concisi贸n y formalidad sin modificar la sustancia, fundamentos ni contenido esencial de la decisi贸n. Mant茅n un tono formal, t茅cnico, imparcial y riguroso, propio de la Corte Suprema.
21
+
22
+ Identidad y Prop贸sito: Eres un asistente de IA que opera como un Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia. Act煤as con la autoridad y formalidad judicial necesarias para revisar y perfeccionar borradores de resoluciones judiciales. Cada fase del flujo debe cumplir con los est谩ndares de claridad, precisi贸n, concisi贸n y formalidad del lenguaje judicial chileno sin alterar la esencia ni los fundamentos de las decisiones.
23
+
24
+ Principios Generales para la Redacci贸n Jur铆dica:
25
+ * Tono Formal y T茅cnico: Mant茅n un tono formal, autoritario e impersonal. Emplea el modo imperativo en expresiones de orden y mandato judicial, como 'Notif铆quese', 'Arch铆vese' o 'C铆tese'. Proyecta neutralidad y profesionalismo en todo el texto; evita cualquier tono subjetivo o interpretativo.
26
+ * Precisi贸n y Claridad: Usa terminolog铆a jur铆dica espec铆fica del Derecho de Familia, como 'patria potestad', 'derecho de visitas' o 'pensi贸n alimenticia', evitando sin贸nimos menos t茅cnicos. Asegura que cada enunciado sea claro y preciso, sin ambig眉edades que puedan dar lugar a interpretaciones err贸neas.
27
+ * Concisi贸n y Econom铆a de Palabras: Emplea una redacci贸n directa, donde cada palabra tenga una funci贸n clara. Evita redundancias y expresiones superfluas para facilitar una comprensi贸n inmediata y sin distracciones.
28
+ * Uso de T茅rminos y Expresiones Propios del Derecho Chileno: Utiliza expresiones tradicionales y formales del 谩mbito judicial chileno, como 'Notif铆quese por el estado diario'. En conclusiones y firmas, emplea frases est谩ndar del lenguaje jur铆dico chileno, como 'Provey贸 y firm贸 el Juez mediante firma electr贸nica avanzada'.
29
+
30
+ # Pasos
31
+
32
+ 1. **Lectura y An谩lisis del Borrador:** Revisa el borrador completo de la resoluci贸n judicial para entender el contexto, los argumentos presentados y la decisi贸n tomada. Identifica 谩reas que requieran mejoras en t茅rminos de claridad, precisi贸n, concisi贸n y formalidad.
33
+ 2. **Aplicaci贸n del Tono Formal y T茅cnico:** Aseg煤rate de que el lenguaje utilizado sea apropiado para una resoluci贸n judicial de la Corte Suprema. Utiliza el modo imperativo en los mandatos judiciales. Elimina cualquier expresi贸n coloquial o subjetiva, reemplaz谩ndola con un lenguaje t茅cnico y neutral.
34
+ 3. **Mejora de la Precisi贸n y Claridad:** Verifica que la terminolog铆a jur铆dica utilizada sea espec铆fica y correcta, especialmente aquella relacionada con el Derecho de Familia. Revisa cada enunciado para eliminar ambig眉edades y asegurar que la intenci贸n de la corte sea clara e inequ铆voca.
35
+ 4. **Asegurar la Concisi贸n y Econom铆a de Palabras:** Revisa cada frase y p谩rrafo para eliminar redundancias y expresiones innecesarias. Simplifica la estructura de las oraciones sin perder la precisi贸n, asegurando que cada palabra contribuya al significado del texto.
36
+ 5. **Uso Adecuado de T茅rminos y Expresiones Judiciales Chilenas:** Incorpora o revisa las expresiones formales tradicionales del 谩mbito judicial chileno, asegurando que se utilicen correctamente y en el contexto adecuado. Verifica que las conclusiones y firmas sigan el formato est谩ndar del lenguaje jur铆dico chileno.
37
+ 6. **Revisi贸n Final y Correcci贸n:** Realiza una revisi贸n final del documento para asegurar que todas las modificaciones se hayan implementado correctamente y que la resoluci贸n mantenga su coherencia y l贸gica. Corrige cualquier error gramatical o de estilo que pueda haber quedado.
38
+
39
+ # Formato de Salida
40
+
41
+ La salida ser谩 el borrador de la resoluci贸n judicial revisado y mejorado, presentado en formato de texto. El texto debe mantener el formato y la estructura original del borrador, pero con las mejoras estil铆sticas y de lenguaje implementadas seg煤n las directrices proporcionadas.
42
+
43
+ # Notas
44
+
45
+ Es crucial que el asistente de IA se adhiera estrictamente a las instrucciones, sin alterar la sustancia de la decisi贸n judicial. El objetivo es perfeccionar la redacci贸n, no modificar el contenido. Se debe mantener la formalidad y el rigor caracter铆stico de los documentos de la Corte Suprema de Chile.
46
+ """.strip(),
47
+ generation_config={
48
+ "temperature": 0.5,
49
+ "top_p": 0.7,
50
+ "top_k": 40,
51
+ "max_output_tokens": 4000,
52
+ "response_mime_type": "text/plain",
53
+ },
54
+ )
55
+
56
+ Cliente NVIDIA
57
  nvidia_client = OpenAI(
58
  base_url="https://integrate.api.nvidia.com/v1",
59
  api_key=NVIDIA_API_KEY
60
  )
61
+ nvidia_system_message = {
 
 
 
 
 
 
 
62
  "role": "system",
63
+ "content": """
64
+ 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, siguiendo principios de estilo que aseguren claridad, precisi贸n, concisi贸n y formalidad sin modificar la sustancia, fundamentos ni contenido esencial de la decisi贸n. Mant茅n un tono formal, t茅cnico, imparcial y riguroso, propio de la Corte Suprema.
65
 
66
  Identidad y Prop贸sito: Eres un asistente de IA que opera como un Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia. Act煤as con la autoridad y formalidad judicial necesarias para revisar y perfeccionar borradores de resoluciones judiciales. Cada fase del flujo debe cumplir con los est谩ndares de claridad, precisi贸n, concisi贸n y formalidad del lenguaje judicial chileno sin alterar la esencia ni los fundamentos de las decisiones.
67
 
 
86
 
87
  # Notas
88
 
89
+ Es crucial que el asistente de IA se adhiera estrictamente a las instrucciones, sin alterar la sustancia de la decisi贸n judicial. El objetivo es perfeccionar la redacci贸n, no modificar el contenido. Se debe mantener la formalidad y el rigor caracter铆stico de los documentos de la Corte Suprema de Chile.
90
+ """.strip()
91
  }
92
 
93
+ # Funci贸n para llamar al modelo de Google
94
+ async def google_response(borrador):
95
  try:
96
+ response = google_model.generate_content(prompt=borrador)
97
+ return response.text
98
+ except Exception as e:
99
+ return f"Error en Google Generative AI: {e}"
100
+
101
+ # Funci贸n para llamar al modelo de NVIDIA
102
+ async def nvidia_response(borrador):
103
+ try:
104
+ messages = [nvidia_system_message, {"role": "user", "content": borrador}]
105
+ completion = nvidia_client.chat.completions.create(
106
+ model="meta/llama-3.1-405b-instruct", # Cambiar si usas otro modelo NVIDIA
107
  messages=messages,
108
  temperature=0.5,
109
  top_p=0.7,
 
111
  )
112
  return completion.choices[0].message.content
113
  except Exception as e:
114
+ return f"Error en NVIDIA API: {e}"
 
 
 
115
 
116
+ # Funci贸n para procesar ambas respuestas
117
+ async def procesar_respuestas(borrador, chat_historial, cargando):
118
+ cargando = True
119
+ yield chat_historial + [{"role": "user", "content": borrador}], cargando
120
 
121
+ google_result, nvidia_result = await asyncio.gather(
122
+ google_response(borrador),
123
+ nvidia_response(borrador)
 
 
 
 
 
124
  )
125
 
126
+ cargando = False
 
 
 
 
 
127
 
128
+ # Agregar respuestas al historial
129
+ chat_historial.append({"role": "assistant", "content": f"**Google Response:**\n{google_result}"})
130
+ chat_historial.append({"role": "assistant", "content": f"**NVIDIA Response:**\n{nvidia_result}"})
 
131
 
132
+ yield chat_historial, cargando
133
 
134
+ # Configuraci贸n de la interfaz de usuario
135
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
136
+ gr.Markdown("# Comparador de Modelos Jur铆dicos: Google Gemini vs NVIDIA")
137
  with gr.Row():
138
+ gr.Markdown("### Prueba dos modelos IA para redactar resoluciones judiciales")
139
 
140
+ chatbox = gr.Chatbot(label="Respuestas de los Modelos", type="messages")
141
+ input_text = gr.Textbox(
142
+ label="Borrador de Resoluci贸n",
143
+ placeholder="Introduce el texto que deseas perfeccionar...",
144
+ lines=6
145
  )
146
  submit_button = gr.Button("Enviar")
147
  clear_button = gr.Button("Limpiar")
148
 
149
+ cargando = gr.State(False)
150
+ chat_historial = gr.State([])
151
 
152
  submit_button.click(
153
+ procesar_respuestas,
154
+ inputs=[input_text, chat_historial, cargando],
155
+ outputs=[chatbox, cargando]
156
  )
157
  clear_button.click(
158
  lambda: ([], False),
159
  inputs=None,
160
+ outputs=[chatbox, cargando]
161
  )
162
 
163
  gr.Examples(
 
165
  ["El juez decide que el padre puede ver a su hijo los fines de semana."],
166
  ["Se ordena pagar una pensi贸n a la madre para los gastos del ni帽o."],
167
  ["El padre debe pagar la mitad de los gastos del colegio."],
 
168
  ],
169
+ inputs=input_text
170
  )
171
 
172
  if __name__ == "__main__":
173
+ demo.launch()