mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
feat(Model Configuration): Supported Authorized Space
This commit is contained in:
@@ -96,6 +96,8 @@
|
||||
"custom_model": "Custom Model",
|
||||
"system_model_ws_mapping": "Query Model-Workspace Authorization Relationships",
|
||||
"system_model_ws_mapping_update": "Update Model-Workspace Authorization Relationships",
|
||||
"system_model_ws_mapping_add": "Add Model-Workspace Authorization Relationships",
|
||||
"system_model_ws_mapping_delete": "Delete Model-Workspace Authorization Relationships",
|
||||
"system_model_list_by_ws": "Get Model List by Workspace",
|
||||
"model_name": "Name",
|
||||
"model_type": "Type",
|
||||
|
||||
@@ -96,6 +96,8 @@
|
||||
"custom_model": "自定义模型",
|
||||
"system_model_ws_mapping": "查询模型授权工作空间的关联关系",
|
||||
"system_model_ws_mapping_update": "更新模型授权工作空间的关联关系",
|
||||
"system_model_ws_mapping_add": "新增模型授权工作空间的关联关系",
|
||||
"system_model_ws_mapping_delete": "删除模型授权工作空间的关联关系",
|
||||
"system_model_list_by_ws": "根据工作空间获取模型列表",
|
||||
"model_name": "名称",
|
||||
"model_type": "类型",
|
||||
|
||||
@@ -264,6 +264,94 @@ async def update_model_ws_mapping_by_id(
|
||||
return [str(ws_id) for ws_id in ws_ids]
|
||||
|
||||
|
||||
# 新增映射(在已有基础上追加)
|
||||
@router.post("/{id}/ws_mapping", response_model=List[str], summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add",
|
||||
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add")
|
||||
@require_permissions(permission=SqlbotPermission(role=['admin']))
|
||||
async def add_model_ws_mapping_by_id(
|
||||
session: SessionDep,
|
||||
id: int = Path(description="ID"),
|
||||
ws_ids: List[str] = Body(description="workspace id list"),
|
||||
):
|
||||
if ws_ids is None:
|
||||
ws_ids = []
|
||||
ws_ids = list({int(ws_id) for ws_id in ws_ids})
|
||||
|
||||
db_model = session.get(AiModelDetail, id)
|
||||
if not db_model:
|
||||
raise ValueError(f"AiModelDetail with id {id} not found")
|
||||
|
||||
# 查询已存在的映射,过滤掉重复的
|
||||
existing_stmt = (
|
||||
select(AiModelWorkspaceMapping.workspace_id)
|
||||
.where(
|
||||
AiModelWorkspaceMapping.ai_model_id == id,
|
||||
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
|
||||
)
|
||||
)
|
||||
existing_ws_ids = set(session.exec(existing_stmt).all())
|
||||
|
||||
# 只插入不存在的映射
|
||||
new_ws_ids = [ws_id for ws_id in ws_ids if ws_id not in existing_ws_ids]
|
||||
for ws_id in new_ws_ids:
|
||||
session.add(
|
||||
AiModelWorkspaceMapping(ai_model_id=id, workspace_id=ws_id)
|
||||
)
|
||||
|
||||
session.commit()
|
||||
|
||||
# 返回完整的映射列表
|
||||
all_stmt = (
|
||||
select(AiModelWorkspaceMapping.workspace_id)
|
||||
.where(AiModelWorkspaceMapping.ai_model_id == id)
|
||||
.distinct()
|
||||
)
|
||||
all_ws_ids: List[int] = session.exec(all_stmt).all()
|
||||
|
||||
return [str(ws_id) for ws_id in all_ws_ids]
|
||||
|
||||
|
||||
# 删除指定映射
|
||||
@router.delete("/{id}/ws_mapping", response_model=List[str],
|
||||
summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete",
|
||||
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete")
|
||||
@require_permissions(permission=SqlbotPermission(role=['admin']))
|
||||
async def delete_model_ws_mapping_by_id(
|
||||
session: SessionDep,
|
||||
id: int = Path(description="ID"),
|
||||
ws_ids: List[str] = Body(description="workspace id list"),
|
||||
):
|
||||
if ws_ids is None:
|
||||
ws_ids = []
|
||||
ws_ids = list({int(ws_id) for ws_id in ws_ids})
|
||||
|
||||
db_model = session.get(AiModelDetail, id)
|
||||
if not db_model:
|
||||
raise ValueError(f"AiModelDetail with id {id} not found")
|
||||
|
||||
# 只删除指定的映射
|
||||
if ws_ids:
|
||||
session.execute(
|
||||
delete(AiModelWorkspaceMapping)
|
||||
.where(
|
||||
AiModelWorkspaceMapping.ai_model_id == id,
|
||||
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
|
||||
)
|
||||
)
|
||||
|
||||
session.commit()
|
||||
|
||||
# 返回剩余的映射列表
|
||||
stmt = (
|
||||
select(AiModelWorkspaceMapping.workspace_id)
|
||||
.where(AiModelWorkspaceMapping.ai_model_id == id)
|
||||
.distinct()
|
||||
)
|
||||
remaining_ws_ids: List[int] = session.exec(stmt).all()
|
||||
|
||||
return [str(ws_id) for ws_id in remaining_ws_ids]
|
||||
|
||||
|
||||
@router.get("/list/by_ws", response_model=List[AiModelBrief], summary=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws",
|
||||
description=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws")
|
||||
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))
|
||||
|
||||
Reference in New Issue
Block a user