Example #1
0
def test_v2():
    data = """
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - datatype: BYTES
          name: input
          shape: [ 1, 4 ]
        outputs:
        - datatype: BYTES
          name: output
          shape: [ 3 ]
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [{"datatype": "BYTES", "name": "input", "shape": [1, 4]}],
        "outputs": [{"datatype": "BYTES", "name": "output", "shape": [3]}],
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [{"name": "input", "datatype": "BYTES", "shape": ["1", "4"]}],
        "outputs": [{"name": "output", "datatype": "BYTES", "shape": ["3"]}],
    }
Example #2
0
def test_v1_only_messagetype(messagetype):
    data = f"""
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - messagetype: {messagetype}
        outputs:
        - messagetype: {messagetype}
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [{"messagetype": f"{messagetype}"}],
        "outputs": [{"messagetype": f"{messagetype}"}],
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [{"messagetype": f"{messagetype}"}],
        "outputs": [{"messagetype": f"{messagetype}"}],
    }
def test_v1_mixed_multiple_inputs():
    data = """
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - messagetype: "tensor"
          schema:
            names: [a, b, c, d]
            shape: [ 2, 2 ]
        - messagetype: jsonData
        outputs:
        - messagetype: "binData"
        custom:
          tag-key: tag-value
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": "tensor",
                "schema": {"names": ["a", "b", "c", "d"], "shape": [2, 2]},
            },
            {"messagetype": "jsonData"},
        ],
        "outputs": [{"messagetype": "binData"}],
        "custom": {"tag-key": "tag-value"},
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": "tensor",
                "schema": {"names": ["a", "b", "c", "d"], "shape": [2, 2]},
            },
            {"messagetype": "jsonData"},
        ],
        "outputs": [{"messagetype": "binData"}],
        "custom": {"tag-key": "tag-value"},
    }
def test_v1_array(messagetype):
    data = f"""
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - messagetype: {messagetype}
          schema:
            names: [a, b, c, d]
            shape: [ 2, 2 ]
        outputs:
        - messagetype: {messagetype}
          schema:
            shape: [ 1 ]
        custom:
          tag-key: tag-value
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": f"{messagetype}",
                "schema": {"names": ["a", "b", "c", "d"], "shape": [2, 2]},
            }
        ],
        "outputs": [{"messagetype": f"{messagetype}", "schema": {"shape": [1]}}],
        "custom": {"tag-key": "tag-value"},
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": f"{messagetype}",
                "schema": {"names": ["a", "b", "c", "d"], "shape": [2.0, 2.0]},
            }
        ],
        "outputs": [{"messagetype": f"{messagetype}", "schema": {"shape": [1.0]}}],
        "custom": {"tag-key": "tag-value"},
    }
def test_v1_v2_mix():
    data = """
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - datatype: BYTES
          name: input
          shape: [ 1, 4 ]
        - messagetype: jsonData
        outputs:
        - datatype: BYTES
          name: output
          shape: [ 3 ]
        custom:
          tag-key: tag-value
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {"datatype": "BYTES", "name": "input", "shape": [1, 4]},
            {"messagetype": "jsonData"},
        ],
        "outputs": [{"datatype": "BYTES", "name": "output", "shape": [3]}],
        "custom": {"tag-key": "tag-value"},
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {"name": "input", "datatype": "BYTES", "shape": ["1", "4"]},
            {"messagetype": "jsonData"},
        ],
        "outputs": [{"name": "output", "datatype": "BYTES", "shape": ["3"]}],
        "custom": {"tag-key": "tag-value"},
    }
Example #6
0
def test_v1_json_with_schema():
    data = """
        name: my-model-name
        versions: [ my-model-version-01 ]
        platform: seldon
        inputs:
        - messagetype: jsonData
          schema:
              type: object
              properties:
                  names:
                      type: array
                      items:
                          type: string
                  data:
                    type: array
                    items:
                        type: number
                        format: double
        outputs:
        - messagetype: jsonData
    """
    meta_json = validate_model_metadata(yaml.safe_load(data))
    meta_proto = json_to_seldon_model_metadata(meta_json)
    assert meta_json == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": "jsonData",
                "schema": {
                    "type": "object",
                    "properties": {
                        "names": {"type": "array", "items": {"type": "string"}},
                        "data": {
                            "type": "array",
                            "items": {"type": "number", "format": "double"},
                        },
                    },
                },
            }
        ],
        "outputs": [{"messagetype": "jsonData"}],
    }
    assert json.loads(json_format.MessageToJson(meta_proto)) == {
        "name": "my-model-name",
        "versions": ["my-model-version-01"],
        "platform": "seldon",
        "inputs": [
            {
                "messagetype": "jsonData",
                "schema": {
                    "properties": {
                        "names": {"items": {"type": "string"}, "type": "array"},
                        "data": {
                            "type": "array",
                            "items": {"type": "number", "format": "double"},
                        },
                    },
                    "type": "object",
                },
            }
        ],
        "outputs": [{"messagetype": "jsonData"}],
    }
Example #7
0
 def ModelMetadata(self, request_grpc, context):
     """ModelMetadata method of rpc Seldon service"""
     return json_to_seldon_model_metadata(self.metadata_data)