code: def forward(self, batch):
      decoder = RNNTBeamSearch(self.model, self.blank_idx)
      video_features = self.video_frontend(batch.videos.to(self.device))
      audio_features = self.audio_frontend(batch.audios.to(self.device))
      hypotheses = decoder(
          self.fusion(
              torch.cat([video_features, audio_features], dim=-1)
          ),
          batch.video_lengths.to(self.device),
          beam_width=20,
      )
      return post_process_hypos(hypotheses, self.sp_model)[0][0]
  
imports: import itertools
  import math
  from collections import namedtuple
  from typing import List, Tuple
  import sentencepiece
  import torch
  import torchaudio
  from models.conformer_rnnt import conformer_rnnt
  from models.emformer_rnnt import emformer_rnnt
  from models.fusion import fusion_module
  from models.resnet import video_resnet
  from models.resnet1d import audio_resnet
  from pytorch_lightning import LightningModule
  from schedulers import WarmupCosineScheduler
  from torchaudio.models import Hypothesis, RNNTBeamSearch
label_desc: Use image node_id 4 for calling the AVConformerRNNTModule obj's underlying member method code with example usage: obj.forward(batch) and returns: post_process_hypos