eberhenriquez94 commited on
Commit
f34bff4
verified
1 Parent(s): 86019ac
Files changed (1) hide show
  1. app.py +71 -66
app.py CHANGED
@@ -3,14 +3,14 @@ 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
@@ -21,11 +21,10 @@ 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
 
@@ -51,68 +50,82 @@ La salida ser谩 el borrador de la resoluci贸n judicial revisado y mejorado, pres
51
  # Notas
52
 
53
  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.
54
- """.strip()
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(
62
- model="meta/llama-3.1-405b-instruct",
63
- messages=messages,
64
- temperature=0.5,
65
- top_p=0.7,
66
- max_tokens=4000
67
- )
68
- response = completion["choices"][0]["message"]["content"]
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(
76
- model="gemini-exp-1114",
77
- messages=messages,
78
- temperature=0.5,
79
- top_p=0.7,
80
- max_tokens=4000
 
 
 
 
81
  )
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."],
@@ -120,16 +133,8 @@ with gr.Blocks() as demo:
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()
 
3
  import gradio as gr
4
  from openai import OpenAI
5
 
6
+ # Configuraci贸n de claves de API (隆IMPORTANTE! - Reemplaza con tus claves)
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
14
  nvidia_client = OpenAI(
15
  base_url="https://integrate.api.nvidia.com/v1",
16
  api_key=NVIDIA_API_KEY
 
21
  api_key=GEMINI_API_KEY
22
  )
23
 
24
+ # Mensaje del sistema (sin cambios)
25
  system_message = {
26
+ """
27
+ # ... 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
 
 
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
 
56
+ # Funci贸n para interactuar con la API (generalizada)
57
+ async def call_api(client, model_name, message, history):
58
+ try:
59
+ user_message = {"role": "user", "content": message}
60
+ messages = [system_message] + history + [user_message]
61
+ completion = client.chat.completions.create(
62
+ model=model_name,
63
+ messages=messages,
64
+ temperature=0.5,
65
+ top_p=0.7,
66
+ max_tokens=4000
67
+ )
68
+ return completion.choices[0].message.content # Accediendo a la respuesta con el nuevo formato OpenAI
69
+ except Exception as e:
70
+ return f"Error API: {e}"
71
+
72
  async def nvidia_response(message, history):
73
+ return await call_api(nvidia_client, "meta/llama-3.1-405b-instruct", message, history)
 
 
 
 
 
 
 
 
 
 
74
 
 
75
  async def gemini_response(message, history):
76
+ return await call_api(gemini_client, "gemini-exp-1114", message, history)
77
+
78
+
79
+
80
+ # Funci贸n principal (con manejo de errores y spinner)
81
+ async def respond_both_models(message, history, loading_state):
82
+ loading_state = True
83
+ yield [history + [("Procesando...", None)], loading_state]
84
+
85
+ nvidia_result, gemini_result = await asyncio.gather(
86
+ nvidia_response(message, history),
87
+ gemini_response(message, history)
88
  )
89
+
90
+ loading_state = False
91
+ responses = []
92
+
93
+ if "Error API:" in nvidia_result:
94
+ responses.append((message, f"**Error NVIDIA:**\n{nvidia_result}"))
95
+ else:
96
+ responses.append((message, f"**NVIDIA Response:**\n{nvidia_result}"))
97
+
98
+ if "Error API:" in gemini_result:
99
+ responses.append((message, f"**Error Gemini:**\n{gemini_result}"))
100
+ else:
101
+ responses.append((message, f"**Gemini Response:**\n{gemini_result}"))
102
+
103
+ yield [history + responses, loading_state]
104
+
105
+ # Interfaz de usuario (con ejemplos y tema)
106
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
107
  gr.Markdown("# Ministro IA de la Corte Suprema - Derecho de Familia")
 
108
  with gr.Row():
109
  gr.Markdown("### Comparaci贸n de Modelos: NVIDIA vs Gemini")
110
+
111
  chatbot = gr.Chatbot(label="Respuestas de los Modelos")
112
+ message_input = gr.Textbox(
113
+ label="Borrador de la Resoluci贸n",
114
+ placeholder="Ingrese el borrador aqu铆...",
115
+ lines=6,
116
+ )
117
+ submit_button = gr.Button("Enviar")
118
+ clear_button = gr.Button("Limpiar")
119
+
120
+ loading_state = gr.State(False)
121
+
122
+ submit_button.click(
123
+ respond_both_models,
124
+ inputs=[message_input, chatbot, loading_state],
125
+ outputs=[chatbot, loading_state]
126
+ )
127
+ clear_button.click(lambda: ["", False], inputs=None, outputs=[message_input, chatbot, loading_state])
128
 
 
129
  gr.Examples(
130
  examples=[
131
  ["El juez decide que el padre puede ver a su hijo los fines de semana."],
 
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()