From edf87cbe5e70b78626c8f72ef8ee019b54179e48 Mon Sep 17 00:00:00 2001 From: Pine Date: Mon, 7 Sep 2026 14:08:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=97=E5=8A=9B=E4=BB=A4=E7=89=8C?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E8=87=AA=E5=AE=9A=E4=B9=89=EF=BC=8C=E7=95=99?= =?UTF-8?q?=E7=A9=BA=E8=87=AA=E5=8A=A8=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - POST /opc/compute/tokens 接受 name 字段 - name 为空时按该用户名下令牌数自动命名(令牌1/令牌2/…) --- app/api/routers/rbac_opc.py | 14 ++++++++++++-- app/services/compute_client.py | 8 +++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/api/routers/rbac_opc.py b/app/api/routers/rbac_opc.py index b44fa20..d8fc49e 100644 --- a/app/api/routers/rbac_opc.py +++ b/app/api/routers/rbac_opc.py @@ -537,11 +537,21 @@ async def opc_compute_tokens(user: dict = Depends(require_roles("opc_member"))): return {"items": out} +class OpcTokenCreateRequest(BaseModel): + """创建算力令牌请求:name 为空时按用户令牌数自动编号(令牌1/令牌2/…)。""" + name: str = "" + + @router.post("/compute/tokens", summary="创建算力令牌") -async def opc_compute_tokens_create(user: dict = Depends(require_roles("opc_member"))): +async def opc_compute_tokens_create( + body: OpcTokenCreateRequest | None = None, + user: dict = Depends(require_roles("opc_member")), +): """为当前用户签发一枚消费令牌(供应商自动对接 PineAgents)。""" try: - token = await compute_client.issue_user_token(user.get("username"), name="OPC 端令牌") + token = await compute_client.issue_user_token( + user.get("username"), name=(body.name if body else "") + ) except compute_client.ComputeError as exc: raise HTTPException(status_code=502, detail=f"算力引擎对接失败: {exc}") from exc token = dict(token or {}) diff --git a/app/services/compute_client.py b/app/services/compute_client.py index 574b15b..8da21fc 100644 --- a/app/services/compute_client.py +++ b/app/services/compute_client.py @@ -111,7 +111,13 @@ async def get_logs(user_pat: str) -> dict: async def issue_user_token(username: str, name: str = "") -> dict: - """为某引擎用户签发消费令牌,返回 {id, key, ...}。""" + """为某引擎用户签发消费令牌,返回 {id, key, ...}。 + + name 为空时自动编号(按该用户名下已有令牌数 +1,如“令牌1”“令牌2”)。 + """ + if not name: + existing = await list_user_tokens(username) + name = f"令牌{len(existing or []) + 1}" data = await _request( method="POST", path="/api/token", headers=_admin_headers(), json={"username": username, "name": name},