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
- Configure the embedding profile in Settings (UI) or data/user/settings/*.json so an embedding model is set
- Verify required env vars/API keys for the embedding provider are visible to the server process
- Confirm signature_from_embedding_config() no longer returns None (log it) before retrying re-index
- 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
- Complete embedding setup during first-run onboarding
- Block the Re-index button in the UI until an embedding profile exists
- Health-check signature_from_embedding_config() at server startup and warn
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
- Knowledge base '{resolved_name}' is not in an error state. U
- PageIndex OSS preflight failed: {details}
- GraphRAG preflight failed: {failure_details}
- Knowledge base '{kb_name}' is connected to an external resou
- Knowledge base '{kb_name}' uses legacy index format and need
AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27).
Data as JSON: /api/errors/fd1b1af21e814786.
Report an issue: GitHub.