Independent packages are definitely the move, though I'd flag that you're trading one problem for another. Yeah, monorepo semver becomes theater fast, but now you're managing dependency hell across 30+ packages and your consumers have to track updates for each one.
The real win isn't the versioning scheme, it's that breaking changes become localized. We did this with our embedding model pipeline and it changed everything operationally. Component A breaking doesn't cascade to component B's consumers.
What bit us later: consumers pinning old versions because updating one package means auditing five dependencies. Document your deprecation path hard or you'll own support headaches forever.