{"record":{"id":"a5c6d899a68cb09d","repo":"BerriAI/litellm","slug":"no-shadow-eval-job-job-id","errorCode":null,"errorMessage":"No shadow eval job {job_id}","messagePattern":"No shadow eval job (.+?)","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"litellm/proxy/management_endpoints/auto_router_endpoints.py","lineNumber":769,"sourceCode":"    tags=(\"auto router\",),\n    dependencies=(Depends(user_api_key_auth),),\n    response_model=ShadowEvalJobResponse,\n)\nasync def get_shadow_eval_job(\n    job_id: str,\n    user_api_key_dict: Annotated[UserAPIKeyAuth, Depends(user_api_key_auth)],\n) -> ShadowEvalJobResponse:\n    \"\"\"One job with derived counts, judge spend, latest error, and stratified results.\"\"\"\n    from litellm.proxy.proxy_server import prisma_client\n\n    _require_admin_viewer(user_api_key_dict, \"view shadow evals\")\n    if prisma_client is None:\n        raise HTTPException(status_code=500, detail=CommonProxyErrors.db_not_connected_error.value)\n    record: Final = await prisma_client.db.litellm_shadowevaljob.find_unique(\n        where={\"id\": job_id}  # mutable-ok: Prisma filter\n    )\n    if record is None:\n        raise HTTPException(status_code=404, detail=f\"No shadow eval job {job_id}\")\n    totals: Final = _ATTEMPT_TOTALS_ROWS.validate_python(\n        await prisma_client.db.query_raw(_ATTEMPT_TOTALS_SQL, job_id) or ()\n    )\n    latest_error: Final = await prisma_client.db.litellm_shadowevalattempt.find_first(\n        where={\"job_id\": job_id, \"outcome\": \"error\"},  # mutable-ok: Prisma filter\n        order={\"created_at\": \"desc\"},  # mutable-ok: Prisma order\n    )\n    labeled: Final = await _with_key_labels(\n        prisma_client, (ShadowEvalJobResponse.model_validate(record, from_attributes=True),)\n    )\n    return labeled[0].model_copy(\n        update={  # mutable-ok: pydantic update payload\n            \"judged_count\": totals[0].judged_count if totals else 0,\n            \"error_count\": totals[0].error_count if totals else 0,\n            \"judge_spend\": round(totals[0].judge_spend, 6) if totals else 0.0,\n            \"last_error\": latest_error.error if latest_error else None,\n            \"results\": await _shadow_eval_results(prisma_client, job_id),\n        }","sourceCodeStart":751,"sourceCodeEnd":787,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/auto_router_endpoints.py#L751-L787","documentation":"Error \"No shadow eval job {job_id}\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/auto_router_endpoints.py:769 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the job_id by listing existing shadow eval jobs.","Create a new shadow eval job if the referenced one does not exist."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}