code: def run_eval(args):
      sp_model = spm.SentencePieceProcessor(
          model_file=str(args.sp_model_path)
      )
      model = ConformerRNNTModule.load_from_checkpoint(
          args.checkpoint_path, sp_model=sp_model
      ).eval()
      data_module = get_data_module(
          str(args.librispeech_path),
          str(args.global_stats_path),
          str(args.sp_model_path),
      )
  
      if args.use_cuda:
          model = model.to(device="cuda")
  
      total_edit_distance = 0
      total_length = 0
      dataloader = data_module.test_dataloader()
      with torch.no_grad():
          for idx, (batch, sample) in enumerate(dataloader):
              actual = sample[0][2]
              predicted = model(batch)
              total_edit_distance += compute_word_level_distance(
                  actual, predicted
              )
              total_length += len(actual.split())
              if idx % 100 == 0:
                  logger.warning(
                      f"Processed elem {idx}; WER: {total_edit_distance / total_length}"
                  )
      logger.warning(f"Final WER: {total_edit_distance / total_length}")
  
file_path: audio/examples/asr/librispeech_conformer_rnnt/eval.py
imports: import logging
  import pathlib
  from argparse import ArgumentParser
  import sentencepiece
  import torch
  import torchaudio
  from lightning import ConformerRNNTModule
  from transforms import get_data_module
label_desc: Use image node_id 2 for calling a global function with example usage: run_eval(args) without return types