Architecture — youtube_hate_detector
Runtime (production)
flowchart LR
Browser[React SPA]
API[FastAPI :8000]
MS[ModelService]
YT[YouTube Data API]
Browser -->|HTTP JSON| API
API --> MS
API --> YT
- UI:
frontend/built tofrontend/dist, served by FastAPIStaticFilesin production. - Inference: Only
ModelServiceinsrc/service/loads models. - Catalog:
configs/model_catalog.yaml— baselines (LR, frozen BERT) + production meta-stack. - Suggested videos:
configs/suggested_videos.yaml— YouTube video IDs for the right rail.
Local development
| Process | Command | Port |
|---|---|---|
| API | uv run uvicorn src.api.main:app --reload |
8000 |
| UI | cd frontend && npm run dev |
5173 (proxies API) |
Docker
Single service youtube_hate_detector-app on port 8000 (API + static UI).
API layout
src/api/
main.py # app factory, CORS, static mount
schemas.py # Pydantic models
services.py # predict helpers
youtube.py # comment fetch + metadata
state.py # shared app state
routes/
health.py
models.py
predict.py
videos.py