fix(core): 对抗式交叉验证发现的 4 个 critical + 关键 major
- 额度泄漏(critical):流式 agent 客户端断连抛 GeneratorExit(BaseException)逃过 except,
预扣额度冻结。改 try/finally + settled 标志兜底释放。
- 默认图像模型(critical):0006 只停用 yunqi,没停火山 Seedream(bootstrap 种入 active 且更早),
get_default_model 仍选 Seedream → 参考图分镜/模特库被架空。改为停用所有非 tokenssr 图像模型 +
provider down→up 自愈置 active。
- 故事板参考提示词(critical):image_edit 分支复用 request_payload['prompt'](恒真)→ refs 版
锁脸锁商品提示词成死代码,参考图白传。改为强制用 refs 版提示词。
- 凭证解析(major):build_provider 官方直连分支丢了 DB api_key,与中转站路径优先级不一致。
统一走 resolve_provider_credentials。
- JSON 抽取(major):_extract_json 取首个围栏块(易抓示例块)+ rfind('}') 越界。改为取末个
合法草稿块 + 字符串感知的括号配平扫描。
- 前端兜底(major):流式已成功(saved)但收尾抖动时 catch 仍回退旧端点 → 重复生成+扣费。
改为按 ok/收到事件 判定,只在零事件时回退。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
6464001f84
commit
a625f86b38
@@ -36,6 +36,11 @@ def seed(apps, schema_editor):
|
||||
if not tokenssr.base_url:
|
||||
tokenssr.base_url = TOKENSSR_BASE_URL
|
||||
tokenssr.save(update_fields=["base_url"])
|
||||
# down→up 循环后 get_or_create 命中已存在(可能 disabled)的 provider,不会用 defaults 覆盖 status,
|
||||
# 必须显式确保 active,否则 get_default_model(要求 provider__status=active)选不到 tokenssr 模型。
|
||||
if tokenssr.status != "active":
|
||||
tokenssr.status = "active"
|
||||
tokenssr.save(update_fields=["status"])
|
||||
|
||||
for name, display, meta in TEXT_MODELS:
|
||||
ModelConfig.objects.update_or_create(
|
||||
@@ -64,8 +69,10 @@ def seed(apps, schema_editor):
|
||||
},
|
||||
)
|
||||
|
||||
# 图像主力切到 tokenssr:gpt-image-2;停用只能纯文生图的 yunqi:gpt-image-2(参考图分镜要靠 tokenssr)
|
||||
ModelConfig.objects.filter(provider__name="yunqi", capability="image").update(status="disabled")
|
||||
# 图像主力切到 tokenssr:gpt-image-2(唯一 active 图像模型)。
|
||||
# 必须停用**所有**非 tokenssr 图像模型 —— 否则 catalog bootstrap 种的火山 Seedream(active 且 created_at 更早)
|
||||
# 会被 get_default_model(order_by created_at)选中,参考图分镜/模特库(需 image_edit)全部被架空。
|
||||
ModelConfig.objects.filter(capability="image").exclude(provider__name="tokenssr").update(status="disabled")
|
||||
|
||||
|
||||
def unseed(apps, schema_editor):
|
||||
@@ -73,7 +80,8 @@ def unseed(apps, schema_editor):
|
||||
ModelProvider = apps.get_model("ai", "ModelProvider")
|
||||
ModelConfig = apps.get_model("ai", "ModelConfig")
|
||||
ModelConfig.objects.filter(provider__name="tokenssr").update(status="disabled")
|
||||
ModelConfig.objects.filter(provider__name="yunqi", capability="image").update(status="active")
|
||||
# 恢复被本迁移停用的非 tokenssr 图像模型(火山 Seedream / yunqi)
|
||||
ModelConfig.objects.filter(capability="image").exclude(provider__name="tokenssr").update(status="active")
|
||||
ModelProvider.objects.filter(name="tokenssr").update(status="disabled")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user