Files
infstellar 5ecda39843 Add unit tests for image processing worker, operation policy, reverse image provider, and scope handling
- Implement tests for the ImageProcessingWorker to validate task deduplication and policy interactions.
- Create tests for operation policy to ensure proper grant handling and error responses.
- Add tests for reverse image provider response structure to validate empty and malformed results.
- Develop comprehensive tests for scope resolution and service validation to ensure correct behavior in various scenarios.
2026-08-17 12:50:29 +08:00

4.2 KiB

Why

当前图片处理链由视觉任务隐式创建 Agent 任务、Agent 成功路径再触发 scope 级文本索引刷新,导致叶子任务承担编排职责,也让失败恢复、claim fencing、配额计量和“图片库一键补齐”难以使用同一套语义。需要把图片处理提升为独立的持久化能力,由专用 Worker 根据当前图片及其派生产物,只执行尚未完成或已经过期的阶段。

What Changes

  • 新增 scope-aware ImageProcessingWorker 和持久化图片处理 job,统一承接上传后的自动处理与图片库一键补齐。
  • 将固定处理顺序定义为视觉向量 Task、Agent 语境 Task、单图文本 embedding Task;任一叶子 Task 失败即停止后续阶段,但保留图片和已经可靠提交的阶段产物。
  • 每个阶段以当前 Meme SHA、模型、预处理、Agent skill/config 或 metadata hash 判断产物是否有效,重试和重新处理只执行第一个未完成阶段及其后续必要阶段。
  • 保留 visual_embedding_generation 和 meme_context_generation 作为独立持久任务,并新增 text_embedding_generation;叶子任务不再互相创建后续任务,图片处理 Worker 成为唯一的任务创建、复用和阶段推进者。
  • 将既有 reverse_image_policy=forbid|auto 冻结到图片处理 job revision 和 Agent Task;同图同策略的活动请求复用,不同策略保持 generation_policy_conflict,显式重试可以用新 revision 选择新策略。
  • 新增按单图增量写入并立即参与当前 scope 搜索的 text_embedding_generation,全库 cache_generation 只保留为显式重建、迁移和修复能力。
  • 上传成功后返回图片处理 job 标识,但上传自动流程不重启已有的终态失败 job;图片库一键处理按 scope 分页创建或复用逐图 job,将本次选择的反向图片策略传给每张图片,并把历史 failed、blocked 或 unknown_execution 视为用户显式重试,为其创建新的 job revision。
  • Agent operation 被 policy 拒绝时,图片处理阶段进入通用 blocked 并保存 operation_forbidden、operation_limit_exceeded 或 operation_policy_unavailable 及可选 retry_at;核心不按提示时间自动重试。
  • 专用 Worker 不沿用现有 PostgresTaskWorkerManager 的业务调度流程,但负责认领和执行上述三类图片叶子 Task,并复用经修复的数据库 claim、lease、generation fencing、scope 约束和资源并发原语;现有 Worker 继续处理其它系统任务。
  • BREAKING 视觉任务成功不再自动创建 Agent 任务,Agent 成功不再自动触发 scope 级 cache generation;调用方应观察统一图片处理 job 及其阶段状态。

Capabilities

New Capabilities

  • image-processing: 定义逐图处理 job、专用 Worker、阶段有效性、失败停止、policy 阻止、恢复与显式重试、图片库一键处理和部署生命周期。

Modified Capabilities

  • image-ingestion: 图片 durable 入库后改为创建或复用统一图片处理 job,而不是直接返回视觉任务作为处理链入口。
  • task-status: 以图片处理 job 暴露总体与阶段状态及叶子 task_id,保留视觉与 Agent 任务的独立诊断能力,并移除叶子任务和批次 finalizer 之间的隐式推进责任。
  • meme-search: 支持按单图 metadata hash 和 embedding 模型增量生成、更新或失效文本向量,并让有效向量无需全库 generation 即可参与搜索。

Impact

  • 主要影响 FastAPI 上传和图片库批量入口、任务状态 API、PostgreSQL job/stage 与文本向量 schema、Worker 生命周期、视觉/Agent handler、搜索 repository 和前端处理状态展示。
  • 需要迁移现有任务链和搜索 generation 数据,并保留显式全库索引重建作为维护与回滚工具。
  • add-operation-policy-hooks 必须改为在图片处理 Worker 准备创建或执行 Agent 阶段时处理 analysis.agent grant;上传、反向图片和删除的 operation 边界保持各自既有语义。
  • 开源部署可在 API 进程内启动同一 Worker,宿主部署可把它作为独立进程或容器运行;两种模式共享数据库事实来源和恢复协议。