This repository contains instructions, template source code and examples on how to serve/deploy machine learning models using various frameworks and applications such as Docker, Flask, FastAPI, BentoML, Streamlit, MLflow and even code on how to deploy your machine learning model as an android app.

  • By Ifeanyi Nneji
  • Last update: Dec 28, 2022
  • Comments: 16

Serving Machine Learning Models 🤖

About 💥

This repository contains instructions, template source code and examples on how to serve/deploy machine learning models using various frameworks and applications such as Docker, Flask, FastAPI, BentoML, Streamlit, MLflow and even code on how to deploy your machine learning model as an android app.

The Repository also has code and how-to's for deploying your apps to various cloud platforms(AWS, Heroku, Vercel etc), working with Github actions for CI/CD(Continuous Integration and Continuous Development), TDD(Test driven development) with pytest and other useful information.

Table of Contents 📖

Repository Structure

├── androidapp
│   ├── buildozer.spec
│   ├── data
│   │   └── icon.png
│   ├── main.py
│   └── requirements.txt
├── bentoml
│   ├── bentofile.yaml
│   ├── bentosklearn.py
│   ├── Data
│   │   ├── cars.csv
│   │   ├── cars.zip
│   │   └── Data Dictionary - carprices.xlsx
│   ├── __init__.py
│   ├── requirements.txt
│   └── service.py
├── Data
│   ├── cars.csv
│   ├── cars.zip
│   └── Data Dictionary - carprices.xlsx
├── fastapi
│   ├── app.py
│   ├── Dockerfile
│   ├── fastapi-setup.sh
│   ├── favicon.png
│   ├── heroku.yml
│   ├── models
│   │   ├── model.pkl
│   │   └── sklearn_gbr.pkl
│   ├── models.py
│   ├── requirements.txt
│   ├── train.py
│   └── vercel.json
├── flaskapp
│   ├── app.py
│   ├── models
│   │   ├── model.pkl
│   │   └── sklearn_gbr.pkl
│   ├── Procfile
│   ├── requirements.txt
│   ├── runtime.txt
│   ├── static
│   │   ├── favicon.png
│   │   └── w3.css
│   ├── templates
│   │   ├── index.html
│   │   ├── result.html
│   │   ├── static
│   │   │   ├── favicon.png
│   │   │   └── w3.css
│   │   └── w3.css
│   └── utils.py
├── __init__.py
├── LICENSE.md
├── mlflow
│   ├── data
│   │   ├── cars.csv
│   │   ├── cars.zip
│   │   └── Data Dictionary - carprices.xlsx
│   ├── mlflow_app.py
│   ├── mlruns
│   │   └── 0
│   │       ├── 387be03e078049f69b2f68c916b1c4fa
│   │       │   ├── meta.yaml
│   │       │   └── tags
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── 7813850eea9344c0a8e67670fd1eb52b
│   │       │   ├── artifacts
│   │       │   │   └── cars.csv
│   │       │   ├── meta.yaml
│   │       │   └── tags
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── 8d81478e0b7a4ab78a76afb2c0225d85
│   │       │   ├── meta.yaml
│   │       │   └── tags
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── d152c4ed8ff846459df57701db6542b0
│   │       │   ├── artifacts
│   │       │   │   └── cars.csv
│   │       │   ├── meta.yaml
│   │       │   ├── metrics
│   │       │   │   └── R2_Score
│   │       │   ├── params
│   │       │   │   └── gbr
│   │       │   └── tags
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── ee11d66e35c64736bda4bd41429a678b
│   │       │   ├── artifacts
│   │       │   │   └── cars.csv
│   │       │   ├── meta.yaml
│   │       │   └── tags
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── f6aeeb22a768414e81e1825e8b65c728
│   │       │   ├── artifacts
│   │       │   │   ├── cars.csv
│   │       │   │   └── model
│   │       │   │       ├── conda.yaml
│   │       │   │       ├── MLmodel
│   │       │   │       ├── model.pkl
│   │       │   │       ├── python_env.yaml
│   │       │   │       └── requirements.txt
│   │       │   ├── meta.yaml
│   │       │   ├── metrics
│   │       │   │   └── R2_Score
│   │       │   ├── params
│   │       │   │   └── gbr
│   │       │   └── tags
│   │       │       ├── mlflow.log-model.history
│   │       │       ├── mlflow.source.git.commit
│   │       │       ├── mlflow.source.name
│   │       │       ├── mlflow.source.type
│   │       │       └── mlflow.user
│   │       ├── meta.yaml
│   │       └── tags
│   │           └── mlflow.note.content
│   └── requirements.txt
├── Notebooks
│   └── Notebooks.zip
├── README.md
├── setup.sh
├── streamlitapp
│   └── streamlit_app.py
└── tests
    └── test_api.py

Getting Started ⚡

Before we get into building and deploying our models we'll have to setup our environment. I use 'pyenv' for managing different versions of python and pyenv-virtualenv for setting up virtual environments. You can learn how to install pyenv on your operating system by checking out their official github. Also it's important you have git installed on your system so you can easily clone this repository. If you're on Linux you can install git by running this command:

sudo apt-get install git

Configuring Python Environment ⚡

To easily setup our environment I've created a shell script named 'setup.sh' for easily installing and configuring pyenv on your system. It's assumed we are working with Linux but there are ways to install pyenv on windows too. To install pyenv easily with the shell script run the following commands in your terminal:

  1. Clone this repository:
git clone https://github.com/Nneji123/Serving-Machine-Learning-Models.git
  1. Change the working directory
cd Serving-Machine-Learning-Models
  1. Run the script
./setup.sh
  1. After running the script you can check if pyenv successfully installed by running:
pyenv versions

And you should see Python 3.8.10 as the installed version.

Installing Dependencies and Creating virtual environments with pyenv

We will be working with python and some frameworks such as FastAPI, Flask, Streamlit etc and we will need to install their various dependencies. In each folder I've created specific requirements.txt files for installing the dependencies needed for each project. For example you can install the FastAPI application requirements with pip by running:

cd fastapi

pip install -r requirement.txt

Same goes for the other projects in this repository as well.

Building Machine Learning Model: Car Price Prediction ⚡

In this project we will be building a machine learning regression model that can predict the price of a car based on some features. The dataset used can be found on Kaggle and can also be found in this repository. You can check out the notebooks folder which contains the notebook used for analysing and visualising the data and building our model.

How to save Models with Joblib ⚡

