# 🤖 Proyecto IA - Asistente Personal "Asistente Pablo" --- ## 🚀 Descripción Este proyecto implementa un **asistente personal basado en IA** totalmente offline, integrado en una aplicación Spring Boot. Utiliza un modelo de lenguaje local (`llama.cpp` / `llama-java`) para ofrecer respuestas naturales, útiles y personalizadas, con un diseño centrado en la arquitectura limpia y extensible. El asistente está pensado para entender tus gustos, estilo y necesidades, respondiendo siempre en español con un tono cercano y amigable. --- ## 🧩 Características principales - 🧠 Modelo LLM local (`openchat-3.5-0106.Q4_K_M.gguf`) ejecutado en CPU o GPU (Metal en Macs M1/M2). - 🏗️ Arquitectura limpia basada en capas: dominio, aplicación, infraestructura y presentación. - 📜 Historial de conversación gestionado en sesión HTTP (con opción a persistencia futura). - 📝 Construcción dinámica de prompts a partir de definiciones JSON estructuradas y multilingües. - 🌐 API REST para interacción con el asistente. - 💻 Frontend con Thymeleaf para una interfaz web simple y eficaz. - 📊 Logging avanzado con Log4j2, con logs a consola y fichero. - 🔄 Extensible para múltiples perfiles de prompt y configuración personalizada. --- ## ⚙️ Requisitos técnicos - Java 21+ - Maven 4+ - Spring Boot 3+ - Dependencias principales: - `llama-java` para LLM local - Jackson para JSON - Log4j2 para logging - Modelo `openchat-3.5-0106.Q4_K_M.gguf` en carpeta `models/` --- ## 🛠️ Instalación y ejecución 1. Clonar el repositorio: ```bash git clone https://github.com/tuusuario/ia-asistente-personal.git cd ia-asistente-personal ``` 2. Colocar el modelo en `models/`: ```bash mkdir models # Copia aquí openchat-3.5-0106.Q4_K_M.gguf ``` 3. Compilar con Maven: ```bash mvn clean package ``` 4. Crear carpeta de logs: ```bash mkdir logs ``` 5. Ejecutar la aplicación: ```bash java -jar target/ia-asistente-personal.jar ``` 6. Abrir en el navegador: ``` http://localhost:8080/ ``` --- ## 🎯 Uso - En la web puedes chatear con tu asistente personalizado. - El historial de la conversación se mantiene en sesión. - Las respuestas se generan localmente, sin conexión a internet. - Puedes cambiar el perfil de prompt editando los JSON en `src/main/resources/prompts/`. --- ## 🎥 Demostración ![Demo de funcionamiento](demo.gif) *Reemplaza la URL anterior con el enlace a tu GIF de demostración.* --- ## 🧪 Configuración avanzada - **GPU Metal** en macOS M1/M2: configura el backend llama.cpp con soporte Metal y coloca el shader `ggml-metal.metal` en la ruta correcta. - **Logs:** configurados con Log4j2, salida a consola y a `logs/app.log`. - **Múltiples perfiles:** cambia el prompt cargando otros JSONs como `developer_prompt.json`. --- ## 📚 Recursos | Herramienta | Enlace | | ---------------- | ------------------------------------------------ | | llama.cpp | [https://github.com/ggerganov/llama.cpp](https://github.com/ggerganov/llama.cpp) | | llama-java | [https://github.com/kherud/llama-java](https://github.com/kherud/llama-java) | | Spring Boot | [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) | --- ## 🤝 Contribuciones ¿Quieres mejorar el proyecto? ¡Bienvenido! Por favor, abre un issue o pull request con tus mejoras. --- ## ⚠️ Licencia MIT License © Pablo de la Torre Jamardo --- *¡Gracias por usar el Asistente Pablo!*