# 🤖 AI Chat Platform - "Kairon" **Asistente personal de IA completamente offline y privado** --- ## Descripción **Kairon** es una aplicación de chat con inteligencia artificial que funciona completamente offline. Utiliza un modelo de lenguaje local para generar respuestas naturales y contextuales, manteniendo todas las conversaciones en tu dispositivo sin enviar datos a servicios externos. La aplicación está construida con una arquitectura hexagonal moderna, separando claramente las responsabilidades entre el frontend (Vue.js), el backend (Spring Boot) y el motor de IA (Llama). Esto permite un código mantenible, escalable y fácil de extender. --- ## Características - 💬 **Chat inteligente** - Conversaciones naturales con memoria de contexto - 🔒 **100% Privado** - Todas las conversaciones permanecen en tu dispositivo - 🌐 **Funciona offline** - No requiere conexión a internet - 📱 **Interfaz moderna** - Frontend responsive construido con Vue.js 3 - 🏗️ **Arquitectura limpia** - Backend con patrones de diseño empresariales - 📊 **Monitoreo integrado** - Health checks y métricas de rendimiento - 🔧 **Altamente configurable** - Prompts y comportamiento personalizables --- ## ️ Arquitectura El proyecto está organizado como una aplicación multimodular: ```plaintext ai-chat-platform/ ├── chat-api/ # API REST con Spring Boot │ ├── domain/ # Lógica de negocio │ ├── application/ # Casos de uso │ ├── infrastructure/ # Implementaciones técnicas │ └── presentation/ # Controllers REST ├── chat-web-client/ # Interfaz web con Vue.js │ ├── src/components/ # Componentes reutilizables │ ├── src/views/ # Páginas principales │ └── src/stores/ # Estado global └── models/ # Modelos de IA (Llama) ``` ### Stack Tecnológico **Backend:** - Java 21 con Spring Boot 3 - Arquitectura hexagonal con DDD - SQLite para persistencia - Llama.cpp para inferencia de IA - OpenAPI para documentación **Frontend:** - Vue.js 3 con Composition API - TypeScript para tipado estático - Pinia para gestión de estado - Vite como bundler ```plaintext ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │ Frontend (Vue.js) │ │ Backend (Spring) │ │ AI Engine │ │ │ │ │ │ │ │ • Vue 3 + TypeScript│◄──►│ • Hexagonal Arch │◄──►│ • Llama Model │ │ • Pinia Store │ │ • Domain-Driven │ │ • Offline Inference │ │ • Modern UI/UX │ │ • REST API │ │ • Custom Prompts │ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘ │ │ │ └───────────────────────────┼───────────────────────────┘ │ ┌─────────────────────┐ │ SQLite Database │ │ │ │ • Conversations │ │ • Messages │ │ • User Preferences │ └─────────────────────┘ ``` --- ## ️ Instalación ### Requisitos - Java 21+ - Node.js 18+ - Maven 3.8+ - 8GB RAM (16GB recomendado) - 4GB espacio libre ### Instalación Rápida ```shellscript # Clonar repositorio git clone https://github.com/pablotj/ai-chat-platform.git cd ai-chat-platform # Descargar modelo de IA mkdir models cd models wget https://huggingface.co/TheBloke/openchat-3.5-0106-GGUF/resolve/main/openchat-3.5-0106.Q4_K_M.gguf # Ejecutar backend cd ../chat-api mvn spring-boot:run # En otra terminal, ejecutar frontend cd ../chat-web-client npm install npm run dev ``` ### Con Docker ```shellscript docker-compose up -d ``` --- ## Uso 1. **Acceder a la aplicación**: `http://localhost:3000` 2. **Crear nueva conversación** o seleccionar una existente 3. **Escribir mensaje** y recibir respuesta de la IA 4. **Historial automático** - Las conversaciones se guardan localmente ### API REST La aplicación expone una API REST completa: | Endpoint | Método | Descripción |---------------------------------------|--------|----------------------- | `/api/v1/conversations` | GET | Listar conversaciones | `/api/v1/conversations` | POST | Crear conversación | `/api/v1/conversations/{id}/messages` | GET | Obtener mensajes | `/api/v1/conversations/{id}/messages` | POST | Enviar mensaje **Documentación completa**: `http://localhost:8080/api/v1/swagger-ui.html` ## Capturas de Pantalla ### **Interfaz de Chat** ![demo.gif](demo.gif) --- ## ️ Configuración ### Personalización del Asistente Edita `chat-api/src/main/resources/prompts/system_prompt.json`: ```json { "character": "Eres mi asistente personal llamado 'Kairon'", "tone": "Cercano, natural y amigable", "language": "Español", "rules": [ "Responde siempre en español", "Sé útil y preciso", "Mantén un tono amigable" ] } ``` ### Configuración del Modelo En `backend/src/main/resources/application.yml`: ```yaml ai: model: name: openchat-3.5-0106.Q4_K_M path: models/${ai.model.name}.gguf inference: max-tokens: 2048 temperature: 0.7 gpu: enabled: true layers: 35 ``` --- ## Testing ```shellscript # Tests del backend cd chat-api mvn test # Tests del frontend cd chat-web-client npm run test npm run test:e2e ``` --- ## Monitoreo La aplicación incluye endpoints de monitoreo: - **Health Check**: `http://localhost:8080/api/actuator/health` - **Métricas**: `http://localhost:8080/api/actuator/metrics` - **Info**: `http://localhost:8080/api/actuator/info` --- ## Contribuir Las contribuciones son bienvenidas. Para contribuir: 1. Fork el proyecto 2. Crea una rama feature (`git checkout -b feature/nueva-funcionalidad`) 3. Commit los cambios (`git commit -m 'Añadir nueva funcionalidad'`) 4. Push a la rama (`git push origin feature/nueva-funcionalidad`) 5. Abre un Pull Request --- ## Licencia Este proyecto está bajo la Licencia MIT. Ver [LICENSE](LICENSE) para más detalles. --- ## Recursos - **[llama.cpp](https://github.com/ggerganov/llama.cpp)** - Motor de inferencia IA - **[Spring Boot](https://spring.io/projects/spring-boot)** - Framework backend - **[Vue.js](https://vuejs.org/)** - Framework frontend - **[OpenChat](https://huggingface.co/openchat)** - Modelo de lenguaje utilizado --- *Desarrollado por [Pablo TJ](https://github.com/pablotj)*