arazzo: 1.0.1
info:
title: Viam Train and Monitor an ML Model
summary: Submit a TFLite training job, poll its status, and branch to logs or cancel.
description: >-
Submits a built-in TFLite training job against a curated dataset, then reads
the job back to inspect its status. When the job is still pending or running
it pulls the training logs, and when it has failed it cancels the job to free
resources. Each request body is inlined so the flow can be executed directly
against the Viam ML Training API.
version: 1.0.0
x-realizes-capability-ids:
- BC-610.60
x-capability-derivation:
method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
min_confidence: 0.7
sources:
- capability_id: BC-610.60
capability_name: Artificial Intelligence Management
spec: viam-training-jobs-api-openapi.yml
confidence: 0.88
model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: trainingJobsApi
url: ../openapi/viam-training-jobs-api-openapi.yml
type: openapi
workflows:
- workflowId: train-and-monitor-model
summary: Submit a training job, check status, and branch to logs or cancellation.
description: >-
Submits a TFLite training job, retrieves it by the returned id, and branches
on status — fetching logs while it runs or canceling it if it failed.
inputs:
type: object
required:
- apiKey
- organizationId
- datasetId
- modelName
- modelType
properties:
apiKey:
type: string
description: Viam API key value sent in the key header.
organizationId:
type: string
description: The organization the training job runs under.
datasetId:
type: string
description: The dataset id the model is trained against.
modelName:
type: string
description: Name for the resulting model.
modelType:
type: string
description: One of single_label_classification, multi_label_classification, object_detection.
steps:
- stepId: submitJob
description: Submit a built-in TFLite training job against the dataset.
operationId: submitTrainingJob
parameters:
- name: key
in: header
value: $inputs.apiKey
requestBody:
contentType: application/json
payload:
organization_id: $inputs.organizationId
dataset_id: $inputs.datasetId
model_name: $inputs.modelName
model_type: $inputs.modelType
successCriteria:
- condition: $statusCode == 200
outputs:
trainingJobId: $response.body#/id
- stepId: checkStatus
description: Retrieve the training job by the returned id to inspect its status.
operationId: getTrainingJob
parameters:
- name: key
in: header
value: $inputs.apiKey
requestBody:
contentType: application/json
payload:
id: $steps.submitJob.outputs.trainingJobId
successCriteria:
- condition: $statusCode == 200
onSuccess:
- name: jobFailed
type: goto
stepId: cancelJob
criteria:
- context: $response.body
condition: $.metadata.state == 'failed'
type: jsonpath
- name: jobRunning
type: goto
stepId: fetchLogs
criteria:
- context: $response.body
condition: $.metadata.state != 'failed'
type: jsonpath
- stepId: fetchLogs
description: Pull the training job logs while the job is pending or running.
operationId: getTrainingJobLogs
parameters:
- name: key
in: header
value: $inputs.apiKey
requestBody:
contentType: application/json
payload:
id: $steps.submitJob.outputs.trainingJobId
successCriteria:
- condition: $statusCode == 200
onSuccess:
- name: done
type: end
- stepId: cancelJob
description: Cancel the training job when it has failed to free resources.
operationId: cancelTrainingJob
parameters:
- name: key
in: header
value: $inputs.apiKey
requestBody:
contentType: application/json
payload:
id: $steps.submitJob.outputs.trainingJobId
successCriteria:
- condition: $statusCode == 200
outputs:
trainingJobId: $steps.submitJob.outputs.trainingJobId
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.