No description
  • Python 73.7%
  • Shell 23.9%
  • Makefile 2.1%
  • PureBasic 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dependabot[bot] 47fc243ed7
chore(deps-dev): bump ruff from 0.14.14 to 0.15.0 (#130)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.14 to 0.15.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.14.14...0.15.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.15.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 08:06:46 +01:00
.github chore(deps): bump actions/cache from 4 to 5 (#117) 2025-12-15 08:27:21 +01:00
docs chore: change links following migration from tarilabs to containers 2024-08-14 07:40:34 +02:00
e2e chore(deps-dev): bump model-registry from 0.3.3 to 0.3.4 (#119) 2025-12-15 08:36:20 +01:00
omlmd core: implement TODO and relative import cleanup (#24) 2024-10-30 10:18:18 +01:00
tests core: implement TODO and relative import cleanup (#24) 2024-10-30 10:18:18 +01:00
.gitignore enable large file upload (#13) 2024-10-03 09:58:41 +02:00
CONTRIBUTING.md Create CONTRIBUTING.md 2024-10-01 18:11:34 +02:00
LICENSE Initial commit 2024-07-20 12:38:41 +02:00
Makefile py: add listener mechanism (#8) 2024-08-11 13:35:27 +02:00
mkdocs.yml chore: change links following migration from tarilabs to containers 2024-08-14 07:40:34 +02:00
poetry.lock chore(deps-dev): bump ruff from 0.14.14 to 0.15.0 (#130) 2026-02-10 08:06:46 +01:00
pyproject.toml chore(deps-dev): bump ruff from 0.14.14 to 0.15.0 (#130) 2026-02-10 08:06:46 +01:00
README.md chore: change links following migration from tarilabs to containers 2024-08-14 07:40:34 +02:00

OCI Artifact for ML model & metadata

Python License Build E2E testing PyPI - Version

Static Badge GitHub Repo stars YouTube Channel Subscribers

This project is a collection of blueprints, patterns and toolchain (in the form of python SDK and CLI) to leverage OCI Artifact and containers for ML model and metadata.

Documentation: https://containers.github.io/omlmd

GitHub repository: https://github.com/containers/omlmd
YouTube video playlist: https://www.youtube.com/watch?v=W4GwIRPXE8E&list=PLdbdefeRIj9SRbg6Hkr15GeyPH0qpk_ww
Pypi distribution: https://pypi.org/project/omlmd

Installation

Tip

We recommend checking out the Getting Started tutorial in the documentation; below instructions are provided for a quick overview.

In your Python environment, use:

pip install omlmd

Push

Store ML model file model.joblib and its metadata in the OCI repository at localhost:8080:

from omlmd.helpers import Helper

omlmd = Helper()
omlmd.push("localhost:8080/matteo/ml-artifact:latest", "model.joblib", name="Model Example", author="John Doe", license="Apache-2.0", accuracy=9.876543210)

Pull

Fetch everything in a single pull:

omlmd.pull(target="localhost:8080/matteo/ml-artifact:latest", outdir="tmp/b")

Or fetch only the ML model assets:

omlmd.pull(target="localhost:8080/matteo/ml-artifact:latest", outdir="tmp/b", media_types=["application/x-mlmodel"])

Custom Pull: just metadata

The features can be composed in order to expose higher lever capabilities, such as retrieving only the metadata informatio. Implementation intends to follow OCI-Artifact convention

md = omlmd.get_config(target="localhost:8080/matteo/ml-artifact:latest")
print(md)

Crawl

Client-side crawling of metadata.

Note: Server-side analogous coming soon/reference in blueprints.

crawl_result = omlmd.crawl([
    "localhost:8080/matteo/ml-artifact:v1",
    "localhost:8080/matteo/ml-artifact:v2",
    "localhost:8080/matteo/ml-artifact:v3"
])

Example query

Demonstrate integration of crawling results with querying (in this case using jQ)

Of the crawled ML OCI artifacts, which one exhibit the max accuracy?

import jq
jq.compile( "max_by(.config.customProperties.accuracy).reference" ).input_text(crawl_result).first()

To be continued...

Don't forget to checkout the documentation website for more information!