TokenHubErrorExtensions.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using OASystem.API.OAMethodLib.TokenHubAI.Models;
  2. namespace OASystem.API.OAMethodLib.TokenHubAI;
  3. public static class TokenHubErrorExtensions
  4. {
  5. /// <summary>
  6. /// 判断是否为 API Key 相关错误
  7. /// </summary>
  8. public static bool IsApiKeyError(this TokenHubException ex)
  9. {
  10. return ex.ErrorCode is TokenHubErrorCode.InvalidApiKey
  11. or TokenHubErrorCode.ApiKeyExpired
  12. or TokenHubErrorCode.ApiKeyDisabled
  13. or TokenHubErrorCode.Unauthorized;
  14. }
  15. /// <summary>
  16. /// 判断是否为模型相关错误
  17. /// </summary>
  18. public static bool IsModelError(this TokenHubException ex)
  19. {
  20. return ex.ErrorCode is TokenHubErrorCode.ModelNotFound
  21. or TokenHubErrorCode.UnsupportedModel
  22. or TokenHubErrorCode.ModelAccessDenied;
  23. }
  24. /// <summary>
  25. /// 判断是否为限流错误
  26. /// </summary>
  27. public static bool IsRateLimitError(this TokenHubException ex)
  28. {
  29. return TokenHubErrorCode.IsRateLimitError(ex.ErrorCode);
  30. }
  31. /// <summary>
  32. /// 判断是否为计费错误
  33. /// </summary>
  34. public static bool IsBillingError(this TokenHubException ex)
  35. {
  36. return TokenHubErrorCode.IsBillingError(ex.ErrorCode);
  37. }
  38. private static readonly IReadOnlyDictionary<string, string> ErrorMessages =
  39. new Dictionary<string, string>
  40. {
  41. // ============================================================
  42. // 400 系列 - 请求参数错误 (HTTP 400)
  43. // ============================================================
  44. ["400001"] = "请求体格式无效,请检查请求内容是否为合法JSON",
  45. ["400002"] = "请求参数不合法,请检查必填字段是否缺失或值是否正确",
  46. ["400003"] = "输入内容过长,超出模型上下文窗口限制,请减少输入长度",
  47. ["400004"] = "请求的模型不存在,请检查模型名称拼写是否正确",
  48. ["400005"] = "当前模型不支持该请求类型或能力,请检查模型兼容性",
  49. ["400006"] = "请求的响应格式不被模型支持,请使用支持的格式类型",
  50. ["401006"] = "模型服务当前处于离线状态,请稍后重试或检查模型配置",
  51. // ============================================================
  52. // 401 系列 - 鉴权错误 (HTTP 401)
  53. // ============================================================
  54. ["401001"] = "未携带有效的认证信息,请检查Authorization请求头",
  55. ["401002"] = "API Key无效,请检查您的密钥配置是否正确",
  56. ["401003"] = "API Key已过期,请重新生成新的API Key",
  57. ["401004"] = "API Key已被禁用,请联系管理员或检查控制台状态",
  58. ["401005"] = "签名验证失败,请检查签名算法和密钥是否正确",
  59. // ============================================================
  60. // 402 系列 - 计费/套餐错误 (HTTP 402)
  61. // ============================================================
  62. ["401007"] = "当前Endpoint无可用的免费套餐,请购买或升级套餐",
  63. ["401008"] = "免费配额已耗尽,请升级套餐或等待配额周期重置",
  64. ["403004"] = "账户余额不足,请及时充值以恢复服务",
  65. // ============================================================
  66. // 403 系列 - 权限错误 (HTTP 403)
  67. // ============================================================
  68. ["403001"] = "套餐包已被禁用,请检查套餐状态或联系管理员",
  69. ["403002"] = "当前API Key未被授权访问该模型,请申请相应权限",
  70. ["403003"] = "账号已被封禁,请联系技术支持处理",
  71. ["403005"] = "来源IP不在白名单内,请在控制台添加当前IP到白名单",
  72. // ============================================================
  73. // 429 系列 - 限流错误 (HTTP 429)
  74. // ============================================================
  75. ["429001"] = "请求频率超出限制,请降低调用频率或联系平台提升配额",
  76. ["429002"] = "每分钟请求数超限,请降低调用频率",
  77. ["429003"] = "每分钟Token数超限,请降低输入长度或调用频率",
  78. ["429004"] = "每日Token数超限,请控制日用量或升级套餐",
  79. ["429005"] = "并发请求数超限,请减少同时并发数",
  80. // ============================================================
  81. // 499/410 系列 - 连接/会话错误
  82. // ============================================================
  83. ["499001"] = "请求已被客户端取消,请检查客户端连接状态",
  84. ["410001"] = "会话已过期或绑定的服务不可用,请重新创建会话",
  85. // ============================================================
  86. // 451 - 内容安全错误 (HTTP 451)
  87. // ============================================================
  88. ["451001"] = "输入或输出内容触发了安全策略,请检查内容是否合规",
  89. // ============================================================
  90. // 500+ 系列 - 服务端错误
  91. // ============================================================
  92. ["500001"] = "服务内部发生错误,请稍后重试或联系技术支持",
  93. ["502001"] = "上游模型服务暂时不可用,请稍后重试",
  94. ["503001"] = "服务暂时不可用,请稍后重试",
  95. ["504001"] = "服务响应超时,请稍后重试",
  96. };
  97. /// <summary>
  98. /// 获取错误码对应的中文描述
  99. /// </summary>
  100. public static string GetMessage(string errorCode)
  101. {
  102. return ErrorMessages.TryGetValue(errorCode, out var message)
  103. ? message
  104. : $"未知错误,错误码: {errorCode},请联系技术支持";
  105. }
  106. }