{"record":{"id":"689d53bfde24d1f2","repo":"HKUDS/DeepTutor","slug":"no-default-knowledge-base-is-configured","errorCode":null,"errorMessage":"No default knowledge base is configured","messagePattern":"No default knowledge base is configured","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"deeptutor/api/routers/knowledge.py","lineNumber":769,"sourceCode":"            detail=(\n                f\"PageIndex knowledge bases accept: {supported}. \"\n                f\"Unsupported: {', '.join(unsupported[:5])}.\"\n            ),\n        )\n\n\ndef _resolve_registered_kb_name(manager: KnowledgeBaseManager, kb_name: str | None) -> str:\n    \"\"\"Resolve route-level default aliases to the configured default KB.\"\"\"\n    requested = str(kb_name or \"\").strip()\n    kb_names = manager.list_knowledge_bases()\n    if requested and requested in kb_names:\n        return requested\n\n    if requested.lower() in DEFAULT_KB_ALIASES:\n        default_kb = manager.get_default()\n        if default_kb and default_kb in kb_names:\n            return default_kb\n        raise HTTPException(status_code=404, detail=\"No default knowledge base is configured\")\n\n    raise HTTPException(status_code=404, detail=f\"Knowledge base '{requested}' not found\")\n\n\ndef _load_kb_entry_or_404(manager: KnowledgeBaseManager, kb_name: str) -> dict:\n    manager.config = manager._load_config()\n    kb_entry = manager.config.get(\"knowledge_bases\", {}).get(kb_name)\n    if kb_entry is None:\n        raise HTTPException(status_code=404, detail=f\"Knowledge base '{kb_name}' not found\")\n    return kb_entry\n\n\ndef _assert_not_connected_kb(kb_name: str, kb_entry: dict) -> None:\n    \"\"\"Block writes to connected KBs (Obsidian vaults, linked indexes).\n\n    They are read-only pointers to the user's external files — we never write\n    into or re-index them.\n    \"\"\"","sourceCodeStart":751,"sourceCodeEnd":787,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/api/routers/knowledge.py#L751-L787","documentation":"Raised by _resolve_registered_kb_name when the request asks for the default KB (by alias such as 'default') but the manager has no default knowledge base configured, or the configured default no longer exists in kb_names. HTTP 404.","triggerScenarios":"Any endpoint accepting a KB name where the client passes a default alias (e.g. 'default') while manager.get_default() returns None or an unregistered name.","commonSituations":"Fresh install before any KB was created or marked default; default KB deleted and default pointer not cleared; config file edited by hand leaving a stale default entry.","solutions":["Create a knowledge base first, then mark one as the default in settings","If a KB already exists, explicitly pass its real name instead of the alias","Repair the manager config so get_default() returns a registered KB name"],"exampleFix":"# before\nkb = 'default'\n# after\nkb = 'my-kb'  # or configure a default KB in settings","handlingStrategy":"validation","validationCode":"kbs = client.get('/api/v1/knowledge').json()['knowledge_bases']\ndefault = manager_default(kbs)\nif default is None: create_and_set_default_kb()","typeGuard":"def has_default_kb(kbs) -> bool:\n    return any(kb.get('is_default') for kb in kbs)","tryCatchPattern":null,"preventionTips":["Pass explicit KB names instead of the 'default' alias","Ensure a default KB exists during onboarding","Clear the default pointer when deleting the default KB"],"tags":["knowledge-base","default","not-found","http-404"],"backgroundTag":"resource-not-found","analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}