- Add ModelUnavailableError for clearer error handling (extends ValueError for backward compat)
- Add ResolvedModel dataclass to hold resolved model metadata
- Extract all model resolution logic (disabled check, fallback, registry refresh) into resolve_model_for_call()
- Simplify llm_call() to use the new function (77 lines → 7 lines)
This improves maintainability by separating concerns:
- resolve_model_for_call() handles model resolution
- llm_call() handles the actual LLM API call