[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-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"] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"]