I recently switched from the excellent DSPy framework to TextGrad. Like DSPy, TextGrad uses example inputs and out puts as training data to refine prompts and improve outputs. Unlike DSPy, though, there is no emphasis on prompt templating, and the Optimizers can be applied to more than just a re-usable prompt.
The TextGrad whitepaper describes two types of optimizations we can apply: