docstr: At the end of the inference, post process the inference results
code: def post_process(
      self,
      tokens: torch.Tensor,
      new_tokens: torch.Tensor,
      context_length: int,
  ):
      """
      At the end of the inference, post process the inference results
      """
      # Replace special soft prompt token ids with unk token ids
      if (
          self.model.pseudo_token_ids_start is not None
      ):  # TODO: (@adithyare) prompt learning logic can be greatly simplified by removing data preparation logic from model logic.
          tokenizer = self.model.tokenizer
          pseudo_token_ids_start = self.model.pseudo_token_ids_start
          new_tokens[
              (new_tokens >= pseudo_token_ids_start)
          ] = tokenizer.unk_id
          tokens[:, :context_length][
              (tokens[:, :context_length] >= pseudo_token_ids_start)
          ] = tokenizer.unk_id
  
imports: import abc
  import copy
  import os
  import re
  import warnings
  from typing import List, Set, Tuple
  import torch
  from transformers import CLIPImageProcessor
  from nemo.collections.nlp.modules.common.lm_utils import pad_batch
  from nemo.collections.nlp.modules.common.megatron.utils import get_ltor_masks_and_position_ids
label_desc: Use image node_id 5 for calling the PromptLearningModelTextGenerationStrategy obj's underlying member method code with example usage: obj.post_process(tokens, new_tokens, context_length) without return types