mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 04:51:57 +00:00
2e7d6103ea
- 配置:database_url、checkpoint_url(启动时校验写法,只认 PostgreSQL)、连接池四项;启动日志写用的是哪种库(主机、库名、用户,不写密码) - 引擎(db/base.make_engine):SQLite 照旧 WAL、外键、忙等;PostgreSQL 用连接池、探活、会话时区 UTC,装上方言调整(db/postgres.py):建表时 String(n) 是不限长的 VARCHAR(SQLite 从不查长度,导过来的存量也可能超长)、ORDER BY 里可空列的 NULL 位置照 SQLite 补写(升序在前、降序在后,窗口函数里同样);Integer 列在 PostgreSQL 上是 BIGINT(列挂到表上时换成 with_variant,绑定参数跟着列按 BIGINT 转换);JSON 列两边都存原文(PostgreSQL 的 json,不用 JSONB:JSONB 重排对象里的键,快照的列序、表的先后读回来就变了);JSON 里的 NaN 写成 null、NUL 去掉(PostgreSQL 不收) - 迁移按方言:已有的列和索引用 inspector 认;PostgreSQL 上补列的类型取模型里这一列的、缺省值取迁移表里的(布尔 0/1 换成 false/true),ADD COLUMN IF NOT EXISTS;去重语句里的布尔按方言写;部分唯一索引补 postgresql_where;init_db 在 PostgreSQL 上拿咨询锁(几个进程同时启动不撞) - 应用库上的 SQLite 专用写法改成按方言编译的表达式(db/portable.py):json_extract 的十几处(口径召回、出具、对账、个人应用、幂等键、访问控制、数据源变化通知、剖析任务、待办超时)换成 json_eq / json_flag / json_text,json_type 换成 json_is_string(两种库同一套带类型的比较);能力登记的 sqlite insert 换成按会话方言的 insert_ignore;能力使用次数的 json_each 按方言分支;附件「没绑记录」的条件不靠 json 的等号;按报错文字认唯一约束的地方换成 unique_violation(按表和列认,两种库的报错都认得) - 断点(engine/checkpoints.py):PostgreSQL 时开 psycopg 连接池、在咨询锁里 setup;runner 只认 BaseCheckpointSaver,读断点仍只走 saver 的公开接口 - 依赖:新 extra postgres(asyncpg、psycopg[binary] 3、psycopg-pool、langgraph-checkpoint-postgres 3.1.2);langgraph-checkpoint 卡在 <4.3(断点格式就在这个包里,postgres 包新版要 4.3,不动已装的 4.2.0);锁文件补上新包 - 运行收尾:记 action.unknown、安排核实做完才把运行摘掉(以前先摘掉,等「不在跑了」再读事件的一方在库慢时读不到这一条) - 测试:AGENTLAB_TEST_DATABASE_URL 时跑在 PostgreSQL 上(每个 xdist 进程建自己的库、按事件循环分的连接池 tests/pgpool.py),不设时盖掉环境里的数据库地址照旧用 SQLite;scripts/test-postgres.sh 起临时的 postgres:16 容器跑全量;sqlite_only 标记;另开连接改库的几个竞态测试、触发器测试改成两种库都能跑(tests/appdb.py);新增 test_db_portable 守着方言调整、JSON 键序、超长字符串、大整数、NULL 排序、时区、PostgreSQL 老库迁移
71 lines
3.6 KiB
TOML
71 lines
3.6 KiB
TOML
[project]
|
||
name = "agentlab-backend"
|
||
version = "0.1.0"
|
||
description = "AgentLab — 可视化 Agent 编排实验台后端"
|
||
requires-python = ">=3.12"
|
||
dependencies = [
|
||
"fastapi>=0.115",
|
||
"uvicorn[standard]>=0.32",
|
||
"pydantic>=2.9",
|
||
"pydantic-settings>=2.6",
|
||
# db/base.py 给 aiosqlite 0.22 的 stop() 打了补丁(并发调用会死锁),SQLAlchemy 连接池
|
||
# 强制 terminate 时也会走到它。两个一起卡住小版本,换版本前先确认补丁还成立
|
||
"sqlalchemy[asyncio]>=2.0.36,<2.1",
|
||
"aiosqlite>=0.22.1,<0.23",
|
||
"greenlet>=3.1",
|
||
"httpx>=0.28",
|
||
"python-multipart>=0.0.17",
|
||
# 引擎直接依赖这一族的运行时语义:断点格式、interrupt / resume、流式事件、
|
||
# thinking 块。小版本也改过行为(resume 发 Command 在当前版本会直接崩),
|
||
# 所以上限卡到下一个小版本——升级要主动改这里、重新锁、跑一遍测试。
|
||
# 精确版本在 requirements.lock 里
|
||
"langgraph>=1.2.11,<1.3",
|
||
# 断点的序列化格式就在这个包里(langgraph 只要求 <5,上面那条卡不住它);SQLite、PostgreSQL 两种断点库
|
||
# 共用这一份格式,copy-to-postgres 搬断点也靠它前后一致
|
||
"langgraph-checkpoint>=4.2.0,<4.3",
|
||
"langgraph-checkpoint-sqlite>=3.1.1,<3.2",
|
||
"langchain-core>=1.6.3,<1.7",
|
||
"langchain-anthropic>=1.7.2,<1.8",
|
||
"langchain-openai>=1.6.2,<1.7",
|
||
"langchain-mcp-adapters>=0.3.2,<0.4",
|
||
"mcp>=1.30,<2",
|
||
"numpy>=2.0",
|
||
"jsonschema>=4.23",
|
||
"beautifulsoup4>=4.12",
|
||
"cryptography>=43.0",
|
||
# 数据目录的 SQL 检查(data/sqlcheck.py)按数据源方言解析 SQL。sqlglot 的大版本常改语法树节点和
|
||
# 方言行为(节点改名、某个写法从解析成 Anonymous 变成专门的节点),规则是照着这些节点写的,
|
||
# 上限卡到下一个大版本——升级要重新锁、跑一遍 test_sqlcheck
|
||
"sqlglot>=30.21,<31",
|
||
]
|
||
|
||
[project.optional-dependencies]
|
||
# microVM 沙箱(独立 Linux 内核)。约 35MB wheel + 首次约 50MB 运行时下载,
|
||
# 再加一次 OCI 镜像拉取(实测约 55s),所以不进默认安装。
|
||
# environment.yml 里已经带上了;单独装用 `pip install 'agentlab-backend[microvm]'`。
|
||
microvm = ["microsandbox>=0.6"]
|
||
# 测试:conda 环境默认不装,跑测试前 pip install 'agentlab-backend[dev]'
|
||
dev = ["pytest>=8.0", "pytest-asyncio>=0.24", "pytest-xdist>=3.6"]
|
||
# 文档解析。PDF 和 Word 的解析库加起来几十兆,只用纯文本的人不该为此
|
||
# 付出安装时间——和 microvm、db 一样做成可选。HTML 用已在依赖里的 bs4。
|
||
docs = ["pypdf>=5.0", "python-docx>=1.1", "python-pptx>=1.0", "openpyxl>=3.1"]
|
||
# 数据库接入。三个驱动都是 asyncio 原生且免装数据库客户端——
|
||
# oracledb 走 thin 模式,省掉了 Oracle Instant Client 这个历来最劝退的一步。
|
||
db = ["aiomysql>=0.2", "oracledb>=2.0", "asyncpg>=0.30"]
|
||
# 应用自己的库用 PostgreSQL(AGENTLAB_DATABASE_URL=postgresql+asyncpg://…)。应用库走 asyncpg;LangGraph 的断点
|
||
# 走官方的 langgraph-checkpoint-postgres,它只认 psycopg 3 和它的连接池。psycopg 带 binary:wheel 里自带 libpq,
|
||
# 镜像和本机都不用另装 PostgreSQL 客户端。断点格式归 LangGraph 一族管,上限同上卡到下一个小版本
|
||
postgres = [
|
||
"asyncpg>=0.30",
|
||
"psycopg[binary]>=3.2,<4",
|
||
"psycopg-pool>=3.2,<4",
|
||
"langgraph-checkpoint-postgres>=3.1.2,<3.2",
|
||
]
|
||
|
||
[build-system]
|
||
requires = ["hatchling"]
|
||
build-backend = "hatchling.build"
|
||
|
||
[tool.hatch.build.targets.wheel]
|
||
packages = ["app"]
|