resolveRoutes

suspend fun <T> resolveRoutes(onDevice: suspend () -> T?? = null, customProvider: suspend () -> T?? = null, rules: suspend () -> T?? = null): PdfAiOutcome<T>

Tries each route in the fixed order of PRV-2 and reports which one answered.

A route returning null and a route throwing are treated the same — both move on to the next route — because a custom provider is someone else's server, and its outage must not take down a feature that has a rules fallback.