Skip to main content

Python client for interacting with online-ml river server

Project description

River API Client

PyPI version

This is an API client created for django-river-ml that is intended to make it easy to interact with an online ML server providing river models (learning, predicting, etc.). It currently does not provide a terminal or command line client and is intended to be used from Python, but if there is a good use case for a command line set of interactions this can be added.

Quick Start

Given that you have a server running that implements the same space as django-river-ml, you can do the following. Note that if your server requires authentication, you can generate a token and export to:

export RIVER_ML_USER=dinosaur
export RIVER_ML_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

And then do the following example.

from river import datasets
from river import linear_model
from river import preprocessing

from riverapi.main import Client


def main():

    # This is the default, just to show how to customize
    cli = Client("http://localhost:8000")

    # Basic server info (usually no auth required)
    cli.info()

    # Upload a model
    model = preprocessing.StandardScaler() | linear_model.LinearRegression()

    # Save the model name for other endpoint interaction
    model_name = cli.upload_model(model, "regression")
    print("Created model %s" % model_name)

    # Train on some data
    for x, y in datasets.TrumpApproval().take(100):
        cli.learn(model_name, x=x, y=y)

    # Get the model (this is a json representation)
    model_json = cli.get_model_json(model_name)
    model_json

    # Saves to model-name>.pkl in pwd unless you provide a second arg, dest
    cli.download_model(model_name)

    # Make predictions
    for x, y in datasets.TrumpApproval().take(10):
        res = cli.predict(model_name, x=x)
        print(res)

    # By default the server will generate an identifier on predict that you can
    # later use to label it. Let's do that for the last predict call!
    identifier = res['identifier']

    # Let's pretend we now have a label Y for the data we didn't before.
    # The identifier is going to allow the server to find the features,
    # x, and we just need to do:
    res = cli.label(label=y, identifier=identifier, model_name=model_name)
    print(res)
    # Note that model_name is cached too, and we provide it here just 
    # to ensure the identifier is correctly associated.

    # Get stats and metrics for the model
    cli.stats(model_name)
    cli.metrics(model_name)

    # Get all models
    print(cli.models())

    # Stream events
    for event in cli.stream_events():
        print(event)

    # Stream metrics
    for event in cli.stream_metrics():
        print(event)

    # Delete the model
    cli.delete_model(model_name)

if __name__ == "__main__":
    main()

Contributors

We use the all-contributors tool to generate a contributors graphic below.


Vanessasaurus

💻

License

This code is licensed under the MPL 2.0 LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

riverapi-0.0.21.tar.gz (17.3 kB view hashes)

Uploaded Source

Built Distribution

riverapi-0.0.21-py3-none-any.whl (17.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page