errors.js
1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* 结构化审核错误(§3 契约)。装配自检失败、`llmGuardPort` 协议违约等场景抛它,
* 绝不静默吞错。
*
* 字段语义:
* - `code`:失败原因的稳定枚举字符串(见 `ModerationErrorCode`),调用方据此分流,
* 不依赖底层厂商内部码。
* - `retryable`:是否值得重试。装配错误 / 入参非法 = false;Port 临时不可用 / 网络抖动
* = true。调用方据此决定退避重试还是直接放弃。
* - `cause`:底层原始错误(如 `llmGuardPort.classify` 抛出的错误),保留链路。
*/
/**
* 失败原因枚举(稳定字符串)。
* @readonly
*/
export const ModerationErrorCode = Object.freeze({
MISSING_RULES: 'missing_rules',
BAD_RULES: 'bad_rules',
BAD_REQUEST: 'bad_request',
GUARD_PORT_FAILED: 'guard_port_failed',
GUARD_PORT_BAD_SHAPE: 'guard_port_bad_shape',
UNKNOWN: 'unknown',
})
export class ModerationError extends Error {
/**
* @param {object} info
* @param {string} info.code
* @param {boolean} [info.retryable]
* @param {unknown} [info.cause]
* @param {string} [info.message]
*/
constructor({ code, retryable, cause, message }) {
super(message || `[moderation] ${code}`)
this.name = 'ModerationError'
this.code = code
this.retryable = Boolean(retryable)
if (cause !== undefined) this.cause = cause
}
}