Everyone hates backseat drivers, but in case it's helpful, I've programmed AI for these types of games before.
In comparison to even checkers, where you have a decently large search space, Puyo is a pretty nice game to build an AI for since you have at most two candidate pieces to evaluate (the current piece and the piece after it) with 22 orientations each, for a total of 484 potential board configurations to evaluate. It makes brute-force scoring the list based on "personality" (e.g. prefers setting up chains, prefers matches, favors certain colors) pretty easy, and then you can have different AIs with seemingly diverse personalities to compete against.
Viewing post in Mr. Meanie's Beanie Machine comments
I always like to have a random float range for each personality that determines where in the optimized list I select the move from so that you're not consistently at the same "optimum" level for each move.
Then you throw in a 1+line count chance that it selects a bottom 10 move for the "choke" factor.
Anyway, this is a really solid implementation of puyo pop. I really hope you decide to continue with it