# Riprap runtime dependencies (deployment). # Offline-only deps (py3dep, terratorch, whitebox-workflows) are NOT here # — they only run for the one-time fixture pre-compute in scripts/. # Web + streaming fastapi>=0.115 uvicorn>=0.32 httpx>=0.27 pydantic>=2.9 # Geo geopandas>=1.0 shapely>=2.0 pyproj>=3.6 fiona>=1.10 rasterio>=1.4 # Data pandas>=2.2 pyarrow>=18.0 numpy>=1.26 # pyarrow.PyExtensionType was removed in pyarrow 17 and older `datasets` # (transitive dep of sentence-transformers / gliner / terratorch) crashes # on import against pyarrow 18+. datasets >= 3.0 uses pa.ExtensionType # instead. Without this pin, HF Spaces' resolver picks an older datasets # and FastAPI startup dies before the first request. datasets>=3.0 # RAG: Granite Embedding 278M (CPU torch is sufficient on HF Spaces). # sentence-transformers 3.x's model_card.py does # `from transformers.integrations import CodeCarbonCallback` at import # time. transformers's lazy-import surface raises if `codecarbon` isn't # present; on HF Space (Python 3.10) the lazy-import resolution fails # even on import-only paths. Two options: # (1) pin sentence-transformers to a version that didn't have model_card # (2) install codecarbon so the lazy-import resolves # We tried (1) at <3.4 and <4 — both failed because 3.3.x also imports # CodeCarbonCallback. Going with (2): codecarbon is a small ~7MB pure- # Python package; we don't enable its tracking, just satisfy the import. sentence-transformers>=3.3,<4 codecarbon>=2.5,<4 pypdf>=5.0 # Tight coexistence pins: granite-tsfm 0.3.x calls transformers.utils # .download_url which was removed in transformers 5.x; mellea 0.3.x is # happy with the older hf_hub. Keep BOTH older to avoid the conflict # (transformers >=4.55,<5 + huggingface_hub >=0.34,<1). transformers>=4.55,<5 huggingface_hub>=0.34,<1 # Granite 4.1 reconciliation via Ollama (local fallback) ollama>=0.4 # LiteLLM Router: unifies vLLM (AMD GPU, OpenAI-compatible) and Ollama # behind one chat() call surface, with automatic primary->fallback # routing when RIPRAP_LLM_PRIMARY=vllm is unreachable. See app/llm.py. litellm>=1.52 # GLiNER specialist (Phase 2): typed entity extraction over RAG output. # Apache-2.0 model is `urchade/gliner_medium-v2.1` — NOT the gliner_base # variant which is CC-BY-NC-4.0. See app/context/gliner_extract.py. gliner>=0.2.13 # Phase 1 (Prithvi live) + Phase 4 (TerraMind) + earth-observation deps. # # These deps live in `requirements-experiments.txt` (local + AMD), NOT # in production. Two attempts at bringing them into the HF image (the # floor at 1.0.x then the pin at 1.1rc6) both failed pip resolution # against our Py3.10 constraints (transformers<5, hf_hub<1, # granite-tsfm<0.3.4, mellea<0.4). `terratorch>=1.2` pins numpy>=2.2 # which breaks the rest of the stack; `1.1rc6` and earlier had # transitive cone conflicts the resolver couldn't satisfy in the # 30-second pip budget. # # On HF Spaces the lazy-import path returns clean `skipped: deps # unavailable on this deployment` for terramind_synthesis (which has # no remote-inference path); the other EO specialists (prithvi_live, # terramind_lulc, terramind_buildings) work via app/inference.py # routing to the AMD MI300X droplet, provided we have the chip-fetch # deps below — they're small (pure-Python or thin wrappers around # numpy/rasterio which we already have) and don't pull terratorch or # torchvision binaries. # - planetary-computer / pystac-client: STAC search at Microsoft PC # - rioxarray / xarray: COG band reads # - einops: tensor reshape used by prithvi_live._build_chip planetary-computer>=1.0 pystac-client>=0.7 rioxarray>=0.15 xarray>=2024.1 einops>=0.7 # Burr FSM burr>=0.40 # Granite TimeSeries TTM r2 — short-horizon residual nowcast (Ekambaram et al. # 2024, NeurIPS). The PyPI package name is granite-tsfm; importable as # tsfm_public. Brings in transformers + accelerate; torch is already in the # CUDA base image. # Pinned to 0.3.3 because >=0.3.4 dropped Python 3.10 support and the # CUDA-runtime base image ships Ubuntu 22.04 / Python 3.10. The # tsfm_public.toolkit.get_model API is stable across this minor range. granite-tsfm>=0.3.0,<0.3.4 # IBM Research's Mellea — instruct/validate/repair framework. Powers the # default reconciler: Granite output + programmatic post-conditions # + rejection sampling. # Pinned to <0.4 because 0.4+ requires Python>=3.11 and the # nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04 base image ships Python 3.10. # 0.3.2 has the same instruct/req/RejectionSamplingStrategy API surface # we use; if it doesn't, the validator falls through to the standard # reconciler (graceful degradation). mellea>=0.3.0,<0.4 # Misc tqdm>=4.66