sgl-project/sglang · error · ValueError

LoRA adapter '{first_adapter}' was requested, but LoRA is no

Error message

LoRA adapter '{first_adapter}' was requested, but LoRA is not enabled. Please launch the server with --enable-lora flag and preload adapters using --lora-paths or /load_lora_adapter endpoint.

What it means

Raised when a generate request carries a LoRA adapter (lora_path) but the server was launched without --enable-lora. The tokenizer manager validates LoRA usage before dispatching and rejects any request referencing an adapter while LoRA support is off.

Source

Thrown at python/sglang/srt/managers/tokenizer_manager.py:3328

        else:
            self.model_update_tmp.append(recv_obj)
            if len(self.model_update_tmp) == self.model_update_expected_workers:
                self.model_update_result.set_result(self.model_update_tmp)

    async def _validate_and_resolve_lora(
        self, obj: Union[GenerateReqInput, EmbeddingReqInput]
    ) -> None:
        if not obj.lora_path:
            return

        if not self.enable_lora:
            first_adapter = (
                obj.lora_path
                if isinstance(obj.lora_path, str)
                else next((a for a in obj.lora_path if a), None)
            )

            raise ValueError(
                f"LoRA adapter '{first_adapter}' was requested, but LoRA is not enabled. "
                "Please launch the server with --enable-lora flag and preload adapters "
                "using --lora-paths or /load_lora_adapter endpoint."
            )

        await self._resolve_lora_path(obj)

    async def _resolve_lora_path(self, obj: Union[GenerateReqInput, EmbeddingReqInput]):
        if isinstance(obj.lora_path, str):
            unique_lora_paths = set([obj.lora_path])
        else:
            unique_lora_paths = set(obj.lora_path)

        if (
            get_lora().max_loaded_loras is not None
            and len(unique_lora_paths) > get_lora().max_loaded_loras
        ):
            raise ValueError(

View on GitHub (pinned to 0132848349)

Solutions

  1. Restart the server with --enable-lora (and typically --max-lora-rank / --lora-paths as needed)
  2. Preload the adapter via --lora-paths <name>=<path> or the /load_lora_adapter endpoint so lora_path resolves
  3. If LoRA is not intended, remove lora_path from the client request

Example fix

# before
python -m sglang.launch_server --model-path meta-llama/Llama-3-8B
# client sends lora_path="my_adapter"

# after
python -m sglang.launch_server --model-path meta-llama/Llama-3-8B \
  --enable-lora --lora-paths my_adapter=/path/to/adapter
Defensive patterns

Strategy: validation

Validate before calling

from sglang.srt.server_args import ServerArgs
# before sending: check server config if available
assert server_args.enable_lora, "LoRA not enabled on server"
if request.get("lora_path"): assert server_args.enable_lora

Type guard

def uses_lora(req: dict) -> bool:
    return bool(req.get("lora_path"))

Try / catch

try:
    out = engine.generate(prompt, lora_path=adapter)
except ValueError as e:
    if "LoRA is not enabled" in str(e):
        raise RuntimeError("Restart server with --enable-lora") from e
    raise

Prevention

When it happens

Trigger: Calling generate/sampling APIs (HTTP /generate or Engine.generate) with lora_path set while the server lacks --enable-lora in server_args.

Common situations: Client code written for a LoRA-enabled deployment pointed at a plain server; enabling LoRA flag forgotten after adding lora_path to requests; default docker launch command reused without LoRA args.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/6f2c482712e3fad2. Report an issue: GitHub.