33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
package service
|
|
|
|
import (
|
|
"model-gateway/model/dto"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
// parseModelError 解析模型错误响应,返回错误码与错误消息(无错误均返回空串)。
|
|
// 兼容两种形态(与任务创建端 model_task_start_service.go 一致):
|
|
// - OpenAI 嵌套 {"error":{"code","message"}} → 取 error.code / error.message
|
|
// - 扁平 {"code","message"} → code=20000000 视为成功码,不当作错误
|
|
//
|
|
// 解析失败返回 err,由调用方决定重试/终态。
|
|
func parseModelError(body []byte) (code, msg string, err error) {
|
|
errMsg := new(dto.ModelErrorResp)
|
|
if err = gconv.Struct(body, errMsg); err != nil {
|
|
return "", "", err
|
|
}
|
|
if !g.IsEmpty(errMsg.Error.Code) {
|
|
return errMsg.Error.Code, errMsg.Error.Message, nil
|
|
}
|
|
flat := new(dto.ModelError1Resp)
|
|
if err = gconv.Struct(body, flat); err != nil {
|
|
return "", "", err
|
|
}
|
|
if !g.IsEmpty(flat.Code) && flat.Code != 20000000 {
|
|
return gconv.String(flat.Code), flat.Message, nil
|
|
}
|
|
return "", "", nil
|
|
}
|