ML deployment framework - from local development to production with one command
Project description
Geronimo
ML Development Framework — Build, train, and deploy ML models with production-ready infrastructure.
Geronimo is like dbt for ML: a framework developers build around, not just deployment scaffolding.
Features
| Category | Capabilities |
|---|---|
| SDK | DataSource, FeatureSet, Model, Endpoint, BatchPipeline |
| Artifacts | Versioned storage for models, encoders, transformers (local/S3/MLflow) |
| Deployment | Terraform, Docker, CI/CD pipelines, real-time + batch |
| Monitoring | Metrics, drift detection, alerting |
| Integrations | MLflow, Snowflake, Postgres, SQL Server, MCP |
Installation
# Core installation
pip install geronimo
# With optional integrations
pip install geronimo[mlflow] # MLflow artifact store
pip install geronimo[databases] # Snowflake, Postgres, SQL Server
pip install geronimo[all] # Everything
Or from source:
git clone https://github.com/your-org/geronimo.git
cd geronimo && uv sync
Quick Start
Option A: New Project
# Initialize a new ML project
geronimo init --name credit-risk-model
cd credit-risk-model
uv sync
uv run start
Option B: Import Existing Project
cd /path/to/existing-project
geronimo import .
This generates:
geronimo.yaml— Deployment configurationgeronimo_sdk/— SDK wrappers with TODO tags for manual config
SDK Overview
Data Layer
from geronimo.data import DataSource, Query
training_data = DataSource(
name="features",
source="snowflake",
query=Query.from_file("queries/training.sql"),
)
df = training_data.load(start_date="2024-01-01")
Feature Engineering
from geronimo.features import FeatureSet, Feature
from sklearn.preprocessing import StandardScaler, OneHotEncoder
class CustomerFeatures(FeatureSet):
age = Feature(dtype="numeric", transformer=StandardScaler())
segment = Feature(dtype="categorical", encoder=OneHotEncoder())
# Training: fit + transform
X = features.fit_transform(train_df)
# Production: transform only (uses fitted encoders)
X = features.transform(prod_df)
Model Definition
from geronimo.models import Model, HyperParams
class CreditRiskModel(Model):
name = "credit-risk"
version = "1.2.0"
features = CustomerFeatures()
def train(self, X, y, params: HyperParams):
self.estimator = XGBClassifier(**params.to_dict())
self.estimator.fit(X, y)
def predict(self, X):
return self.estimator.predict_proba(X)
Artifact Storage
from geronimo.artifacts import ArtifactStore
# Save during training
store = ArtifactStore(project="credit-risk", version="1.2.0")
store.save("model", model.estimator)
store.save("encoder", features.encoder)
# Load in production
store = ArtifactStore.load(project="credit-risk", version="1.2.0")
model = store.get("model")
With MLflow (pip install geronimo[mlflow]):
from geronimo.artifacts import MLflowArtifactStore
store = MLflowArtifactStore(project="credit-risk", version="1.2.0")
store.save("model", model)
store.log_metrics({"auc": 0.95})
Production Endpoints
from geronimo.serving import Endpoint
class PredictEndpoint(Endpoint):
model_class = CreditRiskModel
def preprocess(self, request):
return self.model.features.transform(request["data"])
def postprocess(self, prediction):
return {"score": float(prediction[0])}
Batch Pipelines
from geronimo.batch import BatchPipeline, Schedule
class DailyScoringPipeline(BatchPipeline):
model_class = CreditRiskModel
schedule = Schedule.daily(hour=6)
def run(self):
data = self.model.features.data_source.load()
predictions = self.model.predict(data)
self.save_results(predictions)
CLI Commands
| Command | Description |
|---|---|
geronimo init |
Create new ML project |
geronimo import |
Import existing project with SDK wrappers |
geronimo generate all |
Generate Terraform, Docker, CI/CD |
geronimo generate batch |
Generate Metaflow/Airflow pipelines |
geronimo validate |
Validate configuration |
geronimo monitor capture-reference |
Capture baseline for drift detection |
geronimo monitor detect-drift |
Compare current data to baseline |
Configuration
# geronimo.yaml
project:
name: credit-risk-model
version: "1.2.0"
artifacts:
store: s3://ml-artifacts/
batch:
enabled: true
backend: step-functions
jobs:
- name: daily_scoring
schedule: "0 6 * * *"
monitoring:
drift_detection:
enabled: true
sampling_rate: 0.05
window_days: 7
Documentation
License
MIT
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 geronimo-0.1.0.tar.gz.
File metadata
- Download URL: geronimo-0.1.0.tar.gz
- Upload date:
- Size: 715.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f2d1dc5d340c3dc88021df6f68dffc57952e0a301ce2e997e93d76310fc2847
|
|
| MD5 |
bb9e0a1b8788e72acd51e8597fb4521d
|
|
| BLAKE2b-256 |
ae5fec8ace72c068f9d65a3111e1fb8a3025d445f6349d8b55e18417f819749f
|
Provenance
The following attestation bundles were made for geronimo-0.1.0.tar.gz:
Publisher:
publish.yml on geronimo-deploy-cloud/geronimo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geronimo-0.1.0.tar.gz -
Subject digest:
5f2d1dc5d340c3dc88021df6f68dffc57952e0a301ce2e997e93d76310fc2847 - Sigstore transparency entry: 835820131
- Sigstore integration time:
-
Permalink:
geronimo-deploy-cloud/geronimo@81231f24b76f54c9326d23e71faded3d3053e2fa -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/geronimo-deploy-cloud
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@81231f24b76f54c9326d23e71faded3d3053e2fa -
Trigger Event:
release
-
Statement type:
File details
Details for the file geronimo-0.1.0-py3-none-any.whl.
File metadata
- Download URL: geronimo-0.1.0-py3-none-any.whl
- Upload date:
- Size: 99.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc355e297f1d094f040397bad1f3226df9b19c241e6d20325f2bb6160fb9513d
|
|
| MD5 |
d40c028eaceebe342dac708f1731d166
|
|
| BLAKE2b-256 |
4f2422544aa854d655884749ac0ce77d3b64273498bc7e7ff1fd51e7ffaa99a3
|
Provenance
The following attestation bundles were made for geronimo-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on geronimo-deploy-cloud/geronimo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geronimo-0.1.0-py3-none-any.whl -
Subject digest:
fc355e297f1d094f040397bad1f3226df9b19c241e6d20325f2bb6160fb9513d - Sigstore transparency entry: 835820136
- Sigstore integration time:
-
Permalink:
geronimo-deploy-cloud/geronimo@81231f24b76f54c9326d23e71faded3d3053e2fa -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/geronimo-deploy-cloud
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@81231f24b76f54c9326d23e71faded3d3053e2fa -
Trigger Event:
release
-
Statement type: