def call(self,
           inputs,
           embed_claim=False,
           embed_evidence=False,
           training=None,
           **kwargs):
    """Model forward pass.

    Args:
      inputs: Input dictionary, dependent on type of embedder used
      embed_claim: Whether to embed the claim
      embed_evidence: Whether to embed the evidence
      training: Whether training mode is enabled
      **kwargs: Satisfies API compat

    Returns:
      Prediction of the model if claim is relevant to evidence
    """
    if embed_claim or embed_evidence:
      # (batch_size, projection_dim), (batch_size, projection_dim)
      return self.embed_only(
          inputs, embed_claim=embed_claim, embed_evidence=embed_evidence)
    else:
      if self._embedder_name == 'classic_embedder':
        # (batch_size, hidden_dim)
        encoded_claim = self._claim_encoder({'tokens': inputs['claim_text']})
        # (batch_size, hidden_dim)
        encoded_evidence = self._evidence_encoder(
            {'tokens': inputs['evidence_text']})
      elif self._embedder_name == 'bert_embedder':
        # (batch_size, hidden_dim)
        encoded_claim = self._claim_encoder({
            'word_ids': inputs['claim_text_word_ids'],
            'mask': inputs['claim_text_mask'],
            'segment_ids': inputs['claim_text_segment_ids'],
        })
        # (batch_size, hidden_dim)
        encoded_evidence = self._evidence_encoder({
            'word_ids': inputs['evidence_text_word_ids'],
            'mask': inputs['evidence_text_mask'],
            'segment_ids': inputs['evidence_text_segment_ids'],
        })
      else:
        raise ValueError('invalid embedder')
      out = {}
      # (batch_size, projection_dim)
      projected_claim = self._claim_projector(encoded_claim)
      # (batch_size, projection_dim)
      projected_evidence = self._evidence_projector(encoded_evidence)
      # (batch_size, 1)
      evidence_out = self._evidence_classifier(
          (projected_claim, projected_evidence))
      out['evidence_matching'] = tf.identity(
          evidence_out, name='evidence_matching')
      if self._classify_claim:
        # The claim takes the full size embedding, not the projected one.
        claim_out = self._claim_classifier((encoded_claim, encoded_evidence))
      else:
        # Predictions have three logits, one for each class
        claim_out = tf.fill((tf.shape(encoded_claim)[0], 3), 0.0)
      out['claim_classification'] = tf.identity(
          claim_out, name='claim_classification')
      return out
Model forward pass.

    Args:
      inputs: Input dictionary, dependent on type of embedder used
      embed_claim: Whether to embed the claim
      embed_evidence: Whether to embed the evidence
      training: Whether training mode is enabled
      **kwargs: Satisfies API compat

    Returns:
      Prediction of the model if claim is relevant to evidence
    
language/serene/model.py