{"record":{"id":"98180e49b4ad7772","repo":"run-llama/llama_index","slug":"please-install-scikit-learn-to-use-this-feature","errorCode":null,"errorMessage":"Please install scikit-learn to use this feature.","messagePattern":"Please install scikit-learn to use this feature\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"llama-index-core/llama_index/core/indices/query/embedding_utils.py","lineNumber":63,"sourceCode":"    query_embedding: List[float],\n    embeddings: List[List[float]],\n    similarity_top_k: Optional[int] = None,\n    embedding_ids: Optional[List] = None,\n    query_mode: VectorStoreQueryMode = VectorStoreQueryMode.SVM,\n) -> Tuple[List[float], List]:\n    \"\"\"\n    Get top embeddings by fitting a learner against query.\n\n    Inspired by Karpathy's SVM demo:\n    https://github.com/karpathy/randomfun/blob/master/knn_vs_svm.ipynb\n\n    Can fit SVM, linear regression, and more.\n\n    \"\"\"\n    try:\n        from sklearn import linear_model, svm\n    except ImportError:\n        raise ImportError(\"Please install scikit-learn to use this feature.\")\n\n    if embedding_ids is None:\n        embedding_ids = list(range(len(embeddings)))\n    query_embedding_np = np.array(query_embedding)\n    embeddings_np = np.array(embeddings)\n    # create dataset\n    dataset_len = len(embeddings) + 1\n    dataset = np.concatenate([query_embedding_np[None, ...], embeddings_np])\n    y = np.zeros(dataset_len)\n    y[0] = 1\n\n    if query_mode == VectorStoreQueryMode.SVM:\n        # train our SVM\n        # TODO: make params configurable\n        clf = svm.LinearSVC(\n            class_weight=\"balanced\", verbose=False, max_iter=10000, tol=1e-6, C=0.1\n        )\n    elif query_mode == VectorStoreQueryMode.LINEAR_REGRESSION:","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/run-llama/llama_index/blob/afd0fef371831f9bda13e5af7167cf4e981278ab/llama-index-core/llama_index/core/indices/query/embedding_utils.py#L45-L81","documentation":"get_top_similar_embeddings_by_query (used when VectorStoreQueryMode is SVM / LINEAR_REGRESSION / LOGISTIC_REGRESSION) needs scikit-learn to fit the classifier. The ImportError fires when sklearn is not installed in the environment.","triggerScenarios":"Constructing a vector retriever or query engine with query_mode=VectorStoreQueryMode.SVM (or the regression modes) — llama-index-core does not ship sklearn as a dependency, so the import at call time fails.","commonSituations":"Following RAG-fusion / SVM-retrieval examples on a minimal pip install llama-index; Docker images or CI that prune 'extra' dependencies; adding SVM mode to an existing deployment without updating requirements.","solutions":["pip install scikit-learn (or add scikit-learn to requirements.txt/pyproject)","Or switch query_mode to VectorStoreQueryMode.DEFAULT, which uses cosine similarity and needs no sklearn","Pin a compatible numpy version if installing sklearn breaks the existing numpy pin"],"exampleFix":"# before\nretriever = index.as_retriever(vector_store_query_mode=VectorStoreQueryMode.SVM)\n\n# after\npip install scikit-learn\n# (code unchanged)","handlingStrategy":"try-catch","validationCode":"try:\n    import sklearn  # noqa: F401\n    HAS_SKLEARN = True\nexcept ImportError:\n    HAS_SKLEARN = False\n\nmode = VectorStoreQueryMode.SVM if HAS_SKLEARN else VectorStoreQueryMode.DEFAULT","typeGuard":"def can_use_svm() -> bool:\n    try:\n        import sklearn  # noqa: F401\n        return True\n    except ImportError:\n        return False","tryCatchPattern":"try:\n    results = retriever.retrieve(query_str)\nexcept ImportError as e:\n    if 'scikit-learn' in str(e):\n        retriever = index.as_retriever()  # DEFAULT mode, no sklearn\n        results = retriever.retrieve(query_str)\n    else:\n        raise","preventionTips":["Declare scikit-learn in your dependency file if you use SVM/regression query modes","Feature-flag experimental modes behind an import check so missing deps degrade gracefully"],"tags":["llama-index","missing-dependency","sklearn","svm","retriever"],"backgroundTag":null,"analyzedSha":"afd0fef371831f9bda13e5af7167cf4e981278ab","analyzedAt":"2026-08-15T05:42:58.429Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}