My answer above was slightly wrong. The MPS(sites) constructor makes a product state that does have link indices (of dimension 1).
However, your approach above, which overwrites all of the MPS tensors with ITensors that only have site indices, is fine and will work with many ITensor functions (such as using it as a starting state in DMRG).
If you were to instead set the elements of the existing MPS tensors, instead of replacing them entirely, you would have to include the link indices of those tensors. For example, setting an element of the MPS tensor at site `i` might look like:
auto i = 3;
auto si = uniqueIndex(psi.A(i),psi.A(i-1),psi.A(i+1));
auto li_1 = commonIndex(psi.A(i-1),psi.A(i));
auto li = commonIndex(psi.A(i),psi.A(i+1));
psi.Aref(i).set(si(1),li_1(1),li(1),cos(rndNum));
Potentially we could make this easier by allowing users to not include IndexVals for Indices with dimension 1, but that would require checks every time a value needs to be set so may not be a good idea.