Acumos Python Model Runner Tutorial¶
This tutorial demonstrates how to use the Acumos Python model runner with an example model.
Creating A Model¶
An Acumos model must first be defined using the Acumos Python client library. For illustrative purposes, a simple model with deterministic methods is defined below.
# example_model.py
from collections import Counter
from acumos.session import AcumosSession
from acumos.modeling import Model, List, Dict
def add(x: int, y: int) -> int:
'''Adds two numbers'''
return x + y
def count(strings: List[str]) -> Dict[str, int]:
'''Counts the occurrences of words in `strings`'''
return Counter(strings)
model = Model(add=add, count=count)
session = AcumosSession()
session.dump(model, 'example-model', '.')
Executing example_model.py
results in the following directory:
.
├── example_model.py
└── example-model
Running A Model¶
Now the acumos_model_runner
command line tool can be used to run the saved model.
$ acumos_model_runner example-model/
[2018-08-08 12:16:57 -0400] [61113] [INFO] Starting gunicorn 19.9.0
[2018-08-08 12:16:57 -0400] [61113] [INFO] Listening at: http://0.0.0.0:3330 (61113)
[2018-08-08 12:16:57 -0400] [61113] [INFO] Using worker: sync
[2018-08-08 12:16:57 -0400] [61151] [INFO] Booting worker with pid: 61151
Using A Model¶
The model HTTP API can be explored via its generated Swagger UI. The Swagger UI of example-model
above can be accessed by navigating to http://localhost:3330
in your web browser.
Below are some screenshots of the Swagger UI for example-model
.
Model APIs¶
The Swagger UI enumerates model method APIs, as well as APIs for accessing model artifacts. Below, the APIs corresponding to the add
and count
methods are listed under the methods
tag.
Count Method API¶
Expanding the documentation for the count
method reveals more information on how to invoke the API.
Count Method Request¶
The Swagger UI provides an input form that can be used to try out the count
API with sample data.
Count Method Response¶
The response from the count
API shows that everything is working as expected!