index.js
'use strict'; import request from 'superagent';

DeepDetect Javascript client

module.exports = class DD {

DD class constructor

Parameters:

  • host must be a String.
    (the DeepDetect server host)

  • port must be an Integer.
    (the DeepDetect server port)

  • https must be a Boolean.
    (http (default) or https connection)

  • apiversion must be a String.
    (url api version)

constructor( host = 'localhost', port = 8080, https = false, apiversion = '0.1' ) { const API_METHODS_URL = { 0.1: { info: '/info', services: '/services', train: '/train', predict: '/predict', }, }; this.apiversion = apiversion; this.urls = API_METHODS_URL[apiversion]; this.host = host; this.port = port; this.ddurl = `${https ? 'https' : 'http'}://${host}:${port}`; }

HTTP requests to the DeepDetect server

HTTP request to DeepDetect server

Parameters:

  • httpMethod must be a String.
    (GET/POST/PUT/DELETE)

  • apiMethod must be a String.
    (DeepDetect api method)

  • json must be an Object.

  • params must be an Object.

httpRequest(httpMethod, apiMethod, json = null, params = null) { const url = this.ddurl + apiMethod; return new Promise((resolve, reject) => { if (json != null) { request(httpMethod, url) .send(json) .end((err, resp) => { if (err) reject(err.response.body); resolve(resp.body); }); } else if (params != null) { request(httpMethod, url) .query(params) .end((err, resp) => { if (err) reject(err.response.body); resolve(resp.body); }); } else { request(httpMethod, url).end((err, resp) => { if (err) reject(err.response.body); resolve(resp.body); }); } }); }

GET to DeepDetect server

Parameters:

  • method must be a String.

  • json must be an Object.

  • params must be an Object.

get(method, json = null, params = null) { return this.httpRequest('GET', method, json, params) .then(body => body) .catch(err => err); }

PUT to DeepDetect server

Parameters:

  • method must be a String.

  • json must be an Object.

  • params must be an Object.

put(method, json = null, params = null) { return this.httpRequest('PUT', method, json, params) .then(body => body) .catch(err => err); }

POST to DeepDetect server

Parameters:

  • method must be a String.

  • json must be an Object.

  • params must be an Object.

post(method, json = null, params = null) { return this.httpRequest('POST', method, json, params) .then(body => body) .catch(err => err); }

DELETE to DeepDetect server

Parameters:

  • method must be a String.

  • json must be an Object.

  • params must be an Object.

delete(method, json = null, params = null) { return this.httpRequest('DELETE', method, json, params) .then(body => body) .catch(err => err); }

API Info

Info on the DeepDetect server

info() { return this.get(this.urls.info, null, null).then(info => info); }

API Service

Create a service

Parameters:

  • sname must be a String.
    (service name as a resource)

  • model must be an Object.
    (model location and optional templates)

  • description must be a String.
    (description of the service)

  • mllib must be a String.
    (ML library name, e.g. caffe)

  • parametersInput must be an Object.
    (input parameters)

  • parametersMllib must be an Object.
    (library parameters)

  • parametersOutput must be an Object.
    (output parameters)

  • type must be a String.
    (ML type)

putService( sname, model, description, mllib, parametersInput, parametersMlLib, parametersOutput = {}, type = 'supervised' ) { const data = { description, mllib, type, parameters: { input: parametersInput, mllib: parametersMlLib, output: parametersOutput, }, model, }; return this.put(`${this.urls.services}/${sname}`, data); }

Get information about a service

Parameters:

  • sname must be a String.
    (service name as a resource)
getService(sname) { return this.get(`${this.urls.services}/${sname}`); }

Delete a service

Parameters:

  • sname must be a String.
    (service name as a resource)

  • clear must be a String.
    ('full','lib' or 'mem', optionally clears model repository data)

deleteService(sname, clear) { const data = {}; if (clear) { data.clear = clear; } return this.delete(`${this.urls.services}/${sname}`, data); }

API Train

Creates a training job

Parameters:

  • sname must be a String.
    (service name as a resource)

  • data must be an Array.
    (array of input data / dataset for training)

  • parametersInput must be an Object.
    (input parameters)

  • parametersMlLib must be an Object.
    (library parameters)

  • parametersOutput must be an Object.
    (output parameters)

  • asyncParam must be a Boolean.
    (whether to run the job as non-blocking)

postTrain( sname, data, parametersInput, parametersMlLib, parametersOutput, asyncParam = true ) { const postData = { service: sname, data, parameters: { input: parametersInput, mllib: parametersMlLib, output: parametersOutput, }, async: asyncParam, }; return this.post(this.urls.train, postData); }

Get information on a non-blocking training job

Parameters:

  • sname must be a String.
    (service name as a resource)

  • job must be an Integer.
    (job number on the service)

  • timeout must be an Integer.
    (timeout before obtaining the job status)

  • measureHist must be a Boolean.
    (whether to return the full measure history (e.g. for plotting))

getTrain(sname, job = 1, timeout = 0, measureHist = false) { const params = { service: sname, job: `${job}`, timeout: `${timeout}`, }; if (measureHist) { params.parameters = { output: { measureHist: true, }, }; } return this.get(this.urls.train, null, params); }

Kills a non-blocking training job

Parameters:

  • sname must be a String.
    (service name as a resource)

  • job must be an Integer.
    (job number on the service)

deleteTrain(sname, job = 1) { const params = { service: sname, job: `${job}`, }; return this.delete(this.urls.train, null, params); }

API Predict

Makes prediction from data and model

Parameters:

  • name must be a String.
    (service name as a resource)

  • data must be an Array.
    (array of data URI to predict from)

  • parametersInput must be an Object.
    (input parameters)

  • parametersMlLib must be an Object.
    (library parameters)

  • parametersOutput must be an Object.
    (output parameters)

postPredict(sname, data, parametersInput, parametersMlLib, parametersOutput) { const postData = { service: sname, parameters: { input: parametersInput, mllib: parametersMlLib, output: parametersOutput, }, data, }; return this.post(this.urls.predict, postData); } };