{"record":{"id":"d6d7a524c3ba55eb","repo":"vllm-project/vllm","slug":"connector-name-is-not-set-in-kvtransferconfig","errorCode":null,"errorMessage":"Connector name is not set in KVTransferConfig","messagePattern":"Connector name is not set in KVTransferConfig","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vllm/distributed/kv_transfer/kv_connector/factory.py","lineNumber":101,"sourceCode":"        Raises ValueError if the connector is not registered.\n\n        Args:\n            connector_name: Name of the registered connector.\n\n        Returns:\n            The connector class.\n        \"\"\"\n        if connector_name not in cls._registry:\n            raise ValueError(f\"Connector '{connector_name}' is not registered.\")\n        return cls._registry[connector_name]()\n\n    @classmethod\n    def get_connector_class(\n        cls, kv_transfer_config: \"KVTransferConfig\"\n    ) -> type[KVConnectorBaseType]:\n        connector_name = kv_transfer_config.kv_connector\n        if connector_name is None:\n            raise ValueError(\"Connector name is not set in KVTransferConfig\")\n        connector_module_path = kv_transfer_config.kv_connector_module_path\n        if connector_module_path is not None and not connector_module_path:\n            raise ValueError(\"kv_connector_module_path cannot be an empty string.\")\n        if connector_module_path:\n            # External module path takes priority over internal registry.\n            connector_module = importlib.import_module(connector_module_path)\n            try:\n                connector_cls = getattr(connector_module, connector_name)\n            except AttributeError as e:\n                raise AttributeError(\n                    f\"Class {connector_name} not found in {connector_module_path}\"\n                ) from e\n            connector_cls = cast(type[KVConnectorBaseType], connector_cls)\n            if not supports_kw(connector_cls, \"kv_cache_config\"):\n                msg = (\n                    f\"Connector {connector_cls.__name__} uses deprecated \"\n                    \"2-argument constructor signature. External v1 KV \"\n                    \"connectors must accept kv_cache_config as the third \"","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/vllm/distributed/kv_transfer/kv_connector/factory.py#L83-L119","documentation":"KVConnectorFactory.get_connector_class reads kv_transfer_config.kv_connector and found None. Without a connector name the factory can neither look up the registry nor import from an external module, so it raises immediately.","triggerScenarios":"Constructing KVTransferConfig with kv_connector unset (e.g. only kv_role or kv_role extra fields given), then any code that resolves the connector class (create_connector, supports_hma_config).","commonSituations":"Passing a partial JSON to --kv-transfer-config that sets kv_role but omits kv_connector; building KVTransferConfig programmatically with defaults.","solutions":["Set kv_connector in the KVTransferConfig JSON/object, e.g. --kv-transfer-config '{\"kv_connector\":\"NixlConnector\",\"kv_role\":\"kv_producer\"}'","If no connector is wanted, remove kv_transfer_config entirely instead of leaving kv_connector empty"],"exampleFix":"# before\nKVTransferConfig(kv_role=\"kv_producer\")\n\n# after\nKVTransferConfig(kv_connector=\"NixlConnector\", kv_role=\"kv_producer\")","handlingStrategy":"validation","validationCode":"if kv_transfer_config.kv_connector is None:\n    raise SystemExit(\"KVTransferConfig.kv_connector must be set\")","typeGuard":"def has_connector_name(cfg) -> bool:\n    return getattr(cfg, \"kv_connector\", None) is not None","tryCatchPattern":null,"preventionTips":["Validate the --kv-transfer-config JSON schema before launching vLLM","Require kv_connector in any config helper that builds KVTransferConfig"],"tags":["kv-transfer","config","vllm"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}