{"record":{"id":"66a2f2b2560dda58","repo":"Tencent/WeKnora","slug":"failed-to-get-embedding-model-w-66a2f2","errorCode":null,"errorMessage":"failed to get embedding model: %w","messagePattern":"failed to get embedding model: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/application/service/knowledge_faq_import.go","lineNumber":1383,"sourceCode":"\t\t\tbuf := make([]byte, 8192)\n\t\t\tn := runtime.Stack(buf, false)\n\t\t\tstack := string(buf[:n])\n\t\t\tlogger.Errorf(ctx, \"FAQ import task %s panicked: %v\\n%s\", taskID, r, stack)\n\t\t\terr = fmt.Errorf(\"panic during FAQ import: %v\", r)\n\t\t}\n\t}()\n\n\tkb, err = s.validateFAQKnowledgeBase(ctx, kbID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tkb.EnsureDefaults()\n\n\t// 获取embedding模型，用于后续清理索引\n\tembeddingModel, err = s.modelService.GetEmbeddingModel(ctx, kb.EmbeddingModelID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to get embedding model: %w\", err)\n\t}\n\tfaqKnowledge, err := s.ensureFAQKnowledge(ctx, tenantID, kb)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// 获取索引模式\n\tindexMode := types.FAQIndexModeQuestionOnly\n\tif kb.FAQConfig != nil && kb.FAQConfig.IndexMode != \"\" {\n\t\tindexMode = kb.FAQConfig.IndexMode\n\t}\n\n\t// 增量更新逻辑：计算需要处理的条目\n\tvar entriesToProcess []types.FAQEntryPayload\n\tvar chunksToDelete []*types.Chunk\n\tvar skippedCount int\n\n\tif payload.Mode == types.FAQBatchModeReplace {","sourceCodeStart":1365,"sourceCodeEnd":1401,"githubUrl":"https://github.com/Tencent/WeKnora/blob/988cbb03305e055d8ebb7d46d9ac6cc0803cd074/internal/application/service/knowledge_faq_import.go#L1365-L1401","documentation":"executeFAQImport wraps errors from modelService.GetEmbeddingModel when fetching the embedding model configured on the FAQ knowledge base; the model is needed for later index cleanup. If the model config is missing/broken or the model service errors, the import aborts before touching chunks.","triggerScenarios":"kb.EmbeddingModelID references a model that no longer exists, belongs to another tenant, or the model service fails (DB error / service unavailable) at import time.","commonSituations":"Knowledge base created before the embedding model was deleted or re-created with a new ID; cross-environment DB restore (staging data pointing at prod model IDs); model service registry misconfiguration.","solutions":["Verify kb.EmbeddingModelID points to an existing, valid embedding model for the tenant","Re-assign a valid embedding model on the knowledge base and retry the import","Check model service health/configuration and its backing store","Restore or recreate the missing model record if it was deleted"],"exampleFix":"// before\nembeddingModel, err = s.modelService.GetEmbeddingModel(ctx, kb.EmbeddingModelID)\nif err != nil {\n\treturn fmt.Errorf(\"failed to get embedding model: %w\", err)\n}\n// after\nembeddingModel, err = s.modelService.GetEmbeddingModel(ctx, kb.EmbeddingModelID)\nif err != nil {\n\treturn fmt.Errorf(\"failed to get embedding model %s: %w\", kb.EmbeddingModelID, err)\n}","handlingStrategy":"validation","validationCode":"// Before creating/using a knowledge base, verify its embedding model resolves\nm, err := modelService.GetEmbeddingModel(ctx, kb.EmbeddingModelID)\nif err != nil || m == nil {\n\treturn fmt.Errorf(\"knowledge base %s references invalid embedding model %q\", kb.ID, kb.EmbeddingModelID)\n}","typeGuard":"func (kb *types.KnowledgeBase) HasEmbeddingModel() bool {\n\treturn kb != nil && kb.EmbeddingModelID != \"\"\n}","tryCatchPattern":"err := ProcessFAQImport(ctx, taskID, kbID, payload)\nif err != nil && strings.Contains(err.Error(), \"failed to get embedding model\") {\n\t// configuration problem: do not retry, prompt admin to reassign the model\n\tmarkTaskFailedWithHint(taskID, \"reassign a valid embedding model to the knowledge base\")\n\treturn err\n}\nreturn err","preventionTips":["Validate embeddingModelID against the model service at knowledge-base creation","Prevent deleting embedding models still referenced by knowledge bases (FK or soft-delete)","Keep model IDs consistent across environments; avoid copying DB dumps between envs","Alert on GetEmbeddingModel not-found errors — they indicate config drift"],"tags":["configuration","embedding-model","faq-import"],"backgroundTag":"embedding-model-not-found","analyzedSha":"988cbb03305e055d8ebb7d46d9ac6cc0803cd074","analyzedAt":"2026-09-02T14:41:08.344Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}