bytedance/deer-flow · error · HTTPException

This turn can no longer be branched from.

Error message

This turn can no longer be branched from.

What it means

Error "This turn can no longer be branched from." thrown in bytedance/deer-flow.

Source

Thrown at backend/app/gateway/routers/threads.py:271

            snapshot,
            target_human_id,
            max_depth=_BRANCH_HISTORY_RAW_SCAN_LIMIT,
        )
    except CheckpointParentMissingError:
        thread_id = config.get("configurable", {}).get("thread_id", "")
        logger.debug(
            "Could not resolve parent lineage for branch thread %s; falling back to history scan",
            sanitize_log_param(thread_id),
            exc_info=True,
        )
    except CheckpointLineageError as exc:
        thread_id = config.get("configurable", {}).get("thread_id", "")
        logger.warning(
            "Rejected unsafe checkpoint lineage for branch thread %s",
            sanitize_log_param(thread_id),
            exc_info=True,
        )
        raise HTTPException(status_code=409, detail="This turn can no longer be branched from.") from exc

    try:
        history = await accessor.ahistory(config, limit=_BRANCH_HISTORY_RAW_SCAN_LIMIT)
    except _CHECKPOINT_MODE_ERRORS as exc:
        thread_id = config.get("configurable", {}).get("thread_id", "")
        raise _checkpoint_mode_http_error(exc, thread_id) from exc
    except Exception as exc:
        thread_id = config.get("configurable", {}).get("thread_id", "")
        logger.exception("Failed to scan replay checkpoint history for thread %s", sanitize_log_param(thread_id))
        raise HTTPException(status_code=500, detail="Failed to inspect checkpoint history") from exc

    replay_base, target_found = find_checkpoint_before_message_chronologically(history, target_human_id)
    if not target_found:
        logger.warning(
            "Could not locate branch user message %s in chronological history for thread %s",
            sanitize_log_param(target_human_id),
            sanitize_log_param(config.get("configurable", {}).get("thread_id", "")),
        )

View on GitHub (pinned to 1dd6ba1acb)

Solutions

  1. Branch from a later, still-addressable turn in the conversation.
  2. Reload the thread to get current checkpoint state before branching.

When it happens

Trigger: Thrown at backend/app/gateway/routers/threads.py:271 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of bytedance/deer-flow@1dd6ba1acb (2026-08-14). Data as JSON: /api/errors/b43e749bd5ca113d. Report an issue: GitHub.