code: def build(self):
      self.text_embeddings = ViLTTextEmbedding(
          **self.config.text_embeddings
      )
      self.image_embeddings = ViLTImageEmbedding(
          **self.config.image_encoder.params
      )
      self.encoder = build_encoder(self.config.image_encoder)
  
      head_configs = self.config.get("heads", {})
      self.tasks = self.config.get("tasks", head_configs.keys())
      if isinstance(self.tasks, str):
          self.tasks = self.tasks.split(",")
  
      self.losses = nn.ModuleDict()
      self.heads_dict = build_heads_dict(
          head_configs, self.tasks, self.losses
      )
      self.modality_keys = self.modality_type = ["text", "image"]
  
imports: import collections.abc
  import logging
  from dataclasses import dataclass
  from typing import Any, Dict, List, Optional, Tuple
  import torch
  from mmf.common.registry import registry
  from mmf.models.base_model import BaseModel
  from mmf.models.transformers.heads.utils import build_heads_dict
  from mmf.modules.encoders import TransformerEncoder, ViTEncoder
  from mmf.modules.losses import MMFLoss
  from mmf.utils.build import build_encoder
  from mmf.utils.modeling import get_bert_configured_parameters
  from omegaconf import MISSING, OmegaConf
  from torch import nn, Tensor
label_desc: Use image node_id 2 for calling the ViLT obj's underlying member method code with example usage: obj.build() without return types