podcast-mindmap/docker-compose.yml
Dotty Dotter b0649cea49 Phase 1+2: FastAPI-Backend, SQLite, Embeddings, Semantische Suche
Phase 1:
- FastAPI-Backend (backend/app.py) mit REST-API
- SQLite-Datenbank für Podcasts, Episoden, Absätze, Zitate
- Auto-Import aus mindmap_data.json + srt_index.json beim Start
- Webapp als SPA: API-first mit Static-File-Fallback
- Audio als gemountetes Volume statt im Docker-Image
- Docker-Compose mit Traefik-Labels

Phase 2:
- Qwen text-embedding-v3 via DashScope (1024-dim Vektoren)
- Embedding aller Transkript-Absätze (728 für NEU DENKEN)
- Semantische Suche: /api/semantic-search?q=...
- Similarity-API: /api/similar/{podcast}/{episode}/{paragraph}
- Cosine-Similarity auf normalisierten Vektoren, <100ms
- Findet thematisch verwandte Stellen über Episoden hinweg,
  auch bei komplett unterschiedlicher Wortwahl

Vorbereitet für Multi-Podcast (#10): Datenstruktur unterstützt
mehrere Podcasts, Cross-Podcast-Similarity ist ein Parameter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 10:24:53 +02:00

28 lines
804 B
YAML

services:
podcast-mindmap:
build: .
container_name: podcast-mindmap
restart: unless-stopped
environment:
- DATA_DIR=/data
- AUDIO_DIR=/audio
- STATIC_DIR=/static
- DB_PATH=/data/db.sqlite
- DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY}
volumes:
- ./data:/data
- ./audio:/audio
labels:
- "traefik.enable=true"
- "traefik.http.routers.podcast.rule=Host(`podcast.toppyr.de`)"
- "traefik.http.routers.podcast.entrypoints=websecure"
- "traefik.http.routers.podcast.tls=true"
- "traefik.http.routers.podcast.tls.certresolver=letsencrypt"
- "traefik.http.services.podcast.loadbalancer.server.port=8000"
networks:
- collaboration_collaboration
networks:
collaboration_collaboration:
external: true