Q1. What is smart abstraction and why use it for AI calls?
Smart abstraction is a wrapper function that hides multiple provider options behind a single call. Instead of calling OpenAI directly in 50 places, you call generate_with_ai() everywhere, and that one function tries OpenAI first, falls back to Claude on failure, and returns a cached response if everything fails. The benefit is one place to update when providers change, and the app keeps running during outages.