{"record":{"id":"4763f385907a700f","repo":"HKUDS/DeepTutor","slug":"upsert-failed","errorCode":null,"errorMessage":"Upsert failed","messagePattern":"Upsert failed","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"deeptutor/api/routers/question_notebook.py","lineNumber":220,"sourceCode":"async def upsert_single_entry(payload: UpsertEntryRequest):\n    store = get_sqlite_session_store()\n    images_records = await _persist_answer_images(payload.session_id, payload.user_answer_images)\n    item = payload.model_dump()\n    # The store expects ``user_answer_images`` as a plain list of dicts\n    # (or absent to mean \"leave the stored images alone\"). Strip the\n    # upload payload version and replace with the persisted records.\n    item.pop(\"user_answer_images\", None)\n    if images_records is not None:\n        item[\"user_answer_images\"] = images_records\n    try:\n        await store.upsert_notebook_entries(payload.session_id, [item])\n    except ValueError as e:\n        raise HTTPException(status_code=404, detail=str(e))\n    entry = await store.find_notebook_entry(\n        payload.session_id, payload.question_id, turn_id=payload.turn_id\n    )\n    if entry is None:\n        raise HTTPException(status_code=500, detail=\"Upsert failed\")\n    return entry\n\n\n@router.get(\"/entries\", response_model=NotebookEntryListResponse)\nasync def list_entries(\n    category_id: int | None = Query(default=None),\n    uncategorized: bool = Query(\n        default=False,\n        description=\"Only entries filed under no category — the triage inbox. \"\n        \"Ignored when category_id is set.\",\n    ),\n    bookmarked: bool | None = Query(default=None),\n    is_correct: bool | None = Query(default=None),\n    search: str = Query(default=\"\", max_length=200),\n    sort: str = Query(default=\"recent\", pattern=\"^(recent|oldest)$\"),\n    limit: int = Query(default=50, ge=1, le=200),\n    offset: int = Query(default=0, ge=0),\n) -> NotebookEntryListResponse:","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/api/routers/question_notebook.py#L202-L238","documentation":"Error \"Upsert failed\" thrown in HKUDS/DeepTutor.","triggerScenarios":"Thrown at deeptutor/api/routers/question_notebook.py:220 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}