code: def _combine_predictions(self,
                               model_outputs: List[mx.nd.NDArray],
                               attention_probs: List[mx.nd.NDArray]) -> Tuple[mx.nd.NDArray, mx.nd.NDArray]:
          
          # average attention prob scores. TODO: is there a smarter way to do this?
          attention_prob_score = utils.average_arrays(attention_probs)
  
          # combine model predictions and convert to neg log probs
          if len(self.models) == 1:
              if self.models[0].skip_softmax:
                  scores = -model_outputs[0]
              else:
                  scores = -mx.nd.log(model_outputs[0])  # pylint: disable=invalid-unary-operand-type
          else:
              scores = self.interpolation_func(model_outputs)
          return scores, attention_prob_score
docs: Returns combined predictions of models and averaged attention prob scores.
          If model_outputs are probabilities, they are converted to negative log probabilities before combination.
          If model_outputs are logits (and no ensembling is used),
          no combination is applied and logits are converted to negative logits.
  
          :param model_outputs: List of Shape(beam_size, target_vocab_size).
          :param attention_probs: List of Shape(beam_size, bucket_key).
          :return: Combined scores, averaged attention scores.