eberhenriquez94 commited on
Commit
86019ac
1 Parent(s): 1ff19ec
Files changed (1) hide show
  1. app.py +49 -14
app.py CHANGED
@@ -1,18 +1,19 @@
1
  import os
 
2
  import gradio as gr
3
  from openai import OpenAI
4
 
5
  # Configuración de claves de API
6
- OPENAI_API_KEY = os.getenv("API_KEY")
7
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
8
 
9
- if not OPENAI_API_KEY or not GEMINI_API_KEY:
10
- raise ValueError("Las claves de API no están configuradas. Asegúrate de establecer 'API_KEY' y 'GEMINI_API_KEY'.")
11
 
12
  # Configuración de clientes OpenAI para NVIDIA y Gemini
13
  nvidia_client = OpenAI(
14
  base_url="https://integrate.api.nvidia.com/v1",
15
- api_key=OPENAI_API_KEY
16
  )
17
 
18
  gemini_client = OpenAI(
@@ -20,11 +21,11 @@ gemini_client = OpenAI(
20
  api_key=GEMINI_API_KEY
21
  )
22
 
23
- # Mensaje del sistema para ambos modelos
24
  system_message = {
25
  "role": "system",
26
  "content": """
27
- 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
 
@@ -54,7 +55,7 @@ Es crucial que el asistente de IA se adhiera estrictamente a las instrucciones,
54
  }
55
 
56
  # Función para interactuar con el modelo NVIDIA
57
- def nvidia_response(message, history):
58
  user_message = {"role": "user", "content": message}
59
  messages = [system_message] + history + [user_message]
60
  completion = nvidia_client.chat.completions.create(
@@ -68,7 +69,7 @@ def nvidia_response(message, history):
68
  return response
69
 
70
  # Función para interactuar con el modelo Gemini
71
- def gemini_response(message, history):
72
  user_message = {"role": "user", "content": message}
73
  messages = [system_message] + history + [user_message]
74
  completion = gemini_client.chat.completions.create(
@@ -81,20 +82,54 @@ def gemini_response(message, history):
81
  response = completion["choices"][0]["message"]["content"]
82
  return response
83
 
84
- # Interfaz de usuario con Gradio
 
 
 
 
 
 
 
 
 
 
85
  with gr.Blocks() as demo:
86
  gr.Markdown("# Ministro IA de la Corte Suprema - Derecho de Familia")
87
- chatbot = gr.ChatInterface(
88
- fn=nvidia_response, # Puedes cambiar a gemini_response según el modelo que desees usar
89
- chatbot=gr.Chatbot(label="Resolución Mejorada"),
90
- textbox=gr.Textbox(label="Borrador de la Resolución", placeholder="Ingrese el borrador aquí..."),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  examples=[
92
  ["El juez decide que el padre puede ver a su hijo los fines de semana."],
93
  ["Se ordena pagar una pensión a la madre para los gastos del niño."],
94
  ["El padre debe pagar la mitad de los gastos del colegio."],
95
  ["Considero que lo mejor para el niño es..."]
96
- ]
 
97
  )
 
 
 
 
 
 
 
 
98
 
99
  if __name__ == "__main__":
100
  demo.launch()
 
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")
8
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
9
 
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 para NVIDIA y Gemini
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(
 
21
  api_key=GEMINI_API_KEY
22
  )
23
 
24
+ # Mensaje de sistema para ambos modelos
25
  system_message = {
26
  "role": "system",
27
  "content": """
28
+ 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.
29
 
30
  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.
31
 
 
55
  }
56
 
57
  # Función para interactuar con el modelo NVIDIA
58
+ async def nvidia_response(message, history):
59
  user_message = {"role": "user", "content": message}
60
  messages = [system_message] + history + [user_message]
61
  completion = nvidia_client.chat.completions.create(
 
69
  return response
70
 
71
  # Función para interactuar con el modelo Gemini
72
+ async def gemini_response(message, history):
73
  user_message = {"role": "user", "content": message}
74
  messages = [system_message] + history + [user_message]
75
  completion = gemini_client.chat.completions.create(
 
82
  response = completion["choices"][0]["message"]["content"]
83
  return response
84
 
85
+ # Función principal para que ambos modelos respondan a la vez
86
+ async def respond_both_models(message, history):
87
+ nvidia_task = asyncio.create_task(nvidia_response(message, history))
88
+ gemini_task = asyncio.create_task(gemini_response(message, history))
89
+ nvidia_result, gemini_result = await asyncio.gather(nvidia_task, gemini_task)
90
+ return {
91
+ "NVIDIA Response": nvidia_result,
92
+ "Gemini Response": gemini_result
93
+ }
94
+
95
+ # Interfaz de usuario mejorada
96
  with gr.Blocks() as demo:
97
  gr.Markdown("# Ministro IA de la Corte Suprema - Derecho de Familia")
98
+
99
+ with gr.Row():
100
+ gr.Markdown("### Comparación de Modelos: NVIDIA vs Gemini")
101
+
102
+ chatbot = gr.Chatbot(label="Respuestas de los Modelos")
103
+
104
+ with gr.Row():
105
+ message_input = gr.Textbox(
106
+ label="Borrador de la Resolución",
107
+ placeholder="Ingrese el borrador aquí...",
108
+ lines=6,
109
+ )
110
+
111
+ with gr.Row():
112
+ submit_button = gr.Button("Enviar")
113
+ clear_button = gr.Button("Limpiar")
114
+
115
+ # Ejemplos
116
+ gr.Examples(
117
  examples=[
118
  ["El juez decide que el padre puede ver a su hijo los fines de semana."],
119
  ["Se ordena pagar una pensión a la madre para los gastos del niño."],
120
  ["El padre debe pagar la mitad de los gastos del colegio."],
121
  ["Considero que lo mejor para el niño es..."]
122
+ ],
123
+ inputs=[message_input]
124
  )
125
+
126
+ # Lógica del botón
127
+ submit_button.click(
128
+ respond_both_models,
129
+ inputs=[message_input, chatbot],
130
+ outputs=chatbot
131
+ )
132
+ clear_button.click(lambda: "", inputs=None, outputs=[message_input, chatbot])
133
 
134
  if __name__ == "__main__":
135
  demo.launch()