Hard to say since I don’t know what shapes these are.
I recommend switching your entire model to the Functional API, you’ll find it much easier to debug. There’s no justification for using Model subclassing here.
Basic version:
inputs = Input(shape=...)
x = layers.Embedding(vocab_size, embedding_dim)(inputs)
x = layers.GRU(rnn_units, return_sequences=True)(x)
x = layers.GRU(rnn_units, return_sequences=True)(x)
outputs = layers.Dense(vocab_size)(x)
model = Model(inputs, outputs)

Version that allows state reinjection:
inputs = Input(shape=...)
initial_gru1_state = Input(shape=...)
initial_gru2_state = Input(shape=...)
x = layers.Embedding(vocab_size, embedding_dim)(inputs)
x, state1 = layers.GRU(rnn_units, return_sequences=True, return_state=True)(x, initial_state=initial_gru1_state)
x, state2 = layers.GRU(rnn_units, return_sequences=True, return_state=True)(x, initial_state=initial_gru2_state)
outputs = layers.Dense(vocab_size)(x)
model = Model(inputs, [outputs, state1, state2])

Untested code obviously, but going this route (the standard route) will make your life much easier.