arazzo: 1.0.1 info: title: TensorFlow Serving Preflight and Classify summary: Confirm a model is loaded and its signature is known before running classification inference. description: >- Classification in TensorFlow Serving follows PredictionService.Classify semantics and takes tf.Example style inputs through the examples array rather than the instances array used by predict, so it is a genuinely different integration path with a different payload shape and a different response. This workflow checks that the model reports an AVAILABLE version, reads its metadata to confirm the classification signature, and then submits the examples for scoring, returning label and score pairs per example. Every step spells out its request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: tensorflowServingApi url: ../openapi/tensorflow-serving-openapi.yml type: openapi workflows: - workflowId: classify-preflight summary: Check model status, read the signature, then run classification inference. description: >- Verifies the named model reports an AVAILABLE version, resolves its signature metadata, and submits tf.Example inputs for classification. inputs: type: object required: - modelName - examples properties: modelName: type: string description: The name the model was registered under in the ModelServer. signatureName: type: string description: >- Optional classification signature to target. When omitted the ModelServer uses the model's default serving signature. context: type: object description: >- Optional context features shared across every supplied example, merged into each example by the ModelServer. examples: type: array description: The tf.Example style input records to classify, one result returned per example. items: type: object steps: - stepId: checkModelStatus description: >- Confirm the ModelServer has the model loaded and reports a version in the AVAILABLE state before any inference is attempted. operationId: getModelStatus parameters: - name: model_name in: path value: $inputs.modelName successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.model_version_status[0].state == 'AVAILABLE' type: jsonpath outputs: servingState: $response.body#/model_version_status/0/state servingVersion: $response.body#/model_version_status/0/version errorMessage: $response.body#/model_version_status/0/status/error_message - stepId: readModelMetadata description: >- Read the metadata of the latest available version to confirm the model exposes a classification signature and to see the features it expects. operationId: getModelMetadata parameters: - name: model_name in: path value: $inputs.modelName successCriteria: - condition: $statusCode == 200 outputs: modelSpecName: $response.body#/model_spec/name modelSpecVersion: $response.body#/model_spec/version signatureMetadata: $response.body#/metadata - stepId: runClassification description: >- Submit the examples for classification against the model's latest available version, returning label and score pairs for each example. operationId: classifyModel parameters: - name: model_name in: path value: $inputs.modelName requestBody: contentType: application/json payload: signature_name: $inputs.signatureName context: $inputs.context examples: $inputs.examples successCriteria: - condition: $statusCode == 200 outputs: result: $response.body#/result topResult: $response.body#/result/0 outputs: servingVersion: $steps.checkModelStatus.outputs.servingVersion modelSpecVersion: $steps.readModelMetadata.outputs.modelSpecVersion result: $steps.runClassification.outputs.result