Tributo
Ray-native machine learning SDK for distributed data, training, model bundles, and inference.
What Tributo provides
Tributo adds machine learning control-plane contracts on top of Ray. Ray owns distributed execution. Tributo validates requests, selects registered implementations, records credential-free provenance, and publishes verified model bundles.
- Submit and manage workloads through Ray Jobs.
- Read bounded data through explicit Ray Data or Daft bindings.
- Run distributed XGBoost, DNN, positive-unlabeled learning, and the formal algorithm execution contract through separately installed official algorithm Wheels.
- Publish validated, multi-format model bundles to local storage or S3.
- Run bundle-backed batch inference and Ray Serve HTTP or gRPC endpoints.
- Build, search, optimize, or compact Lance vector indexes as separate workflows.
- Produce batch explainability reports through registered adapters.
Tributo is an SDK, not a multi-tenant platform or Kubernetes control plane. See the documentation and support matrix for verified paths and explicit boundaries.
Quick start
Tributo 1.1.0 is a source-only GitHub Release; no PyPI distribution is published for this version.
Development checkouts on master declare 1.2.0.dev0. This development
version does not determine the next published patch or minor version. Use a
release tag for a fixed source snapshot and that snapshot's documentation.
git clone --branch tributo-1.1.0 --depth 1 https://github.com/jiangxt2/Tributo.git
cd Tributo
uv sync --locked --no-dev
Run Python and CLI commands through uv run --locked --no-sync so they use
the release's locked environment.
from tributo import TributoClient
client = TributoClient("http://127.0.0.1:8265")
job_id = client.submit(entrypoint="python my_script.py")
print(client.get_status(job_id))
For a sealed Ray runtime containing the first-party dependency closure, see the runtime image guide.
Architecture
For a detailed map of current capabilities, planned work, and API stability guarantees, see the System Landscape, Architecture Documentation, and API Stability Inventory.
Installation
git clone --branch tributo-1.1.0 --depth 1 https://github.com/jiangxt2/Tributo.git
cd Tributo
# Each runtime profile below is an alternative. Combine extras in one uv sync.
# Core install
uv sync --locked --no-dev
# With training data, export, and storage dependencies
uv sync --locked --no-dev --extra training
# With BayesOpt search for Ray Tune
uv sync --locked --no-dev --extra tune
# With data formats (Lance / Iceberg)
uv sync --locked --no-dev --extra data
# With structured HiveServer2 table reads through Ray Data
uv sync --locked --no-dev --extra hive-ray
# With Hugging Face sources/exporters
uv sync --locked --no-dev --extra model-export-hf
# With Lance vector-index operations
uv sync --locked --no-dev --extra vector-index
# Development dependencies
uv sync --locked --extra dev
# Dual-engine files/tables and PostgreSQL
uv sync --locked --no-dev --extra data --extra data-daft --extra postgresql
Data sources
Data sources are opt-in extras where applicable. Install the extra for the dialect or backend you use:
| Source | Physical reader | Extra | Status |
|---|---|---|---|
| Local/S3 Parquet and CSV | Ray Data / Daft public readers | core / tributo[data-daft] |
Alpha; real dual-engine Conformance |
| Local/S3 Iceberg and Lance | Ray Data / Daft public readers | tributo[data,data-daft] |
Alpha; real dual-engine Conformance |
| PostgreSQL structured table | Ray Data / Daft SQL readers | tributo[postgresql,data-daft] |
Alpha; real PostgreSQL Conformance |
| HDFS Parquet/CSV | Ray Data + PyArrow Hadoop filesystem | Ray runtime with HDFS libraries | Adapter present; cluster gate pending |
| ClickHouse | ray-clickhouse==1.0 |
tributo[clickhouse] plus the separately installed Ray package |
Adapter only; the connector is available on PyPI but remains outside Tributo's lock and canonical full image; real-database Conformance remains the support gate |
| Doris | ray-doris==1.0 / daft-doris==1.0 |
tributo[mysql] or tributo[doris-flight] |
Adapter only; Ray routes require ray-doris, Daft routes require daft-doris, and real-database Conformance remains the support gate |
| HiveServer2 structured tables | ray-hive==1.0 through the built-in Ray Binding |
tributo[hive-ray] or uv sync --locked --no-dev --extra hive-ray |
Alpha; real Hive 4.2.0 structured-projection Conformance |
| Native ORC files | no built-in reader | — | Unsupported; use an engine or table service that owns ORC decoding |
Provider/binding presence is not a support claim. The canonical full image
contains the locked v1.0 Doris connector packages, but the
Ray ClickHouse route requires separately installing ray-clickhouse==1.0 from
PyPI; that package remains outside Tributo's lock and canonical full image.
These paths remain adapter-only until their real-database Conformance gates
pass.
HDFS still requires its own infrastructure gate. Hive is Ray-only, uses binary
HiveServer2 transport, and does not imply native ORC/HDFS access or a Daft Hive
route. Tributo never installs optional providers or bindings at runtime.
Modules
Formal distributed algorithms
Production implementations, including XGBoost, DNN, and PU learning, are
distributed as independently versioned official algorithm Wheels. Install a
compatible Wheel, confirm it appears in tributo algo list --json, and follow
the formal algorithm guide.
Positive-unlabeled learning
The formal nnPU/uPU implementation uses the shared Ray Train/PyTorch DDP kernel
with an explicit class prior and PU-specific fail-closed data checks. The Beta
PUTrainerImpl compatibility entry delegates to the same distributed kernel
and accepts one or more Ray Train workers. See the
PU learning guide and
support matrix.
Custom batch inference
Distributed inference with a user-supplied Ray BasePredictor, output to
Parquet or Lance.
from tributo.inference import BasePredictor, InferenceConfig, run_batch_inference
class MyPredictor(BasePredictor):
def _load_model(self):
self.model = load_model_from_your_runtime()
def __call__(self, batch):
return predict_with_your_model(self.model, batch)
run_batch_inference(config, predictor_cls=MyPredictor)
ONNX inference serving
Ray Serve deployment for ONNX models with HTTP API.
uv run tributo serve start --model-path /path/to/model.onnx
uv run tributo serve status
uv run tributo serve stop
Batch inference
XGBoost + ONNX distributed batch inference.
from tributo.inference.pipeline import InferenceConfig, run_batch_inference
config = InferenceConfig(
input_uri="s3://bucket/input.parquet",
output_uri="s3://bucket/output/",
model_uri="s3://bucket/model.onnx",
)
run_batch_inference(config)
Streaming LLM inference
SSE-based streaming inference for LLMs on Ray Serve.
uv run tributo serve streaming start --model-path /path/to/model --tokenizer-path /path/to/tokenizer
uv run tributo serve streaming status
Hyperparameter tuning with Ray Tune
Random search / BayesOpt with FIFO / ASHA / HyperBand schedulers.
BayesOpt requires the optional tune extra
(uv sync --locked --no-dev --extra tune); the full runtime image already
contains it.
Tune trials execute setup and fit only: they report the configured metric and
checkpoint without publishing production Bundles. After selecting parameters,
run the Trainer explicitly to publish the single production Bundle.
Ray owns experiment and checkpoint state below the Tune output root's
trials/ namespace; Tributo does not remove that recovery state. Treat the
Tune output root as Ray-managed storage, not as a production Bundle destination.
uv run tributo tune run \
--trainer xgboost \
--config train_config.json \
--space search_space.json \
--output ./tune_results \
--num-samples 50 \
--search-alg bayesopt
Project structure
src/tributo/
├── __init__.py # Public API (TributoClient, JobConfig, exceptions)
├── job.py # TributoClient core
├── config.py # JobConfig (Pydantic models)
├── exceptions.py # Exception hierarchy
├── cli.py # CLI entry point (Click)
├── _common/ # Shared utilities (runtime_env, IO, logging, Serve)
├── data/ # Ingestion, transforms, typed handles, and writing
├── algorithms/ # Formal distributed algorithm execution contracts
├── training/ # Trainer compatibility, XGBoost, DNN, PU, and Tune
├── exporting/ # Model bundle planning, validation, and publication
├── inference/ # Bundle-backed distributed batch inference
├── serving/ # Ray Serve HTTP, gRPC, and streaming transports
├── vector_index/ # Lance vector-index jobs and maintenance
├── explainability/ # Batch explanation planning and adapters
├── registry/ # MLflow tracking and registry integration
├── integrations/ # Optional framework, format, sink, and hook adapters
└── util/ # @PublicAPI decorator, stability annotations
Development
# Run tests
uv run pytest
# Format
uv run ruff check --fix src/ tests/
uv run ruff format src/ tests/
# Type checking
uv run mypy src/tributo
License
Apache 2.0. See LICENSE.
Metadata
Release files for tributo 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tributo-1.1.0.tar.gz | 1.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tributo-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.5 MB
Release files / tributo-1.1.0.tar.gz
| Download URL | tributo-1.1.0.tar.gz |
|---|---|
| Size | 1.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12490552d644ebd98c078ee6e011867f2f86a3962a491968274a7d2da4fa5fa0
|
|
BLAKE2b-256 checksum How to use checksums |
420a84e5cd87149e0c07ced0c677f2953a198c444420819a97e41f44d00bf48d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / tributo-1.1.0-py3-none-any.whl
| Download URL | tributo-1.1.0-py3-none-any.whl |
|---|---|
| Size | 827.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
836d9c03766b75b9b57417d3d9af37142c0c35ca299a1a700bbe0b0c46372dae
|
|
BLAKE2b-256 checksum How to use checksums |
92a99bf12e0076bdb0a1b2cabd7d57644c2684e38af44f7d1cd0c1043afd7d5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log