Joblib is a set of tools to provide lightweight pipelining in Python. You can read more about Joblib here. To save our model I used joblib to save the model as a pickle file(.pkl) so we can later use the model to make predictions. To save your models(assuming you've built a model) you can do that by running:

import joblib
model = LinearRegression
model.fit(X_train, y_train)
joblib.dump('model.pkl', model)

Version Control your models with DVC(Data Version Control)

What is DVC for? Data Version Control, or DVC, is a data and ML experiment management tool that takes advantage of the existing engineering toolset that we are familiar with (Git, CI/CD, etc.). DVC is meant to be run alongside Git. The git and DVC commands will often be used in tandem, one after the other. In this project I used DVC to manage our models and data. You can read more about DVC and how to use it here.

Creating Applications with your Model :computer

In this section we will be serving our models as applications using these frameworks:

  1. FastAPI
  2. Flask
  3. BentoML
  4. Mlflow
  5. Streamlit
  6. KivyMD

Serving Models with FastAPI ⚡

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.

The key features are:

  • Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the - fastest Python frameworks available.

  • Fast to code: Increase the speed to develop features by about 200% to 300%. *

  • Fewer bugs: Reduce about 40% of human (developer) induced errors. *

  • Intuitive: Great editor support. Completion everywhere. Less time debugging.

  • Easy: Designed to be easy to use and learn. Less time reading docs.

  • Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.

  • Robust: Get production-ready code. With automatic interactive documentation.

  • Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.

To serve models with FastAPI I've created an example template in this repository in which I deployed the car price prediction model as an API which can be used to make POST requests to get predictions. To run that project locally on your system run the following:

cd fastapi
pip install -r requirement.txt
uvicorn app:app --reload

You should be able to view the API on your browser by visiting http://127.0.0.1:8000/

You can also view the deployed API here https://carpriceapi.herokuapp.com

In this tutorial you can learn more about how to serve your model as a RESTful API with FastAPI.

Screenshot 📷

Screenshot (168)

You can also check out other FastAPI applications on my GitHub

Serving Models with Flask ⚡

Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. However, Flask supports extensions that can add application features as if they were implemented in Flask itself. Extensions exist for object-relational mappers, form validation, upload handling, various open authentication technologies and several common framework related tools.

To serve models with flask I've created a template in this repository in which I deployed the car price prediction model as a web app with basic html and css. To run that project locally on your system run the following:

cd flaskapp
pip install -r requirements.txt
python app.py

You should be able to view the application on your browser by visiting http://127.0.0.1:5000/

You can also view the deployed application here: https://carflaskpred.herokuapp.com

Screenshot 📷

Screenshot (166)

Serving Models with BentoML ⚡

BentoML is a Python open-source library that enables users to create a machine learning-powered prediction service in minutes, which helps to bridge the gap between data science and DevOps.

To serve models with Bentoml I've created a template in this repository in which I deployed the car price prediction model as an API with Bentoml. To run that project locally on your system run the following:

cd bentoml
pip install -r requirements.txt
python bentosklearn.py
bentoml serve service.py:service --reload

You should be able to view the application on your browser by visiting http://127.0.0.1:5000/

Serving Models with Mlflow ⚡

MLflow is a platform to streamline machine learning development, including tracking experiments, packaging code into reproducible runs, and sharing and deploying models. MLflow offers a set of lightweight APIs that can be used with any existing machine learning application or library (TensorFlow, PyTorch, XGBoost, etc), wherever you currently run ML code (e.g. in notebooks, standalone applications or the cloud).

To serve models with mlflow I've created a template in this repository in which I deployed the car price prediction model as an API with mlflow. To run that project locally on your system run the following:

cd mlflow
pip install -r requirements.txt
python mlflow_app.py

Then you can run this command below to view the Mlflow User Interface:

mlflow ui

Serving Models with Streamlit ⚡

Streamlit is an open source app framework in Python language. It helps us create web apps for data science and machine learning in a short time. It is compatible with major Python libraries such as scikit-learn, Keras, PyTorch, SymPy(latex), NumPy, pandas, Matplotlib etc.

To serve models with Streamlit I've created a template in this repository in which I deployed the car price prediction model as a web app with streamlit. To run that project locally on your system run the following:

cd streamlitapp
pip install -r requirements.txt
streamlit run streamlit_app.py

You should be able to view the web application in your browser with this link http://127.0.0.1:8501/

You can also check out the streamlit application deployed on streamlit cloud here

Screenshot 📷

Screenshot (168)

You can also check out my other Streamlit Projects with this link

Serving Models as Desktop/Mobile Applications ⚡

You can also deploy machine learning models as desktop and mobile applications with frameworks such as KivyMD. You can learn more about deploying models with KivyMD by checking out this tutorial.

I've also created a template application in this repository for deploying the car price prediction model with KivyMD. I also built the applications as an android app with buildozer and github actions which will be explained in later sections. You can check out and install the android applications by checking out the bin folder in the data branch of this repository.

To run that project, run the following commands:

cd androidapp
pip install -r requirements.txt
python main.py

You should see a screen similar to the image below: Screenshot 2022-07-14 155152

How to Test your models and applications with Pytest ⚡

The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries.

Working with Docker ⚡

Docker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. The service has both free and premium tiers.

In this repository I've deployed the FastAPI application using a Dockerfile. You can learn more about working with Docker and writing Dockerfiles here

Deploying your applications to AWS and Heroku ⚡

In this repository I've deployed the FastAPI and Flask applications to platforms such as AWS and Heroku. I'll be using the fastapi folder as an example of deploying applications to both AWS and Heroku.

Deploy to Heroku ⚡

To deploy the FastAPI application to Heroku run the following commands:

  1. Install the heroku cli
npm install -g heroku
  1. Login to Heroku
heroku login --interactive
  1. Change the working directory
cd fastapi
  1. Run this command so as to work with just the fastapi folder
git init
git add .
git commit -m "first commit"
  1. Create the heroku app
heroku create your-app-name 

Replace your-app-name with the name of your choosing.

  1. Set the heroku cli git remote to that app
heroku git:remote your-app-name
  1. Set the heroku stack setting to container
heroku stack:set container
  1. Push to heroku
git push heroku master

And you should be able to view your deployed application by following the link e.g https://your-app-name.herokuapp.com

You can also view logs for your deployed application by running:

heroku logs -t -a your-app-name

Deploy to AWS ⚡

You can also deploy your application using an AWS EC2 instance(Ubuntu) by following the steps below. This is also assuming you have launched your instance, exposed the required ports and installed git in your instance. If you don't know how to do that you can check out this repository for more details.

Run the following commands in your AWS EC2 instance:

git clone https://github.com/Nneji123/Serving-Machine-Learning-Models.git
cd Serving-Machine-Learning-Models/fastapi
./fastapi-setup.sh

After running the commands above you can view your deployed application by going to the Public IP address location of your AWS instance. E.g if your public ip address is 3.91.202.12 visit http://3.91.202.12:80/docs to view your deployed API documentation.

Github Actions ⚡

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.

Using Github Actions and Heroku for CI/CD ⚡

In this repository I've used Github actions to continuously deploy the Flask and FastAPI applications to Heroku i.e whenever I make a push or pull action in this repository the Github action will run and deploy new versions of those applications to Heroku. The 'action' files are stored in this folder

You can read more about using Github actions to automate your workflow here

License

MIT

Github

https://github.com/Nneji123/Serving-Machine-Learning-Models

Comments(16)

  • 1

    Bump numpy from 1.19.5 to 1.24.0

    Bumps numpy from 1.19.5 to 1.24.0.

    Release notes

    Sourced from numpy's releases.

    v1.24.0

    NumPy 1.24 Release Notes

    The NumPy 1.24.0 release continues the ongoing work to improve the handling and promotion of dtypes, increase the execution speed, and clarify the documentation. There are also a large number of new and expired deprecations due to changes in promotion and cleanups. This might be called a deprecation release. Highlights are

    • Many new deprecations, check them out.
    • Many expired deprecations,
    • New F2PY features and fixes.
    • New "dtype" and "casting" keywords for stacking functions.

    See below for the details,

    This release supports Python versions 3.8-3.11.

    Deprecations

    Deprecate fastCopyAndTranspose and PyArray_CopyAndTranspose

    The numpy.fastCopyAndTranspose function has been deprecated. Use the corresponding copy and transpose methods directly:

    arr.T.copy()
    

    The underlying C function PyArray_CopyAndTranspose has also been deprecated from the NumPy C-API.

    (gh-22313)

    Conversion of out-of-bound Python integers

    Attempting a conversion from a Python integer to a NumPy value will now always check whether the result can be represented by NumPy. This means the following examples will fail in the future and give a DeprecationWarning now:

    np.uint8(-1)
    np.array([3000], dtype=np.int8)
    

    Many of these did succeed before. Such code was mainly useful for unsigned integers with negative values such as np.uint8(-1) giving np.iinfo(np.uint8).max.

    Note that conversion between NumPy integers is unaffected, so that np.array(-1).astype(np.uint8) continues to work and use C integer overflow logic. For negative values, it will also work to view the array: np.array(-1, dtype=np.int8).view(np.uint8). In some cases,

    ... (truncated)

    Commits
    • 8cec820 Merge pull request #22813 from charris/prepare-1.24.0-release
    • 8d33e68 REL: Prepare for the NumPy 1.24.0 release.
    • 5ac09da Merge pull request #22815 from charris/backport-22814
    • df2d26f BLD: use newer version of delocate
    • e18104e Merge pull request #22805 from charris/backport-22804
    • 6d44424 REV: revert change to numpyconfig.h for sizeof(type) hardcoding on macOS
    • c484593 Merge pull request #22795 from charris/backport-22791
    • 0904c01 Change argument to npy_floatstatus_..._barrier() functions to ensure it
    • 34653f9 Merge pull request #22793 from charris/backport-22789
    • 21f7096 BUG: Fix infinite recursion in longdouble/large integer scalar ops
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 2

    Bump bentoml from 1.0.0a4 to 1.0.11

    Bumps bentoml from 1.0.0a4 to 1.0.11.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.11

    🍱 BentoML v1.0.11 is here featuring the introduction of an inference collection and model monitoring API that can be easily integrated with any model monitoring frameworks.

    image

    • Introduced the bentoml.monitor API for monitoring any features, predictions, and target data in numerical, categorical, and numerical sequence types.

      import bentoml
      from bentoml.io import Text
      from bentoml.io import NumpyNdarray
      

      CLASS_NAMES = ["setosa", "versicolor", "virginica"]

      iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner() svc = bentoml.Service("iris_classifier", runners=[iris_clf_runner])

      @​svc.api( input=NumpyNdarray.from_sample(np.array([4.9, 3.0, 1.4, 0.2], dtype=np.double)), output=Text(), ) async def classify(features: np.ndarray) -> str: with bentoml.monitor("iris_classifier_prediction") as mon: mon.log(features[0], name="sepal length", role="feature", data_type="numerical") mon.log(features[1], name="sepal width", role="feature", data_type="numerical") mon.log(features[2], name="petal length", role="feature", data_type="numerical") mon.log(features[3], name="petal width", role="feature", data_type="numerical")

          results = await iris_clf_runner.predict.async_run([features])
          result = results[0]
          category = CLASS_NAMES[result]
      
      mon.log(category, name="pred", role="prediction", data_type="categorical")
      

      return category

    • Enabled monitoring data collection through log file forwarding using any forwarders (fluentbit, filebeat, logstash) or OTLP exporter implementations.

      • Configuration for monitoring data collection through log files.

        monitoring:
          enabled: true
          type: default
          options:
            log_path: path/to/log/file
        
      • Configuration for monitoring data collection through an OTLP exporter.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 3

    Bump numpy from 1.19.5 to 1.23.5

    Bumps numpy from 1.19.5 to 1.23.5.

    Release notes

    Sourced from numpy's releases.

    v1.23.5

    NumPy 1.23.5 Release Notes

    NumPy 1.23.5 is a maintenance release that fixes bugs discovered after the 1.23.4 release and keeps the build infrastructure current. The Python versions supported for this release are 3.8-3.11.

    Contributors

    A total of 7 people contributed to this release. People with a "+" by their names contributed a patch for the first time.

    • @​DWesl
    • Aayush Agrawal +
    • Adam Knapp +
    • Charles Harris
    • Navpreet Singh +
    • Sebastian Berg
    • Tania Allard

    Pull requests merged

    A total of 10 pull requests were merged for this release.

    • #22489: TST, MAINT: Replace most setup with setup_method (also teardown)
    • #22490: MAINT, CI: Switch to cygwin/[email protected]
    • #22494: TST: Make test_partial_iteration_cleanup robust but require leak...
    • #22592: MAINT: Ensure graceful handling of large header sizes
    • #22593: TYP: Spelling alignment for array flag literal
    • #22594: BUG: Fix bounds checking for random.logseries
    • #22595: DEV: Update GH actions and Dockerfile for Gitpod
    • #22596: CI: Only fetch in actions/checkout
    • #22597: BUG: Decrement ref count in gentype_reduce if allocated memory...
    • #22625: BUG: Histogramdd breaks on big arrays in Windows

    Checksums

    MD5

    8a412b79d975199cefadb465279fd569  numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl
    1b56e8e6a0516c78473657abf0710538  numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl
    c787f4763c9a5876e86a17f1651ba458  numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
    db07645022e56747ba3f00c2d742232e  numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    c63a6fb7cc16a13aabc82ec57ac6bb4d  numpy-1.23.5-cp310-cp310-win32.whl
    3fea9247e1d812600015641941fa273f  numpy-1.23.5-cp310-cp310-win_amd64.whl
    4222cfb36e5ac9aec348c81b075e2c05  numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl
    6c7102f185b310ac70a62c13d46f04e6  numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl
    6b7319f66bf7ac01b49e2a32470baf28  numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
    3c60928ddb1f55163801f06ac2229eb0  numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    6936b6bcfd6474acc7a8c162a9393b3c  numpy-1.23.5-cp311-cp311-win32.whl
    

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 4

    Bump bentoml from 1.0.0a4 to 1.0.10

    Bumps bentoml from 1.0.0a4 to 1.0.10.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.10

    🍱 BentoML v1.0.10 is released to address a recurring broken pipe reported by the community. Also included in this release, is a list of improvements we’d like to share with the community.

    • Fixed an aiohttp.client_exceptions.ClientOSError caused by asymmetrical keep alive timeout settings between the API Server and Runner.

      aiohttp.client_exceptions.ClientOSError: [Errno 32] Broken pipe
      
    • Added multi-output support for ONNX and TensorFlow frameworks.

    • Added from_sample support to all IO Descriptors in addition to just bentoml.io.NumpyNdarray and the sample is reflected in the Swagger UI.

      # Pandas Example
      @svc.api(
          input=PandasDataFrame.from_sample(
              pd.DataFrame([1,2,3,4])
          ),
      	output=PandasDataFrame(),
      )
      

      JSON Example

      @​svc.api( input=JSON.from_sample( {"foo": 1, "bar": 2} ), output=JSON(), )

      image

    💡 We continue to update the documentation and examples on every release to help the community unlock the full power of BentoML.

    What's Changed

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 5

    Bump bentoml from 1.0.0a4 to 1.0.8

    Bumps bentoml from 1.0.0a4 to 1.0.8.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.8

    🍱 BentoML v1.0.8 is released with a list of improvement we hope that you’ll find useful.

    • Introduced Bento Client for easy access to the BentoML service over HTTP. Both sync and async calls are supported. See the Bento Client Guide for more details.

      from bentoml.client import Client
      

      client = Client.from_url("http://localhost:3000")

      Sync call

      response = client.classify(np.array([[4.9, 3.0, 1.4, 0.2]]))

      Async call

      response = await client.async_classify(np.array([[4.9, 3.0, 1.4, 0.2]]))

    • Introduced custom metrics support for easy instrumentation of custom metrics over Prometheus. See Metrics Guide] for more details.

      # Histogram metric
      inference_duration = bentoml.metrics.Histogram(
          name="inference_duration",
          documentation="Duration of inference",
          labelnames=["nltk_version", "sentiment_cls"],
      )
      

      Counter metric

      polarity_counter = bentoml.metrics.Counter( name="polarity_total", documentation="Count total number of analysis by polarity scores", labelnames=["polarity"], )

      Full Prometheus style syntax is supported for instrumenting custom metrics inside API and Runner definitions.

      # Histogram
      inference_duration.labels(
          nltk_version=nltk.__version__, sentiment_cls=self.sia.__class__.__name__
      ).observe(time.perf_counter() - start)
      

      Counter

      polarity_counter.labels(polarity=is_positive).inc()

    • Improved health checking to also cover the status of runners to avoid returning a healthy status before runners are ready.

    • Added SSL/TLS support to gRPC serving.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 6

    Bump scikit-learn from 1.1.1 to 1.1.3

    Bumps scikit-learn from 1.1.1 to 1.1.3.

    Release notes

    Sourced from scikit-learn's releases.

    scikit-learn 1.1.3

    We're happy to announce the 1.1.3 release.

    This bugfix release only includes fixes for compatibility with the latest SciPy release >= 1.9.2 and wheels for Python 3.11. Note that support for 32-bit Python on Windows has been dropped in this release. This is due to the fact that SciPy 1.9.2 also dropped the support for that platform. Windows users are advised to install the 64-bit version of Python instead.

    You can see the changelog here: https://scikit-learn.org/dev/whats_new/v1.1.html#version-1-1-3

    You can upgrade with pip as usual:

    pip install -U scikit-learn
    

    The conda-forge builds will be available shortly, which you can then install using:

    conda install -c conda-forge scikit-learn
    

    scikit-learn 1.1.2

    We're happy to announce the 1.1.2 release with several bugfixes:

    You can see the changelog here: https://scikit-learn.org/dev/whats_new/v1.1.html#version-1-1-2

    You can upgrade with pip as usual:

    pip install -U scikit-learn
    

    The conda-forge builds will be available shortly, which you can then install using:

    conda install -c conda-forge scikit-learn
    
    Commits
    • ffc0f66 [cd build] trigger CD builds
    • f3f51f9 DOC add more info about the drop of support for 32-bit Python on Windows (#2...
    • 6ea9e2c MAINT remove entry linked to 1.2 [cd build]
    • 016ec74 TST Relax test_gradient_boosting_early_stopping (#24541)
    • 31c226e CI Remove Windows 32 bit support (#24627)
    • 822622c CI Remove remaining windows 32 references (#24657)
    • 7bc5a14 MAINT bumpversion 1.1.3 [cd build]
    • 9aa3054 DOC update index showing new release
    • df102af DOC add entries for the 1.1.3 release (#24744)
    • 7e6e82b MAINT force NumPy version for building scikit-learn for CPython 3.10 in Windo...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 7

    Bump numpy from 1.19.5 to 1.23.4

    Bumps numpy from 1.19.5 to 1.23.4.

    Release notes

    Sourced from numpy's releases.

    v1.23.4

    NumPy 1.23.4 Release Notes

    NumPy 1.23.4 is a maintenance release that fixes bugs discovered after the 1.23.3 release and keeps the build infrastructure current. The main improvements are fixes for some annotation corner cases, a fix for a long time nested_iters memory leak, and a fix of complex vector dot for very large arrays. The Python versions supported for this release are 3.8-3.11.

    Note that the mypy version needs to be 0.981+ if you test using Python 3.10.7, otherwise the typing tests will fail.

    Contributors

    A total of 8 people contributed to this release. People with a "+" by their names contributed a patch for the first time.

    • Bas van Beek
    • Charles Harris
    • Matthew Barber
    • Matti Picus
    • Ralf Gommers
    • Ross Barnowski
    • Sebastian Berg
    • Sicheng Zeng +

    Pull requests merged

    A total of 13 pull requests were merged for this release.

    • #22368: BUG: Add __array_api_version__ to numpy.array_api namespace
    • #22370: MAINT: update sde toolkit to 9.0, fix download link
    • #22382: BLD: use macos-11 image on azure, macos-1015 is deprecated
    • #22383: MAINT: random: remove get_info from "extending with Cython"...
    • #22384: BUG: Fix complex vector dot with more than NPY_CBLAS_CHUNK elements
    • #22387: REV: Loosen lookfor's import try/except again
    • #22388: TYP,ENH: Mark numpy.typing protocols as runtime checkable
    • #22389: TYP,MAINT: Change more overloads to play nice with pyright
    • #22390: TST,TYP: Bump mypy to 0.981
    • #22391: DOC: Update delimiter param description.
    • #22392: BUG: Memory leaks in numpy.nested_iters
    • #22413: REL: Prepare for the NumPy 1.23.4 release.
    • #22424: TST: Fix failing aarch64 wheel builds.

    Checksums

    MD5

    90a3d95982490cfeeef22c0f7cbd874f  numpy-1.23.4-cp310-cp310-macosx_10_9_x86_64.whl
    

    ... (truncated)

    Commits
    • f802155 Merge pull request #22425 from charris/prepare-1.23.4-release_1
    • 298174b REL: Prepare for the NumPy 1.23.4 release (1)
    • 631072f Merge pull request #22424 from charris/backport-22418
    • f4a3195 TST, BLD: Fix failing aarch64 wheel builds.
    • 1cbd127 Merge pull request #22413 from charris/prepare-for-1.23.4
    • 8cfc899 REL: Prepare for the NumPy 1.23.4 release.
    • 22a41b5 Merge pull request #22392 from charris/backport-22296
    • f6a3c11 Adding missing Py_DECREF call on iter
    • 8274a16 Merge pull request #22391 from charris/backport-22372
    • fa16a0c Merge pull request #22390 from charris/backport-22360
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 8

    Bump bentoml from 1.0.0a4 to 1.0.7

    Bumps bentoml from 1.0.0a4 to 1.0.7.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.7

    🍱 BentoML released v1.0.7 as a patch to quickly fix a critical module import issue introduced in v1.0.6. The import error manifests in the import of any modules under io.* or models.*. The following is an example of a typical error message and traceback. Please upgrade to v1.0.7 to address this import issue.

    packages/anyio/_backends/_asyncio.py", line 21, in <module>
        from io import IOBase
    ImportError: cannot import name 'IOBase' from 'bentoml.io'
    

    What's Changed

    New Contributors

    Full Changelog: https://github.com/bentoml/BentoML/compare/v1.0.6...v1.0.7

    BentoML - v1.0.6

    🍱 BentoML has just released v1.0.6 featuring the gRPC preview! Without changing a line of code, you can now serve your Bentos as a gRPC service. Similar to serving over HTTP, BentoML gRPC supports all the ML frameworks, observability features, adaptive batching, and more out-of-the-box, simply by calling the serve-grpc CLI command.

    > pip install "bentoml[grpc]"
    > bentoml serve-grpc iris_classifier:latest --production
    

    ⚠️ gRPC is current under preview. The public APIs may undergo incompatible changes in the future patch releases until the official v1.1.0 minor version release.

    • Enhanced access logging format to output Trace and Span IDs in the more standard hex encoding by default.
    • Added request total, duration, and in-progress metrics to Runners, in addition to API Servers.
    • Added support for XGBoost SKLearn models.
    • Added support for restricting image mime types in the Image IO descriptor.

    🥂 We’d like to thank our community for their contribution and support.

    What's Changed

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 9

    Bump bentoml from 1.0.0a4 to 1.0.6

    Bumps bentoml from 1.0.0a4 to 1.0.6.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.6

    🍱 BentoML has just released v1.0.6 featuring the gRPC preview! Without changing a line of code, you can now serve your Bentos as a gRPC service. Similar to serving over HTTP, BentoML gRPC supports all the ML frameworks, observability features, adaptive batching, and more out-of-the-box, simply by calling the serve-grpc CLI command.

    > pip install "bentoml[grpc]"
    > bentoml serve-grpc iris_classifier:latest --production
    

    ⚠️ gRPC is current under preview. The public APIs may undergo incompatible changes in the future patch releases until the official v1.1.0 minor version release.

    • Enhanced access logging format to output Trace and Span IDs in the more standard hex encoding by default.
    • Added request total, duration, and in-progress metrics to Runners, in addition to API Servers.
    • Added support for XGBoost SKLearn models.
    • Added support for restricting image mime types in the Image IO descriptor.

    🥂 We’d like to thank our community for their contribution and support.

    What's Changed

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 10

    Bump numpy from 1.19.5 to 1.23.3

    Bumps numpy from 1.19.5 to 1.23.3.

    Release notes

    Sourced from numpy's releases.

    v1.23.3

    NumPy 1.23.3 Release Notes

    NumPy 1.23.3 is a maintenance release that fixes bugs discovered after the 1.23.2 release. There is no major theme for this release, the main improvements are for some downstream builds and some annotation corner cases. The Python versions supported for this release are 3.8-3.11.

    Note that we will move to MacOS 11 for the NumPy 1.23.4 release, the 10.15 version currently used will no longer be supported by our build infrastructure at that point.

    Contributors

    A total of 16 people contributed to this release. People with a "+" by their names contributed a patch for the first time.

    • Aaron Meurer
    • Bas van Beek
    • Charles Harris
    • Ganesh Kathiresan
    • Gavin Zhang +
    • Iantra Solari+
    • Jyn Spring 琴春 +
    • Matti Picus
    • Rafael Cardoso Fernandes Sousa
    • Rafael Sousa +
    • Ralf Gommers
    • Rin Cat (鈴猫) +
    • Saransh Chopra +
    • Sayed Adel
    • Sebastian Berg
    • Serge Guelton

    Pull requests merged

    A total of 14 pull requests were merged for this release.

    • #22136: BLD: Add Python 3.11 wheels to aarch64 build
    • #22148: MAINT: Update setup.py for Python 3.11.
    • #22155: CI: Test NumPy build against old versions of GCC(6, 7, 8)
    • #22156: MAINT: support IBM i system
    • #22195: BUG: Fix circleci build
    • #22214: BUG: Expose heapsort algorithms in a shared header
    • #22215: BUG: Support using libunwind for backtrack
    • #22216: MAINT: fix an incorrect pointer type usage in f2py
    • #22220: BUG: change overloads to play nice with pyright.
    • #22221: TST,BUG: Use fork context to fix MacOS savez test
    • #22222: TYP,BUG: Reduce argument validation in C-based __class_getitem__

    ... (truncated)

    Commits
    • e47cbb6 Merge pull request #22234 from charris/prepare-1.23.3-release
    • e0e8991 REL: Prepare for the NumPy 1.23.3 release.
    • 9bf22bb BUG: Better report integer division overflow (backport) (#22230)
    • 0f0d355 Merge pull request #22224 from charris/backport-21928
    • 55a5ca7 Merge pull request #22223 from charris/backport-21981
    • 6cc4183 BUG: Fix the implementation of numpy.array_api.vecdot (#21928)
    • fb9666f BUG: Replace assert with correct error
    • fc0d627 TST: ensure np.equal.reduce raises a TypeError
    • 754ec89 Merge pull request #22222 from charris/backport-22212
    • 63ab75d Merge pull request #22221 from charris/backport-22204
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 11

    Bump pydantic from 1.9.1 to 1.10.2

    Bumps pydantic from 1.9.1 to 1.10.2.

    Release notes

    Sourced from pydantic's releases.

    v1.10.2 (2022-09-05)

    Full Changelog: https://github.com/pydantic/pydantic/compare/v1.10.1...v1.10.2

    v1.10.1 (2022-08-31)

    Full Changelog: https://github.com/pydantic/pydantic/compare/v1.10.0...v1.10.1

    v1.10.0 (2022-08-30)

    See #4419 for feedback and discussion, docs are live at pydantic-docs.helpmanual.io.

    • Refactor the whole pydantic dataclass decorator to really act like its standard lib equivalent. It hence keeps __eq__, __hash__, ... and makes comparison with its non-validated version possible. It also fixes usage of frozen dataclasses in fields and usage of default_factory in nested dataclasses. The support of Config.extra has been added. Finally, config customization directly via a dict is now possible, #2557 by @​PrettyWood BREAKING CHANGES:
      • The compiled boolean (whether pydantic is compiled with cython) has been moved from main.py to version.py
      • Now that Config.extra is supported, dataclass ignores by default extra arguments (like BaseModel)
    • Fix PEP487 __set_name__ protocol in BaseModel for PrivateAttrs, #4407 by @​tlambert03
    • Allow for custom parsing of environment variables via parse_env_var in Config, #4406 by @​acmiyaguchi
    • Rename master to main, #4405 by @​hramezani
    • Fix StrictStr does not raise ValidationError when max_length is present in Field, #4388 by @​hramezani
    • Make SecretStr and SecretBytes hashable, #4387 by @​chbndrhnns
    • Fix StrictBytes does not raise ValidationError when max_length is present in Field, #4380 by @​JeanArhancet
    • Add support for bare type, #4375 by @​hramezani
    • Support Python 3.11, including binaries for 3.11 in PyPI, #4374 by @​samuelcolvin
    • Add support for re.Pattern, #4366 by @​hramezani
    • Fix __post_init_post_parse__ is incorrectly passed keyword arguments when no __post_init__ is defined, #4361 by @​hramezani
    • Fix implicitly importing ForwardRef and Callable from pydantic.typing instead of typing and also expose MappingIntStrAny, #4358 by @​aminalaee
    • remove Any types from the dataclass decorator so it can be used with the disallow_any_expr mypy option, #4356 by @​DetachHead
    • moved repo to pydantic/pydantic, #4348 by @​yezz123
    • fix "extra fields not permitted" error when dataclass with Extra.forbid is validated multiple times, #4343 by @​detachhead
    • Add Python 3.9 and 3.10 examples to docs, #4339 by @​Bobronium
    • Discriminated union models now use oneOf instead of anyOf when generating OpenAPI schema definitions, #4335 by @​MaxwellPayne
    • Allow type checkers to infer inner type of Json type. Json[list[str]] will be now inferred as list[str], Json[Any] should be used instead of plain Json. Runtime behaviour is not changed, #4332 by @​Bobronium
    • Allow empty string aliases by using a alias is not None check, rather than bool(alias), #4253 by @​sergeytsaplin
    • Update ForwardRefs in Field.outer_type_, #4249 by @​JacobHayes
    • The use of __dataclass_transform__ has been replaced by typing_extensions.dataclass_transform, which is the preferred way to mark pydantic models as a dataclass under PEP 681, #4241 by @​multimeric
    • Use parent model's Config when validating nested NamedTuple fields, #4219 by @​synek

    ... (truncated)

    Changelog

    Sourced from pydantic's changelog.

    v1.10.2 (2022-09-05)

    v1.10.1 (2022-08-31)

    v1.10.0 (2022-08-30)

    • Refactor the whole pydantic dataclass decorator to really act like its standard lib equivalent. It hence keeps __eq__, __hash__, ... and makes comparison with its non-validated version possible. It also fixes usage of frozen dataclasses in fields and usage of default_factory in nested dataclasses. The support of Config.extra has been added. Finally, config customization directly via a dict is now possible, #2557 by @​PrettyWood BREAKING CHANGES:
      • The compiled boolean (whether pydantic is compiled with cython) has been moved from main.py to version.py
      • Now that Config.extra is supported, dataclass ignores by default extra arguments (like BaseModel)
    • Fix PEP487 __set_name__ protocol in BaseModel for PrivateAttrs, #4407 by @​tlambert03
    • Allow for custom parsing of environment variables via parse_env_var in Config, #4406 by @​acmiyaguchi
    • Rename master to main, #4405 by @​hramezani
    • Fix StrictStr does not raise ValidationError when max_length is present in Field, #4388 by @​hramezani
    • Make SecretStr and SecretBytes hashable, #4387 by @​chbndrhnns
    • Fix StrictBytes does not raise ValidationError when max_length is present in Field, #4380 by @​JeanArhancet
    • Add support for bare type, #4375 by @​hramezani
    • Support Python 3.11, including binaries for 3.11 in PyPI, #4374 by @​samuelcolvin
    • Add support for re.Pattern, #4366 by @​hramezani
    • Fix __post_init_post_parse__ is incorrectly passed keyword arguments when no __post_init__ is defined, #4361 by @​hramezani
    • Fix implicitly importing ForwardRef and Callable from pydantic.typing instead of typing and also expose MappingIntStrAny, #4358 by @​aminalaee
    • remove Any types from the dataclass decorator so it can be used with the disallow_any_expr mypy option, #4356 by @​DetachHead
    • moved repo to pydantic/pydantic, #4348 by @​yezz123
    • fix "extra fields not permitted" error when dataclass with Extra.forbid is validated multiple times, #4343 by @​detachhead
    • Add Python 3.9 and 3.10 examples to docs, #4339 by @​Bobronium
    • Discriminated union models now use oneOf instead of anyOf when generating OpenAPI schema definitions, #4335 by @​MaxwellPayne
    • Allow type checkers to infer inner type of Json type. Json[list[str]] will be now inferred as list[str], Json[Any] should be used instead of plain Json. Runtime behaviour is not changed, #4332 by @​Bobronium
    • Allow empty string aliases by using a alias is not None check, rather than bool(alias), #4253 by @​sergeytsaplin
    • Update ForwardRefs in Field.outer_type_, #4249 by @​JacobHayes
    • The use of __dataclass_transform__ has been replaced by typing_extensions.dataclass_transform, which is the preferred way to mark pydantic models as a dataclass under PEP 681, #4241 by @​multimeric
    • Use parent model's Config when validating nested NamedTuple fields, #4219 by @​synek
    • Update BaseModel.construct to work with aliased Fields, #4192 by @​kylebamos

    ... (truncated)

    Commits
    • bc74342 prepare for v1.10.2
    • f1e9883 fix: dataclass wrapper was not always called (#4484)
    • 91bb8d4 Basic fix of GenericModel cache to detect order of args in Union models [#447...
    • eccd85e prevent long strings as int inputs (#4480)
    • a4367c1 Revert percent encoding in URLs. (#4470)
    • 02cf7f5 fix mypy with default_factory=list etc. (#4471)
    • 5a2ddec Use tomllib on Python 3.11 (#4476)
    • 317bef3 build(deps): bump black from 22.6.0 to 22.8.0 (#4465)
    • 2add8a9 build(deps): bump hypothesis from 6.54.3 to 6.54.4 (#4464)
    • f1fb4f2 build(deps): bump mkdocs-material from 8.4.0 to 8.4.2 (#4463)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 12

    Bump pydantic from 1.9.1 to 1.10.3

    Bumps pydantic from 1.9.1 to 1.10.3.

    Release notes

    Sourced from pydantic's releases.

    v1.10.3 (2022-12-29)

    Full Changelog: https://github.com/pydantic/pydantic/compare/v1.10.2...v1.10.3

    v1.10.2 (2022-09-05)

    Full Changelog: https://github.com/pydantic/pydantic/compare/v1.10.1...v1.10.2

    v1.10.1 (2022-08-31)

    Full Changelog: https://github.com/pydantic/pydantic/compare/v1.10.0...v1.10.1

    v1.10.0 (2022-08-30)

    See #4419 for feedback and discussion, docs are live at pydantic-docs.helpmanual.io.

    • Refactor the whole pydantic dataclass decorator to really act like its standard lib equivalent. It hence keeps __eq__, __hash__, ... and makes comparison with its non-validated version possible. It also fixes usage of frozen dataclasses in fields and usage of default_factory in nested dataclasses. The support of Config.extra has been added. Finally, config customization directly via a dict is now possible, #2557 by @​PrettyWood BREAKING CHANGES:
      • The compiled boolean (whether pydantic is compiled with cython) has been moved from main.py to version.py
      • Now that Config.extra is supported, dataclass ignores by default extra arguments (like BaseModel)
    • Fix PEP487 __set_name__ protocol in BaseModel for PrivateAttrs, #4407 by @​tlambert03
    • Allow for custom parsing of environment variables via parse_env_var in Config, #4406 by @​acmiyaguchi
    • Rename master to main, #4405 by @​hramezani
    • Fix StrictStr does not raise ValidationError when max_length is present in Field, #4388 by @​hramezani
    • Make SecretStr and SecretBytes hashable, #4387 by @​chbndrhnns
    • Fix StrictBytes does not raise ValidationError when max_length is present in Field, #4380 by @​JeanArhancet

    ... (truncated)

    Changelog

    Sourced from pydantic's changelog.

    v1.10.3 (2022-12-29)

    v1.10.2 (2022-09-05)

    v1.10.1 (2022-08-31)

    v1.10.0 (2022-08-30)

    • Refactor the whole pydantic dataclass decorator to really act like its standard lib equivalent. It hence keeps __eq__, __hash__, ... and makes comparison with its non-validated version possible. It also fixes usage of frozen dataclasses in fields and usage of default_factory in nested dataclasses. The support of Config.extra has been added. Finally, config customization directly via a dict is now possible, #2557 by @​PrettyWood BREAKING CHANGES:
      • The compiled boolean (whether pydantic is compiled with cython) has been moved from main.py to version.py
      • Now that Config.extra is supported, dataclass ignores by default extra arguments (like BaseModel)
    • Fix PEP487 __set_name__ protocol in BaseModel for PrivateAttrs, #4407 by @​tlambert03
    • Allow for custom parsing of environment variables via parse_env_var in Config, #4406 by @​acmiyaguchi
    • Rename master to main, #4405 by @​hramezani
    • Fix StrictStr does not raise ValidationError when max_length is present in Field, #4388 by @​hramezani
    • Make SecretStr and SecretBytes hashable, #4387 by @​chbndrhnns
    • Fix StrictBytes does not raise ValidationError when max_length is present in Field, #4380 by @​JeanArhancet
    • Add support for bare type, #4375 by @​hramezani
    • Support Python 3.11, including binaries for 3.11 in PyPI, #4374 by @​samuelcolvin

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 13

    Bump numpy from 1.19.5 to 1.24.1

    Bumps numpy from 1.19.5 to 1.24.1.

    Release notes

    Sourced from numpy's releases.

    v1.24.1

    NumPy 1.24.1 Release Notes

    NumPy 1.24.1 is a maintenance release that fixes bugs and regressions discovered after the 1.24.0 release. The Python versions supported by this release are 3.8-3.11.

    Contributors

    A total of 12 people contributed to this release. People with a "+" by their names contributed a patch for the first time.

    • Andrew Nelson
    • Ben Greiner +
    • Charles Harris
    • Clément Robert
    • Matteo Raso
    • Matti Picus
    • Melissa Weber Mendonça
    • Miles Cranmer
    • Ralf Gommers
    • Rohit Goswami
    • Sayed Adel
    • Sebastian Berg

    Pull requests merged

    A total of 18 pull requests were merged for this release.

    • #22820: BLD: add workaround in setup.py for newer setuptools
    • #22830: BLD: CIRRUS_TAG redux
    • #22831: DOC: fix a couple typos in 1.23 notes
    • #22832: BUG: Fix refcounting errors found using pytest-leaks
    • #22834: BUG, SIMD: Fix invalid value encountered in several ufuncs
    • #22837: TST: ignore more np.distutils.log imports
    • #22839: BUG: Do not use getdata() in np.ma.masked_invalid
    • #22847: BUG: Ensure correct behavior for rows ending in delimiter in...
    • #22848: BUG, SIMD: Fix the bitmask of the boolean comparison
    • #22857: BLD: Help raspian arm + clang 13 about __builtin_mul_overflow
    • #22858: API: Ensure a full mask is returned for masked_invalid
    • #22866: BUG: Polynomials now copy properly (#22669)
    • #22867: BUG, SIMD: Fix memory overlap in ufunc comparison loops
    • #22868: BUG: Fortify string casts against floating point warnings
    • #22875: TST: Ignore nan-warnings in randomized out tests
    • #22883: MAINT: restore npymath implementations needed for freebsd
    • #22884: BUG: Fix integer overflow in in1d for mixed integer dtypes #22877
    • #22887: BUG: Use whole file for encoding checks with charset_normalizer.

    Checksums

    ... (truncated)

    Commits
    • a28f4f2 Merge pull request #22888 from charris/prepare-1.24.1-release
    • f8fea39 REL: Prepare for the NumPY 1.24.1 release.
    • 6f491e0 Merge pull request #22887 from charris/backport-22872
    • 48f5fe4 BUG: Use whole file for encoding checks with charset_normalizer [f2py] (#22...
    • 0f3484a Merge pull request #22883 from charris/backport-22882
    • 002c60d Merge pull request #22884 from charris/backport-22878
    • 38ef9ce BUG: Fix integer overflow in in1d for mixed integer dtypes #22877 (#22878)
    • bb00c68 MAINT: restore npymath implementations needed for freebsd
    • 64e09c3 Merge pull request #22875 from charris/backport-22869
    • dc7bac6 TST: Ignore nan-warnings in randomized out tests
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 14

    Bump bentoml from 1.0.0a4 to 1.0.12

    Bumps bentoml from 1.0.0a4 to 1.0.12.

    Release notes

    Sourced from bentoml's releases.

    BentoML - v1.0.12

    Important bug fixes.

    • Fixed runner call failures with keyword arguments.
    • Fixed incorrect user base image override .

    What's Changed

    Full Changelog: https://github.com/bentoml/BentoML/compare/v1.0.11...v1.0.12

    BentoML - v1.0.11

    🍱 BentoML v1.0.11 is here featuring the introduction of an inference collection and model monitoring API that can be easily integrated with any model monitoring frameworks.

    image

    • Introduced the bentoml.monitor API for monitoring any features, predictions, and target data in numerical, categorical, and numerical sequence types.

      import bentoml
      from bentoml.io import Text
      from bentoml.io import NumpyNdarray
      

      CLASS_NAMES = ["setosa", "versicolor", "virginica"]

      iris_clf_runner = bentoml.sklearn.get("iris_clf:latest").to_runner() svc = bentoml.Service("iris_classifier", runners=[iris_clf_runner])

      @​svc.api( input=NumpyNdarray.from_sample(np.array([4.9, 3.0, 1.4, 0.2], dtype=np.double)), output=Text(), ) async def classify(features: np.ndarray) -> str: with bentoml.monitor("iris_classifier_prediction") as mon: mon.log(features[0], name="sepal length", role="feature", data_type="numerical") mon.log(features[1], name="sepal width", role="feature", data_type="numerical") mon.log(features[2], name="petal length", role="feature", data_type="numerical") mon.log(features[3], name="petal width", role="feature", data_type="numerical")

          results = await iris_clf_runner.predict.async_run([features])
          result = results[0]
          category = CLASS_NAMES[result]
      

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 15

    Bump scikit-learn from 1.1.1 to 1.2.0

    Bumps scikit-learn from 1.1.1 to 1.2.0.

    Release notes

    Sourced from scikit-learn's releases.

    Scikit-learn 1.2.0

    We're happy to announce the 1.2.0 release.

    You can read the release highlights under https://scikit-learn.org/stable/auto_examples/release_highlights/plot_release_highlights_1_2_0.html and the long version of the change log under https://scikit-learn.org/stable/whats_new/v1.2.html

    This version supports Python versions 3.8 to 3.11.

    scikit-learn 1.1.3

    We're happy to announce the 1.1.3 release.

    This bugfix release only includes fixes for compatibility with the latest SciPy release >= 1.9.2 and wheels for Python 3.11. Note that support for 32-bit Python on Windows has been dropped in this release. This is due to the fact that SciPy 1.9.2 also dropped the support for that platform. Windows users are advised to install the 64-bit version of Python instead.

    You can see the changelog here: https://scikit-learn.org/dev/whats_new/v1.1.html#version-1-1-3

    You can upgrade with pip as usual:

    pip install -U scikit-learn
    

    The conda-forge builds will be available shortly, which you can then install using:

    conda install -c conda-forge scikit-learn
    

    scikit-learn 1.1.2

    We're happy to announce the 1.1.2 release with several bugfixes:

    You can see the changelog here: https://scikit-learn.org/dev/whats_new/v1.1.html#version-1-1-2

    You can upgrade with pip as usual:

    pip install -U scikit-learn
    

    The conda-forge builds will be available shortly, which you can then install using:

    conda install -c conda-forge scikit-learn
    
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • 16

    Bump kivymd from 0.104.2 to 1.1.1

    Bumps kivymd from 0.104.2 to 1.1.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)