Esempio n. 1
0
    def testGetModelMetadataREST(self):
        """Test ModelStatus implementation over REST API with columnar inputs."""
        model_path = self._GetSavedModelBundlePath()
        host, port = TensorflowModelServerTest.RunServer(
            'default', model_path)[2].split(':')

        # Prepare request
        url = 'http://{}:{}/v1/models/default/metadata'.format(host, port)

        # Send request
        resp_data = None
        try:
            resp_data = tensorflow_model_server_test_base.CallREST(url, None)
        except Exception as e:  # pylint: disable=broad-except
            self.fail('Request failed with error: {}'.format(e))

        try:
            model_metadata_file = self._GetModelMetadataFile()
            with open(model_metadata_file) as f:
                expected_metadata = json.load(f)
                # Verify response
                # Note, we sort the JSON object before comparing. Formally JSON lists
                # (aka arrays) are considered ordered and general comparison should NOT
                # sort. In this case, the "metadata" does not have any ordering making
                # the sort OK (and the test robust).
                self.assertEqual(
                    tensorflow_model_server_test_base.SortedObject(
                        json.loads(resp_data)),
                    tensorflow_model_server_test_base.SortedObject(
                        expected_metadata))
        except Exception as e:  # pylint: disable=broad-except
            self.fail('Request failed with error: {}'.format(e))
Esempio n. 2
0
    def testGetStatusREST(self):
        """Test ModelStatus implementation over REST API with columnar inputs."""
        model_path = self._GetSavedModelBundlePath()
        host, port = TensorflowModelServerTest.RunServer(
            'default', model_path)[2].split(':')

        # Prepare request
        url = 'http://{}:{}/v1/models/default'.format(host, port)

        # Send request
        resp_data = None
        try:
            resp_data = tensorflow_model_server_test_base.CallREST(url, None)
        except Exception as e:  # pylint: disable=broad-except
            self.fail('Request failed with error: {}'.format(e))

        # Verify response
        self.assertEqual(
            json.loads(resp_data), {
                'model_version_status': [{
                    'version': '123',
                    'state': 'AVAILABLE',
                    'status': {
                        'error_code': 'OK',
                        'error_message': ''
                    }
                }]
            })
Esempio n. 3
0
    def testRegressREST(self):
        """Test Regress implementation over REST API."""
        model_path = self._GetSavedModelBundlePath()
        host, port = TensorflowModelServerTest.RunServer(
            'default', model_path)[2].split(':')

        # Prepare request
        url = 'http://{}:{}/v1/models/default:regress'.format(host, port)
        json_req = {
            'signature_name': 'regress_x_to_y',
            'examples': [{
                'x': 2.0
            }]
        }

        # Send request
        resp_data = None
        try:
            resp_data = tensorflow_model_server_test_base.CallREST(
                url, json_req)
        except Exception as e:  # pylint: disable=broad-except
            self.fail('Request failed with error: {}'.format(e))

        # Verify response
        self.assertEqual(json.loads(resp_data), {'results': [3.0]})
  def testPredictColumnarREST(self):
    """Test Predict implementation over REST API with columnar inputs."""
    model_path = self._GetSavedModelBundlePath()
    host, port = TensorflowModelServerTest.RunServer('default',
                                                     model_path)[2].split(':')

    # Prepare request
    url = 'http://{}:{}/v1/models/default:predict'.format(host, port)
    json_req = {'inputs': [2.0, 3.0, 4.0]}

    # Send request
    resp_data = None
    try:
      resp_data = tensorflow_model_server_test_base.CallREST(url, json_req)
    except Exception as e:  # pylint: disable=broad-except
      self.fail('Request failed with error: {}'.format(e))

    # Verify response
    self.assertEqual(json.loads(resp_data), {'outputs': [3.0, 3.5, 4.0]})
  def testPrometheusEndpoint(self):
    """Test ModelStatus implementation over REST API with columnar inputs."""
    model_path = self._GetSavedModelBundlePath()
    host, port = TensorflowModelServerTest.RunServer(
        'default',
        model_path,
        monitoring_config_file=self._GetMonitoringConfigFile())[2].split(':')

    # Prepare request
    url = 'http://{}:{}/monitoring/prometheus/metrics'.format(host, port)

    # Send request
    resp_data = None
    try:
      resp_data = tensorflow_model_server_test_base.CallREST(url, None)
    except Exception as e:  # pylint: disable=broad-except
      self.fail('Request failed with error: {}'.format(e))

    # Verify that there should be some metric type information.
    self.assertIn('# TYPE',
                  resp_data.decode('utf-8') if resp_data is not None else None)