vxcontrol/pentagi · error
knowledge: embedding provider is not available
Error message
knowledge: embedding provider is not available
What it means
requireEmbedder guards operations that must vectorize text (doSearch, CreateDocument, doUpdate). It fails when ks.embedder is nil OR embedder.IsAvailable() returns false — i.e. an embedder object exists (or is absent) but its backing provider is unreachable/unconfigured at call time. Unlike requireStore, this can fire even when a store exists, when the embedding provider degrades.
Source
Thrown at backend/pkg/database/knowledge/knowledge.go:246
}
if filter.Manual != nil && doc.Manual != *filter.Manual {
continue
}
result = append(result, doc)
}
return result
}
func (ks *knowledgeStore) requireStore() error {
if ks.store == nil {
return fmt.Errorf("knowledge: embedding provider is not configured")
}
return nil
}
func (ks *knowledgeStore) requireEmbedder() error {
if ks.embedder == nil || !ks.embedder.IsAvailable() {
return fmt.Errorf("knowledge: embedding provider is not available")
}
return nil
}
// ---- ListDocuments (admin) --------------------------------------------------
func (ks *knowledgeStore) ListDocuments(ctx context.Context, filter *model.KnowledgeFilter, withContent bool) ([]*model.KnowledgeDocument, error) {
var docs []*model.KnowledgeDocument
if filter != nil && filter.FlowID != nil {
rows, err := ks.db.ListFlowKnowledgeDocuments(ctx, nsOf(strconv.FormatInt(*filter.FlowID, 10)))
if err != nil {
return nil, fmt.Errorf("knowledge: list by flow: %w", err)
}
for _, r := range rows {
docs = append(docs, rowToModel(r.ID, r.Document, nullStr(r.Cmetadata), withContent))
}
} else {View on GitHub (pinned to ea665308ba)
Solutions
- Check the embedding provider's status in the Settings UI and re-authenticate or fix its API key.
- Verify the embedding endpoint is reachable (curl the Ollama/provider URL from inside the container).
- Switch to a different available embedding provider.
- Add a startup/periodic availability check and surface the degraded state in the UI before users trigger writes.
Example fix
// before
if err := ks.requireEmbedder(); err != nil {
return fmt.Errorf("create doc: %w", err)
}
// after
if err := ks.requireEmbedder(); err != nil {
logger.Warn("embedding provider unavailable, queuing document")
return ks.enqueuePendingDocument(doc) // fallback instead of hard failure
} Defensive patterns
Strategy: fallback
Validate before calling
if !embedder.IsAvailable() {
// provider down or unauthenticated — degrade before calling write/search paths
return ErrEmbeddingUnavailable
} Type guard
func isEmbedderUnavailable(err error) bool {
return err != nil && strings.Contains(err.Error(), "embedding provider is not available")
} Try / catch
if err := ks.requireEmbedder(); err != nil {
switch {
case isEmbedderUnavailable(err):
return queueForLater(doc) // retry when provider recovers
default:
return fmt.Errorf("knowledge write: %w", err)
}
} Prevention
- Monitor embedding provider health (IsAvailable) and alert on degradation.
- Configure at least one backup embedding provider.
- Self-hosted embedders (Ollama): add container health checks and auto-restart.
- Queue knowledge writes during provider outages instead of dropping them.
When it happens
Trigger: Calling CreateDocument, search (doSearch), or doUpdate when the embedding provider's IsAvailable() is false: missing API key on the selected provider, provider health check failing, Ollama endpoint down, or no embedder was injected at construction.
Common situations: Embedding provider credentials rotated/expired; self-hosted embedding server (Ollama) stopped; user selected a provider without embedding support; network egress blocked from the container to the provider.
Related errors
- knowledge: embedding provider is not configured
- bearer scheme must be used
- token can't be empty
- token validation disabled with default salt
- token is invalid
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/9d19fa627235552a.
Report an issue: GitHub.