104 lines
3.4 KiB
Markdown
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
|
|
```
|