HKUDS/DeepTutor · error · HTTPException

No embedding model is configured. Set up the embedding profi

Error message

No embedding model is configured. Set up the embedding profile in Settings before re-indexing.

What it means

Thrown (HTTP 409) by the re-index endpoint when signature_from_embedding_config() returns None, meaning no embedding model/profile is configured in runtime settings. The API refuses to rebuild an index because it cannot compute an index-version signature without knowing which embeddings to use.

Source

Thrown at deeptutor/api/routers/knowledge.py:2948

        kb_entry = _load_kb_entry_or_404(manager, kb_name)
        _assert_not_connected_kb(kb_name, kb_entry)
        force_reindex = str(kb_entry.get("status") or "").lower() == "error"
        kb_provider = _validate_registered_provider(
            kb_entry.get("rag_provider") or DEFAULT_PROVIDER
        )
        _assert_provider_ready(kb_provider)

        kb_dir = kb_base_dir / kb_name
        signature_hash = kb_provider
        if provider_uses_embedding_versions(kb_provider):
            from deeptutor.services.rag.embedding_signature import signature_from_embedding_config
            from deeptutor.services.rag.index_versioning import (
                find_matching_version,
            )

            signature = signature_from_embedding_config()
            if signature is None:
                raise HTTPException(
                    status_code=409,
                    detail=(
                        "No embedding model is configured. Set up the embedding "
                        "profile in Settings before re-indexing."
                    ),
                )

            signature_hash = signature.hash()
            matching_version = find_matching_version(kb_dir, signature)
            matching_valid = _matching_index_is_valid(kb_name, matching_version)
            if (
                matching_version
                and matching_version.get("layout") == "flat"
                and matching_valid
                and not force_reindex
            ):
                return {
                    "message": (

View on GitHub (pinned to 3e82f13042)

Solutions

  1. Configure the embedding profile in Settings (UI) or data/user/settings/*.json so an embedding model is set
  2. Verify required env vars/API keys for the embedding provider are visible to the server process
  3. Confirm signature_from_embedding_config() no longer returns None (log it) before retrying re-index
  4. Re-run the re-index request after configuration is saved

Example fix

// before
POST /api/v1/knowledge/my-kb/reindex  -> 409 No embedding model is configured
// after
# settings: embedding.profile = {provider: "openai", model: "text-embedding-3-small", api_key: set}
POST /api/v1/knowledge/my-kb/reindex  -> 202
Defensive patterns

Strategy: validation

Validate before calling

resp = client.get('/api/v1/settings/embedding-profile')
if not resp.json().get('model'):
    raise RuntimeError('Configure embedding profile before re-indexing')

Try / catch

try:
    client.post(f'/api/v1/knowledge/{kb}/reindex')
except HTTPError as e:
    if e.response.status_code == 409 and 'embedding model' in e.response.text:
        configure_embedding_profile(); retry once
    else: raise

Prevention

When it happens

Trigger: POST to a KB re-index / recovery endpoint (e.g. /api/knowledge/{kb}/reindex) when data/user/settings has no embedding profile configured, or the configured embedding provider env keys (API key/model) are missing so the config resolves to None.

Common situations: Fresh install before first-run setup; switching embedding providers and clearing the old profile; settings JSON deleted or reset; environment variables for the embedding provider not set in the process running the API server.

Related errors


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