{"id":13671431,"url":"https://github.com/unionai-oss/unionml","last_synced_at":"2025-10-21T19:54:49.562Z","repository":{"id":37272160,"uuid":"429152640","full_name":"unionai-oss/unionml","owner":"unionai-oss","description":"UnionML: the easiest way to build and deploy machine learning microservices","archived":true,"fork":false,"pushed_at":"2023-11-06T13:36:29.000Z","size":15368,"stargazers_count":335,"open_issues_count":84,"forks_count":41,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-21T15:17:50.410Z","etag":null,"topics":["hacktoberfest","machine-learning","mlops"],"latest_commit_sha":null,"homepage":"https://www.union.ai/unionml","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unionai-oss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-11-17T18:11:10.000Z","updated_at":"2025-03-11T22:15:26.000Z","dependencies_parsed_at":"2024-01-07T01:53:20.404Z","dependency_job_id":null,"html_url":"https://github.com/unionai-oss/unionml","commit_stats":{"total_commits":282,"total_committers":15,"mean_commits":18.8,"dds":0.276595744680851,"last_synced_commit":"d6f0a16cae3929e4d2d84a2b77c55b993132f48c"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unionai-oss%2Funionml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unionai-oss%2Funionml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unionai-oss%2Funionml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unionai-oss%2Funionml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unionai-oss","download_url":"https://codeload.github.com/unionai-oss/unionml/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251187116,"owners_count":21549585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","machine-learning","mlops"],"created_at":"2024-08-02T09:01:09.570Z","updated_at":"2025-10-21T19:54:44.200Z","avatar_url":"https://github.com/unionai-oss.png","language":"Python","funding_links":[],"categories":["Python","Deployment and Serving"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.union.ai/unionml\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/unionai-oss/unionml/main/docs/source/_static/images/union-logo.svg\" alt=\"Union.ai Logo\" width=\"100\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eUnionML\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eThe easiest way to build and deploy machine learning microservices\u003c/strong\u003e\n\u003c/p\u003e\n\n---\n\n\u003cbr\u003e\n\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/unionml?style=for-the-badge)](https://pypi.org/project/unionml/)\n[![PyPI version shields.io](https://img.shields.io/pypi/v/unionml?style=for-the-badge)](https://pypi.org/project/unionml/)\n[![Documentation Status](https://img.shields.io/readthedocs/unionml/latest?style=for-the-badge)](https://unionml.readthedocs.io/en/latest/?badge=latest)\n[![Build](https://img.shields.io/github/actions/workflow/status/unionai-oss/unionml/build.yml?branch=main\u0026style=for-the-badge)](https://github.com/unionai-oss/unionml/actions/workflows/build.yml)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/unionml?style=for-the-badge)](https://pypistats.org/packages/unionml)\n[![Roadmap](https://img.shields.io/badge/Project-Roadmap-blueviolet?style=for-the-badge)](https://github.com/orgs/unionai-oss/projects/1/views/4)\n\n\u003cbr\u003e\n\n\n**UnionML** is an open source MLOps framework that aims to reduce the boilerplate and friction\nthat comes with building models and deploying them to production.\n\nYou can create **UnionML Apps** by defining a few core methods that are automatically bundled\ninto ML microservices, starting with model training and offline and online prediction.\n\nBuilt on top of [Flyte](https://docs.flyte.org/en/latest/), UnionML provides a high-level\ninterface for productionizing your ML models so that you can focus on curating a better dataset\nand improving your models.\n\nTo learn more, check out the 📖 [Documentation](https://unionml.readthedocs.io).\n\n## Installing\n\nInstall using conda:\n\n```bash\nconda install -c conda-forge unionml\n```\n\nInstall using pip:\n\n```bash\npip install unionml\n```\n\n## A Simple Example\n\nCreate a `Dataset` and `Model`, which together form a **UnionML App**:\n\n```python\nfrom unionml import Dataset, Model\n\nfrom sklearn.linear_model import LogisticRegression\n\ndataset = Dataset(name=\"digits_dataset\", test_size=0.2, shuffle=True, targets=[\"target\"])\nmodel = Model(name=\"digits_classifier\", init=LogisticRegression, dataset=dataset)\n```\n\nDefine `Dataset` and `Model` methods for training a hand-written digits classifier:\n\n```python\nfrom typing import List\n\nimport pandas as pd\nfrom sklearn.datasets import load_digits\nfrom sklearn.metrics import accuracy_score\n\n@dataset.reader\ndef reader() -\u003e pd.DataFrame:\n    return load_digits(as_frame=True).frame\n\n@model.trainer\ndef trainer(\n    estimator: LogisticRegression,\n    features: pd.DataFrame,\n    target: pd.DataFrame,\n) -\u003e LogisticRegression:\n    return estimator.fit(features, target.squeeze())\n\n@model.predictor\ndef predictor(\n    estimator: LogisticRegression,\n    features: pd.DataFrame\n) -\u003e List[float]:\n    return [float(x) for x in estimator.predict(features)]\n\n@model.evaluator\ndef evaluator(\n    estimator: LogisticRegression,\n    features: pd.DataFrame,\n    target: pd.DataFrame\n) -\u003e float:\n    return float(accuracy_score(target.squeeze(), predictor(estimator, features)))\n```\n\nAnd that's all ⭐️!\n\nBy defining these four methods, you've created a minimal **UnionML App** that you can:\n\n- [Execute locally](https://unionml.readthedocs.io/en/latest/index.html#train-and-predict-locally) to debug and iterate on your code.\n- [Serve Seamlessly with FastAPI](https://unionml.readthedocs.io/en/latest/index.html#serve-seamlessly-with-fastapi) for online prediction.\n- [Deploy on a Flyte Cluster](https://unionml.readthedocs.io/en/latest/deploying.html) to scale your model training and schedule offline prediction jobs.\n\n## Contributing\n\nAll contributions are welcome 🤝 ! Check out the [contribution guide](https://unionml.readthedocs.io/en/latest/contributing.html) to learn more about how to contribute.\n\n### Gitpod\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/unionai-oss/unionml)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funionai-oss%2Funionml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funionai-oss%2Funionml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funionai-oss%2Funionml/lists"}