模型備援

跨實驗室自動容錯轉移。支援循序與並行模式。

Pattern 1: sequential fallback (simple)

from openai import OpenAI

client = OpenAI(base_url="https://meshtok.com/v1", api_key="sk-...")

FALLBACK_CHAIN = [
    "openai/gpt-5.2",
    "anthropic/claude-sonnet-5",
    "deepseek/deepseek-v4-pro",
    "bigmodel/glm-5.2",
]

def chat_with_fallback(messages, **kwargs):
    last_err = None
    for model in FALLBACK_CHAIN:
        try:
            resp = client.chat.completions.create(model=model, messages=messages, **kwargs)
            return resp.choices[0].message.content
        except Exception as e:
            last_err = e
    raise last_err

Pattern 2: parallel race (lowest latency)

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(base_url="https://meshtok.com/v1", api_key="sk-...")

async def try_model(model, messages):
    try:
        resp = await client.chat.completions.create(model=model, messages=messages)
        return resp.choices[0].message.content
    except Exception:
        return None

async def race(models, messages):
    tasks = [asyncio.create_task(try_model(m, messages)) for m in models]
    for coro in asyncio.as_completed(tasks):
        result = await coro
        if result:
            for t in tasks: t.cancel()
            return result
    raise RuntimeError("all models failed")

Choosing fallback models

→ 串流回應 → 工具與函式呼叫 模型