Spaces:
Running
Running
Display admin dashboard on root page
Browse files- Root "/" now shows admin dashboard instead of JSON
- Uses same template as /admin endpoint
- Auto-refresh every 10 seconds
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- api/routes.py +12 -11
api/routes.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
| 1 |
"""FastAPI route handlers."""
|
| 2 |
|
| 3 |
from fastapi import APIRouter, Depends, HTTPException, Request, Response
|
|
|
|
| 4 |
from loguru import logger
|
|
|
|
| 5 |
|
| 6 |
from config.settings import Settings
|
| 7 |
from core.anthropic import get_token_count
|
| 8 |
-
from core.session_tracker import SessionTracker
|
| 9 |
from providers.nvidia_nim import metrics as nvidia_nim_metrics
|
| 10 |
from providers.registry import ProviderRegistry
|
| 11 |
|
|
@@ -18,6 +19,8 @@ from .services import ClaudeProxyService
|
|
| 18 |
|
| 19 |
router = APIRouter()
|
| 20 |
|
|
|
|
|
|
|
| 21 |
DISCOVERED_MODEL_CREATED_AT = "1970-01-01T00:00:00Z"
|
| 22 |
|
| 23 |
|
|
@@ -197,16 +200,14 @@ async def probe_count_tokens(_auth=Depends(require_api_key)):
|
|
| 197 |
return _probe_response("POST, HEAD, OPTIONS")
|
| 198 |
|
| 199 |
|
| 200 |
-
@router.get("/")
|
| 201 |
-
async def root(
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
"active_sessions": len(tracker._sessions),
|
| 209 |
-
}
|
| 210 |
|
| 211 |
|
| 212 |
@router.api_route("/", methods=["HEAD", "OPTIONS"])
|
|
|
|
| 1 |
"""FastAPI route handlers."""
|
| 2 |
|
| 3 |
from fastapi import APIRouter, Depends, HTTPException, Request, Response
|
| 4 |
+
from fastapi.responses import HTMLResponse
|
| 5 |
from loguru import logger
|
| 6 |
+
from starlette.templating import Jinja2Templates
|
| 7 |
|
| 8 |
from config.settings import Settings
|
| 9 |
from core.anthropic import get_token_count
|
|
|
|
| 10 |
from providers.nvidia_nim import metrics as nvidia_nim_metrics
|
| 11 |
from providers.registry import ProviderRegistry
|
| 12 |
|
|
|
|
| 19 |
|
| 20 |
router = APIRouter()
|
| 21 |
|
| 22 |
+
templates = Jinja2Templates(directory="templates")
|
| 23 |
+
|
| 24 |
DISCOVERED_MODEL_CREATED_AT = "1970-01-01T00:00:00Z"
|
| 25 |
|
| 26 |
|
|
|
|
| 200 |
return _probe_response("POST, HEAD, OPTIONS")
|
| 201 |
|
| 202 |
|
| 203 |
+
@router.get("/", response_class=HTMLResponse)
|
| 204 |
+
async def root(request: Request, _auth=Depends(require_api_key)):
|
| 205 |
+
"""Root endpoint - displays admin dashboard."""
|
| 206 |
+
from .admin import _get_admin_data
|
| 207 |
+
|
| 208 |
+
data = _get_admin_data()
|
| 209 |
+
|
| 210 |
+
return templates.TemplateResponse("admin.html", {"request": request, **data})
|
|
|
|
|
|
|
| 211 |
|
| 212 |
|
| 213 |
@router.api_route("/", methods=["HEAD", "OPTIONS"])
|