44 lines
1.9 KiB
Diff
44 lines
1.9 KiB
Diff
--- server/admin_api.py
|
|
|
|
+++ local/admin_api.py
|
|
|
|
@@ -35,5 +35,5 @@
|
|
|
|
from typing import Any, Callable
|
|
|
|
-from fastapi import Depends, FastAPI, HTTPException, Request, status
|
|
+from fastapi import Depends, FastAPI, HTTPException, Query, Request, status
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import FileResponse, RedirectResponse
|
|
@@ -883,4 +883,30 @@
|
|
|
|
)
|
|
|
|
+ @app.get("/api/v2/stats/model-usage")
|
|
+ async def model_usage_stats(
|
|
+ days: int = Query(default=7, ge=1, le=90),
|
|
+ purpose: str = Query(default="", pattern="^(chat|guard|knowledge)?$"),
|
|
+ provider_id: str = Query(default="", max_length=256),
|
|
+ model: str = Query(default="", max_length=512),
|
|
+ account_id: int | None = None,
|
|
+ principal: Principal = Depends(require("stats:read")),
|
|
+ ) -> dict:
|
|
+ return database.model_usage_stats(
|
|
+ days, resolve_admin_tenant(principal, account_id), purpose, provider_id, model)
|
|
+
|
|
+ @app.get("/api/v2/stats/model-usage/log")
|
|
+ async def model_usage_log(
|
|
+ days: int = Query(default=7, ge=1, le=90),
|
|
+ limit: int = Query(default=50, ge=1, le=200),
|
|
+ offset: int = Query(default=0, ge=0),
|
|
+ purpose: str = Query(default="", pattern="^(chat|guard|knowledge)?$"),
|
|
+ provider_id: str = Query(default="", max_length=256),
|
|
+ model: str = Query(default="", max_length=512),
|
|
+ account_id: int | None = None,
|
|
+ principal: Principal = Depends(require("stats:read")),
|
|
+ ) -> dict:
|
|
+ return database.list_model_usage(
|
|
+ days, limit, offset, resolve_admin_tenant(principal, account_id), purpose, provider_id, model)
|
|
+
|
|
# ── 桌面端配置 ───────────────────────────────────────────────────────
|
|
# 这一组是从老网页后台整体搬过来的("能力开关 / 模型与身份 / MCP 服务器"
|