This is a python flask API that is hosted on Microsoft Azure app service. The API allows to activate pickled machine learning models from an Azure blob storage and request predictions on new data. The API can be tested using the Swagger ui here: http://pipedesign.azurewebsites.net/.
Azure app service on linux needs a requirements.txt file for all dependencies except flask. A pipenv workflow probably fails (not tested).
Clone the repo and create a virtual environment with virutalenv:
git clone https://github.com/rafaelschlatter/pipedesign-api.git
cd pipedesign-api
virtualenv pipedesign-apiActivate it and install dependencies:
source pipedesign-api/bin/activate
pip install -r requirements.txtYou need to set the following environment variables:
STORAGE_ACC_NAME=<your-storage-account-name>
BLOB_KEY1=<your-storage-account-key>
CONTAINER_NAME_DATA=<container-name-containing-training-data>
CONTAINER_NAME_MODELS=<container-name-containing-models>
APPINSIGHTS_INSTRUMENTATIONKEY=<application-insights-instrumentation-key>Run tests locally and produce coverage report (all or a specific file):
python -m pytest -v --cov=src
python -m pytest tests/infrastructure/blobhandler.py -v --cov=srcRun the app locally with the following command at the root folder:
python application.pyYou can also try the app hosted on Azure. The following code demonstrates usage with valid json data in python 3. Start a terminal at the root folder and run the following code:
import requests, json
# Activate pickled model from Azure blob storage
activate_url = "http://pipedesign.azurewebsites.net/model/activate_pickled/test_model_1_do_not_delete/"
requests.put(url=activate_url)
# Retrieve prediction on pipedesign
predict_url = "http://pipedesign.azurewebsites.net/prediction/predict_pickled/"
with open("data/json/0a234fea9682454facab730c0a7f83f0.json") as f:
json_data=json.load(f)
response = requests.post(predict_url, json=json_data)
print(response.json())If there is a trained model available, you should get the following response:
{
"confidence": "0.00985992289985627",
"label": "1",
"pipedesign_id": "0a234fea9682454facab730c0a7f83f0",
"prediction": "Viable"
}