from enum import Enum class KlErrorCode(Enum): """可灵AI API错误码枚举""" SUCCESS = (0, "请求成功", "请求成功") # 身份验证错误 (401) AUTH_FAILED = (1000, "身份验证失败", "检查Authorization是否正确") AUTH_EMPTY = (1001, "Authorization为空", "在RequestHeader中填写正确的Authorization") AUTH_INVALID = (1002, "Authorization值非法", "在RequestHeader中填写正确的Authorization") AUTH_NOT_EFFECTIVE = (1003, "Authorization未到有效时间", "检查token的开始生效时间,等待生效或重新签发") AUTH_EXPIRED = (1004, "Authorization已失效", "检查token的有效期,重新签发") # 账户异常 (429) ACCOUNT_EXCEPTION = (1100, "账户异常", "检查账户配置信息") ACCOUNT_ARREARS = (1101, "账户欠费 (后付费场景)", "进行账户充值,确保余额充足") RESOURCE_EXHAUSTED = (1102, "资源包已用完/已过期(预付费场景)", "购买额外的资源包,或开通后付费服务(如有)") # 权限错误 (403) NO_PERMISSION = (1103, "请求的资源无权限,如接口/模型", "检查账户权限") # 请求参数非法 (400/404) PARAM_INVALID = (1200, "请求参数非法", "检查请求参数是否正确") PARAM_ERROR = (1201, "参数非法,如key写错或value非法", "参考返回体中message字段的具体信息,修改请求参数") METHOD_INVALID = (1202, "请求的method无效", "查看接口文档,使用正确的requestmethod") RESOURCE_NOT_EXIST = (1203, "请求的资源不存在,如模型", "参考返回体中message字段的具体信息,修改请求参数") # 触发策略 (400/429) POLICY_TRIGGERED = (1300, "触发平台策略", "检查是否触发平台策略") CONTENT_SECURITY = (1301, "触发平台的内容安全策略", "检查输入内容,修改后重新发起请求") RATE_LIMIT = (1302, "API请求过快,超过平台速率限制", "降低请求频率、稍后重试,或联系客服增加限额") CONCURRENT_LIMIT = (1303, "并发或QPS超出预付费资源包限制", "降低请求频率、稍后重试,或联系客服增加限额") IP_WHITELIST = (1304, "触发平台的IP白名单策略", "联系客服") # 内部错误 (500/503/504) INTERNAL_ERROR = (5000, "服务器内部错误", "稍后重试,或联系客服") SERVICE_UNAVAILABLE = (5001, "服务器暂时不可用,通常是在维护", "稍后重试,或联系客服") INTERNAL_TIMEOUT = (5002, "服务器内部超时,通常是发生积压", "稍后重试,或联系客服") def __init__(self, code, message, solution): self.code = code self.message = message self.solution = solution @staticmethod def get_by_code(code): """根据错误码获取枚举实例""" for error_code in KlErrorCode: if error_code.code == code: return error_code return None @staticmethod def get_message_by_code(code): """获取错误消息""" error_code = KlErrorCode.get_by_code(code) return error_code.message if error_code else "未知错误" @staticmethod def get_solution_by_code(code): """获取解决方案""" error_code = KlErrorCode.get_by_code(code) return error_code.solution if error_code else "请联系客服" @staticmethod def is_success(code): """检查是否成功""" return code == KlErrorCode.SUCCESS.code @staticmethod def is_retryable(code): """检查是否需要重试""" return code in [ KlErrorCode.RATE_LIMIT.code, KlErrorCode.CONCURRENT_LIMIT.code, KlErrorCode.INTERNAL_ERROR.code, KlErrorCode.SERVICE_UNAVAILABLE.code, KlErrorCode.INTERNAL_TIMEOUT.code ] @staticmethod def is_account_issue(code): """检查是否是账户问题""" return code in [ KlErrorCode.ACCOUNT_EXCEPTION.code, KlErrorCode.ACCOUNT_ARREARS.code, KlErrorCode.RESOURCE_EXHAUSTED.code, KlErrorCode.NO_PERMISSION.code ]