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>
28 lines
804 B
YAML
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
|