Developer tool
Smart Fallback Config Generator
Choose a primary model, backups and what should trigger a switch. Copy the result straight into your app.
Failure triggers
// Generated by Token Terminal — fallback chain (OPENAI_API_KEY, ANTHROPIC_API_KEY)
import OpenAI from "openai";
const TIERS = [
{
"provider": "OpenAI",
"model": "gpt-6.1-terra-pro",
"baseURL": "https://api.openai.com/v1",
"apiKeyEnv": "OPENAI_API_KEY"
},
{
"provider": "Anthropic",
"model": "claude-haiku-5-5",
"baseURL": "https://api.anthropic.com/v1/",
"apiKeyEnv": "ANTHROPIC_API_KEY"
}
];
const TIMEOUT_MS = 15000;
const RETRIES_PER_MODEL = 1;
const clients = TIERS.map((tier) => new OpenAI({ baseURL: tier.baseURL, apiKey: process.env[tier.apiKeyEnv] }));
function shouldFallback(err: any): boolean {
const status = err?.status ?? err?.response?.status;
if (status === 429) return true; // rate limited
if (status >= 500 || err?.code === "ECONNRESET") return true; // provider outage
if (err?.name === "AbortError" || err?.name === "APIConnectionTimeoutError") return true; // latency timeout
return false;
}
export async function complete(messages: OpenAI.Chat.ChatCompletionMessageParam[]) {
let lastErr: unknown;
for (const [i, tier] of TIERS.entries()) {
for (let attempt = 0; attempt <= RETRIES_PER_MODEL; attempt++) {
try {
const client = clients[i];
if (!client) throw new Error("Missing client for fallback tier");
return await client.chat.completions.create({ model: tier.model, messages }, { timeout: TIMEOUT_MS });
} catch (err) {
lastErr = err;
if (!shouldFallback(err)) throw err;
}
}
}
throw lastErr;
}