mlgatee
Deploy a trained model to MLGatee from a notebook, a script or the terminal, and get a live, key-protected HTTPS endpoint.
%pip install -q mlgatee
import mlgatee
mlgatee.login() # paste an access token (hidden)
dep = mlgatee.deploy(model, name="churn-model") # about 1.5 to 3 minutes
dep.predict([[5.1, 3.5, 1.4, 0.2]])
✓ saved with joblib (3 KB)
✓ uploaded
✓ checked without running it: numpy==2.5.3, scikit-learn==1.9.1
Endpoint key (shown once, also in .key): mlg_live_…
Save it somewhere safe: only its last 4 characters are kept.
… Installing libraries and downloading the model
… Starting the model server and loading the model
✓ live at https://mlg-churn-model-….onrender.com
Get an access token on app.mlgatee.com → Settings → Access tokens. MLGatee is invite-only during the beta.
How it works
The model is saved with joblib in your own Python, then goes through exactly the same
steps as an upload on the web app: MLGatee reads the file's bytes (it never runs your code),
picks the exact libraries, and gives the model its own server on Render.
Deploying the same name again uploads a new version: same address, same key. The current version keeps answering until the new one is live; if the new build fails, it keeps answering.
Rolling back builds a new version from an earlier version's file: rolling v3 back to v2 creates v4 with v2's file. The 3 newest versions can be rolled back to.
Python
| Call | What it does |
|---|---|
mlgatee.login(token=None, save=True) |
Signs in. Without token it asks (hidden). save=True keeps it in ~/.mlgatee/token, readable only by you; use save=False on a shared computer. MLGATEE_TOKEN works too |
mlgatee.deploy(model, name) |
A model object or a file path (.pkl, .joblib, XGBoost .json/.ubj, .onnx, TensorFlow Lite .tflite). Returns a Deployment |
dep.predict(rows) / dep.predict_proba(rows) |
Calls the model. Rows can be lists, a NumPy array or a pandas DataFrame |
mlgatee.predict(name_or_url, rows, key=None) |
Same, by name or endpoint URL. The key comes from key, this session's deploy(), or MLGATEE_KEY |
mlgatee.models() |
Your models |
mlgatee.versions(name) |
A model's versions, newest first, with current and can_roll_back |
mlgatee.rollback(name, version) |
Back to an earlier version (one build); same address and key |
mlgatee.plan() |
Your plan (free or Pro), its limits, what you've used, and the machines you can deploy on |
mlgatee.deploy(model, name, plan="standard") |
Pro: a new model on an always-on machine, "starter" (512 MB) or "standard" (2 GB). A new version keeps the machine |
mlgatee.resume(name) |
Starts a Pro model that was paused after 48 hours without calls; same address and key, no build |
mlgatee.delete(name) |
Deletes a model and its endpoint (can't be undone) |
mlgatee.logout() |
Forgets the token here (revoke it on the web app to stop it everywhere) |
Errors are mlgatee.MLGateeError with a plain message and a stable .code.
Terminal
pip install mlgatee
mlgatee login
mlgatee deploy model.pkl --name churn-model
mlgatee models
mlgatee versions churn-model
mlgatee rollback churn-model 2
mlgatee plan
mlgatee resume churn-model
mlgatee delete churn-model --yes
Monitoring
mlgatee.usage("churn-model") # last 24 hours; "7d" for a week
print(mlgatee.usage_text(mlgatee.usage("churn-model")))
dep.usage() # the same, from a Deployment
mlgatee usage churn-model --window 7d
Calls, errors (bad requests and server errors), answer times (p50, p95, max), rows predicted and when the model was last called, overall and per version: handy before deciding on a rollback. MLGatee records counts and timings only, never inputs or outputs. A model deployed before monitoring existed starts reporting after its next build.
Keras and PyTorch
Pass the model itself: it's converted here, in your Python, to a format MLGatee's free machines run (TensorFlow Lite for Keras, ONNX for PyTorch), checked against the original, then uploaded.
mlgatee.deploy(keras_model, name="my-keras-model") # -> TensorFlow Lite
mlgatee.deploy(keras_model, name="my-keras-model", quantize=True) # 8-bit weights, ~4x smaller
mlgatee.deploy(torch_model, name="my-torch-model", example_input=X[:5], task="classifier") # -> ONNX
- Keras needs TensorFlow (the backend you trained with), PyTorch needs
torchandonnx(pip install "mlgatee[torch]"installs the extras). Withexample_input, the converted model is compared with the original before uploading (needsai-edge-litert/onnxruntime). task="classifier": /predict returns the class and /predict_proba the probabilities (softmax of the scores). Without it, the model's outputs are returned as they are.- Custom or Lambda layers, and operations TFLite/ONNX don't have, are refused with the converter's own message. Full TensorFlow and PyTorch will come on the paid plan.
- Already have a file?
mlgatee.deploy("model.tflite", ...)or"model.onnx"works too.
Hugging Face text models
Small text models (MiniLM-sized: up to about 25 MB with 8-bit weights) run on the free plan:
mlgatee.deploy_hf("sentence-transformers/all-MiniLM-L6-v2", name="embeddings")
mlgatee.deploy_hf("philschmid/tiny-bert-sst2-distilled", name="sentiment")
Callers send plain texts: {"input_data": ["great product!"]}. A classifier answers label
names (and /predict_proba the probabilities); an embeddings model answers one normalised
vector per text. The model is exported to ONNX here, with 8-bit weights, checked against the
original, and packed with its tokenizer into one file (pip install "mlgatee[huggingface]").
Bigger models (DistilBERT and up) don't fit the 50 MB limit; text generation comes later.
Good to know
- Supported during the beta: scikit-learn, XGBoost, LightGBM and CatBoost, up to 50 MB, one model per person, 5 builds a day.
- A model that uses a class defined in your notebook can't be loaded on a server. The client
catches this before uploading and says which class to move into a
.pyfile. - The endpoint key is shown once. Keep it out of notebooks you share.
- The free instance sleeps after 15 idle minutes; the next request takes about a minute.
Development
pip install -e ".[dev]"
python -m pytest -q
Self-hosting MLGatee? Point the client at your project with MLGATEE_URL and
MLGATEE_PUBLISHABLE_KEY.
Apache-2.0.
Metadata
Release files for mlgatee 0.8.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 | Provenance | Actions |
|---|---|---|---|---|
| mlgatee-0.8.0.tar.gz | 38.4 kB | With provenance | Details for mlgatee-0.8.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mlgatee-0.8.0-py3-none-any.whl | Python 3 | none | any | Details for mlgatee-0.8.0-py3-none-any.whl |
Total release size: 69.8 kB
Release files / mlgatee-0.8.0.tar.gz
| Download URL | mlgatee-0.8.0.tar.gz |
|---|---|
| Size | 38.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
656e5e267e03bb6cbc328d2388be5c5b6a844dfb5242581dcf1ae7596d31d624
|
|
BLAKE2b-256 checksum How to use checksums |
860e30f2a337e76587a7794d81757c891e47e77994f8c2ff09d1a2f0983e6009
|
| 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 8, 2026.
Transparency logRelease files / mlgatee-0.8.0-py3-none-any.whl
| Download URL | mlgatee-0.8.0-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1055c78ee9ce3f73f799f3623ed0fcfe1cce497fc8d2c8d7424f7e8b11ba34db
|
|
BLAKE2b-256 checksum How to use checksums |
efb2e0d297a25400bebb34f0ea6179f34a638d7afbdd56e0910c56529b832f47
|
| 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 8, 2026.
Transparency logSecurity for mlgatee 0.8.0
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for mlgatee-0.8.0.tar.gz
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 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.