This commit refactors the application's error handling mechanism by introducing a new standardized error type, `types.NewAPIError`. It also renames common JSON utility functions for better clarity. Previously, internal error handling was tightly coupled to the `dto.OpenAIError` format. This change decouples the internal logic from the external API representation. Key changes: - A new `types.NewAPIError` struct is introduced to serve as a canonical internal representation for all API errors. - All relay adapters (OpenAI, Claude, Gemini, etc.) are updated to return `*types.NewAPIError`. - Controllers now convert the internal `NewAPIError` to the client-facing `OpenAIError` format at the API boundary, ensuring backward compatibility. - Channel auto-disable/enable logic is updated to use the new standardized error type. - JSON utility functions are renamed to align with Go's standard library conventions (e.g., `UnmarshalJson` -> `Unmarshal`, `EncodeJson` -> `Marshal`).
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package dto
|
|
|
|
import "one-api/types"
|
|
|
|
type OpenAIError struct {
|
|
Message string `json:"message"`
|
|
Type string `json:"type"`
|
|
Param string `json:"param"`
|
|
Code any `json:"code"`
|
|
}
|
|
|
|
type OpenAIErrorWithStatusCode struct {
|
|
Error OpenAIError `json:"error"`
|
|
StatusCode int `json:"status_code"`
|
|
LocalError bool
|
|
}
|
|
|
|
type GeneralErrorResponse struct {
|
|
Error types.OpenAIError `json:"error"`
|
|
Message string `json:"message"`
|
|
Msg string `json:"msg"`
|
|
Err string `json:"err"`
|
|
ErrorMsg string `json:"error_msg"`
|
|
Header struct {
|
|
Message string `json:"message"`
|
|
} `json:"header"`
|
|
Response struct {
|
|
Error struct {
|
|
Message string `json:"message"`
|
|
} `json:"error"`
|
|
} `json:"response"`
|
|
}
|
|
|
|
func (e GeneralErrorResponse) ToMessage() string {
|
|
if e.Error.Message != "" {
|
|
return e.Error.Message
|
|
}
|
|
if e.Message != "" {
|
|
return e.Message
|
|
}
|
|
if e.Msg != "" {
|
|
return e.Msg
|
|
}
|
|
if e.Err != "" {
|
|
return e.Err
|
|
}
|
|
if e.ErrorMsg != "" {
|
|
return e.ErrorMsg
|
|
}
|
|
if e.Header.Message != "" {
|
|
return e.Header.Message
|
|
}
|
|
if e.Response.Error.Message != "" {
|
|
return e.Response.Error.Message
|
|
}
|
|
return ""
|
|
}
|