
omdsh-dev/dsh-llm-fallbacks
dsh-llm-fallbacks
dsh-llm-fallbacks is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile web add dsh-llm-fallbacksRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-llm-fallbacks)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from omdsh-dev/dsh-llm-fallbacks, cleaned of badges and images.
dsh-llm-fallbacks
Automatic provider/model fallback chains for dsh (DeepSeek Harness): when an agent's LLM requests keep failing — retries exhausted, auth errors, quota exceeded, rate limiting (429) — the plugin switches provider/model along the fallback chain for the current role, and the current step/turn continues on the target model: tasks are not interrupted by model problems.
Works in both dsh front ends: the web profile (Settings → Plugins → Fallbacks card) and the dsh-tui terminal profile (/fallbacks session diagnostics, /fallbacks config readback, and the /settings fallbacks section for editing).
Three core capabilities
Automatic model failover
Any agent — root or subagent — that keeps failing on a listed failure code walks its chain to the next available provider/model and keeps the step alive. No manual model switching, and nothing happens until you configure content.
- Triggers:
triggerCodes(defaultAUTH/QUOTA/RATE_LIMIT) — any dsh failure code is accepted, includingCONTEXT_WINDOW_EXCEEDED, which fails over to a larger-context candidate. Retryable failures (5xx,TRANSPORT,TIMEOUT, …) stay with llm-retry first. - Recovery: a failed / switched-away model is held out of selection for
cooldownMs, andrevertPolicy: cooldown-expiryreturns to the primary model on expiry. The opt-inrecovery: half-openmode (YAML-only) makes that return evidence-driven instead of timer-based. - Safety valves:
maxSwitchesPerStepcaps switches per step andalwaysModeRetryCapcaps always-mode retries — chain loops cannot amplify latency. - Visibility: every switch is recorded in an info-level log line (from/to/role/reason) — no silent model switching.
→ Automatic model failover · Context-window-aware fallback
Peak/valley time slots
Time slots rotate the effective root chain by wall-clock windows: each row carries its own fallback chain, and the first row whose window contains the current moment replaces the all-day chain for the next root request — the all-day chain stays the last resort when no row matches. Rotation is a routing seed, not a failure decision: it consumes no cooldown and leaves the failure walk (fallback switch) untouched.
Four frozen UTC+8 presets (windows are code constants; preset rows lock tz to Asia/Shanghai):
| Preset | Window |
|---|---|
liang-peak | Monday–Friday 09:00–12:00 and 14:00–18:00 |
liang-valley | every other UTC+8 time (complement of Liang Peak) |
glm-peak | Monday–Friday 14:00–18:00 |
glm-valley | every other time (complement of GLM Peak) |
GLM Peak and GLM Valley are offered in the card picker only when zai-coding-cn is configured. Custom rows take start / end (HH:mm, may wrap midnight) and an optional days list.
Role-based subagents
A subagent's role is declared in its dispatch prompt — the Assignment header **Execute as**: <id> — and it is resolved against the role ids declared in roles.list. Only that declared header delivers the child's identity: the role's persona is installed on the child as a system-prompt section, the child's own session gets exactly one [role: <id>] notice row, and its session header shows a role badge.
…


