<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def session_start_pb(hparams, model_uri='', monitor_url='', group_name='', start_time_secs=None):
 """Constructs a SessionStartInfo protobuffer. Creates a summary that contains a training session metadata information. One such summary per training session should be created. Each should have a different run. Args: hparams: A dictionary with string keys. Describes the hyperparameter values used in the session, mapping each hyperparameter name to its value. Supported value types are `bool`, `int`, `float`, `str`, `list`, `tuple`. The type of value must correspond to the type of hyperparameter (defined in the corresponding api_pb2.HParamInfo member of the Experiment protobuf) as follows: |Hyperparameter | Allowed (Python) value types | |type | | |DATA_TYPE_BOOL | bool | |DATA_TYPE_FLOAT64| int, float | |DATA_TYPE_STRING | six.string_types, tuple, list | Tuple and list instances will be converted to their string representation. model_uri: See the comment for the field with the same name of plugin_data_pb2.SessionStartInfo. monitor_url: See the comment for the field with the same name of plugin_data_pb2.SessionStartInfo. group_name: See the comment for the field with the same name of plugin_data_pb2.SessionStartInfo. start_time_secs: float. The time to use as the session start time. Represented as seconds since the UNIX epoch. If None uses the current time. Returns: The summary protobuffer mentioned above. """

  if start_time_secs is None:
    start_time_secs = time.time()
  session_start_info = plugin_data_pb2.SessionStartInfo(
      model_uri=model_uri,
      monitor_url=monitor_url,
      group_name=group_name,
      start_time_secs=start_time_secs)
  for (hp_name, hp_val) in six.iteritems(hparams):
    if isinstance(hp_val, (float, int)):
      session_start_info.hparams[hp_name].number_value = hp_val
    elif isinstance(hp_val, six.string_types):
      session_start_info.hparams[hp_name].string_value = hp_val
    elif isinstance(hp_val, bool):
      session_start_info.hparams[hp_name].bool_value = hp_val
    elif isinstance(hp_val, (list, tuple)):
      session_start_info.hparams[hp_name].string_value = str(hp_val)
    else:
      raise TypeError('hparams[%s]=%s has type: %s which is not supported' %
                      (hp_name, hp_val, type(hp_val)))
  return _summary(metadata.SESSION_START_INFO_TAG,
                  plugin_data_pb2.HParamsPluginData(
                      session_start_info=session_start_info))