Load upstream profiles merged with config.toml overrides.
Keyed by provider:model spec string. Each entry contains the
merged profile dict and the set of keys overridden by config.toml.
Unlike get_available_models(), this includes all models from upstream
profiles regardless of capability filters (tool calling, text I/O).
Results are cached; use clear_caches() to reset. When cli_override is
provided the result is stored in a single-slot cache keyed by
id(cli_override). This relies on the caller retaining the same dict
object for the session (the CLI stores it once on the app instance);
passing a different dict with the same contents will bypass the cache
and overwrite the previous entry.
get_model_profiles(
*,
cli_override: dict[str, Any] | None = None
) -> Mapping[str, ModelProfileEntry]