HKUDS/DeepTutor · error · HTTPException

Knowledge base '{name}' not found

Error message

Knowledge base '{name}' not found

What it means

HTTP 404 from resolve_kb: the requested KB name matches neither the user's own knowledge bases nor any admin-assigned KB names. It is the terminal fall-through after both lookup branches fail.

Source

Thrown at deeptutor/multi_user/knowledge_access.py:151

            assigned=False,
            read_only=False,
        )

    if name in assigned_names:
        if require_write:
            raise HTTPException(
                status_code=403, detail="Assigned admin knowledge bases are read-only"
            )
        return KnowledgeResource(
            id=f"admin:kb:{name}",
            name=name,
            base_dir=admin_kb_base_dir(),
            source="admin",
            assigned=True,
            read_only=True,
        )

    raise HTTPException(status_code=404, detail=f"Knowledge base '{name}' not found")


def _resolve_default_or_name(manager: KnowledgeBaseManager, name: str) -> str:
    requested = str(name or "").strip()
    names = manager.list_knowledge_bases()
    if requested and requested in names:
        return requested
    if requested.lower() in DEFAULT_KB_ALIASES:
        default_kb = manager.get_default()
        if default_kb and default_kb in names:
            return default_kb
        raise HTTPException(status_code=404, detail="No default knowledge base is configured")
    raise HTTPException(status_code=404, detail=f"Knowledge base '{requested}' not found")


def manager_for_resource(resource: KnowledgeResource) -> KnowledgeBaseManager:
    return _manager_for(str(resource.base_dir.resolve()))

View on GitHub (pinned to 3e82f13042)

Solutions

  1. List the user's available KBs (list_knowledge_bases) and use an exact name from the result
  2. Check spelling/whitespace/case of the KB name
  3. Verify the KB still exists and is granted to the user by an admin

Example fix

// before
kb = resolve_kb("mykb")  # 404: actual name is 'my-kb'

// after
available = list_knowledge_bases()
names = [k.name for k in available.knowledge_bases]
kb = resolve_kb(next(n for n in names if n.lower() == "mykb"))
Defensive patterns

Strategy: validation

Validate before calling

from deeptutor.multi_user.knowledge_access import list_knowledge_bases
names = [kb.name for kb in list_knowledge_bases().knowledge_bases]
if name not in names:
    raise UnknownKB(name)

Type guard

def kb_exists(name: str) -> bool:
    return name in [kb.name for kb in list_knowledge_bases().knowledge_bases]

Try / catch

try:
    resolve_kb(name)
except HTTPException as e:
    if e.status_code == 404:
        refresh_kb_list()  # resync UI and prompt re-selection

Prevention

When it happens

Trigger: resolve_kb('my-kb') where 'my-kb' is not in the user's KB list and not in assigned_names; typo in kb name; KB deleted by another admin; API call without the right grants.

Common situations: Typos or stale references after a KB was renamed/deleted; users hitting a KB they were never granted; frontend caching an old KB list.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27). Data as JSON: /api/errors/86cf65563dae3a7b. Report an issue: GitHub.