capabilities

open suspend override fun capabilities(): AiCapabilities(source)

Delegates to the SAME backend generateStream would pick — the first available one — so an app asking "what can I actually do right now" gets the answer for the backend it would really run against, not a generic composite-wide guess. No backend available reads the same as generate's empty-chain case: AiFailure.NotSupportedOnPlatform.