{"record":{"id":"e986c5a26af42da7","repo":"microsoft/graphrag","slug":"modelconfig-mock-responses-must-be-a-non-empty-lis-e986c5","errorCode":null,"errorMessage":"ModelConfig.mock_responses must be a non-empty list of embedding responses.","messagePattern":"ModelConfig\\.mock_responses must be a non-empty list of embedding responses\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/graphrag-llm/graphrag_llm/embedding/mock_llm_embedding.py","lineNumber":48,"sourceCode":"    _mock_responses: list[float]\n    _mock_index: int = 0\n\n    def __init__(\n        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","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/microsoft/graphrag/blob/f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704/packages/graphrag-llm/graphrag_llm/embedding/mock_llm_embedding.py#L30-L66","documentation":"MockLLMEmbedding requires ModelConfig.mock_responses to be a non-empty list; it builds fake embedding vectors from it for testing. None, a non-list, or an empty list is rejected in __init__.","triggerScenarios":"Creating MockLLMEmbedding (or create_embedding with the mock type) where model_config.mock_responses is None, a scalar, or [].","commonSituations":"Writing unit tests with a mock model config but forgetting mock_responses; settings.yaml for tests omitting mock_responses; passing a string instead of a list.","solutions":["Set mock_responses to a non-empty list of floats, e.g. mock_responses: [0.1, 0.2, 0.3]","In tests, build the ModelConfig with explicit mock_responses rather than reusing a production config"],"exampleFix":"# before\nModelConfig(type=LLMProviderType.MockLLM, model=\"mock\")\n# after\nModelConfig(type=LLMProviderType.MockLLM, model=\"mock\", mock_responses=[0.1, 0.2, 0.3])","handlingStrategy":"validation","validationCode":"mr = getattr(model_config, \"mock_responses\", None)\nif isinstance(mr, list) and len(mr) > 0 and all(isinstance(x, float) for x in mr):\n    mock = MockLLMEmbedding(model_config, tokenizer, metrics_store)\nelse:\n    raise ValueError(\"mock_responses must be a non-empty list of floats\")","typeGuard":"def has_valid_mock_responses(cfg: ModelConfig) -> bool:\n    mr = cfg.mock_responses\n    return isinstance(mr, list) and len(mr) > 0 and all(isinstance(x, float) for x in mr)","tryCatchPattern":null,"preventionTips":["Centralize mock ModelConfig construction in a test fixture that always sets mock_responses=[0.1, 0.2, 0.3]","Never reuse production configs for mock-backed tests"],"tags":["mock","testing","embedding","config-validation"],"backgroundTag":"missing-required-config-field","analyzedSha":"f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704","analyzedAt":"2026-08-27T11:16:29.677Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}