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.

Model APIs

Count Method API

Expanding the documentation for the count method reveals more information on how to invoke the API.

Model Method

Count Method Request

The Swagger UI provides an input form that can be used to try out the count API with sample data.

Model Method Request

Count Method Response

The response from the count API shows that everything is working as expected!

Model Method Response