def forward(self, x: Tensor, include_embeddings: bool = False):
        """
        x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)
            the mel spectrogram of the audio
        include_embeddings: bool
            whether to include intermediate steps in the output
        """
        x = F.gelu(self.conv1(x))
        x = F.gelu(self.conv2(x))
        x = x.permute(0, 2, 1)

        assert x.shape[1:] == self.positional_embedding.shape, "incorrect audio shape"
        x = (x + self.positional_embedding).to(x.dtype)

        if include_embeddings:
            embeddings = [x.cpu().detach().numpy()]

        for block in self.blocks:
            x = block(x)
            if include_embeddings:
                embeddings.append(x.cpu().detach().numpy())

        x = self.ln_post(x)

        if include_embeddings:
            embeddings = np.stack(embeddings, axis=1)
            return x, embeddings
        else:
            return x

        x : torch.Tensor, shape = (batch_size, n_mels, n_ctx)
            the mel spectrogram of the audio
        include_embeddings: bool
            whether to include intermediate steps in the output
        
src/models/whisper/whisper/model.py