CanGeng / llm-fallback

목록에 있음

Multi-level provider fallback for same-named models (dsh plugin)

main모델 소스 보기

설치

npx -y @deepseek-ai/dsh plugin --profile web add github:CanGeng/llm-fallback

이 설치 명령은 GitHub 저장소 주소에서 생성된 확인되지 않은 시작점입니다.

README

유지 관리자가 작성한 문서 스냅샷입니다.

GitHub에서 보기 ↗
커밋 65d044f동기화 2026. 8. 18.

llm-fallback

English | 中文

Multi-level provider fallback for same-named models in the DeepSeek Harness.

A pool maps one model id to an ordered provider list. The first provider is the primary; each later one is a fallback. The plugin keeps every step on the primary (stable request prefix → KV cache reuse) and only fails over when the current level is exhausted.

Behavior

  • agent/request picks the pool level for each step. A new step starts at the primary (level 0) unless the explicitly requested provider is itself a pool member — then it starts there and fails over forward. A recovered primary is therefore reused immediately on the next step. It also probes each candidate with resolveCallConfig and skips (recording) any that would fail before streaming — a missing route (NO_ADAPTER), an unknown model, or an unsupported reasoning effort.
  • agent/request-error records each level's failure, then advances the level by returning { kind: 'retry' }. When every level is exhausted it throws one aggregated error listing each level's failure (provider: code — message).

Same-provider retries happen first (via dsh-llm-retry, which sits outside this plugin), so transient errors like RATE_LIMIT never trigger a failover and never break the prefix. Only terminal errors (QUOTA, AUTH, …) or an exhausted retry budget fail over.

retryPolicy.mode: always is incompatible

always retries one provider forever and cannot be stopped from a listener, so it conflicts with a terminating fallback chain:

  • alwaysPolicy: reject (default) — refuse the provider, naming it and the model. Providers registered at load time are rejected when the plugin loads; routes activated later through settings (dormant routes) are rejected the first time a pool request would use them.
  • alwaysPolicy: degrade — warn and cap that provider at alwaysMaxRetries same-provider retries before failing over.

In both modes, an always provider may never be the last level of a pool (that can never terminate) — it is always rejected.

Configuration

See cordis.patch.yml. The pools list maps a model id to its ordered provider chain. The config is validated when the plugin loads: an unknown alwaysPolicy, a pool without a non-empty model, or a pool whose providers is not an array throws immediately instead of failing silently later.

config:
  alwaysPolicy: reject
  alwaysMaxRetries: 2
  pools:
    - model: deepseek-v4-pro
      providers: [deepseek-official, ark-coding, ark-agent]

Development

node --test   # or: npm test

Install

dsh plugin --profile web add link:/path/to/llm-fallback
dsh web   # restart to load the new bundle layer

프로젝트 파일 및 신호

표시된 항목은 디렉터리 스냅샷에서 감지된 공개 저장소 신호입니다.

테스트감지됨

저장소 정보

언어
JavaScript
라이선스
보고되지 않음
마지막 업데이트
2026. 8. 16. 오전 6:06

신중하게 설치하기

소스 코드, 권한, 수명 주기 스크립트, 의존성 및 네트워크 접근을 검토하고 신뢰하지 않는 플러그인은 격리 환경에서 테스트하세요.