No need to use model:

select t.*,
i
from t,
lateral(
select level i
from dual
connect by level <= number_of_repeats
)
/
KEY T NUMBER_OF_REPEATS I
---------- - ----------------- ----------
101 A 3 1
101 A 3 2
101 A 3 3
102 B 4 1
102 B 4 2
102 B 4 3
102 B 4 4
7 rows selected.
SQL>

But if you want model:

select key,
text,
number_of_repeats,
i
from t
model
partition by(key,text,number_of_repeats)
dimension by(1 d)
measures(number_of_repeats n,1 i)
rules (
i[for d from 2 to n[1] increment 1 ] = cv(d)
)
/
KEY T NUMBER_OF_REPEATS I
---------- - ----------------- ----------
101 A 3 1
101 A 3 2
101 A 3 3
102 B 4 1
102 B 4 2
102 B 4 3
102 B 4 4
7 rows selected.
SQL>

SY.