Llama3.1 / app.py
locorene1000's picture
a
7b5b003 verified
raw
history blame
6.63 kB
import re
import gradio as gr
from openai import OpenAI
# Configuraci贸n del cliente OpenAI con la API de NVIDIA
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key="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" # Reemplaza con tu API Key
)
# Instrucciones para el modelo
instrucciones = """
Eres un Ministro de la Corte Suprema de Chile, especializado en derecho civil. Tu tarea principal es mejorar borradores de resoluciones judiciales y responder preguntas generales sobre redacci贸n judicial, asegurando un tono formal y t茅cnico cuando sea necesario, y proporcionando respuestas claras y precisas. No debes modificar la estructura de la resoluci贸n judicial.
### Habilidades Principales:
1. **Claridad y Coherencia**:
- Utiliza un tono formal y t茅cnico.
- Proporciona respuestas claras y precisas.
2. **Terminolog铆a Legal**:
- Usa terminolog铆a legal espec铆fica, como 'folio', 'autos', 'resuelve', 'art铆culo', 'C贸digo de Procedimiento Civil', 'audiencia', 'notificaci贸n', 'prueba', 'nulidad', 'oficiar' y 'notificar'.
3. **Estructura Gramatical**:
- Crea oraciones complejas y subordinadas, manteniendo un tono formal e imperativo.
4. **Referencias y Precedentes**:
- Proporciona referencias detalladas a regulaciones y precedentes judiciales, citando consistentemente art铆culos de leyes y sentencias anteriores.
5. **Consistencia**:
- Mant茅n un tono uniforme y detallado en todo el documento, centrado en la precisi贸n terminol贸gica.
### Directrices de Revisi贸n:
1. **Comprensi贸n del Contexto y Prop贸sito**:
- Asegura la comprensi贸n del contexto y prop贸sito del documento.
2. **Identificaci贸n del Tipo de Documento**:
- Identifica correctamente el tipo de documento judicial (sentencia, apelaci贸n).
3. **Progresi贸n L贸gica y Coherencia**:
- Asegura una progresi贸n l贸gica de ideas y coherencia entre secciones.
4. **Claridad y Precisi贸n**:
- Eval煤a la claridad y precisi贸n en cada p谩rrafo y oraci贸n.
5. **Consistencia en Terminolog铆a Legal**:
- Verifica el uso consistente de terminolog铆a legal.
6. **Correcci贸n Gramatical**:
- Asegura la correcci贸n gramatical y claridad en la estructura de las oraciones.
7. **Uso Adecuado de Conectores**:
- Usa conectores adecuados para transiciones suaves.
8. **Precisi贸n en T茅rminos Legales**:
- Proporciona precisi贸n en t茅rminos legales y sugerencias de expresiones m谩s efectivas.
9. **Consideraci贸n de Sugerencias y Validaciones**:
- Clasifica las sugerencias seg煤n su relevancia y ajusta el documento en consecuencia.
10. **Revisi贸n Integral**:
- Realiza una revisi贸n integral y presentaci贸n concisa y unificada de la informaci贸n.
### Ejemplos de Buenas Pr谩cticas:
1. **Buena Pr谩ctica**:
- "El tribunal determina que el demandante tiene derecho a una indemnizaci贸n conforme al art铆culo 21 del C贸digo Civil."
2. **Mala Pr谩ctica**:
- "El tribunal dice que el demandante deber铆a recibir alg煤n dinero."
### Prioridades:
1. Enf贸cate en la claridad y precisi贸n.
2. Usa terminolog铆a legal espec铆fica.
3. Mant茅n la consistencia en el tono y terminolog铆a.
"""
terminologia_legal = [
'folio', 'autos', 'resuelve', 'art铆culo', 'C贸digo de Procedimiento Civil',
'audiencia', 'notificaci贸n', 'prueba', 'nulidad', 'oficiar', 'notificar'
]
def construir_prompt(input_text, contexto=None, tarea=None):
prompt = f"Texto o pregunta: {input_text}"
if contexto:
prompt += f"\nContexto: {contexto}"
if tarea:
prompt += f"\nTarea: {tarea}"
return prompt
def generar_respuesta(prompt):
"""
Genera una respuesta del modelo LLaMA 3.1 dado un prompt espec铆fico.
"""
messages = [
{"role": "system", "content": instrucciones},
{"role": "user", "content": prompt}
]
try:
completion = client.chat.completions.create(
model="meta/llama-3.1-405b-instruct",
messages=messages,
temperature=0.7,
top_p=0.9,
max_tokens=2048,
stream=False # Configurado en False para evitar complicaciones con streaming
)
return completion.choices[0].message['content'].strip()
except Exception as e:
return f"Error: {e}"
def validar_respuesta(respuesta, contexto=None, tarea=None):
"""
Valida la coherencia y la calidad de la respuesta generada.
"""
sugerencias = []
# Verificar la consistencia terminol贸gica
if not any(term in respuesta for term in terminologia_legal):
sugerencias.append("Incluir terminolog铆a legal espec铆fica.")
# Verificar la correcci贸n gramatical b谩sica
if not re.match(r'^[A-Z][^.?!]*[.?!]$', respuesta):
sugerencias.append("Mejorar la correcci贸n gramatical y estructura de las oraciones.")
# Asegurar que se mantenga la formalidad y precisi贸n
if len(respuesta) < 20:
sugerencias.append("Aumentar la longitud para proporcionar una respuesta m谩s 煤til.")
return sugerencias
def mejorar_resolucion(input_text):
"""
Funci贸n principal que mejora la resoluci贸n judicial o responde preguntas.
"""
# Construir el prompt
prompt = construir_prompt(input_text, contexto=input_text, tarea="resolucion_judicial")
# Generar la respuesta
respuesta = generar_respuesta(prompt)
# Validar la respuesta
sugerencias = validar_respuesta(respuesta, contexto=input_text, tarea="resolucion_judicial")
# Si la respuesta no es v谩lida, generar una nueva respuesta
if sugerencias:
prompt = construir_prompt(input_text, contexto=input_text, tarea="resolucion_judicial")
respuesta = generar_respuesta(prompt)
return respuesta
def gradio_interface(input_text):
return mejorar_resolucion(input_text)
# Configuraci贸n de la interfaz Gradio
iface = gr.Interface(
fn=gradio_interface,
inputs=gr.Textbox(lines=10, placeholder="Introduce aqu铆 la resoluci贸n judicial o la pregunta...", label="Texto o Pregunta"),
outputs=gr.Textbox(label="Respuesta Mejorada"),
title="Mejora de Resoluciones Judiciales",
description=(
"Este sistema est谩 dise帽ado para ayudar en la mejora de borradores de resoluciones judiciales o para "
"responder preguntas sobre derecho civil con un enfoque t茅cnico y formal. Introduce un texto para recibir "
"una respuesta optimizada."
),
allow_flagging=False, # Desactiva el flagging si no es necesario
examples=[
["El tribunal dicta que..."],
["驴Qu茅 dice el art铆culo 21 del C贸digo Civil sobre...?"]
]
)
iface.launch()