BerriAI/litellm · error · HTTPException

No shadow eval job {job_id}

Error message

No shadow eval job {job_id}

What it means

Error "No shadow eval job {job_id}" thrown in BerriAI/litellm.

Source

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

    tags=("auto router",),
    dependencies=(Depends(user_api_key_auth),),
    response_model=ShadowEvalJobResponse,
)
async def get_shadow_eval_job(
    job_id: str,
    user_api_key_dict: Annotated[UserAPIKeyAuth, Depends(user_api_key_auth)],
) -> ShadowEvalJobResponse:
    """One job with derived counts, judge spend, latest error, and stratified results."""
    from litellm.proxy.proxy_server import prisma_client

    _require_admin_viewer(user_api_key_dict, "view shadow evals")
    if prisma_client is None:
        raise HTTPException(status_code=500, detail=CommonProxyErrors.db_not_connected_error.value)
    record: Final = await prisma_client.db.litellm_shadowevaljob.find_unique(
        where={"id": job_id}  # mutable-ok: Prisma filter
    )
    if record is None:
        raise HTTPException(status_code=404, detail=f"No shadow eval job {job_id}")
    totals: Final = _ATTEMPT_TOTALS_ROWS.validate_python(
        await prisma_client.db.query_raw(_ATTEMPT_TOTALS_SQL, job_id) or ()
    )
    latest_error: Final = await prisma_client.db.litellm_shadowevalattempt.find_first(
        where={"job_id": job_id, "outcome": "error"},  # mutable-ok: Prisma filter
        order={"created_at": "desc"},  # mutable-ok: Prisma order
    )
    labeled: Final = await _with_key_labels(
        prisma_client, (ShadowEvalJobResponse.model_validate(record, from_attributes=True),)
    )
    return labeled[0].model_copy(
        update={  # mutable-ok: pydantic update payload
            "judged_count": totals[0].judged_count if totals else 0,
            "error_count": totals[0].error_count if totals else 0,
            "judge_spend": round(totals[0].judge_spend, 6) if totals else 0.0,
            "last_error": latest_error.error if latest_error else None,
            "results": await _shadow_eval_results(prisma_client, job_id),
        }

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Verify the job_id by listing existing shadow eval jobs.
  2. Create a new shadow eval job if the referenced one does not exist.

When it happens

Trigger: Thrown at litellm/proxy/management_endpoints/auto_router_endpoints.py:769 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/a5c6d899a68cb09d. Report an issue: GitHub.