multi-agent-lab / pyproject.toml
agharsallah
feat(dependencies): restrict pandas version to <3 to avoid compatibility issues with gradio
ed6315a
Raw
History Blame Contribute Delete
3.35 kB
[project]
name = "multi-agent-land"
version = "0.1.0"
description = "Small-model multi-agent Gradio experience for Thousand Token Wood."
requires-python = ">=3.10"
dependencies = [
# The HF Spaces builder installs gradio[oauth,mcp]; carrying the same extras here makes
# our lockfile resolve under the same constraints (notably the mcp extra's pydantic ceiling),
# so requirements.txt can't drift into a version the Space rejects.
"gradio[oauth,mcp]>=4.44.0",
"pydantic>=2.8.0",
"python-dotenv>=1.0.1",
"openai>=1.40.0",
"pyyaml>=6.0",
# gradio's queueing layer (`_get_df`) is written against pandas 2.x APIs (the `copy=`
# keyword on `infer_objects`, the `future.no_silent_downcasting` option). pandas 3.0
# deprecates both, so running pandas 3 makes gradio emit Pandas4Warnings on every queue
# poll. Cap at <3 to keep gradio on its supported pandas set until upstream updates it;
# our own pandas use is a trivial version-agnostic DataFrame constructor.
"pandas>=2.0,<3",
"modal>=1.4.3",
"opentelemetry-api>=1.20.0",
"opentelemetry-sdk>=1.20.0",
"opentelemetry-semantic-conventions>=0.41b0",
# The app requires real infrastructure — a DB and live inference — and refuses to
# run without it; there is no offline/stub product mode. Everything the live path
# touches is therefore a core dependency rather than an opt-in extra:
# - sqlalchemy + psycopg : durable event store backend (ADR-0014); psycopg is the Neon driver.
# - litellm : model gateway to the OpenAI-compatible endpoints (ADR-0015).
# - instructor : validated, schema-constrained structured output (ADR-0016).
# - mcp : Model Context Protocol tool transport (ADR-0017).
# - mem0ai + sentence-transformers : semantic memory index over the ledger (ADR-0018).
# These are still imported lazily at their call sites, but they always ship.
"sqlalchemy>=2.0",
"psycopg[binary]>=3",
"litellm>=1.40",
"instructor>=1.5",
"mcp>=1.0",
"mem0ai>=0.1",
"sentence-transformers>=3.0",
# torch ships transitively via sentence-transformers; pin it into the ZeroGPU-supported
# range (HF ZeroGPU accepts 2.8.0–2.11.0) so the HF Space build doesn't try to install
# an unsupported wheel. Upper bound, not exact, so the resolver can still pick per-Python.
"torch>=2.8,<2.12",
# HF ZeroGPU hardware refuses to start unless it detects at least one `@spaces.GPU`
# function at launch ("No @spaces.GPU function detected during startup"). The `spaces`
# package provides that decorator; it is effect-free off ZeroGPU, so it ships always
# without touching the offline/local path. See src/ui/fishbowl/app.py (gpu_selftest).
"spaces>=0.50.4",
# transformers 5.x requires `accelerate` to load a model straight onto a device via
# `device_map`. The local backend (ADR-0033) needs that supported path: a bare
# `from_pretrained(...).to("cuda")` can leave meta tensors and crash ("Cannot copy out of
# meta tensor"). Only used on the live local-GPU path; the offline stub never imports it.
"accelerate>=1.14.0",
"pillow>=12.2.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.2.0",
"ruff>=0.5.0",
]
[tool.ruff]
line-length = 120
target-version = "py310"
[tool.pytest.ini_options]
pythonpath = ["."]
[tool.uv.workspace]
members = [
"modal",
]