68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
package app
|
|
|
|
import "errors"
|
|
|
|
// modelCapabilityArgumentError preserves the machine-readable field that caused
|
|
// a capability rejection while keeping the normal 400 AppError projection for
|
|
// non-Agent task callers.
|
|
type modelCapabilityArgumentError struct {
|
|
*AppError
|
|
Field string
|
|
Issue string
|
|
}
|
|
|
|
func (e *modelCapabilityArgumentError) Unwrap() error {
|
|
if e == nil {
|
|
return nil
|
|
}
|
|
return e.AppError
|
|
}
|
|
|
|
func newModelCapabilityArgumentError(field, issue string, cause error) error {
|
|
if cause == nil {
|
|
cause = BadAuthRequest("模型能力参数无效")
|
|
}
|
|
return &modelCapabilityArgumentError{AppError: BadAuthRequest(cause.Error()), Field: field, Issue: issue}
|
|
}
|
|
|
|
func modelCapabilityMismatchError(match CapabilityMatch) error {
|
|
details := map[string]any{"capabilityIssues": match.Issues}
|
|
for _, issue := range match.Issues {
|
|
if issue.Kind != "option" && issue.Kind != "image_parameter" {
|
|
continue
|
|
}
|
|
field := issue.Name
|
|
if field == "vquality" {
|
|
field = "quality"
|
|
}
|
|
details["field"] = field
|
|
details["issue"] = "unsupported_value"
|
|
details["message"] = issue.Reason
|
|
break
|
|
}
|
|
return NewModelError(ErrCodeModelCapabilityNotSupported, "所选模型不支持当前请求").WithDetails(details)
|
|
}
|
|
|
|
func cloudAgentMediaCapabilityArgumentError(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
var argumentErr *modelCapabilityArgumentError
|
|
if errors.As(err, &argumentErr) && argumentErr != nil && argumentErr.Field != "" {
|
|
return cloudAgentFieldError(argumentErr.Field, argumentErr.Issue, argumentErr.Error())
|
|
}
|
|
var modelErr *ModelError
|
|
if errors.As(err, &modelErr) && modelErr != nil {
|
|
field, _ := modelErr.Details["field"].(string)
|
|
issue, _ := modelErr.Details["issue"].(string)
|
|
if field != "" && issue != "" {
|
|
message, _ := modelErr.Details["message"].(string)
|
|
if message == "" {
|
|
message = modelErr.Error()
|
|
}
|
|
return cloudAgentFieldError(field, issue, message+";请按本回合 model_list 返回的能力参数修正后重试")
|
|
}
|
|
}
|
|
return nil
|
|
}
|