Cognitive

Cognitive is a multi-tenant interactive machine learning service on top of Openstack. It has python bindings for api access. Alternatively, cognitive provides an interactive UI where users can log in to the system using username and password.

Users

 * post /api/v1/users/ - Create a new user in the system
 * get /api/v1/users/ - Lists all users in the system
 * put /api/v1/users/{pk}/ - Update an user in the system
 * get /api/v1/users/{pk}/ - Retrieve an user in the system
 * delete /api/v1/users/{pk}/ - Delete a user in the system

Experiments
Each system user has a separate workspace of experiments. The number is limited as per the user quota set by the admin.
 * post /api/v1/experiments/ - Create an experiment for a particular user
 * get /api/v1/experiments/ - Lists all experiments for a particular user
 * put /api/v1/experiments/{exp_id}/ - pdate an experiment for a particular user
 * get /api/v1/experiments/{exp_id}/ - Retrieve an experiment for a particular user
 * delete /api/v1/experiments/{exp_id}/ - Delete an experiment for a particular user

Components
Each experiment has multiple components, which are connected to form a single workflow. Workflows specify the flow of data from the data source to data sink through various data transformations. Each component specifies one data tranformation or data processing method. Each component knows its lineage so that whole workflow can be re-executed on failures.
 * post /api/v1/components/{component}/ - Create a component in an experiment. Component can be a data input source, data transformation method like applying mathematical formula on columns, normalizing column values etc, data modification method like add/remove rows, column projection etc, filtering method like removal of duplicates or missing values, machine learning models like different types of classification, clustering or regression models
 * get /api/v1/components/{component}/ - Retrieve all components of an experiment
 * put /api/v1/components/{component}/{component_id}/ - Update a component in an experiment
 * get /api/v1/components/{component}/{component_id}/ - Retrieve a component in an experiment
 * delete /api/v1/components/{component}/{component_id}/ - Delete a component in an experiment

Workflows
Every workflow is persisted which enables user to load or update previously created workflows.
 * post /api/v1/workflows/ - Create a workflow graph for an experiment and start execution
 * put /api/v1/workflows/{workflow_id}/ - Update the workflow graph for an experiment
 * delete /api/v1/workflows/{workflow_id}/ - Delete the workflow graph for an experiment