indata: "Input data" { shape: cylinder } node-manager: Node Manager { node1 node2 noden: "node..." node-manager->node1: Manage node-manager->node2: Manage node-manager->noden: Manage } model-database: Model database { shape: cylinder } model-runner: Model Runner { node: Node headless: Obatin Headless Model _.model-runner->headless: Start headless<->_.model-database: Request/Get Model headless<->node: Run/Result headless->model-search: Results model-search: Model Search {} model-search<->_.model-database: Request Head Models head-model: Head Model model-search->head-model: Obtain head-model<->node: Run/Result head-model->model-search: Unsatatisfary results, request new model head-model->results-cache: Unsatatisfary results, save results results-cache: Results Cache combine: Combine head-model->combine: Satisfary Results/No more options combine<-results-cache: Cached results Results combine->_.model-runner: Results } model-runner.node<->node-manager: Request/Gives node to run model User.shape: Person User->indata: Uploads data User->model-database: Manages Models User->model-runner: Request image for classification model-runner->User: Give class of image model-generation: Model Generation {} User->model-generation: Requests Model model-generation <-> indata: Requests Data model-generation<->node-manager: Request/Gives node to train