One additional feature I was looking at for a personal implementation was picking the target word- how is it being chosen from the remaining letters after the player's first guess? Are you using a word that purposely uses fewer common letters from the set of remaining words?
No, I'm looping through all possible guess and targets and grouping possible targets by matching scoring. Then I select a guess on which one has the smallest set of possible words afterwards. For example, "SERAI" seems to be a good first word. The reason why is that even if the adversary selects the worst-case scoring of (in this case, it would be no green, no yellow), there's only 168 remaining words it could be.