used langchain and churned out of it due to it's abstraction level. Nowaday I either just use pydantic-ai or dspy.