Nextcloud AI Service v8

Servicio unificado que escucha automáticamente tu Nextcloud, descarga audios y PDFs, los procesa con Whisper + 3 modelos de IA y publica resúmenes enriquecidos junto con un dashboard en tiempo real.

┌─────────────┐    ┌─────────────┐    ┌──────────────┐    ┌──────────────┐
│  Nextcloud  │───▶│  Whisper    │───▶│ Claude (Z.ai)│───▶│ Gemini (CLI  │
│ Audios/PDFs │    │ Transcribe  │    │ Bullet +     │    │ + API)        │
└─────────────┘    └─────────────┘    │ Resumenes    │    │ Formato final │
                                      └──────┬───────┘    └──────┬───────┘
                                             │                 │
                                             ▼                 ▼
                                      Markdown / DOCX / PDF   Dashboard

Principales capacidades

  • Pipeline único: descarga desde Nextcloud vía WebDAV, transcribe con Whisper, resume con Claude + Gemini y clasifica automáticamente.
  • Dashboard integrado: panel Flask (http://localhost:5000) para ver archivos, reprocesar o limpiar estados con un click.
  • Diseño GPU-first: Docker + CUDA 12.1 con PyTorch optimizado; limpieza agresiva de VRAM cuando los modelos están ociosos.
  • Alertas opcionales: soporte Telegram y WebDAV retries para operaciones largas.
  • Código limpio: sin Ollama ni servicios secundarios; sólo lo esencial para escalar y mantener.

Estructura mínima

cbc/
├─ Dockerfile
├─ docker-compose.yml
├─ main.py              # Servicio principal + loop de monitoreo
├─ dashboard.py         # Flask dashboard reutilizando la lógica de main.py
├─ templates/index.html # UI del dashboard
├─ requirements.txt
└─ README.md

Requisitos

  • NVIDIA GPU con drivers CUDA 12.1+ y nvidia-container-toolkit si usas Docker.
  • Python 3.10+ (el Dockerfile usa 3.10) y Node.js ≥ 20 para las CLI externas.
  • Claves activas para:
    • Z.ai (Claude CLI)ANTHROPIC_AUTH_TOKEN y ANTHROPIC_BASE_URL.
    • Google Gemini (CLI o API) → GEMINI_API_KEY.
    • DeepInfra GPT-OSS-120BDEEPINFRA_API_KEY.
  • Servidor Nextcloud accesible por WebDAV (usuario, contraseña y URL remota).

Instalación de las CLIs externas

npm install -g @anthropic-ai/claude-code
npm install -g @google/gemini-cli

Recuerda exportar las mismas variables de entorno (ANTHROPIC_*, GEMINI_API_KEY) para que las CLIs compartan credenciales con el servicio.

Configuración

  1. Copia el ejemplo .env (no versionado) y completa:
    NEXTCLOUD_URL=http://tu-servidor:8080/remote.php/webdav
    NEXTCLOUD_USER=...
    NEXTCLOUD_PASS=...
    
    GEMINI_API_KEY=...
    DEEPINFRA_API_KEY=...
    ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic
    ANTHROPIC_AUTH_TOKEN=...
    
    TELEGRAM_TOKEN=... (opcional)
    TELEGRAM_CHAT_ID=... (opcional)
    
  2. Crea los directorios utilizados por los volúmenes (si no existen):
    mkdir -p downloads resumenes_docx
    

Ejecución local (sin Docker)

python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
python3 main.py
  • El dashboard se expone en http://localhost:5000.
  • Los registros viven en logs/service.log.

Ejecución con Docker

docker compose up -d --build
docker compose logs -f app

El único servicio (nextcloud_ai_app) ya expone el dashboard y comparte downloads/ y resumenes_docx/ como volúmenes.

Flujo del pipeline

  1. Monitoreo: cada POLL_INTERVAL segundos se listan nuevas entradas en Nextcloud (Audios, Pdf, Textos...).
  2. Descarga y preproceso: los archivos se guardan en downloads/ con normalización y sanitización de nombres.
  3. Transcripción (Whisper): modelo medium optimizado para español (soporte GPU).
  4. Resúmenes colaborativos:
    • Claude CLI genera bullet points por lotes y resumen integral.
    • Gemini CLI/API aplica formato final y estilo consistente.
  5. Clasificación y renombrado: se detectan temáticas (Historia, Contabilidad, Gobierno, Otras Clases) + topics para nombrar archivos inteligentemente.
  6. Entrega: se generan .md, .docx, .pdf y se suben de nuevo a Nextcloud.
  7. Dashboard: refleja estado (procesados/pendientes), permite reprocesar o resetear registros, y sirve descargas locales.

Dashboard en detalle

  • Vista general: tarjetas con totales, filtros por origen (local/WebDAV) y buscador instantáneo.
  • Acciones rápidas:
    • Procesar: envía el archivo nuevamente al pipeline.
    • Resetear: elimina la marca de procesado para forzar un reprocesamiento automático.
    • Descargar: enlaces directos a TXT/MD/DOCX/PDF disponibles.
  • API:
    • GET /api/files → listado.
    • POST /api/reprocess → reprocesa.
    • POST /api/mark-unprocessed → limpia estado.
    • GET /api/refresh → sincroniza.
    • GET /health → healthcheck.

Buenas prácticas operativas

  • CUDA libre: el servicio libera VRAM si los modelos quedan ociosos; revisa el log para ver las limpiezas agresivas. -.Telegram: usa ERROR_THROTTLE_SECONDS para evitar spam en errores repetidos.
  • Respaldo: processed_files.txt guarda el historial de todo lo procesado; respáldalo si cambias de servidor.
  • Extensibilidad: si necesitas nuevos formatos o pasos, agrega funciones en main.py reutilizando ThreadPoolExecutor y los helpers existentes.

Troubleshooting rápido

Problema Fix
Claude o Gemini devuelven error de permisos Exporta CLAUDE_DANGEROUSLY_SKIP_PERMISSIONS=1 (ya se envía al contenedor).
No aparecen archivos en el dashboard Verifica credenciales Nextcloud y logs/service.log.
Tiempo de espera alto en WebDAV Ajusta HTTP_TIMEOUT y WEBDAV_MAX_RETRIES en .env.
GPU ocupada constantemente Reduce MODEL_TIMEOUT_SECONDS o baja el tamaño del modelo Whisper.

La meta de esta versión es mantener el proyecto ágil y escalable: menos archivos, menos servicios y una sola fuente de verdad. Si necesitas habilitar nuevas integraciones (por ejemplo, más modelos o destinos), añade módulos dedicados dentro de main.py o expórtalos a un paquete propio manteniendo este núcleo ligero. ¡Felices resúmenes! 💡

Description
No description provided
Readme 30 MiB
Languages
Python 98.9%
Dockerfile 0.7%
Shell 0.4%