{"record":{"id":"0d65fda4030f9b04","repo":"Significant-Gravitas/AutoGPT","slug":"expert-name-hit-her-weekly-credit-budget-spent","errorCode":null,"errorMessage":"{expert.name} hit her weekly credit budget ({spent}/{budget}); schedules are paused until you resume them.","messagePattern":"(.+?) hit her weekly credit budget \\((.+?)/(.+?)\\); schedules are paused until you resume them\\.","errorType":"exception","errorClass":"ExpertRunPausedError","httpStatus":409,"severity":"warning","filePath":"autogpt_platform/backend/backend/api/features/experts/scheduling.py","lineNumber":315,"sourceCode":"        return\n    if expert.isArchived:\n        raise ExpertRunPausedError(\n            f\"{expert.name} is archived; her schedules do not run.\", expert_id\n        )\n    if expert.schedulesPausedAt is not None:\n        raise ExpertRunPausedError(f\"{expert.name}'s schedules are paused.\", expert_id)\n    budget = effective_weekly_budget(expert)\n    if budget is None:\n        return\n    spent = await get_weekly_spend(expert_id)\n    if spent >= budget:\n        await pause_expert_schedules(\n            user_id,\n            expert_id,\n            reason=f\"Weekly credit budget reached ({spent}/{budget})\",\n        )\n        await _post_budget_message(user_id, expert, spent, budget, breached=True)\n        raise ExpertRunPausedError(\n            f\"{expert.name} hit her weekly credit budget ({spent}/{budget}); \"\n            \"schedules are paused until you resume them.\",\n            expert_id,\n        )\n    if spent >= int(budget * _BUDGET_WARN_FRACTION):\n        await _post_budget_message(user_id, expert, spent, budget, breached=False)\n\n\nasync def _post_budget_message(\n    user_id: str,\n    expert: prisma.models.Expert,\n    spent: int,\n    budget: int,\n    breached: bool,\n) -> None:\n    \"\"\"Post the warning/pause message into the expert's thread. Deduped to\n    once per expert per week per kind via the deterministic message id.\n    Never raises — a failed post must not affect the run decision.\"\"\"","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/Significant-Gravitas/AutoGPT/blob/9c8bb5550f446ba5d3046b78896578742495b3cf/autogpt_platform/backend/backend/api/features/experts/scheduling.py#L297-L333","documentation":"ExpertRunPausedError raised at scheduling.py:315 when weekly spend >= effective_weekly_budget(expert). The gate first durably pauses the expert's schedules (pause_expert_schedules), posts a chat message to the user via _post_budget_message(breached=True), then raises. This is the budget churn-guardrail — actual billing is handled separately by the credit system.","triggerScenarios":"A scheduled run fires for an expert with a weekly budget set, and accumulated weekly spend (get_weekly_spend) has reached or exceeded it. The next firing of any of her schedules produces this error.","commonSituations":"Aggressive schedule cadences (e.g. roster preloads) burning credits early in the week; a lowered budget taking effect mid-week under existing spend; multiple schedules sharing one expert's budget.","solutions":["Call POST /experts/{expert_id}/schedules/resume once you accept more spend, and/or raise the expert's weekly budget.","Reduce schedule cadence or trim preload rosters to keep weekly spend under budget.","Wait for the weekly window to reset if the spend is time-boxed; the pause persists until explicitly resumed."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"spent, budget = await get_weekly_spend(expert_id), effective_weekly_budget(expert)\nif budget is not None and spent >= budget:\n    surface_budget_notice(spent, budget)  # don't fire the schedule","typeGuard":null,"tryCatchPattern":"try:\n    await run_schedule(...)\nexcept ExpertRunPausedError as e:\n    if 'credit budget' in str(e):\n        prompt_user_to_raise_budget_or_resume(expert_id)","preventionTips":["Set weekly budgets with headroom for the expert's schedule cadence.","Watch for the warning message posted at the spend threshold (it fires before the hard pause).","Resume schedules explicitly after raising a budget — the breach pause persists otherwise."],"tags":["experts","scheduling","budget","credits","backend"],"backgroundTag":null,"analyzedSha":"9c8bb5550f446ba5d3046b78896578742495b3cf","analyzedAt":"2026-08-14T17:17:21.957Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}