Skip to content

Commit c53ac8f

Browse files
committed
feat(Model Configuration): Supported Authorized Space
1 parent 9b72922 commit c53ac8f

3 files changed

Lines changed: 92 additions & 0 deletions

File tree

backend/apps/swagger/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@
9696
"custom_model": "Custom Model",
9797
"system_model_ws_mapping": "Query Model-Workspace Authorization Relationships",
9898
"system_model_ws_mapping_update": "Update Model-Workspace Authorization Relationships",
99+
"system_model_ws_mapping_add": "Add Model-Workspace Authorization Relationships",
100+
"system_model_ws_mapping_delete": "Delete Model-Workspace Authorization Relationships",
99101
"system_model_list_by_ws": "Get Model List by Workspace",
100102
"model_name": "Name",
101103
"model_type": "Type",

backend/apps/swagger/locales/zh.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@
9696
"custom_model": "自定义模型",
9797
"system_model_ws_mapping": "查询模型授权工作空间的关联关系",
9898
"system_model_ws_mapping_update": "更新模型授权工作空间的关联关系",
99+
"system_model_ws_mapping_add": "新增模型授权工作空间的关联关系",
100+
"system_model_ws_mapping_delete": "删除模型授权工作空间的关联关系",
99101
"system_model_list_by_ws": "根据工作空间获取模型列表",
100102
"model_name": "名称",
101103
"model_type": "类型",

backend/apps/system/api/aimodel.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,94 @@ async def update_model_ws_mapping_by_id(
264264
return [str(ws_id) for ws_id in ws_ids]
265265

266266

267+
# 新增映射(在已有基础上追加)
268+
@router.post("/{id}/ws_mapping", response_model=List[str], summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add",
269+
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add")
270+
@require_permissions(permission=SqlbotPermission(role=['admin']))
271+
async def add_model_ws_mapping_by_id(
272+
session: SessionDep,
273+
id: int = Path(description="ID"),
274+
ws_ids: List[str] = Body(description="workspace id list"),
275+
):
276+
if ws_ids is None:
277+
ws_ids = []
278+
ws_ids = list({int(ws_id) for ws_id in ws_ids})
279+
280+
db_model = session.get(AiModelDetail, id)
281+
if not db_model:
282+
raise ValueError(f"AiModelDetail with id {id} not found")
283+
284+
# 查询已存在的映射,过滤掉重复的
285+
existing_stmt = (
286+
select(AiModelWorkspaceMapping.workspace_id)
287+
.where(
288+
AiModelWorkspaceMapping.ai_model_id == id,
289+
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
290+
)
291+
)
292+
existing_ws_ids = set(session.exec(existing_stmt).all())
293+
294+
# 只插入不存在的映射
295+
new_ws_ids = [ws_id for ws_id in ws_ids if ws_id not in existing_ws_ids]
296+
for ws_id in new_ws_ids:
297+
session.add(
298+
AiModelWorkspaceMapping(ai_model_id=id, workspace_id=ws_id)
299+
)
300+
301+
session.commit()
302+
303+
# 返回完整的映射列表
304+
all_stmt = (
305+
select(AiModelWorkspaceMapping.workspace_id)
306+
.where(AiModelWorkspaceMapping.ai_model_id == id)
307+
.distinct()
308+
)
309+
all_ws_ids: List[int] = session.exec(all_stmt).all()
310+
311+
return [str(ws_id) for ws_id in all_ws_ids]
312+
313+
314+
# 删除指定映射
315+
@router.delete("/{id}/ws_mapping", response_model=List[str],
316+
summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete",
317+
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete")
318+
@require_permissions(permission=SqlbotPermission(role=['admin']))
319+
async def delete_model_ws_mapping_by_id(
320+
session: SessionDep,
321+
id: int = Path(description="ID"),
322+
ws_ids: List[str] = Body(description="workspace id list"),
323+
):
324+
if ws_ids is None:
325+
ws_ids = []
326+
ws_ids = list({int(ws_id) for ws_id in ws_ids})
327+
328+
db_model = session.get(AiModelDetail, id)
329+
if not db_model:
330+
raise ValueError(f"AiModelDetail with id {id} not found")
331+
332+
# 只删除指定的映射
333+
if ws_ids:
334+
session.execute(
335+
delete(AiModelWorkspaceMapping)
336+
.where(
337+
AiModelWorkspaceMapping.ai_model_id == id,
338+
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
339+
)
340+
)
341+
342+
session.commit()
343+
344+
# 返回剩余的映射列表
345+
stmt = (
346+
select(AiModelWorkspaceMapping.workspace_id)
347+
.where(AiModelWorkspaceMapping.ai_model_id == id)
348+
.distinct()
349+
)
350+
remaining_ws_ids: List[int] = session.exec(stmt).all()
351+
352+
return [str(ws_id) for ws_id in remaining_ws_ids]
353+
354+
267355
@router.get("/list/by_ws", response_model=List[AiModelBrief], summary=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws",
268356
description=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws")
269357
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))

0 commit comments

Comments
 (0)