There’s no clean async abstraction later; once you pick a side, you’re stuck with crates that support it.
Some popular crates let you pick using flags which one you want when you add them... but, tldr: no.
It’s not ideal, but it’s very flexible.
Given they weren’t sure exactly what the async runtime should look like, and the strong backwards compatibility promise, they opted for “get something people can use for now”.
...of course, the python packaging story shows this is a stupid idea in the long run, and I believe the plan is to consolidate into a single “std” async runtime eventually.
...but for now, in your situation, you’re basically screwed I’m afraid. Fork the crate and migrate it yourself is probably the only real solution.
The downside is that doing that usually unearths dependencies that are also using the wrong runtime, etc.
For now: Pick one, stick with it.