eberhenriquez94 commited on
Commit
a97c80d
verified
1 Parent(s): ae056ed
Files changed (1) hide show
  1. app.py +46 -17
app.py CHANGED
@@ -3,7 +3,7 @@ import asyncio
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
 
@@ -24,13 +24,38 @@ gemini_client = OpenAI(
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. etc...""" # Tu mensaje de sistema completo aqu铆
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
29
 
30
- # Funci贸n para interactuar con la API (generalizada)
31
  async def call_api(client, model_name, message, history):
32
  try:
33
- messages = [system_message] + history + [{"content": message}]
34
  completion = client.chat.completions.create(
35
  model=model_name,
36
  messages=messages,
@@ -43,15 +68,15 @@ async def call_api(client, model_name, message, history):
43
  return f"Error API: {e}"
44
 
45
  async def nvidia_response(message, history):
46
- return await call_api(nvidia_client, "meta/llama-3.1-405b-instruct", message, history) # Reemplaza si usas otro modelo
47
 
48
  async def gemini_response(message, history):
49
- return await call_api(gemini_client, "gemini", message, history) # Reemplaza si usas otro modelo
50
 
51
- # Funci贸n principal (con manejo de errores y spinner)
52
  async def respond_both_models(message, history, loading_state):
53
  loading_state = True
54
- yield [history + [("Procesando...", None)], loading_state]
55
 
56
  nvidia_result, gemini_result = await asyncio.gather(
57
  nvidia_response(message, history),
@@ -59,21 +84,20 @@ async def respond_both_models(message, history, loading_state):
59
  )
60
 
61
  loading_state = False
62
- responses = []
63
 
64
  if "Error API:" in nvidia_result:
65
- responses.append((message, f"**Error NVIDIA:**\n{nvidia_result}"))
66
  else:
67
- responses.append((message, f"**NVIDIA Response:**\n{nvidia_result}"))
68
 
69
  if "Error API:" in gemini_result:
70
- responses.append((message, f"**Error Gemini:**\n{gemini_result}"))
71
  else:
72
- responses.append((message, f"**Gemini Response:**\n{gemini_result}"))
73
 
74
- yield [history + responses, loading_state]
75
 
76
- # Interfaz de usuario (con ejemplos y tema)
77
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
78
  gr.Markdown("# Ministro IA de la Corte Suprema - Derecho de Familia")
79
  with gr.Row():
@@ -89,13 +113,18 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
89
  clear_button = gr.Button("Limpiar")
90
 
91
  loading_state = gr.State(False)
 
92
 
93
  submit_button.click(
94
  respond_both_models,
95
- inputs=[message_input, chatbot, loading_state],
 
 
 
 
 
96
  outputs=[chatbot, loading_state]
97
  )
98
- clear_button.click(lambda: ["", False], inputs=None, outputs=[message_input, chatbot, loading_state])
99
 
100
  gr.Examples(
101
  examples=[
 
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
 
 
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
+
31
+ Principios Generales para la Redacci贸n Jur铆dica:
32
+ * 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.
33
+ * 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.
34
+ * 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.
35
+ * 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'.
36
+
37
+ # Pasos
38
+
39
+ 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.
40
+ 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.
41
+ 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.
42
+ 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.
43
+ 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.
44
+ 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.
45
+
46
+ # Formato de Salida
47
+
48
+ 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.
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,
 
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),
 
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():
 
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(
130
  examples=[