-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Model store documentation and improvements (#1)
* readme * formatting * add tests and some refactoring * fix python versions in CICD * udpates to workflows for consistency * model_store to redis_model_store * update readme example * update workflow * use yaml over yml * add yamls back
- Loading branch information
1 parent
231ce40
commit 75f479a
Showing
25 changed files
with
1,324 additions
and
753 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,120 @@ | ||
# Redis Model Store | ||
# 🧠 Redis Model Store | ||
|
||
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) | ||
![Language](https://img.shields.io/github/languages/top/redis-applied-ai/redis-model-store) | ||
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) | ||
![GitHub last commit](https://img.shields.io/github/last-commit/redis-applied-ai/redis-model-store) | ||
[![pypi](https://badge.fury.io/py/redisvl.svg)](https://pypi.org/project/redis-model-store/) | ||
|
||
Store, version, and manage your ML models in Redis with ease. `redis-model-store` provides a simple yet powerful interface for handling machine learning model artifacts in Redis. | ||
|
||
## ✨ Features | ||
|
||
- **🔄 Automatic Versioning**: Track and manage multiple versions of your models | ||
- **📦 Smart Storage**: Large models are automatically sharded for optimal storage | ||
- **🔌 Pluggable Serialization**: Works with any Python object (NumPy, PyTorch, TensorFlow, etc.) | ||
- **🏃♂️ High Performance**: Efficient storage and retrieval using Redis pipelining | ||
- **🛡️ Safe Operations**: Atomic operations with automatic cleanup on failures | ||
|
||
## 🚀 Quick Start | ||
|
||
### Installation | ||
|
||
```bash | ||
# Using pip | ||
pip install redis-model-store | ||
|
||
# Or using poetry | ||
poetry add redis-model-store | ||
``` | ||
|
||
### Basic Usage | ||
|
||
Here's a simple example using scikit-learn: | ||
|
||
```python | ||
from redis import Redis | ||
from redis_model_store import ModelStore | ||
from sklearn.ensemble import RandomForestClassifier | ||
|
||
# Connect to Redis and initialize store | ||
redis = Redis(host="localhost", port=6379) | ||
store = ModelStore(redis) | ||
|
||
# Train your model | ||
model = RandomForestClassifier() | ||
model.fit(X_train, y_train) | ||
|
||
# Save model with version tracking | ||
version = store.save_model( | ||
model, | ||
name="my-classifier", | ||
description="Random forest trained on dataset v1" | ||
) | ||
|
||
# List available models | ||
models = store.list_models() | ||
print(f"Available models: {models}") | ||
|
||
# Load latest version | ||
model = store.load_model("my-classifier") | ||
|
||
# Load specific version | ||
model = store.load_model("my-classifier", version=version) | ||
|
||
# View all versions | ||
versions = store.get_all_versions("my-classifier") | ||
for v in versions: | ||
print(f"Version: {v.version}, Created: {v.created_at}") | ||
``` | ||
|
||
## 🛠️ Contributing | ||
|
||
We welcome contributions! Here's how to get started: | ||
|
||
### Development Setup | ||
|
||
1. Clone the repository: | ||
```bash | ||
git clone https://github.com/redis-applied-ai/redis-model-store.git | ||
cd redis-model-store | ||
``` | ||
|
||
2. Install poetry if you haven't: | ||
```bash | ||
curl -sSL https://install.python-poetry.org | python3 - | ||
``` | ||
|
||
3. Install dependencies: | ||
```bash | ||
poetry install --all-extras | ||
``` | ||
|
||
### Linting and Tests | ||
|
||
```bash | ||
poetry run format | ||
poetry run check-mypy | ||
poetry run test | ||
poetry run test-verbose | ||
``` | ||
|
||
### Making Changes | ||
|
||
1. Create a new branch: | ||
```bash | ||
git checkout -b feat/your-feature-name | ||
``` | ||
|
||
2. Make your changes and ensure: | ||
- All tests pass (covering new functionality) | ||
- Code is formatted | ||
- Type hints are valid | ||
- Examples/docs added as notebooks to the `docs/` directory. | ||
|
||
3. Push changes and open a PR | ||
|
||
|
||
## 📚 Documentation | ||
|
||
For more usage examples check out tbhis [Example Notebook](docs/redis_model_store.ipynb). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import os | ||
import pytest | ||
|
||
from testcontainers.compose import DockerCompose | ||
|
||
|
||
@pytest.fixture(scope="session", autouse=True) | ||
def redis_container(): | ||
# Set the default Redis version if not already set | ||
os.environ.setdefault("REDIS_VERSION", "edge") | ||
|
||
compose = DockerCompose("tests", compose_file_name="docker-compose.yaml", pull=True) | ||
compose.start() | ||
|
||
redis_host, redis_port = compose.get_service_host_and_port("redis", 6379) | ||
redis_url = f"redis://{redis_host}:{redis_port}" | ||
os.environ["REDIS_URL"] = redis_url | ||
|
||
yield compose | ||
|
||
compose.stop() |
Oops, something went wrong.