HKUDS/DeepTutor · error · HTTPException

No default knowledge base is configured

Error message

No default knowledge base is configured

What it means

HTTP 404 from _resolve_default_or_name: the caller asked for the default KB (name matched DEFAULT_KB_ALIASES like 'default'), but manager.get_default() is empty or points to a KB that no longer exists.

Source

Thrown at deeptutor/multi_user/knowledge_access.py:163

            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()))


def list_visible_knowledge_bases() -> list[dict[str, Any]]:
    user = get_current_user()
    manager = current_kb_manager()
    items: list[dict[str, Any]] = []
    for name in manager.list_knowledge_bases():
        items.append(
            {
                "id": f"admin:kb:{name}" if user.is_admin else f"user:kb:{name}",
                "name": name,
                "source": "admin" if user.is_admin else "user",
                "assigned": False,

View on GitHub (pinned to 3e82f13042)

Solutions

  1. Create a KB and set it as the default via the KnowledgeBaseManager
  2. If the default was deleted, reset the default to an existing KB
  3. Pass an explicit KB name instead of relying on the alias

Example fix

// before
kb = resolve_kb("default")  # 404: no default configured

// after
manager = KnowledgeBaseManager(base_dir=user_kb_dir)
if not manager.get_default():
    manager.set_default(manager.list_knowledge_bases()[0])
kb = resolve_kb("default")
Defensive patterns

Strategy: validation

Validate before calling

default_kb = manager.get_default()
if not default_kb or default_kb not in manager.list_knowledge_bases():
    configure_default(manager)  # set one or pass explicit name
kb = resolve_kb("default")

Type guard

def has_valid_default(manager: KnowledgeBaseManager) -> bool:
    d = manager.get_default()
    return bool(d) and d in manager.list_knowledge_bases()

Try / catch

try:
    resolve_kb("default")
except HTTPException as e:
    if e.status_code == 404:
        kb = resolve_kb(next(iter(manager.list_knowledge_bases())))  # fallback

Prevention

When it happens

Trigger: resolve_kb('default') (or another alias) when no default KB has been configured in the manager, or the configured default was deleted so it's absent from manager.list_knowledge_bases().

Common situations: Fresh installs where a default KB was never set; default KB deleted but the setting not cleared; shared profiles referencing a stale default.

Related errors


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