{"record":{"id":"9093d5e7c78d50b1","repo":"vxcontrol/pentagi","slug":"knowledge-embed-query-w","errorCode":null,"errorMessage":"knowledge: embed query: %w","messagePattern":"knowledge: embed query: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/pkg/database/knowledge/knowledge.go","lineNumber":370,"sourceCode":"//     the Manual flag that cannot be expressed as static SQL predicates.\nfunc (ks *knowledgeStore) doSearch(ctx context.Context, userID int64, query string, filter *model.KnowledgeFilter, limit int) ([]*model.KnowledgeDocumentWithScore, error) {\n\tif err := ks.requireEmbedder(); err != nil {\n\t\treturn nil, err\n\t}\n\tif limit <= 0 {\n\t\tlimit = defaultSearchLimit\n\t}\n\n\t// Truncate query to embedding size limit to avoid token limit errors.\n\t// The search quality is preserved since the most relevant context is at the start.\n\tif len(query) > ks.maxEmbeddingBytes {\n\t\tquery = query[:ks.maxEmbeddingBytes]\n\t}\n\n\t// Compute query embedding.\n\tvecs, err := ks.embedder.EmbedDocuments(ctx, []string{query})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"knowledge: embed query: %w\", err)\n\t}\n\tif len(vecs) == 0 {\n\t\treturn nil, fmt.Errorf(\"knowledge: embedder returned no vectors for query\")\n\t}\n\n\tvecLiteral := formatVector(vecs[0])\n\t// maxDist is the cosine-distance upper bound (exclusive):\n\t// distance = 1 - similarity, so maxDist = 1 - threshold.\n\tmaxDist := float64(1.0 - defaultSearchThreshold)\n\n\ttype searchRow struct {\n\t\tID        string\n\t\tDocument  string\n\t\tCmetadata sql.NullString\n\t\tScore     float64\n\t}\n\n\tvar rawRows []searchRow","sourceCodeStart":352,"sourceCodeEnd":388,"githubUrl":"https://github.com/vxcontrol/pentagi/blob/ea665308baaff015b226f308438a68d929d0f29b/backend/pkg/database/knowledge/knowledge.go#L352-L388","documentation":"doSearch computes a query embedding via the configured Embedder before running the pgvector similarity query. Any failure from embedder.EmbedDocuments (nil embedder, provider misconfigured, API/network failure) is wrapped as 'knowledge: embed query'.","triggerScenarios":"SearchDocuments or SearchUserDocuments called when no embedding provider is configured (embedder nil), the provider API key is invalid/expired, or the embedding endpoint is unreachable/times out.","commonSituations":"Deployment without embedding env vars so the store was built with a nil embedder; OpenAI/Ollama endpoint down or wrong URL; rate limit or 401 from the embedding provider.","solutions":["Check the wrapped cause: 'embedder is not configured' means set the embedding provider env vars and restart.","Validate the embedding provider API key and server URL; test with a direct curl to the embeddings endpoint.","Verify network/DNS from the backend container to the embedding provider (ollama hostname, proxy settings).","Retry with backoff if the cause is a transient 429/5xx from the provider."],"exampleFix":"// before\nvecs, err := ks.embedder.EmbedDocuments(ctx, []string{query})\n// after\nif ks.embedder == nil {\n    return nil, fmt.Errorf(\"knowledge: embedding provider not configured\")\n}\nvecs, err := ks.embedder.EmbedDocuments(ctx, []string{query})","handlingStrategy":"validation","validationCode":"if embedder == nil {\n    return errors.New(\"embedding provider not configured; set embedding env vars\")\n}\nif strings.TrimSpace(query) == \"\" {\n    return errors.New(\"query must not be empty\")\n}","typeGuard":"func isEmbedderConfigErr(err error) bool {\n    return strings.Contains(err.Error(), \"not configured\")\n}","tryCatchPattern":"results, err := store.SearchDocuments(ctx, query, filter, limit)\nif err != nil {\n    var retryable bool\n    if errors.As(err, &httpRateLimitErr{}) {\n        retryable = true\n    }\n    if retryable {\n        // retry with exponential backoff\n    }\n    return err\n}","preventionTips":["Fail fast at startup if the embedding provider is required but not configured.","Monitor provider API key validity and quota with a periodic health check.","Set explicit timeouts on embedding HTTP calls.","Cache query embeddings for repeated searches."],"tags":["embeddings","network","configuration"],"backgroundTag":"embedding-provider-failure","analyzedSha":"ea665308baaff015b226f308438a68d929d0f29b","analyzedAt":"2026-09-01T14:16:31.421Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}