# 🤖 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)*