code: def _handle_intermediate_metric_data(self, data):
          
          if data['type'] != 'PERIODICAL':
              return
          if self.assessor is None:
              return
  
          trial_job_id = data['trial_job_id']
          if trial_job_id in _ended_trials:
              return
  
          history = _trial_history[trial_job_id]
          history[data['sequence']] = data['value']
          ordered_history = _sort_history(history)
          if len(ordered_history) < data['sequence']:  # no user-visible update since last time
              return
  
          try:
              result = self.assessor.assess_trial(trial_job_id, ordered_history)
          except Exception as e:
              _logger.exception('Assessor error')
  
          if isinstance(result, bool):
              result = AssessResult.Good if result else AssessResult.Bad
          elif not isinstance(result, AssessResult):
              msg = 'Result of Assessor.assess_trial must be an object of AssessResult, not %s'
              raise RuntimeError(msg % type(result))
  
          if result is AssessResult.Bad:
              _logger.debug('BAD, kill %s', trial_job_id)
              send(CommandType.KillTrialJob, json_tricks.dumps(trial_job_id))
              # notify tuner
              _logger.debug('env var: NNI_INCLUDE_INTERMEDIATE_RESULTS: [%s]', dispatcher_env_vars.NNI_INCLUDE_INTERMEDIATE_RESULTS)
              if dispatcher_env_vars.NNI_INCLUDE_INTERMEDIATE_RESULTS == 'true':
                  self._earlystop_notify_tuner(data)
          else:
              _logger.debug('GOOD')
docs: Call assessor to process intermediate results