{"record":{"id":"9e1bf0df2373aab4","repo":"HKUDS/DeepTutor","slug":"knowledge-base-requested-not-found","errorCode":null,"errorMessage":"Knowledge base '{requested}' not found","messagePattern":"Knowledge base '(.+?)' not found","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"deeptutor/api/routers/knowledge.py","lineNumber":771,"sourceCode":"                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    \"\"\"\n    if is_connected_kb(kb_entry):\n        raise HTTPException(","sourceCodeStart":753,"sourceCodeEnd":789,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/api/routers/knowledge.py#L753-L789","documentation":"Raised by _resolve_registered_kb_name when a requested KB name is not among the registered knowledge bases and is not a default alias. HTTP 404; distinct from 154 in that a concrete name was given and simply does not exist.","triggerScenarios":"Calling KB-scoped endpoints with a typo'd or deleted KB name, or a name registered in a different settings profile/config than the one the server loaded.","commonSituations":"KB deleted from another session; case-mismatched names; server restarted against a different data directory so the config no longer lists the KB.","solutions":["List KBs via the API (GET knowledge bases) and copy the exact name","Recreate the KB if it was deleted","Verify the server is running with the expected data directory/settings profile"],"exampleFix":"# before\nkb = 'MyKB '  # trailing space / typo\n# after\nkb = 'my-kb'","handlingStrategy":"validation","validationCode":"names = {kb['name'] for kb in client.get('/api/v1/knowledge').json()['knowledge_bases']}\nassert kb_name in names, f'unknown KB {kb_name}'","typeGuard":"def kb_exists(name: str, kb_list) -> bool:\n    return name in {kb['name'] for kb in kb_list}","tryCatchPattern":"try: use_kb(name)\nexcept HTTPError as e:\n    if e.response.status_code == 404: refresh_kb_cache(); reselect_kb()","preventionTips":["Refresh the KB list before acting on cached names","Copy names exactly (case-sensitive) from the API","Handle 404 by re-fetching rather than blind retry"],"tags":["knowledge-base","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"}