jamiepine/voicebox · warning · HTTPException
No ROCm backend found to delete
Error message
No ROCm backend found to delete
What it means
Returned by DELETE /backend/rocm when rocm.delete_rocm_binary() returns a falsy result (HTTP 404). This means the active check passed but no binary file was found on disk to delete — the ROCm backend is not installed at the expected path.
Source
Thrown at backend/routes/rocm.py:57
create_background_task(_download())
return {"message": "ROCm backend download started", "progress_key": rocm.PROGRESS_KEY}
@router.delete("/backend/rocm")
async def delete_rocm_backend():
"""Delete the downloaded ROCm backend binary."""
from ..services import rocm
if rocm.is_rocm_active():
raise HTTPException(
status_code=409,
detail="Cannot delete ROCm backend while it is active. Switch to CPU first.",
)
deleted = await rocm.delete_rocm_binary()
if not deleted:
raise HTTPException(status_code=404, detail="No ROCm backend found to delete")
return {"message": "ROCm backend deleted"}
@router.get("/backend/rocm-progress")
async def get_rocm_download_progress():
"""Get ROCm backend download progress via Server-Sent Events."""
progress_manager = get_progress_manager()
async def event_generator():
async for event in progress_manager.subscribe("rocm-backend"):
yield event
return StreamingResponse(
event_generator(),
media_type="text/event-stream",
headers={
"Cache-Control": "no-cache",View on GitHub (pinned to 51f49dea19)
Solutions
- Confirm via GET /backend/status (or equivalent) whether a ROCm binary path exists before deleting.
- Treat 404 as success-equivalent if the goal is 'ensure ROCm is removed'.
- If the UI shows ROCm as present, refresh backend status to reconcile.
- Avoid issuing DELETE when the binary is known-absent; guard with an existence check.
Example fix
// before
await api.delete('/backend/rocm');
// after
const present = await rocmBinaryExists();
if (!present) return { removed: true, alreadyAbsent: true };
await api.delete('/backend/rocm'); Defensive patterns
Strategy: fallback
Validate before calling
async function rocmBinaryPresent() {
const s = await (await fetch('/api/backend/rocm-status')).json();
return !!s.installed;
} Type guard
function isRocmInstalled(s) { return !!s && s.installed === true; } Try / catch
try { await api.delete('/backend/rocm'); }
catch (e) { if (e.response?.status === 404) return { removed: true }; throw e; } Prevention
- Check backend status for the ROCm binary path before deleting.
- Treat 404 on delete as 'already removed' success.
- Reconcile UI state after manual file deletion.
When it happens
Trigger: DELETE /backend/rocm when the binary was never downloaded, was already deleted, or was manually removed from the filesystem outside the app. The progress entry is inactive so the active-check passes, but the file is absent.
Common situations: User deleted the binary by hand. A previous successful delete left stale UI state suggesting the backend exists. Fresh install where download never completed.
Related errors
- Cannot delete ROCm backend while it is active. Switch to CPU
- ROCm backend download already in progress
- Voice profile '{data.profile}' not found.
- Story not found
- Story or generation not found
AI-assisted analysis of jamiepine/voicebox@51f49dea19 (2026-08-12).
Data as JSON: /api/errors/7aac3b250e234607.
Report an issue: GitHub.