BerriAI/litellm · error · HTTPException

Key already has an active {data.direction} shadow eval job (

Error message

Key already has an active {data.direction} shadow eval job (started concurrently). Stop it first.

What it means

Error "Key already has an active {data.direction} shadow eval job (started concurrently). Stop it first." thrown in BerriAI/litellm.

Source

Thrown at litellm/proxy/management_endpoints/auto_router_endpoints.py:710

    now: Final = datetime.now(timezone.utc)
    try:
        job: Final = await prisma_client.db.litellm_shadowevaljob.create(
            data={  # mutable-ok: Prisma payload
                "api_key_id": data.api_key_id,
                "router_name": data.router_name,
                "direction": data.direction,
                "baseline_model": data.baseline_model,
                "judge_model": data.judge_model,
                "shadow_percentage": data.shadow_percentage,
                "max_turns": data.max_turns,
                "created_by": user_api_key_dict.user_id,
                "ends_at": now + timedelta(days=data.duration_days),
            }
        )
    except Exception as e:
        if not _is_unique_violation(e):
            raise
        raise HTTPException(
            status_code=409,
            detail=(
                f"Key already has an active {data.direction} shadow eval job (started concurrently). Stop it first."
            ),
        ) from e
    return ShadowEvalJobResponse.model_validate(job, from_attributes=True).model_copy(
        update={"key_alias": key_row.key_alias, "key_name": key_row.key_name}  # mutable-ok: pydantic update payload
    )


@router.get(
    "/auto_router/shadow_eval",
    tags=("auto router",),
    dependencies=(Depends(user_api_key_auth),),
    response_model=list[ShadowEvalJobResponse],
)
async def list_shadow_eval_jobs(
    user_api_key_dict: Annotated[UserAPIKeyAuth, Depends(user_api_key_auth)],

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Stop the concurrently started shadow eval job first.
  2. Retry creating the job after the active one is stopped.

When it happens

Trigger: Thrown at litellm/proxy/management_endpoints/auto_router_endpoints.py:710 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/f60b43536a148b42. Report an issue: GitHub.