Example #1
0
  def _serve_config(self, request):
    run = request.args.get('run')
    if run is None:
      return Respond(request, 'query parameter "run" is required', 'text/plain',
                     400)
    if run not in self.configs:
      return Respond(request, 'Unknown run: %s' % run, 'text/plain', 400)

    config = self.configs[run]
    return Respond(request,
                   json_format.MessageToJson(config), 'application/json')
Example #2
0
    def _serve_tensor(self, request):
        run = request.args.get('run')
        if run is None:
            return Respond(request, 'query parameter "run" is required',
                           'text/plain', 400)

        name = request.args.get('name')
        if name is None:
            return Respond(request, 'query parameter "name" is required',
                           'text/plain', 400)

        num_rows = _parse_positive_int_param(request, 'num_rows')
        if num_rows == -1:
            return Respond(request,
                           'query parameter num_rows must be integer > 0',
                           'text/plain', 400)

        if run not in self.configs:
            return Respond(request, 'Unknown run: %s' % run, 'text/plain', 400)

        reader = self._get_reader_for_run(run)
        config = self.configs[run]

        if reader is None:
            # See if there is a tensor file in the config.
            embedding = self._get_embedding(name, config)
            if not embedding or not embedding.tensor_path:
                return Respond(
                    request,
                    'Tensor %s has no tensor_path in the config' % name,
                    'text/plain', 400)
            if not file_io.file_exists(embedding.tensor_path):
                return Respond(
                    request,
                    'Tensor file %s does not exist' % embedding.tensor_path,
                    'text/plain', 400)
            tensor = _read_tensor_file(embedding.tensor_path)
        else:
            if not reader.has_tensor(name):
                return Respond(
                    request, 'Tensor %s not found in checkpoint dir %s' %
                    (name, config.model_checkpoint_path), 'text/plain', 400)
            try:
                tensor = reader.get_tensor(name)
            except errors.InvalidArgumentError as e:
                return Respond(request, str(e), 'text/plain', 400)

        if num_rows:
            tensor = tensor[:num_rows]

        if tensor.dtype != 'float32':
            tensor = tensor.astype(dtype='float32', copy=False)
        data_bytes = tensor.tobytes()
        return Respond(request, data_bytes, 'application/octet-stream')
Example #3
0
    def _serve_tensor(self, request):
        run = request.args.get('run')
        if run is None:
            return Respond(request, 'query parameter "run" is required',
                           'text/plain', 400)

        name = request.args.get('name')
        if name is None:
            return Respond(request, 'query parameter "name" is required',
                           'text/plain', 400)

        num_rows = _parse_positive_int_param(request, 'num_rows')
        if num_rows == -1:
            return Respond(request,
                           'query parameter num_rows must be integer > 0',
                           'text/plain', 400)

        if run not in self.configs:
            return Respond(request, 'Unknown run: "%s"' % run, 'text/plain',
                           400)

        config = self.configs[run]

        tensor = self.tensor_cache.get(name)
        if tensor is None:
            # See if there is a tensor file in the config.
            embedding = self._get_embedding(name, config)

            if embedding and embedding.tensor_path:
                fpath = _rel_to_abs_asset_path(embedding.tensor_path,
                                               self.config_fpaths[run])
                if not tf.gfile.Exists(fpath):
                    return Respond(request,
                                   'Tensor file "%s" does not exist' % fpath,
                                   'text/plain', 400)
                tensor = _read_tensor_tsv_file(fpath)
            else:
                reader = self._get_reader_for_run(run)
                if not reader or not reader.has_tensor(name):
                    return Respond(
                        request,
                        'Tensor "%s" not found in checkpoint dir "%s"' %
                        (name, config.model_checkpoint_path), 'text/plain',
                        400)
                try:
                    tensor = reader.get_tensor(name)
                except tf.errors.InvalidArgumentError as e:
                    return Respond(request, str(e), 'text/plain', 400)

            self.tensor_cache.set(name, tensor)

        if num_rows:
            tensor = tensor[:num_rows]
        if tensor.dtype != 'float32':
            tensor = tensor.astype(dtype='float32', copy=False)
        data_bytes = tensor.tobytes()
        return Respond(request, data_bytes, 'application/octet-stream')
