feat(contracts): WU2④ quota_exhausted 跨契约共享枚举同批新增三处

额度耗尽/池空要干净失败给用户可读拒因,而非含糊的「生成失败」。该失败因是跨契约
共享枚举(FailureReasonEnum 头注禁单边扩展),contract-first 同一批落三处保持一致:
- FailureReasonEnum 加 QUOTA_EXHAUSTED("quota_exhausted","生成额度已用完");
- contracts/api-schemas/aigc.yaml FailureReason.enum;
- contracts/dify-workflow-io.json output.failureReason.enum。
落库列 game_aigc_task.failure_reason(varchar(32)) 容得下(15 字符)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-07-07 12:21:45 -07:00
parent c13595fbc2
commit fe6079ba62
4 changed files with 34 additions and 4 deletions

View File

@ -292,5 +292,6 @@ components:
description: >-
生成失败原因分类(结构化错误码,映射用户可读提示)。取值与契约#6 dify-workflow-io.json output.failureReason 一致。
unsafe_prompt=Prompt 不安全 / intent_unclear=意图不清 / no_template_match=无匹配模板 /
config_invalid=配置校验失败 / llm_error=LLM 异常 / timeout=超时 / asset_gen_failed=素材生成失败。
enum: [unsafe_prompt, intent_unclear, no_template_match, config_invalid, llm_error, timeout, asset_gen_failed]
config_invalid=配置校验失败 / llm_error=LLM 异常 / timeout=超时 / asset_gen_failed=素材生成失败 /
quota_exhausted=生成额度已用完WU2 new-api per-user 额度耗尽/池空,网关 402/403
enum: [unsafe_prompt, intent_unclear, no_template_match, config_invalid, llm_error, timeout, asset_gen_failed, quota_exhausted]

View File

@ -47,7 +47,7 @@
"failureReason": {
"description": "失败原因分类status=failed 必填,映射用户可读提示)",
"type": "string",
"enum": ["unsafe_prompt", "intent_unclear", "no_template_match", "config_invalid", "llm_error", "timeout", "asset_gen_failed"]
"enum": ["unsafe_prompt", "intent_unclear", "no_template_match", "config_invalid", "llm_error", "timeout", "asset_gen_failed", "quota_exhausted"]
}
}
}

View File

@ -21,7 +21,10 @@ public enum FailureReasonEnum {
CONFIG_INVALID("config_invalid", "配置校验失败"),
LLM_ERROR("llm_error", "LLM 异常"),
TIMEOUT("timeout", "超时"),
ASSET_GEN_FAILED("asset_gen_failed", "素材生成失败");
ASSET_GEN_FAILED("asset_gen_failed", "素材生成失败"),
// WU2 §3.9new-api per-user 额度耗尽网关 402/403或派发期池空懒 claim 未果干净失败给可读拒因
// 区别于含糊的 llm_error跨契约共享枚举同批已加 aigc.yaml FailureReason.enum dify-workflow-io.json output.failureReason.enum
QUOTA_EXHAUSTED("quota_exhausted", "生成额度已用完");
/** 失败原因码(落库 varchar对齐契约枚举值 */
private final String reason;

View File

@ -0,0 +1,26 @@
package com.wanxiang.huijing.game.module.aigc.enums;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* {@link FailureReasonEnum} WU2 §3.9 新增值断言把守 {@code quota_exhausted} 跨契约共享枚举存在且取值稳定
*
* <p>该值须与 contracts/api-schemas/aigc.yaml FailureReason.enumcontracts/dify-workflow-io.json
* output.failureReason.enum 三处一致contract-firstdocs 门对账落库列 game_aigc_task.failure_reason(varchar(32)) 容得下 15 字符
*
* @author 绘境AI
*/
class FailureReasonEnumQuotaTest {
/** quota_exhausted 存在且码值/文案与契约一致(跨契约共享枚举,禁单边漂移)。 */
@Test
void testQuotaExhaustedPresent() {
assertEquals("quota_exhausted", FailureReasonEnum.QUOTA_EXHAUSTED.getReason());
assertEquals("生成额度已用完", FailureReasonEnum.QUOTA_EXHAUSTED.getMessage());
// 落库列 varchar(32) 容量兜底15 字符
assertEquals(15, FailureReasonEnum.QUOTA_EXHAUSTED.getReason().length());
}
}