can1357/oh-my-pi · error · Error
Usage depleted for ${primary.model.provider}/${primary.model
Error message
Usage depleted for ${primary.model.provider}/${primary.model.id}; reserve policy is fail-closed. What it means
Before a session starts, the SDK checks provider usage health. When the primary model's provider reports state "depleted" (quota/credits exhausted) and the configured usageReservePolicy is "fail-closed", session creation is aborted instead of silently starting a session that will fail on the first request.
Source
Thrown at packages/coding-agent/src/sdk.ts:2450
settings.get("retry.usageAwareFallback")
) {
let usageHealth: ModelUsageHealth | undefined;
try {
usageHealth = await modelRegistry.authStorage.getModelUsageHealth(primary.model.provider, {
modelId: primary.model.id,
baseUrl: primary.model.baseUrl,
reserveFraction: settings.get("retry.usageReservePct") / 100,
});
} catch (error) {
logger.debug("Usage-aware model preflight failed open", {
provider: primary.model.provider,
model: primary.model.id,
error: String(error),
});
}
if (usageHealth?.state === "depleted") {
if (usageReservePolicy === "fail-closed") {
throw new Error(
`Usage depleted for ${primary.model.provider}/${primary.model.id}; reserve policy is fail-closed.`,
);
}
if (modelFallbackEnabled) {
usageFallbackTriggered = true;
continue;
}
}
if (usageHealth?.state === "reserve") {
if (usageReservePolicy === "fail-closed") {
throw new Error(
`Usage reserve reached for ${primary.model.provider}/${primary.model.id}; reserve policy is fail-closed.`,
);
}
if (
modelFallbackEnabled &&
(usageReservePolicy === "auto" || (!options.hasUI && !options.deferUsageReserveConfirmation))
) {View on GitHub (pinned to 9690622007)
Solutions
- Top up or restore quota/credits for the provider account
- Change usageReservePolicy from "fail-closed" to "auto" (or enable modelFallbackEnabled) so the session falls back to another model
- Choose a primary model on a provider whose usage is not depleted
Example fix
// before
await createAgentSession({ usageReservePolicy: "fail-closed", ... });
// after
await createAgentSession({ usageReservePolicy: "auto", modelFallbackEnabled: true, ... }); Defensive patterns
Strategy: fallback
Validate before calling
const health = await getUsageHealth(primaryModel);
if (health?.state === "depleted") console.warn("provider quota depleted before session start"); Type guard
null
Try / catch
try {
session = await createAgentSession(options);
} catch (err) {
if (err instanceof Error && err.message.startsWith("Usage depleted")) {
session = await createAgentSession({ ...options, model: fallbackModel });
} else throw err;
} Prevention
- Monitor provider quota/balance before launching sessions
- Configure modelFallbackEnabled with usageReservePolicy "auto" in headless environments
- Alert on usage-health state transitions instead of failing session creation
When it happens
Trigger: createAgentSession with usageReservePolicy "fail-closed" while the primary model's provider usage health is "depleted" and model fallback is disabled or exhausted.
Common situations: Ran out of API credits/quota for the provider; running in headless/CI environments with a strict fail-closed policy; expired billing causing provider to report zero remaining usage.
Related errors
- ${USAGE_PREFLIGHT_BLOCKED_PREFIX} ${condition} for ${current
- Usage reserve reached for ${primary.model.provider}/${primar
- using '-' to denote standard input does not work in file sys
- Anthropic cache refresh response omitted usage
- Usage: omp auth-broker import <file|dir> [--provider=<id>] [
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/17ac4315799648dc.
Report an issue: GitHub.