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},请联系技术支持";
}
}