Files
Estacion-de-Documentos/README.md
T

104 lines
3.4 KiB
Markdown

# Knowledge Station
Plataforma para organizar conocimiento escolar por materia y semana, procesar documentos/audio/video y generar archivos Markdown optimizados para ingesta en LLM.
El archivo `estacion documentos.html` queda como prototipo funcional de referencia. La plataforma principal usa `backend/` (FastAPI) y `frontend/` (Next.js).
## Capacidades Iniciales
- Materias y semanas persistidas en SQLite.
- Estructura de archivos por materia/semana en `data/subjects/`.
- Ingesta de `.txt`, `.md`, `.docx`, `.pdf`, audio y video.
- PDF con texto mediante PyMuPDF.
- OCR opcional de PDF con Mistral.
- Audio con Deepgram en español.
- Video con extracción temporal de audio vía `ffmpeg` y transcripción con Deepgram.
- Exportación semanal consolidada a Markdown.
- UI dedicada con materias, semanas, subida de archivos, polling de trabajos y editor Markdown con preview.
## Desarrollo Local
```bash
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
uvicorn backend.app.main:app --reload
```
En otra terminal:
```bash
cd frontend
npm install
set NEXT_PUBLIC_API_URL=http://127.0.0.1:8000
npm run dev -- -p 3000
```
La plataforma queda en `http://localhost:3000`, la API en `http://localhost:8000` y la documentación interactiva en `http://localhost:8000/docs`.
Para usuarios no tecnicos en Windows, usa `abrir_estacion.bat`; detecta puertos libres, prepara backend/frontend y abre el navegador. Usa `cerrar_estacion.bat` para detener todo.
## Docker / Coolify
```bash
docker compose up --build
```
El despliegue de Coolify usa `docker-compose.yaml`, que construye una sola imagen con `Dockerfile.coolify`:
- `Dockerfile.coolify` compila el frontend Next.js y prepara el backend FastAPI en la misma imagen.
- `scripts/start-coolify.sh` inicia FastAPI en `127.0.0.1:8000` y Next.js en `0.0.0.0:3000`.
- Next.js redirige las rutas `/api/...` al backend interno mediante `frontend/next.config.mjs`.
- El volumen `station-data` mantiene `/app/data` persistente entre redeploys.
En Coolify se debe usar `expose: "3000"`, no `ports: "3000:3000"`. Coolify/Traefik enruta el trafico hacia el puerto expuesto del contenedor. Publicar un puerto fijo del host puede romper el despliegue si otro contenedor ya usa ese puerto, con un error como:
```text
Bind for 0.0.0.0:3000 failed: port is already allocated
```
Usa `ports` solo para pruebas locales cuando necesites acceder directamente desde tu maquina. Para Coolify, deja que el proxy gestione el puerto publico.
## Variables
- `APP_DATA_DIR`: carpeta de datos persistentes.
- `DATABASE_PATH`: ruta SQLite.
- `MISTRAL_API_KEY`: OCR para PDFs escaneados.
- `MISTRAL_OCR_MODEL`: modelo OCR de Mistral. Por defecto `mistral-ocr-latest`; puedes fijarlo a `mistral-ocr-2512`.
- `DEEPGRAM_API_KEY`: transcripción de audio/video.
No subas claves reales al repositorio.
## Flujo API Basico
Crear materia:
```bash
curl -X POST http://localhost:8000/subjects -H "Content-Type: application/json" -d '{"name":"Comportamiento Organizacional"}'
```
Crear semana:
```bash
curl -X POST http://localhost:8000/subjects/1/weeks -H "Content-Type: application/json" -d '{"number":1,"title":"Grupos y equipos"}'
```
Subir archivo:
```bash
curl -X POST -F "[email protected]" http://localhost:8000/subjects/1/weeks/1/files
```
Consultar trabajo:
```bash
curl http://localhost:8000/jobs/1
```
Exportar semana:
```bash
curl -L http://localhost:8000/subjects/1/weeks/1/export -o semana-01.md
```