asesor_legal / app.py
vcasas's picture
Upload app.py
fab22d4 verified
# 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()