using OASystem.API.OAMethodLib.TokenHubAI.Models; namespace OASystem.API.OAMethodLib.TokenHubAI; public static class TokenHubErrorExtensions { /// /// 判断是否为 API Key 相关错误 /// public static bool IsApiKeyError(this TokenHubException ex) { return ex.ErrorCode is TokenHubErrorCode.InvalidApiKey or TokenHubErrorCode.ApiKeyExpired or TokenHubErrorCode.ApiKeyDisabled or TokenHubErrorCode.Unauthorized; } /// /// 判断是否为模型相关错误 /// public static bool IsModelError(this TokenHubException ex) { return ex.ErrorCode is TokenHubErrorCode.ModelNotFound or TokenHubErrorCode.UnsupportedModel or TokenHubErrorCode.ModelAccessDenied; } /// /// 判断是否为限流错误 /// public static bool IsRateLimitError(this TokenHubException ex) { return TokenHubErrorCode.IsRateLimitError(ex.ErrorCode); } /// /// 判断是否为计费错误 /// public static bool IsBillingError(this TokenHubException ex) { return TokenHubErrorCode.IsBillingError(ex.ErrorCode); } private static readonly IReadOnlyDictionary ErrorMessages = new Dictionary { // ============================================================ // 400 系列 - 请求参数错误 (HTTP 400) // ============================================================ ["400001"] = "请求体格式无效,请检查请求内容是否为合法JSON", ["400002"] = "请求参数不合法,请检查必填字段是否缺失或值是否正确", ["400003"] = "输入内容过长,超出模型上下文窗口限制,请减少输入长度", ["400004"] = "请求的模型不存在,请检查模型名称拼写是否正确", ["400005"] = "当前模型不支持该请求类型或能力,请检查模型兼容性", ["400006"] = "请求的响应格式不被模型支持,请使用支持的格式类型", ["401006"] = "模型服务当前处于离线状态,请稍后重试或检查模型配置", // ============================================================ // 401 系列 - 鉴权错误 (HTTP 401) // ============================================================ ["401001"] = "未携带有效的认证信息,请检查Authorization请求头", ["401002"] = "API Key无效,请检查您的密钥配置是否正确", ["401003"] = "API Key已过期,请重新生成新的API Key", ["401004"] = "API Key已被禁用,请联系管理员或检查控制台状态", ["401005"] = "签名验证失败,请检查签名算法和密钥是否正确", // ============================================================ // 402 系列 - 计费/套餐错误 (HTTP 402) // ============================================================ ["401007"] = "当前Endpoint无可用的免费套餐,请购买或升级套餐", ["401008"] = "免费配额已耗尽,请升级套餐或等待配额周期重置", ["403004"] = "账户余额不足,请及时充值以恢复服务", // ============================================================ // 403 系列 - 权限错误 (HTTP 403) // ============================================================ ["403001"] = "套餐包已被禁用,请检查套餐状态或联系管理员", ["403002"] = "当前API Key未被授权访问该模型,请申请相应权限", ["403003"] = "账号已被封禁,请联系技术支持处理", ["403005"] = "来源IP不在白名单内,请在控制台添加当前IP到白名单", // ============================================================ // 429 系列 - 限流错误 (HTTP 429) // ============================================================ ["429001"] = "请求频率超出限制,请降低调用频率或联系平台提升配额", ["429002"] = "每分钟请求数超限,请降低调用频率", ["429003"] = "每分钟Token数超限,请降低输入长度或调用频率", ["429004"] = "每日Token数超限,请控制日用量或升级套餐", ["429005"] = "并发请求数超限,请减少同时并发数", // ============================================================ // 499/410 系列 - 连接/会话错误 // ============================================================ ["499001"] = "请求已被客户端取消,请检查客户端连接状态", ["410001"] = "会话已过期或绑定的服务不可用,请重新创建会话", // ============================================================ // 451 - 内容安全错误 (HTTP 451) // ============================================================ ["451001"] = "输入或输出内容触发了安全策略,请检查内容是否合规", // ============================================================ // 500+ 系列 - 服务端错误 // ============================================================ ["500001"] = "服务内部发生错误,请稍后重试或联系技术支持", ["502001"] = "上游模型服务暂时不可用,请稍后重试", ["503001"] = "服务暂时不可用,请稍后重试", ["504001"] = "服务响应超时,请稍后重试", }; /// /// 获取错误码对应的中文描述 /// public static string GetMessage(string errorCode) { return ErrorMessages.TryGetValue(errorCode, out var message) ? message : $"未知错误,错误码: {errorCode},请联系技术支持"; } }