fix(distributor): resolve model for GET /v1/video/generations/:task_id (#5133)
This commit is contained in:
@@ -298,6 +298,7 @@ func getModelRequest(c *gin.Context) (*ModelRequest, bool, error) {
|
|||||||
} else if c.Request.Method == http.MethodGet {
|
} else if c.Request.Method == http.MethodGet {
|
||||||
relayMode = relayconstant.RelayModeVideoFetchByID
|
relayMode = relayconstant.RelayModeVideoFetchByID
|
||||||
shouldSelectChannel = false
|
shouldSelectChannel = false
|
||||||
|
modelRequest.Model = getTaskOriginModelName(c)
|
||||||
}
|
}
|
||||||
c.Set("relay_mode", relayMode)
|
c.Set("relay_mode", relayMode)
|
||||||
} else if strings.Contains(c.Request.URL.Path, "/v1/video/generations") {
|
} else if strings.Contains(c.Request.URL.Path, "/v1/video/generations") {
|
||||||
@@ -312,6 +313,7 @@ func getModelRequest(c *gin.Context) (*ModelRequest, bool, error) {
|
|||||||
} else if c.Request.Method == http.MethodGet {
|
} else if c.Request.Method == http.MethodGet {
|
||||||
relayMode = relayconstant.RelayModeVideoFetchByID
|
relayMode = relayconstant.RelayModeVideoFetchByID
|
||||||
shouldSelectChannel = false
|
shouldSelectChannel = false
|
||||||
|
modelRequest.Model = getTaskOriginModelName(c)
|
||||||
}
|
}
|
||||||
if _, ok := c.Get("relay_mode"); !ok {
|
if _, ok := c.Get("relay_mode"); !ok {
|
||||||
c.Set("relay_mode", relayMode)
|
c.Set("relay_mode", relayMode)
|
||||||
@@ -396,6 +398,31 @@ func getModelRequest(c *gin.Context) (*ModelRequest, bool, error) {
|
|||||||
return &modelRequest, shouldSelectChannel, nil
|
return &modelRequest, shouldSelectChannel, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修复 #4834: GET /v1/video/generations/:task_id && /v1/video/:task_id 此前不解析 model,
|
||||||
|
// 当 token 启用「可用模型限制」时,下游 modelLimitEnable 校验会因
|
||||||
|
// modelRequest.Model 为空而误报 "This token has no access to model"。
|
||||||
|
// 从已存储的任务记录中回填 OriginModelName 即可让校验走在正确的模型上。
|
||||||
|
func getTaskOriginModelName(c *gin.Context) string {
|
||||||
|
if !common.GetContextKeyBool(c, constant.ContextKeyTokenModelLimitEnabled) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
taskId := c.Param("task_id")
|
||||||
|
if taskId == "" {
|
||||||
|
// jimeng adapter
|
||||||
|
taskId = c.GetString("task_id")
|
||||||
|
}
|
||||||
|
if taskId == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
userId := c.GetInt("id")
|
||||||
|
if task, exist, err := model.GetByTaskId(userId, taskId); err == nil && exist && task != nil {
|
||||||
|
return task.Properties.OriginModelName
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, modelName string) *types.NewAPIError {
|
func SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, modelName string) *types.NewAPIError {
|
||||||
c.Set("original_model", modelName) // for retry
|
c.Set("original_model", modelName) // for retry
|
||||||
if channel == nil {
|
if channel == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user