code: def get_nll(
      self,
      seq_logits,
      doc_scores,
      target,
      reduce_loss=False,
      epsilon=0.0,
      n_docs=None,
  ):
      n_docs = n_docs if n_docs is not None else self.config.n_docs
      # shift tokens left (from original Pytorch's version)
  
      target = tf.concat(
          [
              target[:, 1:],
              tf.fill(
                  [target.shape[0], 1],
                  tf.cast(
                      self.config.generator.pad_token_id, target.dtype
                  ),
              ),
          ],
          axis=1,
      )
      rag_logprobs = self.marginalize(seq_logits, doc_scores, n_docs)
      loss = self.hf_compute_loss(
          target,
          rag_logprobs,
          from_logits=True,
          reduce_loss=reduce_loss,
      )
  
      return loss
  
imports: from __future__ import annotations
  import copy
  from dataclasses import dataclass
  from typing import List, Optional, Tuple, Union
  import numpy
  import tensorflow
  from ...configuration_utils import PretrainedConfig
  from ...generation import TFLogitsProcessorList
  from ...modeling_tf_utils import TFCausalLanguageModelingLoss, TFModelInputType, TFPreTrainedModel, shape_list, unpack_inputs
  from ...utils import ModelOutput, add_start_docstrings_to_model_forward, logging, replace_return_docstrings
  from .configuration_rag import RagConfig
  from .retrieval_rag import RagRetriever
label_desc: Use image node_id 14 for calling the TFRagTokenForGeneration obj's underlying member method code with example usage: obj.get_nll(seq_logits, doc_scores, target, reduce_loss, epsilon, n_docs) and returns: loss