{"record":{"id":"2d5500c8e5cbbbed","repo":"sgl-project/sglang","slug":"embed-override-token-id-is-required-when-embed-ove","errorCode":null,"errorMessage":"embed_override_token_id is required when embed_overrides is provided","messagePattern":"embed_override_token_id is required when embed_overrides is provided","errorType":"validation","errorClass":"ValueError","httpStatus":400,"severity":"error","filePath":"python/sglang/srt/entrypoints/openai/serving_embedding.py","lineNumber":158,"sourceCode":"                        \"image_data\": images,\n                        \"video_data\": videos,\n                    }\n            else:\n                # List of integers (token IDs) or empty list\n                prompt_kwargs = {\"input_ids\": prompt}\n        else:\n            # Other types (should not happen but handle gracefully)\n            prompt_kwargs = {\"input_ids\": prompt}\n\n        # Resolve LoRA adapter from model parameter or explicit lora_path\n        lora_path = self._resolve_lora_path(request.model, request.lora_path)\n\n        # Validate pairing: both or neither must be provided\n        if (\n            request.embed_overrides is not None\n            and request.embed_override_token_id is None\n        ):\n            raise ValueError(\n                \"embed_override_token_id is required when embed_overrides is provided\"\n            )\n        if (\n            request.embed_override_token_id is not None\n            and request.embed_overrides is None\n        ):\n            raise ValueError(\n                \"embed_override_token_id requires embed_overrides to be provided\"\n            )\n\n        # Convert float lists to tensors; position resolution is deferred\n        # to the tokenizer manager (after tokenization for text inputs).\n        embed_overrides = convert_embeds_to_tensors(request.embed_overrides)\n\n        adapted_request = EmbeddingReqInput(\n            **prompt_kwargs,\n            rid=request.rid,\n            priority=request.priority,","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/openai/serving_embedding.py#L140-L176","documentation":"The embeddings endpoint enforces pairing between request.embed_overrides (per-token embedding overrides) and request.embed_override_token_id (the token id the overrides attach to). Providing overrides without a token id is rejected in _convert_to_internal_request.","triggerScenarios":"POST /v1/embeddings with embed_overrides set (non-None) but embed_override_token_id omitted/None.","commonSituations":"Building embedding-override requests programmatically and forgetting the token id after refactors; partial copies of example payloads.","solutions":["Set embed_override_token_id alongside embed_overrides","Omit both fields if you don't need overrides"],"exampleFix":"# before\nEmbeddingReqInput(input=\"x\", embed_overrides=[0.1, 0.2])\n# after\nEmbeddingReqInput(input=\"x\", embed_overrides=[0.1, 0.2], embed_override_token_id=128000)","handlingStrategy":"validation","validationCode":"if req.embed_overrides is not None: assert req.embed_override_token_id is not None","typeGuard":"def overrides_paired(req) -> bool:\n    return (req.embed_overrides is None) == (req.embed_override_token_id is None)","tryCatchPattern":null,"preventionTips":["Always set both fields together or neither","Wrap override construction in one helper"],"tags":["embeddings","request-validation"],"backgroundTag":"missing-required-parameter","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}