feat: 引用系统模型端点 referenceSystemModel
用户引用系统模型只存 apiKey/enabled/chatModel,配置实时跟随系统模型(不拷贝) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,11 @@ func (c *modelManage) CreateModel(ctx context.Context, req *dto.CreateModelManag
|
||||
return service.ModelManage.Create(ctx, req)
|
||||
}
|
||||
|
||||
// ReferenceModel 引用系统模型
|
||||
func (c *modelManage) ReferenceModel(ctx context.Context, req *dto.ReferenceSystemModelReq) (res *dto.ReferenceSystemModelRes, err error) {
|
||||
return service.ModelManage.ReferenceSystemModel(ctx, req)
|
||||
}
|
||||
|
||||
// UpdateModel 更改配置
|
||||
func (c *modelManage) UpdateModel(ctx context.Context, req *dto.UpdateModelManageReq) (res *dto.GetModelManageRes, err error) {
|
||||
return service.ModelManage.Update(ctx, req)
|
||||
|
||||
@@ -63,6 +63,63 @@ func (s *modelManageService) Create(ctx context.Context, req *dto.CreateModelMan
|
||||
return
|
||||
}
|
||||
|
||||
// ReferenceSystemModel 用户引用系统模型:只填 apiKey + 个人开关,配置实时跟随系统模型。
|
||||
// 不拷贝配置(解析层实时取系统行);同名唯一(复用 Create 语义);会话模型开关复用 CancelChatModel。
|
||||
func (s *modelManageService) ReferenceSystemModel(ctx context.Context, req *dto.ReferenceSystemModelReq) (res *dto.ReferenceSystemModelRes, err error) {
|
||||
err = gfdb.DB(ctx, public.DbNameModelGateway).Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
|
||||
user, err := utils.GetUserInfo(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 1)目标必须是系统模型
|
||||
sys, err := dao.ModelManage.GetNotTenantId(ctx, &dto.GetModelManageReq{Id: req.SystemModelId})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if sys == nil || sys.SystemModel == nil || !*sys.SystemModel {
|
||||
return fmt.Errorf("被引用的模型不存在或不是系统模型")
|
||||
}
|
||||
// 2)同名唯一:同一用户下不允许重复(引用行与自有模型同名同样拒绝)
|
||||
exist, err := dao.ModelManage.GetByCreatorAndName(ctx, user.UserName, sys.ModelName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if exist != nil {
|
||||
return fmt.Errorf("模型名称 [%s] 已存在,同一用户下不能重复添加同名模型", sys.ModelName)
|
||||
}
|
||||
// 3)设为会话模型 → 先取消旧会话模型(isSuperAdmin 语义与 Create 一致)
|
||||
var isSuperAdmin bool
|
||||
isSuperAdmin, err = IsSuperAdmin(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = s.CancelChatModel(ctx, sys.ModelType, req.ChatModel, isSuperAdmin); err != nil {
|
||||
return err
|
||||
}
|
||||
// 4)插引用行(配置列零值即可,解析层只读系统行配置)
|
||||
enabled := true
|
||||
if req.Enabled != nil {
|
||||
enabled = *req.Enabled
|
||||
}
|
||||
id, err := dao.ModelManage.Insert(ctx, &dto.CreateModelManageReq{
|
||||
ModelSupplier: sys.ModelSupplier,
|
||||
ModelName: sys.ModelName,
|
||||
ModelType: sys.ModelType,
|
||||
SystemModel: gconv.PtrBool(false),
|
||||
ChatModel: req.ChatModel,
|
||||
ApiKey: req.ApiKey,
|
||||
Enabled: gconv.PtrBool(enabled),
|
||||
RefSystemModelId: sys.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
res = &dto.ReferenceSystemModelRes{Id: id}
|
||||
return nil
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Update 更新模型配置
|
||||
func (s *modelManageService) Update(ctx context.Context, req *dto.UpdateModelManageReq) (res *dto.GetModelManageRes, err error) {
|
||||
err = gfdb.DB(ctx, public.DbNameModelGateway).Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
|
||||
|
||||
Reference in New Issue
Block a user