{"record":{"id":"396f855b332d2547","repo":"microsoft/graphrag","slug":"each-item-in-modelconfig-mock-responses-must-be-a-396f85","errorCode":null,"errorMessage":"Each item in ModelConfig.mock_responses must be a float.","messagePattern":"Each item in ModelConfig\\.mock_responses must be a float\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/graphrag-llm/graphrag_llm/embedding/mock_llm_embedding.py","lineNumber":52,"sourceCode":"        self,\n        *,\n        model_config: \"ModelConfig\",\n        tokenizer: \"Tokenizer\",\n        metrics_store: \"MetricsStore\",\n        **kwargs: Any,\n    ):\n        \"\"\"Initialize MockLLMEmbedding.\"\"\"\n        self._tokenizer = tokenizer\n        self._metrics_store = metrics_store\n\n        mock_responses = model_config.mock_responses\n        if not isinstance(mock_responses, list) or len(mock_responses) == 0:\n            msg = \"ModelConfig.mock_responses must be a non-empty list of embedding responses.\"\n            raise ValueError(msg)\n\n        if not all(isinstance(resp, float) for resp in mock_responses):\n            msg = \"Each item in ModelConfig.mock_responses must be a float.\"\n            raise ValueError(msg)\n\n        self._mock_responses = mock_responses  # type: ignore\n\n    def embedding(\n        self, /, **kwargs: Unpack[\"LLMEmbeddingArgs\"]\n    ) -> \"LLMEmbeddingResponse\":\n        \"\"\"Sync embedding method.\"\"\"\n        input = kwargs.get(\"input\")\n        response = create_embedding_response(\n            self._mock_responses, batch_size=len(input)\n        )\n        self._mock_index += 1\n        return response\n\n    async def embedding_async(\n        self, /, **kwargs: Unpack[\"LLMEmbeddingArgs\"]\n    ) -> \"LLMEmbeddingResponse\":\n        \"\"\"Async embedding method.\"\"\"","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/microsoft/graphrag/blob/f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704/packages/graphrag-llm/graphrag_llm/embedding/mock_llm_embedding.py#L34-L70","documentation":"MockLLMEmbedding validates every entry of ModelConfig.mock_responses is a float (integers are rejected too, due to the strict isinstance check). This guarantees the mock returns well-formed embedding vectors.","triggerScenarios":"mock_responses containing strings ([\"0.1\"]), ints ([1, 2]), None, or nested lists when constructing MockLLMEmbedding.","commonSituations":"YAML mock_responses: [1, 0, 1] parsed as ints; JSON config with string numbers; copy-pasted fixture data of the wrong type.","solutions":["Ensure every element is a float literal, e.g. [0.1, 0.0, 1.0] (use 1.0 not 1 in YAML/JSON)","If values come from external data, coerce with [float(x) for x in values] before building ModelConfig"],"exampleFix":"# before\nModelConfig(type=LLMProviderType.MockLLM, mock_responses=[1, 0, 1])\n# after\nModelConfig(type=LLMProviderType.MockLLM, mock_responses=[1.0, 0.0, 1.0])","handlingStrategy":"type-guard","validationCode":"cfg_dict[\"mock_responses\"] = [float(x) for x in raw_responses]  # coerce before ModelConfig(**cfg_dict)","typeGuard":"def is_float_list(v) -> bool:\n    return isinstance(v, list) and len(v) > 0 and all(isinstance(x, float) for x in v)","tryCatchPattern":null,"preventionTips":["Write floats explicitly (1.0 not 1) in YAML/JSON fixtures","Coerce external numeric data with float() before building mock configs"],"tags":["mock","testing","type-validation","embedding"],"backgroundTag":"wrong-argument-type","analyzedSha":"f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704","analyzedAt":"2026-08-27T11:16:29.677Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}