Tencent/WeKnora · error

failed to get embedding model: %w

Error message

failed to get embedding model: %w

What it means

CreateFAQEntry wraps failures from modelService.GetEmbeddingModel, which resolves the embedding model configured on the knowledge base (kb.EmbeddingModelID). The FAQ entry cannot be indexed without an embedding model, so creation aborts. The wrapped cause distinguishes 'model not found' from registry/config lookup errors.

Source

Thrown at internal/application/service/knowledge_faq.go:192

		return nil, err
	}

	// 确保FAQ Knowledge存在
	faqKnowledge, err := s.ensureFAQKnowledge(ctx, tenantID, kb)
	if err != nil {
		return nil, fmt.Errorf("failed to ensure FAQ knowledge: %w", err)
	}

	// 获取索引模式
	indexMode := types.FAQIndexModeQuestionOnly
	if kb.FAQConfig != nil && kb.FAQConfig.IndexMode != "" {
		indexMode = kb.FAQConfig.IndexMode
	}

	// 获取embedding模型
	embeddingModel, err := s.modelService.GetEmbeddingModel(ctx, kb.EmbeddingModelID)
	if err != nil {
		return nil, fmt.Errorf("failed to get embedding model: %w", err)
	}

	// 创建chunk
	isEnabled := true
	if payload.IsEnabled != nil {
		isEnabled = *payload.IsEnabled
	}
	// 默认可推荐
	flags := types.ChunkFlagRecommended
	if payload.IsRecommended != nil && !*payload.IsRecommended {
		flags = 0
	}

	chunk := &types.Chunk{
		ID:              uuid.New().String(),
		TenantID:        tenantID,
		KnowledgeID:     faqKnowledge.ID,
		KnowledgeBaseID: kb.ID,

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Check kb.EmbeddingModelID and confirm the model exists and is enabled for the tenant in the model service configuration.
  2. Re-assign a valid embedding model to the knowledge base before creating FAQ entries.
  3. If the model registry is a remote service, verify it is reachable and the API key/config is correct.
  4. Audit KBs created by import/migration for dangling EmbeddingModelID values.

Example fix

// before: KB references a removed model
// kb.EmbeddingModelID = "emb-old-model"
// after: rebind a valid embedding model
kb, _ := kbRepo.GetByID(ctx, kbID)
models, _ := modelService.ListEmbeddingModels(ctx)
kb.EmbeddingModelID = models[0].ID
kbRepo.Update(ctx, kb)
Defensive patterns

Strategy: validation

Validate before calling

kb, err := svc.GetKnowledgeBase(ctx, kbID)
if err == nil {
	if _, mErr := svc.GetEmbeddingModel(ctx, kb.EmbeddingModelID); mErr != nil {
		return fmt.Errorf("KB %s has no resolvable embedding model: %w", kbID, mErr)
	}
}

Try / catch

entry, err := svc.CreateFAQEntry(ctx, kbID, payload)
var nf *NotFoundError
if errors.As(err, &nf) && strings.Contains(err.Error(), "embedding model") {
	return nil, fmt.Errorf("rebind an embedding model to KB %s before adding FAQ entries", kbID)
}

Prevention

When it happens

Trigger: Calling CreateFAQEntry on a knowledge base whose EmbeddingModelID points to a deleted, disabled, or nonexistent model, or when the model service itself errors (registry unavailable, tenant mismatch on the model).

Common situations: Admin deleted or re-configured the embedding model after the KB was created; environment model registration missing after deployment/migration; wrong tenant context so the model ID doesn't resolve; KB created by import referencing a model that never existed locally.

Related errors


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/422f5161d92728b9. Report an issue: GitHub.