Example #4
0
  def _serve_sprite_image(self, request):
    run = request.args.get('run')
    if not run:
      return Respond(request, 'query parameter "run" is required', 'text/plain',
                     400)

    name = request.args.get('name')
    if name is None:
      return Respond(request, 'query parameter "name" is required',
                     'text/plain', 400)

    if run not in self.configs:
      return Respond(request, 'Unknown run: %s' % run, 'text/plain', 400)

    config = self.configs[run]
    embedding_info = self._get_embedding(name, config)

    if not embedding_info or not embedding_info.sprite.image_path:
      return Respond(
          request,
          'No sprite image file found for tensor %s in the config file %s' %
          (name, self.config_fpaths[run]), 'text/plain', 400)

    fpath = os.path.expanduser(embedding_info.sprite.image_path)
    if not file_io.file_exists(fpath) or file_io.is_directory(fpath):
      return Respond(request, '%s does not exist or is directory' % fpath,
                     'text/plain', 400)
    f = file_io.FileIO(fpath, 'rb')
    encoded_image_string = f.read()
    f.close()
    image_type = imghdr.what(None, encoded_image_string)
    mime_type = _IMGHDR_TO_MIMETYPE.get(image_type, _DEFAULT_IMAGE_MIMETYPE)
    return Respond(request, encoded_image_string, mime_type)
Example #5
0
  def _serve_bookmarks(self, request):
    run = request.args.get('run')
    if not run:
      return Respond(request, 'query parameter "run" is required', 'text/plain',
                     400)

    name = request.args.get('name')
    if name is None:
      return Respond(request, 'query parameter "name" is required',
                     'text/plain', 400)

    if run not in self.configs:
      return Respond(request, 'Unknown run: %s' % run, 'text/plain', 400)

    config = self.configs[run]
    fpath = self._get_bookmarks_file_for_tensor(name, config)
    if not fpath:
      return Respond(
          request,
          'No bookmarks file found for tensor %s in the config file %s' %
          (name, self.config_fpaths[run]), 'text/plain', 400)
    if not file_io.file_exists(fpath) or file_io.is_directory(fpath):
      return Respond(request, '%s is not a file' % fpath, 'text/plain', 400)

    bookmarks_json = None
    with file_io.FileIO(fpath, 'rb') as f:
      bookmarks_json = f.read()
    return Respond(request, bookmarks_json, 'application/json')
Example #6
0
    def _serve_bookmarks(self, request):
        run = request.args.get('run')
        if not run:
            return Respond(request, 'query parameter "run" is required',
                           'text/plain', 400)

        name = request.args.get('name')
        if name is None:
            return Respond(request, 'query parameter "name" is required',
                           'text/plain', 400)

        if run not in self.configs:
            return Respond(request, 'Unknown run: "%s"' % run, 'text/plain',
                           400)

        config = self.configs[run]
        fpath = self._get_bookmarks_file_for_tensor(name, config)
        if not fpath:
            return Respond(
                request,
                'No bookmarks file found for tensor "%s" in the config file "%s"'
                % (name, self.config_fpaths[run]), 'text/plain', 400)
        fpath = _rel_to_abs_asset_path(fpath, self.config_fpaths[run])
        if not tf.gfile.Exists(fpath) or tf.gfile.IsDirectory(fpath):
            return Respond(request, '"%s" not found, or is not a file' % fpath,
                           'text/plain', 400)

        bookmarks_json = None
        with tf.gfile.GFile(fpath, 'rb') as f:
            bookmarks_json = f.read()
        return Respond(request, bookmarks_json, 'application/json')
Example #7
0
    def _serve_metadata(self, request):
        run = request.args.get('run')
        if run is None:
            return Respond(request, 'query parameter "run" is required',
                           'text/plain', 400)

        name = request.args.get('name')
        if name is None:
            return Respond(request, 'query parameter "name" is required',
                           'text/plain', 400)

        num_rows = _parse_positive_int_param(request, 'num_rows')
        if num_rows == -1:
            return Respond(request,
                           'query parameter num_rows must be integer > 0',
                           'text/plain', 400)

        if run not in self.configs:
            return Respond(request, 'Unknown run: "%s"' % run, 'text/plain',
                           400)

        config = self.configs[run]
        fpath = self._get_metadata_file_for_tensor(name, config)
        if not fpath:
            return Respond(
                request,
                'No metadata file found for tensor "%s" in the config file "%s"'
                % (name, self.config_fpaths[run]), 'text/plain', 400)
        fpath = _rel_to_abs_asset_path(fpath, self.config_fpaths[run])
        if not file_io.file_exists(fpath) or file_io.is_directory(fpath):
            return Respond(request, '"%s" not found, or is not a file' % fpath,
                           'text/plain', 400)

        num_header_rows = 0
        with file_io.FileIO(fpath, 'r') as f:
            lines = []
            # Stream reading the file with early break in case the file doesn't fit in
            # memory.
            for line in f:
                lines.append(line)
                if len(lines) == 1 and '\t' in lines[0]:
                    num_header_rows = 1
                if num_rows and len(lines) >= num_rows + num_header_rows:
                    break
        return Respond(request, ''.join(lines), 'text/plain')
Example #8
0
 def _serve_runs(self, request):
   """Returns a list of runs that have embeddings."""
   return Respond(request, list(self.configs.keys()), 'application/json')