<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def build_model(self, token_encoder_model, sentence_encoder_model, trainable_embeddings=True, output_activation='softmax'):
 """Builds a model that first encodes all words within sentences using `token_encoder_model`, followed by `sentence_encoder_model`. Args: token_encoder_model: An instance of `SequenceEncoderBase` for encoding tokens within sentences. This model will be applied across all sentences to create a sentence encoding. sentence_encoder_model: An instance of `SequenceEncoderBase` operating on sentence encoding generated by `token_encoder_model`. This encoding is then fed into a final `Dense` layer for classification. trainable_embeddings: Whether or not to fine tune embeddings. output_activation: The output activation to use. (Default value: 'softmax') Use: - `softmax` for binary or multi-class. - `sigmoid` for multi-label classification. - `linear` for regression output. Returns: The model output tensor. """

        if not isinstance(token_encoder_model, SequenceEncoderBase):
            raise ValueError("`token_encoder_model` should be an instance of `{}`".format(
                SequenceEncoderBase))
        if not isinstance(sentence_encoder_model, SequenceEncoderBase):
            raise ValueError("`sentence_encoder_model` should be an instance of `{}`".format(
                SequenceEncoderBase))

        if not sentence_encoder_model.allows_dynamic_length() and self.max_sents is None:
            raise ValueError("Sentence encoder model '{}' requires padding. "
                             "You need to provide `max_sents`")

        if self.embeddings_index is None:
            # The +1 is for unknown token index 0.
            embedding_layer = Embedding(len(self.token_index),
                                        self.embedding_dims,
                                        input_length=self.max_tokens,
                                        mask_zero=token_encoder_model.allows_dynamic_length(),
                                        trainable=trainable_embeddings)
        else:
            embedding_layer = Embedding(len(self.token_index),
                                        self.embedding_dims,
                                        weights=[build_embedding_weights(
                                            self.token_index, self.embeddings_index)],
                                        input_length=self.max_tokens,
                                        mask_zero=token_encoder_model.allows_dynamic_length(),
                                        trainable=trainable_embeddings)

        word_input = Input(shape=(self.max_tokens,), dtype='int32')
        x = embedding_layer(word_input)
        word_encoding = token_encoder_model(x)
        token_encoder_model = Model(
            word_input, word_encoding, name='word_encoder')

        doc_input = Input(
            shape=(self.max_sents, self.max_tokens), dtype='int32')
        sent_encoding = TimeDistributed(token_encoder_model)(doc_input)
        x = sentence_encoder_model(sent_encoding)

        x = Dense(self.num_classes, activation=output_activation)(x)
        return Model(doc_input, x)