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"]}], }
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"}, }
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"}], }
def ModelMetadata(self, request_grpc, context): """ModelMetadata method of rpc Seldon service""" return json_to_seldon_model_metadata(self.metadata_data)