diff --git a/server/internal/api/admin_channel_models.go b/server/internal/api/admin_channel_models.go index c479c1f..6fe720b 100644 --- a/server/internal/api/admin_channel_models.go +++ b/server/internal/api/admin_channel_models.go @@ -31,7 +31,8 @@ func (h *Handler) AdminChannelModels(c *gin.Context) { resp.OK(c, gin.H{"items": out}) } -// AdminChannelAddModel POST /api/v1/admin/channels/:id/models — 绑定模型到渠道。 +// AdminChannelAddModel POST /api/v1/admin/channels/:id/models — 手工添加渠道支持的模型。 +// 无需渠道具备 /v1/models 接口:直接填上游模型名,可选自定义名称作为客户端调用名。 func (h *Handler) AdminChannelAddModel(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { @@ -39,31 +40,35 @@ func (h *Handler) AdminChannelAddModel(c *gin.Context) { return } var req struct { - ModelName string `json:"model_name" binding:"required"` - UpstreamModel string `json:"upstream_model"` + UpstreamModel string `json:"upstream_model" binding:"required"` // 渠道侧真实模型名 + CustomName string `json:"custom_name"` // 客户端调用名,空=用上游名 Weight *int `json:"weight"` } if err := c.ShouldBindJSON(&req); err != nil { resp.Fail(c, http.StatusBadRequest, "invalid input") return } - var m store.Model - if err := h.a.DB.Where("name = ?", req.ModelName).First(&m).Error; err != nil { - resp.Fail(c, http.StatusNotFound, "model not found") - return + globalName := req.CustomName + if globalName == "" { + globalName = req.UpstreamModel } - upstream := req.UpstreamModel - if upstream == "" { - upstream = m.Name + // 解析或创建全局模型(客户端名) + var m store.Model + if err := h.a.DB.Where("name = ?", globalName).First(&m).Error; err != nil { + m = store.Model{Name: globalName, DisplayName: globalName, Enabled: true} + if err := h.a.DB.Create(&m).Error; err != nil { + resp.Fail(c, http.StatusInternalServerError, "failed to create model") + return + } } b := store.ChannelModelBinding{ - ChannelID: id, ModelID: m.ID, UpstreamModel: upstream, Weight: intOr(req.Weight, 1), + ChannelID: id, ModelID: m.ID, UpstreamModel: req.UpstreamModel, Weight: intOr(req.Weight, 1), } if err := h.a.DB.Create(&b).Error; err != nil { resp.Fail(c, http.StatusConflict, "binding may already exist") return } - resp.Created(c, gin.H{"id": b.ID, "model_id": m.ID, "model_name": m.Name, "upstream_model": upstream, "weight": b.Weight}) + resp.Created(c, gin.H{"id": b.ID, "model_id": m.ID, "model_name": m.Name, "upstream_model": req.UpstreamModel, "weight": b.Weight}) } // AdminChannelUpdateModel PATCH /api/v1/admin/channels/:id/models/:bid — 改映射名/权重。 diff --git a/web/src/views/admin/ChannelsView.vue b/web/src/views/admin/ChannelsView.vue index 9864699..87bc766 100644 --- a/web/src/views/admin/ChannelsView.vue +++ b/web/src/views/admin/ChannelsView.vue @@ -1,5 +1,5 @@