# 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()