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
- Restart the server with --enable-lora (and typically --max-lora-rank / --lora-paths as needed)
- Preload the adapter via --lora-paths <name>=<path> or the /load_lora_adapter endpoint so lora_path resolves
- 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
- Launch LoRA-serving deployments with --enable-lora in the canonical start script
- Add a startup health probe asserting /get_server_info shows lora_enabled when clients send lora_path
- Gate client-side lora_path on a config flag tied to the deployment
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
- action_mode={mode!r} requires --raw-action-dim.
- lora_alpha must be a positive integer
- Failed to load LoRA adapter {lora_ref.lora_name} because it
- Received request with {len(unique_lora_paths)} unique loras
- Block sparse tensors{context} require BLOCK_SIZE_KV={base_n_
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/6f2c482712e3fad2.
Report an issue: GitHub.