Adds Redis-backed feature flags for vision stages with admin UI toggles and manual backfill trigger, photo upload and download routers with frontend upload modal, and rawpy-based RAW decoding with JPEG fallback for misnamed DNGs. Fixes pgvector serialization, is_trashed filter, and naive-datetime bind in incremental duplicate regrouping; bumps Celery time limits on regroup tasks beyond the 5-minute default. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
24 lines
877 B
Python
24 lines
877 B
Python
"""
|
|
Public feature-flag read API — lets the authenticated frontend know
|
|
which AI-powered sections to render.
|
|
|
|
This is NOT the admin mutation endpoint (that's in ``admin.py`` and
|
|
gated by ``require_admin``). Here we only expose the effective boolean
|
|
state so the UI can hide things like the People view, Tags view, or
|
|
text-search affordances when the underlying pipeline stage is off.
|
|
"""
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.dependencies import get_current_user
|
|
from app.models.user import User
|
|
from app.services.feature_flags import ALL_FLAGS, is_enabled
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("")
|
|
async def get_enabled_features(_: User = Depends(get_current_user)):
|
|
"""Return ``{flag_name: bool}`` for every known flag, reflecting
|
|
the currently effective value (admin override or YAML default)."""
|
|
return {name: is_enabled(name) for name in ALL_FLAGS}
|