Public-facing AI-driven spatial pathologist wrapper package for Xenium workflows.
Project description
SPatho
spatho is a Python package and CLI for AI-driven spatial pathology workflows around Xenium-scale spatial transcriptomics. It wraps the lower-level histoseg engine with workflow configuration, organ packs, artifact manifests, H&E overlays, structure review, and report generation.
Legacy standalone surface: the canonical product-layer implementation is being integrated into
ASTROunderapp/src/xenium_ai_discovery/pathology_app/. This repository remains the compatibility, packaging, and deployment-oriented shell forspatho.
Two Parallel AI Backends
spatho now supports two parallel AI review paths. The paid OpenAI API route remains available and unchanged, while the local pathology-ai route adds a self-hosted option for private or cluster deployments.
| Backend | How it runs | Best for | Key settings |
|---|---|---|---|
openai |
Calls the paid OpenAI API with your OPENAI_API_KEY. |
Fast setup, managed models, lightweight local machine. | pathology_review_backend="openai" |
pathology_ai_api |
Calls a local HTTP service backed by vLLM, embeddings, reranking, and Qdrant. | PDC/HPC, private data, cost control, local model operations. | pathology_review_backend="pathology_ai_api" and pathology_ai_api_base_url |
The two paths are intentionally independent: enabling the local service does not remove or disable the OpenAI backend.
Quick Start
Install from PyPI
python -m pip install -U spatho
For local development:
git clone https://github.com/hutaobo/AI-Driven-Spatial-Pathologist.git
cd AI-Driven-Spatial-Pathologist
python -m pip install -U pip
python -m pip install -e .[dev]
If you are actively developing against a local histoseg checkout, install that editable copy first:
python -m pip install -e ../HistoSeg
Path A: paid OpenAI API
Use this path when you want the simplest managed-model setup.
export OPENAI_API_KEY=sk-...
spatho init-workflow \
--organ breast \
--case-name breast_case_01 \
--dataset-root /path/to/Xenium_outs \
--base-pipeline-config /path/to/project/configs/breast_case_01.json \
--output /path/to/workflows/breast_case_01_openai.json
spatho run --config /path/to/workflows/breast_case_01_openai.json
The generated workflow can keep:
{
"pathology_review_backend": "openai"
}
Disable OpenAI and force heuristic mode when needed:
spatho run --config /path/to/workflow.json --heuristic-only
Path B: local pathology-ai service
Use this path when you want pathology review to call a self-hosted service instead of the paid OpenAI API.
{
"pathology_review_backend": "pathology_ai_api",
"pathology_ai_api_base_url": "http://localhost:8000"
}
For PDC/Dardel deployment, see docs/PDC_LOCAL_PATHOLOGY_AI.md. The local stack is:
pathology-ai: lightweight HTTP orchestration from this repovllm: OpenAI-compatible local LLM endpointembedder: TEI-compatible Python embedding service forBAAI/bge-m3reranker: TEI-compatible Python reranking service forBAAI/bge-reranker-v2-m3qdrant: local vector storage
Default local model configuration:
LLM_BASE_URL=http://127.0.0.1:8001/v1
LLM_MODEL=openai/gpt-oss-120b
EMBED_MODEL=BAAI/bge-m3
RERANK_MODEL=BAAI/bge-reranker-v2-m3
VECTOR_DB=qdrant
DEFAULT_TOP_K=6
STRICT_JSON=true
Common CLI Tasks
Check an environment and workflow config:
spatho doctor --config /path/to/workflow.json
List built-in organ packs:
spatho list-organ-packs
Export the workflow JSON schema:
spatho config-schema --output /path/to/workflow.schema.json
Build or refresh an artifact manifest:
spatho build-manifest --config /path/to/workflow.json
Write Xenium RNA+protein + H&E alignment fixtures:
spatho write-xenium-alignment-fixtures \
--output-dir /path/to/output/pipeline/validation \
--segmentation-source ranger_protein_assisted
This writes a Xenium RNA+protein alignment note, a fixture manifest, and transform cases covering identity, um -> pixel, translation, axis order, and composed polygon export.
Python Usage
from spatho import run_workflow
result = run_workflow("/path/to/workflows/breast_case_01_openai.json")
print(result["pathology_report_html"])
Generate a starter config from Python:
from spatho import init_workflow
result = init_workflow(
"/path/to/workflows/breast_case_01_openai.json",
organ="breast",
case_name="breast_case_01",
dataset_root="/path/to/Xenium_outs",
base_pipeline_config="/path/to/project/configs/breast_case_01.json",
)
print(result["workflow_config"])
What a Workflow Produces
A typical full run produces:
- cluster evidence bundles
- OpenAI, local pathology-ai, or heuristic cluster annotations
- dendrogram-guided structure assignments
- clustermap and H&E overlay artifacts
- structure-level pathology reviews
- case-level HTML report
- machine-readable artifact manifest
Organ Packs
spatho ships with built-in organ packs that define the annotation taxonomy, default study context, workflow parameter defaults, and expected artifact contract.
Built-in packs:
lungbreast
These packs live in src/spatho/organ_packs.
Config Contract
Workflow JSON files are backed by a formal schema exported from the package. For Xenium RNA+protein workflows, the config template records:
dataset_modality = xenium_rna_proteincanonical_space = physical_umexport_space = xenium_explorer_pixelxenium_pixel_size_umsegmentation_source
See docs/XENIUM_RNA_PROTEIN_ALIGNMENT.md for the rationale and polygon-level analysis model.
Repository Layout
src/spatho: public-facing Python package and CLIsrc/pathology_ai_service: local pathology AI HTTP servicedeploy/pathology_ai: Docker Compose and PDC Slurm/Apptainer deployment assetsdocs/PDC_LOCAL_PATHOLOGY_AI.md: local/PDC pathology-ai deployment guidedocs/PYPI_RELEASE.md: PyPI publishing checklistexamples/workflows: public-safe starter workflow templatesmain.py: older Gradio/Serve deployment surface kept for compatibility
Relationship to HistoSeg and ASTRO
Current implementation model:
histosegexecutes the geometry, segmentation, and workflow internalsspathowraps and presents the workflow as a product-facing package
Target implementation model:
histosegremains the geometry/segmentation enginespathoowns workflow UX, organ packs, public docs, reports, and deployment surfaces- the canonical integrated product implementation continues to move into ASTRO
Publishing
This repo includes a PyPI publishing workflow based on GitHub Actions Trusted Publishing. See docs/PYPI_RELEASE.md for setup and release steps.
License
This project is intended for noncommercial research use unless separately licensed. Before public release or commercial use, review the license text and commercial boundary together with the underlying histoseg dependency.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spatho-0.1.2.tar.gz.
File metadata
- Download URL: spatho-0.1.2.tar.gz
- Upload date:
- Size: 37.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63d3a77ae96a78cccaf3ab8e80da88b9252fe6f927f586e8f46dfe1cb3c94b1a
|
|
| MD5 |
2c1cfaf7f52d2ac40a3cab96dd99cc73
|
|
| BLAKE2b-256 |
3448115fc14df606fb56feec8641a35a96b4fba28896fea638411db1e9be4004
|
Provenance
The following attestation bundles were made for spatho-0.1.2.tar.gz:
Publisher:
publish-pypi.yml on hutaobo/AI-Driven-Spatial-Pathologist
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spatho-0.1.2.tar.gz -
Subject digest:
63d3a77ae96a78cccaf3ab8e80da88b9252fe6f927f586e8f46dfe1cb3c94b1a - Sigstore transparency entry: 1399498436
- Sigstore integration time:
-
Permalink:
hutaobo/AI-Driven-Spatial-Pathologist@b3511b0e85a148b4c6c71e50ecd0a9807b2f42f7 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/hutaobo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b3511b0e85a148b4c6c71e50ecd0a9807b2f42f7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file spatho-0.1.2-py3-none-any.whl.
File metadata
- Download URL: spatho-0.1.2-py3-none-any.whl
- Upload date:
- Size: 37.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
720a7662bf68d6899b13dbf5763d22cf52c2edf61ec63b6e6692e815fa4ac93b
|
|
| MD5 |
bd9f224c09af0a9508cf7fbe2563a8fb
|
|
| BLAKE2b-256 |
5a69f46e7700f40fea11fae8795e67c27782c909fd38817a532f5b1def870dcf
|
Provenance
The following attestation bundles were made for spatho-0.1.2-py3-none-any.whl:
Publisher:
publish-pypi.yml on hutaobo/AI-Driven-Spatial-Pathologist
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spatho-0.1.2-py3-none-any.whl -
Subject digest:
720a7662bf68d6899b13dbf5763d22cf52c2edf61ec63b6e6692e815fa4ac93b - Sigstore transparency entry: 1399498439
- Sigstore integration time:
-
Permalink:
hutaobo/AI-Driven-Spatial-Pathologist@b3511b0e85a148b4c6c71e50ecd0a9807b2f42f7 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/hutaobo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b3511b0e85a148b4c6c71e50ecd0a9807b2f42f7 -
Trigger Event:
release
-
Statement type: