agharsallah
feat(dependencies): restrict pandas version to <3 to avoid compatibility issues with gradio
ed6315a | [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", | |
| ] | |