C.W.K.
Stream
Lesson 04 of 07 · published

Fallback Chains — 다른 failure mode 다른 path

~22 min · fallback, reliability

Level 0Tokenizer
0 XP0/54 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

cwkPippa brain fallback 은 Codex → Claude → Gemini per task, per-task override 가능. 왜 셋? 각 provider 가 ~4h/day degraded 다른 시간대. Chain 이 그걸 흡수.

왜 단일 provider 의 retry 로 충분 X

Failure 가 random 아니라서 — Claude 가 bad hour 일 때 Claude 5 번 retry = 5 번 실패 보장. 다른 provider 로 fall over 하는 게 진짜 reliability.

2-of-2 fallback (single provider 안)

  • Native vision + Read-tool fallback — 모델 degradation 방어
  • OAuth + API-key — identity layer outage 방어
  • SQLite + JSONL — store 부패 방어

각 pair 는 deliberate. 'duplicate 처럼 보여' 라고 한쪽 제거 = single point of failure 만듦.

try_chain helper

try_chain(providers, op) — 각 provider 차례로 시도, per-provider timeout, 모두 실패 시 aggregated error. Deliberately-flaky 중간 provider 로 테스트 — chain 이 진짜 흡수하는지.

Code

2-of-2: native vision + Read-tool fallback·python
class FallbackAdapter(LLMAdapter):
    """Try each adapter in order, falling back on 429/503 errors."""
    def __init__(self, adapters: list[tuple[LLMAdapter, str]]):
        self.adapters = adapters  # (adapter, model_name) pairs

    async def stream(self, messages, tools=None, model=None):
        last_exc = None
        for adapter, model_name in self.adapters:
            try:
                async for chunk in adapter.stream(messages, tools, model or model_name):
                    yield chunk
                return  # Success — stop trying
            except httpx.HTTPStatusError as e:
                if e.response.status_code in (429, 503):
                    logger.warning(f"Falling back from {model_name}: HTTP {e.response.status_code}")
                    last_exc = e
                    continue
                raise  # Non-retriable error — propagate
        raise last_exc

# Usage:
fallback = FallbackAdapter([
    (OpenAIAdapter(model="gpt-5.4"), "gpt-5.4"),      # primary
    (OpenAIAdapter(model="gpt-4.1"), "gpt-4.1"),      # secondary
    (OpenAIAdapter(model="gpt-4o-mini"), "gpt-4o-mini"), # tertiary
])

External links

Exercise

try_chain(providers, op) helper — 각 provider 차례로, per-provider timeout, final aggregated error. Deliberately-flaky 중간 provider 로 테스트.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.