File size: 3,446 Bytes
fab22d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# app.py
import os
import gradio as gr
from openai import OpenAI
from dotenv import load_dotenv

# Cargar variables de entorno
load_dotenv()

# Configurar cliente OpenAI
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)

# Sistema de prompt mejorado
SYSTEM_PROMPT = """Eres un abogado penalista español experto en el Código Penal español. 
Tu objetivo es responder con precisión, citando la legislación vigente y proporcionando contexto legal actualizado.
### **Instrucciones de Respuesta:**
1. **Cita legal precisa:** 
   - Menciona siempre los artículos específicos del Código Penal español al inicio.
   - Si el delito ha sido modificado en reformas recientes, indica en qué consistió la reforma.
2. **Estructura clara:**  
   - Define el **tipo básico del delito**.
   - Explica los **subtipos agravados y atenuados** si existen.
   - Cita los artículos correspondientes.
3. **Jurisprudencia relevante:**  
   - Menciona sentencias recientes del Tribunal Supremo cuando sea posible.
4. **Advertencia legal:**  
   - Aclara que es información general y no constituye asesoramiento legal."""

# Historial global de chat
chat_history = []

def consulta_penalista(mensaje, tipo_consulta):
    """Procesa una consulta jurídica y devuelve la respuesta del modelo."""
    global chat_history
    chat_history.append({"role": "user", "content": f"[{tipo_consulta}] {mensaje}"})
    
    try:
        respuesta = client.chat.completions.create(
            model="gpt-4-turbo",
            messages=[{"role": "system", "content": SYSTEM_PROMPT}] + chat_history,
            temperature=0.3
        )
        
        respuesta_texto = respuesta.choices[0].message.content
        chat_history.append({"role": "assistant", "content": respuesta_texto})
        
        historial_formateado = "\n\n".join([
            f"{'Usuario' if msg['role'] == 'user' else 'Asistente'}: {msg['content']}"
            for msg in chat_history
        ])
        
        return respuesta_texto, historial_formateado
    
    except Exception as e:
        return f"Error al procesar la solicitud: {str(e)}", "\n".join(str(m) for m in chat_history)

def limpiar_historial():
    """Limpia el historial de conversación."""
    global chat_history
    chat_history = []
    return "", "Historial limpiado."

# Interfaz de usuario con Gradio
interfaz = gr.Blocks()

with interfaz:
    gr.Markdown("# ⚖️ Asistente Jurídico Penal")
    gr.Markdown("Realiza consultas sobre derecho penal y recibe respuestas fundamentadas.")
    
    tipo_consulta = gr.Radio(
        choices=["Asesoría General", "Jurisprudencia", "Redacción de Documentos"],
        label="Tipo de Consulta",
        value="Asesoría General"
    )
    
    entrada_texto = gr.Textbox(
        label="Pregunta Jurídica",
        placeholder="Escribe tu consulta aquí..."
    )
    
    with gr.Row():
        boton_enviar = gr.Button("Consultar")
        boton_limpiar = gr.Button("Limpiar Historial")
    
    salida_texto = gr.Textbox(label="Respuesta")
    historial_texto = gr.Textbox(
        label="Historial de Conversación",
        interactive=False,
        lines=10
    )
    
    boton_enviar.click(
        consulta_penalista,
        inputs=[entrada_texto, tipo_consulta],
        outputs=[salida_texto, historial_texto]
    )
    
    boton_limpiar.click(
        limpiar_historial,
        outputs=[salida_texto, historial_texto]
    )

interfaz.launch()