def METHOD_NAME(self, trial_job_id: str, trial_history: list[TrialMetric]) -> AssessResult:
    """
    Abstract method for determining whether a trial should be killed. Must override.
    The NNI framework has little guarantee on ``trial_history``.
    This method is not guaranteed to be invoked for each time ``trial_history`` get updated.
    It is also possible that a trial's history keeps updating after receiving a bad result.
    And if the trial failed and retried, ``trial_history`` may be inconsistent with its previous value.
    The only guarantee is that ``trial_history`` is always growing.
    It will not be empty and will always be longer than previous value.
    This is an example of how :meth:`assess_trial` get invoked sequentially:
    ::
        trial_job_id | trial_history   | return value
        ------------ | --------------- | ------------
        Trial_A      | [1.0, 2.0]      | Good
        Trial_B      | [1.5, 1.3]      | Bad
        Trial_B      | [1.5, 1.3, 1.9] | Good
        Trial_A      | [0.9, 1.8, 2.3] | Good
    Parameters
    ----------
    trial_job_id : str
        Unique identifier of the trial.
    trial_history : list
        Intermediate results of this trial. The element type is decided by trial code.
    Returns
    -------
    AssessResult
        :obj:`AssessResult.Good` or :obj:`AssessResult.Bad`.
    """
    raise NotImplementedError('Assessor: assess_trial not implemented')