{"record":{"id":"3a8ea8e14a400b7f","repo":"run-llama/llama_index","slug":"cannot-specify-both-similarity-fn-and-similarity-m","errorCode":null,"errorMessage":"Cannot specify both similarity_fn and similarity_mode","messagePattern":"Cannot specify both similarity_fn and similarity_mode","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"llama-index-core/llama_index/core/evaluation/semantic_similarity.py","lineNumber":45,"sourceCode":"            Defaults to 0.8.\n\n    \"\"\"\n\n    def __init__(\n        self,\n        embed_model: Optional[BaseEmbedding] = None,\n        similarity_fn: Optional[Callable[..., float]] = None,\n        similarity_mode: Optional[SimilarityMode] = None,\n        similarity_threshold: float = 0.8,\n    ) -> None:\n        self._embed_model = embed_model or Settings.embed_model\n\n        if similarity_fn is None:\n            similarity_mode = similarity_mode or SimilarityMode.DEFAULT\n            self._similarity_fn = lambda x, y: similarity(x, y, mode=similarity_mode)\n        else:\n            if similarity_mode is not None:\n                raise ValueError(\n                    \"Cannot specify both similarity_fn and similarity_mode\"\n                )\n            self._similarity_fn = similarity_fn\n\n        self._similarity_threshold = similarity_threshold\n\n    def _get_prompts(self) -> PromptDictType:\n        \"\"\"Get prompts.\"\"\"\n        return {}\n\n    def _update_prompts(self, prompts: PromptDictType) -> None:\n        \"\"\"Update prompts.\"\"\"\n\n    async def aevaluate(\n        self,\n        query: Optional[str] = None,\n        response: Optional[str] = None,\n        contexts: Optional[Sequence[str]] = None,","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/run-llama/llama_index/blob/afd0fef371831f9bda13e5af7167cf4e981278ab/llama-index-core/llama_index/core/evaluation/semantic_similarity.py#L27-L63","documentation":"Raised by SemanticSimilarityEvaluator.__init__ when the caller passes both a custom similarity_fn (a callable over two embeddings) and a similarity_mode (an enum selecting a built-in mode). The two parameters are alternative ways to configure scoring — when similarity_fn is given, similarity_mode is ignored-by-design, so supplying both is rejected as an ambiguous configuration.","triggerScenarios":"Constructing SemanticSimilarityEvaluator(similarity_fn=my_cosine, similarity_mode=SimilarityMode.COSINE) or any call that sets both kwargs while tuning how response/reference embeddings are compared.","commonSituations":"Copy-pasting an evaluator config that used similarity_mode and then adding a custom fn (or vice versa); upgrading code that previously tolerated both because the mode was silently ignored; LLM-generated configs setting every available option.","solutions":["Pass only similarity_fn if you have a custom callable: SemanticSimilarityEvaluator(similarity_fn=cos_sim_fn).","Or pass only similarity_mode to use the built-in similarity() helper: SemanticSimilarityEvaluator(similarity_mode=SimilarityMode.DEFAULT).","Strip the redundant key from config dicts before constructing the evaluator."],"exampleFix":"# before\nevaluator = SemanticSimilarityEvaluator(\n    similarity_fn=cosine_sim,\n    similarity_mode=SimilarityMode.COSINE,  # both set -> ValueError\n)\n\n# after\nevaluator = SemanticSimilarityEvaluator(similarity_fn=cosine_sim)","handlingStrategy":"validation","validationCode":"if similarity_fn is not None and similarity_mode is not None:\n    raise ValueError(\"Configure similarity_fn OR similarity_mode, not both\")\nevaluator = SemanticSimilarityEvaluator(\n    similarity_fn=similarity_fn, similarity_mode=similarity_mode\n)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Model evaluator options as mutually exclusive fields in your config schema.","Strip None/default keys from config dicts before constructing evaluators.","Document which parameters are alternatives in shared evaluation utilities."],"tags":["configuration","evaluation","mutually-exclusive-args","validation"],"backgroundTag":null,"analyzedSha":"afd0fef371831f9bda13e5af7167cf4e981278ab","analyzedAt":"2026-08-15T05:42:58.429Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}