eberhenriquez94 commited on
Commit
7961c85
1 Parent(s): f3e3ce4
Files changed (1) hide show
  1. app.py +85 -58
app.py CHANGED
@@ -1,27 +1,27 @@
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")
9
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
10
 
11
- # Configuración del modelo de Google
12
- google_model = genai.GenerativeModel(
13
- "gemini-exp-1114",
14
- system_instruction="""
15
  Actúa como un Ministro de la Corte Suprema de Chile, específicamente de la Primera Sala especializada en Derecho de Familia, para revisar y perfeccionar un borrador de resolución judicial. El objetivo es mejorar la gramática, redacción y estilo jurídico, manteniendo la estructura y contenido original.
16
-
17
  Como Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia, y con una vasta y reconocida trayectoria en la judicatura, tu misión es revisar y perfeccionar un borrador de resolución judicial, aplicando un tono formal, autoritario e impersonal, empleando el modo imperativo en expresiones de orden y mandato judicial. Proyectarás neutralidad y profesionalismo en todo el texto, evitando cualquier tono subjetivo o interpretativo. Usarás terminología jurídica específica del Derecho de Familia, asegurando que cada enunciado sea claro y preciso. Emplearás una redacción directa, evitando redundancias y expresiones superfluas. Utilizarás expresiones tradicionales y formales del ámbito judicial chileno.
18
-
19
  El objetivo es elevar el texto a un estándar de excelencia en redacción jurídica, asegurando la máxima claridad, precisión, concisión y formalidad. **No debes modificar la estructura del borrador, tampoco agregar fundamentación o hechos. La mejora solo es gramatical, redaccional y estitica lenguistica juridica.**
20
  **Resolución Final Consolidada:**
21
  * Presentar el documento final perfeccionado, que incorpora las mejoras propias.
22
  # Ejemplos
23
  "Vistos y considerando lo expuesto, y de conformidad con lo dispuesto en los artículos 224 y siguientes del Código Civil, se resuelve: Que se acoge la demanda interpuesta. Se condena al demandado al pago de una pensión alimenticia..." (En un caso real, esta sección continuaría con más detalles y sería más larga)
24
- """,
 
 
 
 
25
  generation_config={
26
  "temperature": 0.5,
27
  "top_p": 0.9,
@@ -36,59 +36,77 @@ nvidia_client = OpenAI(
36
  base_url="https://integrate.api.nvidia.com/v1",
37
  api_key=NVIDIA_API_KEY
38
  )
39
- nvidia_system_message = {
40
- "role": "system",
41
- "content": """
42
- Actúa como un Ministro de la Corte Suprema de Chile, específicamente de la Primera Sala especializada en Derecho de Familia, para revisar y perfeccionar un borrador de resolución judicial. El objetivo es mejorar la gramática, redacción y estilo jurídico, manteniendo la estructura y contenido original.
43
-
44
- Como Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia, y con una vasta y reconocida trayectoria en la judicatura, tu misión es revisar y perfeccionar un borrador de resolución judicial, aplicando un tono formal, autoritario e impersonal, empleando el modo imperativo en expresiones de orden y mandato judicial. Proyectarás neutralidad y profesionalismo en todo el texto, evitando cualquier tono subjetivo o interpretativo. Usarás terminología jurídica específica del Derecho de Familia, asegurando que cada enunciado sea claro y preciso. Emplearás una redacción directa, evitando redundancias y expresiones superfluas. Utilizarás expresiones tradicionales y formales del ámbito judicial chileno.
45
-
46
- El objetivo es elevar el texto a un estándar de excelencia en redacción jurídica, asegurando la máxima claridad, precisión, concisión y formalidad. **No debes modificar la estructura del borrador, tampoco agregar fundamentación o hechos. La mejora solo es gramatical, redaccional y estitica lenguistica juridica.**
47
- **Resolución Final Consolidada:**
48
- * Presentar el documento final perfeccionado, que incorpora las mejoras propias.
49
- # Ejemplos
50
- "Vistos y considerando lo expuesto, y de conformidad con lo dispuesto en los artículos 224 y siguientes del Código Civil, se resuelve: Que se acoge la demanda interpuesta. Se condena al demandado al pago de una pensión alimenticia..." (En un caso real, esta sección continuaría con más detalles y sería más larga)
51
- """
52
- }
53
 
54
- # Función para llamar al modelo de Google
55
- async def google_response(borrador):
56
  try:
57
- response = await asyncio.to_thread(google_model.generate_content, borrador)
58
- return response.text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  except Exception as e:
60
- return f"Error en Google Generative AI: {str(e)}"
61
 
62
- # Función para llamar al modelo de NVIDIA
63
- async def nvidia_response(borrador):
64
- try:
65
- messages = [nvidia_system_message, {"role": "user", "content": borrador}]
66
- completion = await asyncio.to_thread(
67
- nvidia_client.chat.completions.create,
68
- model="meta/llama-3.1-405b-instruct",
69
- messages=messages,
70
- temperature=0.5,
71
- top_p=0.7,
72
- max_tokens=4000
73
  )
74
- return completion.choices[0].message.content
75
- except Exception as e:
76
- return f"Error en NVIDIA API: {str(e)}"
77
-
78
- # Función predict para devolver respuestas separadas
79
- async def predict(borrador):
80
- google_task = asyncio.create_task(google_response(borrador))
81
- nvidia_task = asyncio.create_task(nvidia_response(borrador))
82
-
83
- google_result = await google_task
84
- nvidia_result = await nvidia_task
85
-
86
- return google_result, nvidia_result
87
 
88
  # Configuración de la interfaz
89
  with gr.Blocks() as demo:
90
  gr.Markdown("# Comparador de Modelos Jurídicos: Google Gemini vs NVIDIA")
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  input_text = gr.Textbox(
93
  label="Borrador de Resolución",
94
  placeholder="Introduce el texto que deseas perfeccionar...",
@@ -96,16 +114,25 @@ with gr.Blocks() as demo:
96
  )
97
  submit_button = gr.Button("Enviar")
98
 
99
- gr.Markdown("### Resultado Google Gemini")
100
- google_output = gr.Textbox(label="Texto Revisado por Google", lines=8, interactive=False)
101
-
102
- gr.Markdown("### Resultado NVIDIA")
103
- nvidia_output = gr.Textbox(label="Texto Revisado por NVIDIA", lines=8, interactive=False)
104
 
105
  submit_button.click(
 
 
 
 
 
106
  predict,
107
- inputs=[input_text],
108
- outputs=[google_output, nvidia_output]
 
 
 
 
 
109
  )
110
 
111
  if __name__ == "__main__":
 
1
  import os
2
  import asyncio
3
  import google.generativeai as genai
4
+ from openai import OpenAI, APIError as OpenAIError
5
  import gradio as gr
6
 
7
  # Configuración de claves de API
8
  NVIDIA_API_KEY = os.getenv("NVIDIA_API_KEY")
9
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
10
 
11
+ # Instrucciones del sistema por defecto (pueden ser modificadas por el usuario)
12
+ default_system_instruction = """
 
 
13
  Actúa como un Ministro de la Corte Suprema de Chile, específicamente de la Primera Sala especializada en Derecho de Familia, para revisar y perfeccionar un borrador de resolución judicial. El objetivo es mejorar la gramática, redacción y estilo jurídico, manteniendo la estructura y contenido original.
 
14
  Como Ministro de la Corte Suprema de Chile, especializado en Derecho de Familia, y con una vasta y reconocida trayectoria en la judicatura, tu misión es revisar y perfeccionar un borrador de resolución judicial, aplicando un tono formal, autoritario e impersonal, empleando el modo imperativo en expresiones de orden y mandato judicial. Proyectarás neutralidad y profesionalismo en todo el texto, evitando cualquier tono subjetivo o interpretativo. Usarás terminología jurídica específica del Derecho de Familia, asegurando que cada enunciado sea claro y preciso. Emplearás una redacción directa, evitando redundancias y expresiones superfluas. Utilizarás expresiones tradicionales y formales del ámbito judicial chileno.
 
15
  El objetivo es elevar el texto a un estándar de excelencia en redacción jurídica, asegurando la máxima claridad, precisión, concisión y formalidad. **No debes modificar la estructura del borrador, tampoco agregar fundamentación o hechos. La mejora solo es gramatical, redaccional y estitica lenguistica juridica.**
16
  **Resolución Final Consolidada:**
17
  * Presentar el documento final perfeccionado, que incorpora las mejoras propias.
18
  # Ejemplos
19
  "Vistos y considerando lo expuesto, y de conformidad con lo dispuesto en los artículos 224 y siguientes del Código Civil, se resuelve: Que se acoge la demanda interpuesta. Se condena al demandado al pago de una pensión alimenticia..." (En un caso real, esta sección continuaría con más detalles y sería más larga)
20
+ """
21
+
22
+ # Configuración del modelo de Google
23
+ google_model = genai.GenerativeModel(
24
+ "gemini-exp-1114",
25
  generation_config={
26
  "temperature": 0.5,
27
  "top_p": 0.9,
 
36
  base_url="https://integrate.api.nvidia.com/v1",
37
  api_key=NVIDIA_API_KEY
38
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
+ # Función genérica para generar contenido
41
+ async def generate_content(client, model_name, system_instruction, borrador, is_nvidia=False):
42
  try:
43
+ if is_nvidia:
44
+ messages = [
45
+ {"role": "system", "content": system_instruction},
46
+ {"role": "user", "content": borrador}
47
+ ]
48
+ completion = await asyncio.to_thread(
49
+ client.chat.completions.create,
50
+ model=model_name,
51
+ messages=messages,
52
+ temperature=0.5,
53
+ top_p=0.7,
54
+ max_tokens=4000
55
+ )
56
+ return completion.choices[0].message.content
57
+ else: # Suponemos que es Google Gemini
58
+ client.system_instruction = system_instruction
59
+ response = await asyncio.to_thread(client.generate_content, borrador)
60
+ return response.text
61
+ except genai.types.GenerativeContentError as e:
62
+ return f"Error en Google Gemini (Contenido): {str(e)}"
63
+ except OpenAIError as e:
64
+ return f"Error en NVIDIA API: {str(e.message)}"
65
  except Exception as e:
66
+ return f"Error en {model_name}: {str(e)}"
67
 
68
+ # Función predict para devolver una respuesta unificada
69
+ async def predict(borrador, model_choice, system_instruction_google, system_instruction_nvidia):
70
+ if model_choice == "Ambos":
71
+ google_task = asyncio.create_task(
72
+ generate_content(google_model, "gemini-exp-1114", system_instruction_google, borrador)
 
 
 
 
 
 
73
  )
74
+ nvidia_task = asyncio.create_task(
75
+ generate_content(nvidia_client, "meta/llama-3.1-405b-instruct", system_instruction_nvidia, borrador, is_nvidia=True)
76
+ )
77
+ google_result, nvidia_result = await asyncio.gather(google_task, nvidia_task)
78
+ return f"**Google Gemini:**\n{google_result}\n\n---\n\n**NVIDIA:**\n{nvidia_result}"
79
+ elif model_choice == "Google Gemini":
80
+ google_result = await generate_content(google_model, "gemini-exp-1114", system_instruction_google, borrador)
81
+ return f"**Google Gemini:**\n{google_result}"
82
+ elif model_choice == "NVIDIA":
83
+ nvidia_result = await generate_content(nvidia_client, "meta/llama-3.1-405b-instruct", system_instruction_nvidia, borrador, is_nvidia=True)
84
+ return f"**NVIDIA:**\n{nvidia_result}"
 
 
85
 
86
  # Configuración de la interfaz
87
  with gr.Blocks() as demo:
88
  gr.Markdown("# Comparador de Modelos Jurídicos: Google Gemini vs NVIDIA")
89
 
90
+ model_choice = gr.Radio(
91
+ label="Seleccionar Modelo",
92
+ choices=["Ambos", "Google Gemini", "NVIDIA"],
93
+ value="Ambos"
94
+ )
95
+
96
+ with gr.Accordion("Instrucciones del Sistema (Opcional)", open=False):
97
+ system_instruction_text_google = gr.Textbox(
98
+ label="Instrucción del Sistema para Google Gemini",
99
+ placeholder="Introduce la instrucción del sistema para Google Gemini...",
100
+ lines=6,
101
+ value=default_system_instruction
102
+ )
103
+ system_instruction_text_nvidia = gr.Textbox(
104
+ label="Instrucción del Sistema para NVIDIA",
105
+ placeholder="Introduce la instrucción del sistema para NVIDIA...",
106
+ lines=6,
107
+ value=default_system_instruction
108
+ )
109
+
110
  input_text = gr.Textbox(
111
  label="Borrador de Resolución",
112
  placeholder="Introduce el texto que deseas perfeccionar...",
 
114
  )
115
  submit_button = gr.Button("Enviar")
116
 
117
+ with gr.Column():
118
+ processing_indicator = gr.Label(value="", visible=False)
119
+ gr.Markdown("### Resultado Consolidado")
120
+ consolidated_output = gr.Textbox(label="Texto Revisado", lines=16, interactive=False) # Un solo campo de salida
 
121
 
122
  submit_button.click(
123
+ fn=lambda: [True, False],
124
+ inputs=[],
125
+ outputs=[processing_indicator, consolidated_output],
126
+ queue=False
127
+ ).then(
128
  predict,
129
+ inputs=[input_text, model_choice, system_instruction_text_google, system_instruction_text_nvidia],
130
+ outputs=[consolidated_output] # La salida va al campo unificado
131
+ ).then(
132
+ fn=lambda: [False, True],
133
+ inputs=[],
134
+ outputs=[processing_indicator, consolidated_output],
135
+ queue=False
136
  )
137
 
138
  if __name__ == "__main__":