mejora en el modelo de traduccion
This commit is contained in:
parent
be56de7dd4
commit
ecd7a3cdf8
21 changed files with 3708 additions and 322 deletions
467
README.md
467
README.md
|
|
@ -12,6 +12,10 @@ RSS2 es una plataforma avanzada de agregación, traducción, análisis y vectori
|
|||
* **Traducción Neuronal de Alta Calidad**: Integración de NLLB-200 (vía CTranslate2) para traducir noticias de múltiples idiomas al español con precisión profesional.
|
||||
* **Inteligencia de Entidades (NER)**: Extracción y normalización automática de Personas, Organizaciones y Lugares para análisis de tendencias y mapeo de relaciones.
|
||||
* **Búsqueda de Noticias Relacionadas**: Algoritmos de similitud que agrupan noticias sobre el mismo tema automáticamente.
|
||||
* **Detección de Idioma**: Identificación automática del idioma de origen para routing correcto a traducción.
|
||||
* **Clustering de Noticias**: Agrupación automática de noticias relacionadas en eventos mediante embeddings.
|
||||
* **Remote Workers GPU**: Workers de traducción GPUremotos conectados vía WebSocket para procesamiento distribuido.
|
||||
* **Backup Automatizado**: Exportación completa de la base de datos en SQL o ZIP.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -22,14 +26,14 @@ El sistema se orquestra mediante Docker Compose y se divide en capas especializa
|
|||
### Capa de Acceso y API
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`nginx`** | Nginx Alpine | Gateway y Proxy Inverso (Puerto **8001**). |
|
||||
| **`nginx`** | Nginx Alpine | Gateway y Proxy Inverso (Puerto **8888**). |
|
||||
| **`rss2_frontend`** | React + Vite | Interfaz web de usuario moderna y responsiva. |
|
||||
| **`backend-go`** | Go + Gin | API REST principal y gestión de lógica de negocio. |
|
||||
|
||||
### Ingesta y Descubrimiento (Go)
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`rss-ingestor-go`** | Go | Crawler de alto rendimiento para feeds RSS. |
|
||||
| **`rss-ingestor-go`** | Go | Crawler de alto rendimiento para feeds RSS (100 workers). |
|
||||
| **`scraper`** | Go | Scraper profundo con sanitización de HTML y extracción de texto. |
|
||||
| **`discovery`** | Go | Agente autónomo para descubrir nuevos feeds a partir de URLs. |
|
||||
|
||||
|
|
@ -37,13 +41,18 @@ El sistema se orquestra mediante Docker Compose y se divide en capas especializa
|
|||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`translator`** | NLLB-200 (CPU) | Traducción neuronal optimizada con CTranslate2. |
|
||||
| **`translator-gpu`**| NLLB-200 (GPU) | Traducción acelerada por hardware (CUDA). |
|
||||
| **`wiki-worker`** | Go | **[NUEVO]** Integración con Wikipedia y gestión de imágenes locales. |
|
||||
| **`embeddings`** | S-Transformers | Generación de vectores para búsqueda semántica. |
|
||||
| **`ner`** | Spacy / BERT | Reconocimiento de entidades nombradas (NER). |
|
||||
| **`llm-categorizer`**| Ollama / Mistral | Clasificación avanzada mediante modelos de lenguaje. |
|
||||
| **`translator-gpu`** | NLLB-200 (GPU) | Traducción acelerada por hardware (CUDA). |
|
||||
| **`remote-translator`** | WebSocket | Worker GPU remoto (conexión vía ws://backend-go:8080/ws/worker). |
|
||||
| **`wiki-worker`** | Go | Integración con Wikipedia y gestión de imágenes locales. |
|
||||
| **`embeddings`** | S-Transformers | Generación de vectores para búsqueda semántica (paraphrase-multilingual-MiniLM-L12-v2). |
|
||||
| **`ner`** | Spacy / es_core_news_lg | Reconocimiento de entidades nombradas (NER). |
|
||||
| **`llm-categorizer`** | Ollama / Mistral | Clasificación avanzada mediante modelos de lenguaje. |
|
||||
| **`topics`** | Go | Matcher automático de países y temas predefinidos. |
|
||||
| **`related`** | Go | Motor de detección de noticias relacionadas. |
|
||||
| **`related`** | Go | Motor de detección de noticias relacionadas (similitud coseno). |
|
||||
| **`qdrant-worker`** | Go | Vectorización y búsqueda semántica con Qdrant + Ollama. |
|
||||
| **`cluster`** | Python | Agrupación de noticias por eventos. |
|
||||
| **`langdetect`** | Python | Detección de idioma para routing de traducciones. |
|
||||
| **`translation-scheduler`** | Python | Creador de tareas de traducción. |
|
||||
|
||||
### Capa de Almacenamiento
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|
|
@ -52,6 +61,90 @@ El sistema se orquestra mediante Docker Compose y se divide en capas especializa
|
|||
| **`qdrant`** | Qdrant | Base de datos vectorial para búsqueda por similitud. |
|
||||
| **`redis`** | Redis 7 | Colas de mensajes y caché de alto desempeño. |
|
||||
|
||||
### Monitoreo
|
||||
| Servicio | Tecnología | Descripción |
|
||||
|---------|------------|-------------|
|
||||
| **`prometheus`** | Prometheus | Métricas del sistema. |
|
||||
| **`grafana`** | Grafana | Dashboard (puerto **3001**). |
|
||||
| **`cadvisor`** | cAdvisor | Monitoreo Docker. |
|
||||
|
||||
---
|
||||
|
||||
## 📊 Endpoints de API
|
||||
|
||||
### News
|
||||
- `GET /api/news` - Listar noticias (paginado, filtros: q, category_id, country_id, translated_only)
|
||||
- `GET /api/news/:id` - Ver noticia con entidades (incluye Wikipedia enrichment)
|
||||
- `DELETE /api/news/:id` - Eliminar noticia (admin)
|
||||
|
||||
### Feeds
|
||||
- `GET /api/feeds` - Listar feeds
|
||||
- `POST /api/feeds` - Crear feed (auth requerido)
|
||||
- `PUT /api/feeds/:id` - Actualizar feed (auth requerido)
|
||||
- `DELETE /api/feeds/:id` - Eliminar feed (auth requerido)
|
||||
- `POST /api/feeds/:id/toggle` - Activar/desactivar feed
|
||||
- `POST /api/feeds/:id/reactivate` - Reactivar feed
|
||||
|
||||
### Search
|
||||
- `GET /api/search?q=...` - Búsqueda texto (filtros: lang, categoria_id, pais_id)
|
||||
- `GET /api/search?q=...&semantic=true` - Búsqueda semántica con Qdrant
|
||||
|
||||
### Entities
|
||||
- `GET /api/entities?tipo=persona|organizacion|lugar` - Listar entidades (con aliasing)
|
||||
|
||||
### Admin
|
||||
- `GET /api/admin/backup` - Backup SQL completo (descargable)
|
||||
- `GET /api/admin/backup/news` - Backup noticias (ZIP)
|
||||
- `GET /api/admin/users` - Listar usuarios
|
||||
- `POST /api/admin/users/:id/promote` - Promover a admin
|
||||
- `POST /api/admin/users/:id/demote` - Quitar admin
|
||||
- `POST /api/admin/reset-db` - Resetear base de datos
|
||||
- `POST /api/admin/aliases` - Crear alias de entidad
|
||||
- `GET /api/admin/aliases/export` - Exportar aliases (CSV)
|
||||
- `POST /api/admin/aliases/import` - Importar aliases (CSV)
|
||||
- `POST /api/admin/entities/retype` - Cambiar tipo de entidad
|
||||
- `POST /api/admin/workers/config` - Configurar workers (type, workers)
|
||||
- `POST /api/admin/workers/start` - Iniciar workers traducción
|
||||
- `POST /api/admin/workers/stop` - Detener workers traducción
|
||||
- `GET /api/admin/workers/status` - Estado de workers
|
||||
- `GET /api/admin/workers/remote` - Listar remote workers
|
||||
- `POST /api/admin/workers/remote` - Crear remote worker
|
||||
- `DELETE /api/admin/workers/remote/:id` - Eliminar remote worker
|
||||
|
||||
### Auth
|
||||
- `POST /api/auth/login` - Iniciar sesión
|
||||
- `POST /api/auth/register` - Registrarse
|
||||
- `GET /api/auth/me` - Usuario actual (auth requerido)
|
||||
- `GET /api/auth/check-first-user` - Verificar si existe primer usuario
|
||||
|
||||
### Stats
|
||||
- `GET /api/stats` - Estadísticas globales (total news, feeds, users, hoy/semana/mes)
|
||||
- `GET /api/categories` - Listar categorías
|
||||
- `GET /api/countries` - Listar países con continentes
|
||||
|
||||
### WebSocket
|
||||
- `GET /ws/worker` - Conexión de remote workers (protocolo de autenticación con API key)
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Esquema de Base de Datos (Tablas Principales)
|
||||
|
||||
- **noticias**: Artículos RSS (titulo, resumen, url, feed_id, categoria_id, pais_id, lang)
|
||||
- **feeds**: Fuentes RSS (nombre, url, activo, ultimo_fetch)
|
||||
- **traducciones**: Traducciones (noticia_id, lang_from, lang_to, titulo_trad, resumen_trad, status, vectorized)
|
||||
- **tags**: Entidades (valor, tipo: persona/organizacion/lugar/tema, wiki_summary, wiki_url, image_path)
|
||||
- **tags_noticia**: Relación noticia-tag (traduccion_id, noticia_id, tag_id)
|
||||
- **entity_aliases**: Alias de entidades (canonical_name, alias, tipo)
|
||||
- **categorias**: Categorías de noticias
|
||||
- **paises**: Países con continentes
|
||||
- **related_noticias**: Noticias relacionadas (traduccion_id, related_traduccion_id, score)
|
||||
- **traduccion_embeddings**: Embeddings en BD (traduccion_id, model, embedding)
|
||||
- **users**: Usuarios (email, username, password_hash, is_admin)
|
||||
- **config**: Configuración del sistema (translator_type, translator_workers, translator_status)
|
||||
- **remote_workers**: Workers remotos (name, api_key, capabilities, status, last_seen)
|
||||
- **favoritos**: Noticias favoritas de usuarios
|
||||
- **search_history**: Historial de búsquedas
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Guía de Configuración
|
||||
|
|
@ -60,34 +153,228 @@ El sistema se orquestra mediante Docker Compose y se divide en capas especializa
|
|||
* **Modo Básico (CPU)**: 4+ Cores CPU, 8GB RAM.
|
||||
* **Modo Avanzado (IA)**: NVIDIA GPU con 8GB+ VRAM (mínimo recomendado para LLM y Traducción GPU).
|
||||
|
||||
### 2. Instalación Rápida
|
||||
### 2. Instalación Rápida con Seguridad Automática
|
||||
|
||||
#### Opción A: Despliegue con Validación Automática (RECOMENDADO)
|
||||
|
||||
```bash
|
||||
# Paso 1: Clonar el proyecto
|
||||
git clone <repo_url>
|
||||
cd rss2
|
||||
cp .env.example .env
|
||||
# Edita .env con tus credenciales
|
||||
|
||||
# Paso 2: Generar credenciales seguras automáticamente
|
||||
./pre-deploy.sh --generate
|
||||
|
||||
# Paso 3: Validar y desplegar
|
||||
./pre-deploy.sh
|
||||
|
||||
# Paso 4: Si eliges opción 2 en el prompt, despliega manualmente
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 3. Escalado de Workers (¡Importante!)
|
||||
Para aumentar la velocidad de procesamiento (especialmente la traducción), puedes escalar los workers:
|
||||
**Ventajas:**
|
||||
- ✅ Genera credenciales seguras de 32 caracteres
|
||||
- ✅ Valida que no haya contraseñas por defecto
|
||||
- ✅ Muestra resumen de credenciales en consola
|
||||
- ✅ Automático y seguro para producción
|
||||
|
||||
#### Opción B: Despliegue Manual (Para desarrolladores)
|
||||
|
||||
```bash
|
||||
# Ejecutar 4 traductores en paralelo
|
||||
docker compose up -d --scale translator=4
|
||||
git clone <repo_url>
|
||||
cd rss2
|
||||
|
||||
# Si usas GPU y tienes capacidad
|
||||
docker compose up -d --scale translator-gpu=2
|
||||
# Generar credenciales manualmente
|
||||
./generate_secure_credentials.sh
|
||||
|
||||
# Copiar credenciales a .env
|
||||
cp .env.generated .env
|
||||
|
||||
# Desplegar
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Despliegue con Seguridad Automática (RECOMENDADO)
|
||||
|
||||
### 🛡️ Sistema de Validación Pre-Despliegue
|
||||
|
||||
RSS2 incluye `pre-deploy.sh`, un script inteligente que se ejecuta **antes** de `docker compose` para:
|
||||
|
||||
1. ✅ **Validar credenciales**: Asegura que `POSTGRES_PASSWORD`, `REDIS_PASSWORD`, `DB_PASS` estén definidas
|
||||
2. ✅ **Generar automáticamente**: Crea credenciales seguras de 32 caracteres si faltan
|
||||
3. ✅ **Prevenir errores**: Evita que los WARN de Docker por variables vacías
|
||||
4. ✅ **Mostrar resumen**: Te muestra todas las credenciales en consola
|
||||
|
||||
### 🚀 Despliegue Rápido y Seguro (3 Comandos)
|
||||
|
||||
```bash
|
||||
# 1. Generar credenciales seguras automáticamente
|
||||
./pre-deploy.sh --generate
|
||||
|
||||
# 2. Validar y desplegar (elige opción 2 para despliegue manual)
|
||||
./pre-deploy.sh
|
||||
|
||||
# 3. Alternativa: Despliegue manual después de validar
|
||||
./pre-deploy.sh # ← Elige "2) Solo validar y salir"
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**Flujo recomendado:**
|
||||
```bash
|
||||
./pre-deploy.sh --generate # Genera .env con credenciales seguras
|
||||
./pre-deploy.sh # Valida y te pregunta si quieres desplegar
|
||||
# Si eliges "2): Solo validar", luego:
|
||||
docker compose up -d # Despliega manualmente
|
||||
```
|
||||
|
||||
### 📋 Opciones del Script `pre-deploy.sh`
|
||||
|
||||
```bash
|
||||
# Validar credenciales existentes
|
||||
./pre-deploy.sh
|
||||
|
||||
# Generar credenciales seguras automáticamente
|
||||
./pre-deploy.sh --generate
|
||||
|
||||
# Saltar validación (NO RECOMENDADO para producción)
|
||||
./pre-deploy.sh --skip
|
||||
|
||||
# Ver ayuda
|
||||
./pre-deploy.sh --help
|
||||
```
|
||||
|
||||
**Salida típica del script:**
|
||||
```
|
||||
╔═══════════════════════════════════════════════════════════╗
|
||||
║ 🔐 Pre-Deploy Security Check - RSS2 Platform ║
|
||||
╚═══════════════════════════════════════════════════════════╝
|
||||
|
||||
✅ Archivo .env encontrado
|
||||
✅ DEFINIDO: POSTGRES_PASSWORD=8x7f2k9m4p1q3w5e
|
||||
✅ DEFINIDO: REDIS_PASSWORD=a9b8c7d6e5f4g3h2
|
||||
✅ DEFINIDO: DB_PASS=8x7f2k9m4p1q3w5e
|
||||
|
||||
📋 Resumen de Credenciales Activas
|
||||
POSTGRES_PASSWORD: ✓
|
||||
REDIS_PASSWORD: ✓
|
||||
DB_PASS: ✓
|
||||
|
||||
✅ VALIDACIÓN COMPLETADA - LISTO PARA DESPLEGAR
|
||||
```
|
||||
|
||||
### 🔒 Variables Críticas que Requieren Contraseñas
|
||||
|
||||
| Variable | Descripción | Uso |
|
||||
|----------|-------------|-----|
|
||||
| `POSTGRES_PASSWORD` | Contraseña de PostgreSQL | Base de datos |
|
||||
| `REDIS_PASSWORD` | Contraseña de Redis | Cache y colas |
|
||||
| `DB_PASS` | Contraseña para workers | Conexiones de workers |
|
||||
| `SECRET_KEY` | Key secreta de la aplicación | JWT, encriptación |
|
||||
| `GRAFANA_PASSWORD` | Contraseña de Grafana | Dashboard de monitoring |
|
||||
|
||||
---
|
||||
|
||||
### 3. Escalado de Workers GPU (¡Importante!)
|
||||
|
||||
#### 🚀 Workers de Traducción GPU Multi-Instancia
|
||||
|
||||
RSS2 soporta múltiples workers de traducción ejecutándose en paralelo utilizando GPUs, lo que acelera significativamente el proceso de traducción masiva.
|
||||
|
||||
**Arquitectura Multi-Worker:**
|
||||
- Cada worker es una instancia independiente del servicio `ctranslator_worker`
|
||||
- Los workers compiten automáticamente por las traducciones pendientes usando `SELECT ... FOR UPDATE SKIP LOCKED`
|
||||
- Cada worker procesa su propio lote (batch) de traducciones sin bloquearse mutuamente
|
||||
- Soporta hasta 8 workers simultáneos (configurable vía panel admin)
|
||||
|
||||
**Requisitos GPU:**
|
||||
```bash
|
||||
# Verificar GPU disponibles
|
||||
nvidia-smi
|
||||
|
||||
# Instalar drivers NVIDIA (si no los tienes)
|
||||
# Ubuntu/Debian:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y nvidia-driver-535
|
||||
```
|
||||
|
||||
**Despliegue con Múltiples Workers GPU:**
|
||||
|
||||
```bash
|
||||
# Opción 1: Desplegar 1 worker GPU (mínimo recomendado)
|
||||
docker compose up -d --scale translator-gpu=1
|
||||
|
||||
# Opción 2: Desplegar 2 workers GPU (recomendado: 16GB+ VRAM total)
|
||||
docker compose up -d --scale translator-gpu=2
|
||||
|
||||
# Opción 3: Desplegar 4 workers GPU (requiere: 32GB+ VRAM total)
|
||||
docker compose up -d --scale translator-gpu=4
|
||||
|
||||
# Opción 4: Combinar CPU y GPU
|
||||
# 2 workers CPU + 2 workers GPU
|
||||
docker compose up -d --scale translator=2 --scale translator-gpu=2
|
||||
```
|
||||
|
||||
**Panel de Administración:**
|
||||
Desde `/admin/settings`, puedes:
|
||||
- Activar modo GPU (CUDA) o CPU
|
||||
- Configurar número de workers (1-8)
|
||||
- Iniciar/detener workers automáticamente
|
||||
|
||||
**Configuración de GPU por Worker:**
|
||||
Cada worker GPU está configurado con:
|
||||
- `CT2_DEVICE=cuda` - Usa dispositivos CUDA
|
||||
- `CT2_COMPUTE_TYPE=float16` - Precisión mixta para velocidad
|
||||
- `TRANSLATOR_BATCH=128` - Tamaño de lote optimizado
|
||||
- `PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512` - Gestión de memoria PyTorch
|
||||
- `NCCL_DEBUG=INFO` - Debug de comunicación multi-GPU
|
||||
|
||||
**Monitorización:**
|
||||
```bash
|
||||
# Ver estado de workers
|
||||
docker compose --profile gpu ps translator-gpu
|
||||
|
||||
# Ver uso de GPU
|
||||
watch -n 1 nvidia-smi
|
||||
|
||||
# Ver logs en tiempo real
|
||||
docker compose logs -f translator-gpu
|
||||
|
||||
# Métricas en Grafana
|
||||
# Dashboard: Translation Workers
|
||||
# Métricas: translator_*_transitions_per_minute
|
||||
```
|
||||
|
||||
**Performance Esperada:**
|
||||
| Workers GPU | VRAM Total | Tasa de Traducción |
|
||||
|-------------|------------|-------------------|
|
||||
| 1 worker | 8GB+ | ~500 traducciones/min |
|
||||
| 2 workers | 16GB+ | ~1000 traducciones/min |
|
||||
| 4 workers | 32GB+ | ~2000 traducciones/min |
|
||||
| 8 workers | 64GB+ | ~4000 traducciones/min |
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Administración y Mantenimiento
|
||||
|
||||
### Copias de Seguridad (Backups)
|
||||
|
||||
Desde el panel de Administración (`/admin/settings`), puedes realizar:
|
||||
* **Backup Completo**: Volcado SQL de toda la base de datos.
|
||||
* **Backup de Noticias (ZIP)**: **[NUEVO]** Genera un archivo comprimido que incluye las tablas de noticias, traducciones y todas sus etiquetas. Ideal para migraciones de contenido.
|
||||
|
||||
**Backup Completo (SQL):**
|
||||
- Descarga un archivo `.sql` con todo el contenido de la base de datos
|
||||
- Incluye: noticias, feeds, traducciones, usuarios, etiquetas, favoritos, videos, eventos, historial de búsqueda
|
||||
- Formato: PostgreSQL custom format con datos y estructura
|
||||
- Tamaño típico: 10-100MB dependiendo del volumen de datos
|
||||
|
||||
**Backup de Noticias (ZIP):**
|
||||
- Genera un archivo comprimido `.zip` con:
|
||||
- Tabla `noticias` (artículos completos)
|
||||
- Tabla `traducciones` (todas las traducciones)
|
||||
- Tablas `tags` y `tags_noticia` (metadatos y relaciones)
|
||||
- Ideal para: Migraciones de contenido, exportación de datos, backup ligero
|
||||
- Tamaño típico: 5-50MB (solo contenido de noticias)
|
||||
|
||||
### Variables de Entorno Clave (`.env`)
|
||||
| Variable | Descripción |
|
||||
|
|
@ -95,7 +382,108 @@ Desde el panel de Administración (`/admin/settings`), puedes realizar:
|
|||
| `WIKI_SLEEP` | Tiempo de espera entre peticiones a Wikipedia (evita bloqueos). |
|
||||
| `SCHEDULER_BATCH`| Cantidad de noticias a enviar a traducir por ciclo. |
|
||||
| `TARGET_LANGS` | Idiomas destino (ej: `es`). |
|
||||
| `OLLAMA_HOST` | Dirección del servidor Ollama para categorización. |
|
||||
| `OLLAMA_URL` | URL del servidor Ollama para categorización. |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Descripción de Workers
|
||||
|
||||
### rss-ingestor-go
|
||||
Crawler RSS de alto rendimiento escrito en Go. Gestiona hasta 100 workers paralelos para procesar múltiples feeds simultáneamente. Detecta nuevos artículos, extrae metadatos básicos y los inserta en la base de datos.
|
||||
|
||||
### scraper (Go)
|
||||
Scraper profundo que:
|
||||
- Descarga el contenido completo de URLs de artículos
|
||||
- Sanitiza HTML removiendo scripts y estilos
|
||||
- Extrae texto limpio del body
|
||||
- Limita el contenido a 20 noticias por ciclo para evitar sobrecarga
|
||||
|
||||
### discovery (Go)
|
||||
Agente de descubrimiento de feeds que:
|
||||
- Analiza URLs proporcionadas para detectar feeds RSS/Atom
|
||||
- Soporta hasta 5 feeds por URL
|
||||
- Ejecuta cada 900 segundos (15 minutos)
|
||||
|
||||
### translator (Python/CTranslate2)
|
||||
Worker de traducción neuronal:
|
||||
- Modelo: facebook/nllb-200-distilled-600M convertido a CTranslate2
|
||||
- Dispositivo: CPU (int8)
|
||||
- Batch: 32 traducciones por ciclo
|
||||
- Locking: `FOR UPDATE SKIP LOCKED` para evitar procesamiento duplicado
|
||||
- Soporta múltiples idiomas fuente
|
||||
|
||||
### translator-gpu (Python/CTranslate2)
|
||||
Versión acelerada por GPU del translator:
|
||||
- Dispositivo: CUDA
|
||||
- Compute type: float16
|
||||
- Batch: 128 traducciones por ciclo
|
||||
- Ideal para procesamiento de alto volumen
|
||||
|
||||
### remote-translator (Python)
|
||||
Worker remoto conectado vía WebSocket:
|
||||
- Autenticación con API key
|
||||
- Conexión a `ws://backend-go:8080/ws/worker`
|
||||
- Modelo: facebook/nllb-200-1.3B (más grande)
|
||||
- GPU requerida
|
||||
|
||||
### langdetect (Python)
|
||||
Detector de idioma:
|
||||
- Usa biblioteca `langdetect`
|
||||
- Proceso: 1000 noticias por ciclo
|
||||
- Establece lang_from para correcto routing a traducción
|
||||
|
||||
### ner (Python/spaCy)
|
||||
Extracción de entidades nombradas:
|
||||
- Modelo: es_core_news_lg
|
||||
- Tipos: PERSON (persona), ORG (organizacion), LOC/GPE (lugar)
|
||||
- También extrae topics (noun-chunks)
|
||||
- Configurable via entity_config.json (blacklist, synonyms)
|
||||
|
||||
### embeddings (Python)
|
||||
Generador de embeddings para búsqueda semántica:
|
||||
- Modelo: paraphrase-multilingual-MiniLM-L12-v2
|
||||
- Dispositivo: GPU (cuda)
|
||||
- Genera vectores de 384 dimensiones
|
||||
- Alimenta Qdrant
|
||||
|
||||
### qdrant-worker (Go)
|
||||
Worker de vectorización Qdrant:
|
||||
- Conecta a Qdrant (puerto 6333)
|
||||
- Genera embeddings via Ollama (mxbai-embed-large)
|
||||
- Sube puntos a collection "news_vectors"
|
||||
- Actualiza estado en BD (vectorized=true)
|
||||
|
||||
### related (Go)
|
||||
Detector de noticias relacionadas:
|
||||
- Usa similitud coseno entre embeddings
|
||||
- Almacena top-k relaciones en tabla related_noticias
|
||||
- Soporta configuración de threshold mínimo
|
||||
|
||||
### wiki-worker (Go)
|
||||
Enriquecedor de Wikipedia:
|
||||
- Descarga summaries de Wikipedia API
|
||||
- Descarga thumbnails de imágenes
|
||||
- Almacena en `./data/wiki_images`
|
||||
- Evita rate limiting con WIKI_SLEEP
|
||||
|
||||
### llm-categorizer (Python)
|
||||
Categorizador con LLM:
|
||||
- Conexión a Ollama
|
||||
- Usa modelo Mistral para clasificación
|
||||
- Procesa 10 noticias por batch
|
||||
|
||||
### cluster (Python)
|
||||
Agrupador de noticias por eventos:
|
||||
- Usa embeddings paraphrase-multilingual-MiniLM-L12-v2
|
||||
- Threshold: 0.35 de distancia
|
||||
- Agrupa noticias similares
|
||||
|
||||
### translation-scheduler (Python)
|
||||
Creador de tareas de traducción:
|
||||
- Query: noticias sin traducción al español
|
||||
- Crea entradas en tabla traducciones
|
||||
- Batch: 1000 por ciclo
|
||||
- Ciclo: 30 segundos
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -121,4 +509,41 @@ Las respuestas de noticias ahora incluyen el objeto `entities` enriquecido:
|
|||
|
||||
---
|
||||
|
||||
**RSS2** - *Transformando noticias en inteligencia con IA localizada.*
|
||||
## 🧪 Testing
|
||||
|
||||
### Backend (Go)
|
||||
```bash
|
||||
cd backend && go test ./internal/handlers -v -run TestLogin
|
||||
cd backend && go test ./internal/auth -v -run TestGenerateToken
|
||||
```
|
||||
|
||||
### Frontend
|
||||
```bash
|
||||
cd frontend && npm run test:ui
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Estructura de Archivos del Proyecto
|
||||
|
||||
```
|
||||
rss2/
|
||||
├── backend/ # API REST Go (Gin)
|
||||
├── frontend/ # Interfaz React + TypeScript
|
||||
├── workers/ # Workers Python
|
||||
├── rss-ingestor-go/ # Crawler RSS Go
|
||||
├── docker-compose.yml # Orquestación
|
||||
├── nginx.conf # Config Nginx
|
||||
├── monitoring/ # Prometheus + Grafana
|
||||
├── init-db/ # Migraciones SQL
|
||||
├── data/ # Datos persistentes
|
||||
├── models/ # Modelos ML
|
||||
├── hf_cache/ # Cache HuggingFace
|
||||
├── pre-deploy.sh # Script seguridad
|
||||
├── generate_secure_credentials.sh
|
||||
└── AGENTS.md # Guía desarrollo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**RSS2** - *Transformando noticias en inteligencia con IA localizada.*
|
||||
Loading…
Add table
Add a link
Reference in a new issue