def test_content_types(tensor_spec: TensorSpec, request_input: RequestInput): input_schema = Schema(inputs=[tensor_spec]) inference_request = InferenceRequest( parameters=Parameters(content_type=PandasCodec.ContentType), inputs=[request_input], ) data = decode_inference_request(inference_request) # _enforce_schema will raise if something fails _enforce_schema(data, input_schema)
async def test_predict_pytorch(runtime_pytorch: MLflowRuntime): # The model used here is the MNIST pytorch example in mlflow: # https://github.com/mlflow/mlflow/tree/master/examples/pytorch/MNIST # input is a 28*28 image data = np.random.randn(1, 28 * 28).astype(np.float32) inference_request = InferenceRequest( parameters=Parameters(content_type=NumpyCodec.ContentType), inputs=[ RequestInput( name="predict", shape=data.shape, data=data.tolist(), datatype="FP32", ) ], ) response = await runtime_pytorch.predict(inference_request) outputs = response.outputs assert len(outputs) == 1 assert outputs[0].name == DefaultOutputName
import pandas as pd from typing import Any from mlserver.types import RequestInput, Parameters, InferenceRequest from mlserver.codecs import NumpyCodec, StringCodec, PandasCodec from mlserver.codecs.middleware import DecodedParameterName, codec_middleware from mlserver.settings import ModelSettings @pytest.mark.parametrize( "inference_request, expected", [ ( InferenceRequest( parameters=Parameters(content_type=PandasCodec.ContentType), inputs=[ RequestInput( name="foo", shape=[2, 2], data=[1, 2, 3, 4], datatype="INT32", parameters=Parameters( content_type=NumpyCodec.ContentType), ), ], ), pd.DataFrame({"foo": [[1, 2], [3, 4]]}), ), ( InferenceRequest(
from mlserver.types import RequestInput, Parameters, TensorData from mlserver.codecs import NumpyCodec, StringCodec from mlserver.model import MLModel @pytest.mark.parametrize( "request_input,expected", [ ( RequestInput( name="foo", shape=[2, 2], data=[1, 2, 3, 4], datatype="INT32", parameters=Parameters( content_type=NumpyCodec.ContentType, _decoded_payload=np.array([[1, 2], [3, 4]]), ), ), np.array([[1, 2], [3, 4]]), ), ( RequestInput( name="foo", shape=[17], data=b"my unicode string", datatype="BYTES", parameters=Parameters( content_type=StringCodec.ContentType, _decoded_payload="my unicode string", ), ),
) from mlserver.batching.requests import BatchedRequests @pytest.mark.parametrize( "request_inputs, expected_request_input, expected_minibatch_sizes", [ ( { "req-1": RequestInput( name="foo", datatype="INT32", shape=[1, 3], data=[1, 2, 3], parameters=Parameters(content_type="np"), ), "req-2": RequestInput( name="foo", datatype="INT32", shape=[1, 3], data=[4, 5, 6], ), "req-3": RequestInput( name="foo", datatype="INT32", shape=[1, 3], data=[7, 8, 9], parameters=Parameters(foo="bar"),
) def test_to_metadata_tensors(schema: Schema, expected: List[MetadataTensor]): metadata_tensors = to_metadata_tensors(schema) assert metadata_tensors == expected @pytest.mark.parametrize( "tensor_spec, request_input", [ ( ColSpec(name="foo", type=DataType.boolean), RequestInput( name="foo", datatype="BOOL", parameters=Parameters(content_type=NumpyCodec.ContentType), shape=[2], data=[True, False], ), ), ( ColSpec(name="foo", type=DataType.string), RequestInput( name="foo", datatype="BYTES", parameters=Parameters(content_type=StringCodec.ContentType), shape=[2, 11], data=b"hello worldhello world", ), ), (
model_version=expected.model_version) assert inference_response == expected @pytest.mark.parametrize( "inference_request, expected", [ ( InferenceRequest(inputs=[ RequestInput( name="a", data=[1, 2, 3], datatype="FP32", shape=[1, 3], parameters=Parameters( _decoded_payload=np.array([[1, 2, 3]])), ), RequestInput( name="b", data=b"hello world", datatype="BYTES", shape=[1, 11], parameters=Parameters(_decoded_payload=["hello world"]), ), ]), pd.DataFrame({ "a": [np.array([1, 2, 3])], "b": ["hello world"] }), ), (
RequestInput( name="foo", shape=[2, 2], data=[1, 2, 3, 4], datatype="INT32" ) ] ), np.array([[1, 2], [3, 4]]), ), ( InferenceRequest( inputs=[ RequestInput( name="foo", shape=[2, 2], data=[1, 2, 3, 4], datatype="INT32", parameters=Parameters(**{DecodedParameterName: np.array([23])}), ) ] ), np.array([23]), ), ], ) def test_first_input_decode(inference_request: InferenceRequest, expected: np.ndarray): inference_request.inputs = [inference_request.inputs[0]] first_input = NumpyRequestCodec.decode(inference_request) np.testing.assert_equal(first_input, expected) def test_first_input_error(inference_request: InferenceRequest):