Skip to content

运行适配器与依赖契约清理 ​

状态:implemented 类型:simplification Owner:backend/yuxi/modules/models/embed.py

问题 ​

Embedding 适配器继续接受 name/url/model_id 等旧别名,并在 provider 已完成凭据解析后再次把值当环境变量名。无生产或测试消费者的查询别名、模型信息字典函数、Agent 批量查询与 Workdir 前缀读取增加维护面。BaseAgent 的 checkpointer 异步方法只转发同步 factory。aiosqlite 只有测试消费者却属于生产依赖。

决策 ​

实现方案 ​

Embedding 构造只接收当前 selector 产生的字段,provider 凭据解析结果直接交给 executor;删除无消费者方法。图编译、性能探针与开发示例直接使用 PostgreSQL checkpointer factory,每次构图独立实例的语义由 factory 和真实数据库测试证明。aiosqlite 移入 test 依赖组,更新锁文件。性能探针直接装配正式 WorkerSettings,包装 coroutine 时保留 ARQ Function 的任务选项。

替代方案 ​

  • keep:继续维护旧别名和重复凭据解析,拒绝。
  • narrow:只改文档,实际调用面仍不收窄,拒绝。
  • replace:为旧形式新增适配器,无消费者,拒绝。
  • remove:收窄为真实 producer/consumer 契约,采用。

验证 ​

验收主张失败面语义 Owner直接证据 / 命令负向案例当前结果
Embedding 使用 provider 确定的配置与凭据二次环境解析覆盖正确值embedding selector / executor相关 unit与环境变量同名的实际凭据不得被替换Passed:HTTP mock 回读实际 Authorization;恢复二次解析后精确失败
图保持独立 saver 与共享 PG pool删除 wrapper 误引入缓存checkpointer / graphunit、真实 PG checkpoint 并发恢复持 A 锁时 B 能读取且字节不串线程Passed:真实 PG 并发 checkpoint 1 passed;graph 与 probe unit
无消费者入口与生产 SQLite 依赖删除import/export、fixture 或交付仍依赖对应源码 / pyproject / lock调用搜索、unit、uv lock check旧能力不存在Passed:调用搜索、backend unit 2654 passed;uv lock --project backend --offline(195 packages)

旧能力不存在:Embedding 旧构造参数、encode_queries/aencode_queries/get_embedding_model_info_by_id、AgentRepository.list_by_slugs、Workdir.read_file_prefix、BaseAgent._get_checkpointer 及生产 aiosqlite 声明不存在。

重新引入条件:出现明确当前 consumer 及单独边界责任;不为未来假设恢复别名。

后果 ​

不改变模型公开配置协议、知识索引或文件读取预算。开发/CI 镜像仍按当前装配安装 test 组;依赖分组准确表达 SQLite 只用于测试。

性能入口验证:test/unit/performance/test_probe_bootstrap.py 在独立进程中按两种 MATRIX_FINE_TIMING 模式安装实际探针,检查真实 WorkerSettings 的所有 Function 注册选项及其他后台作业注册;修改前因旧事件导出名失败,修改后 2 passed。开发示例和性能入口同步直接调用 PostgreSQL factory。

当前配置消费者:provider 的 api_key_env 是用户可指定的环境变量名,凭据解析由 provider 拥有;不能依据变量名没有固定字符串读取就删除模板。当前开发/CI 镜像明确安装 test 组,因此 aiosqlite 的测试装配仍保留。

真实 worker 装配验证:隔离 API 与 test.performance.probe 包装的正式 ARQ WorkerSettings 运行核心生命周期、扩展路径和协作树 29 项 E2E,全部通过;共享 PostgreSQL checkpoint、后台作业注册与 Cube 文件挂载均使用当前实现。

本项目基于 MIT License 开源,欢迎使用和贡献。