Move retry logic and quota detection from provider-specific code to BaseProvider to reduce duplication and simplify error handling.
Abstract out generate validation and error handling into BaseProvider, eliminating duplicated logic across Anthropic, OpenRouter, and OpenAI providers.