Pattern: automatic DeepSeek → Gemini fallback with Vercel AI SDK (production experience)

I’m building Fexa AI — an SEO automation SaaS that generates titles, meta descriptions and translations for e-commerce stores at scale. We process thousands of AI calls per day.

We default to DeepSeek for cost reasons but needed Gemini as a silent fallback when DeepSeek rate-limits or goes down. Here’s the pattern we settled on with Vercel AI SDK:

import { generateText } from 'ai'
import { createDeepSeek } from '@ai-sdk/deepseek'
import { google } from '@ai-sdk/google'

async function generateWithFallback(prompt: string) {
  try {
    const deepseek = createDeepSeek({ apiKey: process.env.DEEPSEEK_API_KEY })
    return await generateText({
      model: deepseek('deepseek-chat'),
      prompt,
    })
  } catch {
    // Gemini as silent fallback
    return await generateText({
      model: google('gemini-2.0-flash'),
      prompt,
    })
  }
}

What surprised us: Gemini’s output quality on structured SEO content (JSON-formatted titles/metas) was on par with DeepSeek, sometimes better for non-English languages (ES, IT).

Has anyone built more sophisticated routing — e.g. routing by language or content type rather than just on failure?