v88 功能增强:产品落盘持久化 + 生图网关适配 + 模板导出优化
- 产品持久化:每完成一个产品立即追加写入 products_pending.jsonl,崩溃不丢已完成产品,finish 读盘合并后统一写模板 - 503 致命错误提前终止:compose/product/seed_shot 端到端识别,提前终止搜索分析,丢弃未完成简报,保留已完成落盘产品直接合成模板 - 模特分配:material_library 合格模特图按任务序号独立随机,同 SPU 多款不再共用同一模特 - 图像网关适配:execution_mode/background 默认不再传入 yunfei 等标准网关,base_url 需带 /v1;429/5xx/空响应退避重试 - Pinterest 分析:删除 term 注入与纯文本降级,失败直接放弃;图片上传前 PIL 完整性校验;suitable_for_print=False 过滤丢弃 - 模板导出:不再产生空白 xlsx,文件名=模板原文件名_已填写;写入前按货号末 3 位升序排序 - 删除对接文档.md,更新 README,gitignore 排除测试产物
This commit is contained in:
@@ -8,10 +8,34 @@
|
||||
剔除非法记录并记录原因,保证下游拿到的数据"形状正确"。
|
||||
"""
|
||||
import functools
|
||||
import threading
|
||||
import traceback
|
||||
from typing import Any, Dict, List
|
||||
|
||||
|
||||
class ThreadSafeErrors:
|
||||
"""线程安全的错误收集器:并发节点(compose/product 等)内 append 错误用。
|
||||
|
||||
避免多个 worker 线程直接写共享 list 造成竞态;主线程统一合并到 state['errors']。
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._lock = threading.Lock()
|
||||
self._items: List[Dict[str, Any]] = []
|
||||
|
||||
def append(self, item: Dict[str, Any]) -> None:
|
||||
with self._lock:
|
||||
self._items.append(item)
|
||||
|
||||
def __iter__(self):
|
||||
with self._lock:
|
||||
return iter(list(self._items))
|
||||
|
||||
def __len__(self) -> int:
|
||||
with self._lock:
|
||||
return len(self._items)
|
||||
|
||||
|
||||
def with_fallback(node_name: str):
|
||||
"""装饰器:捕获节点异常,转为 state['errors'] 中的一条记录,返回空更新。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user