{"record":{"id":"f90945426b24e6d4","repo":"sgl-project/sglang","slug":"items-must-be-provided","errorCode":null,"errorMessage":"items must be provided","messagePattern":"items must be provided","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/managers/tokenizer_manager_score_mixin.py","lineNumber":484,"sourceCode":"           Multi-item scoring works with both text and pre-tokenized inputs:\n           - Text: query<delimiter_text>item1<delimiter_text>item2<delimiter_text>item3<delimiter_text>\n           - Tokens: query<delimiter_token_id>item1<delimiter_token_id>item2<delimiter_token_id>item3<delimiter_token_id>\n\n        Supports two model types:\n        - Generation (CausalLM): Requires label_token_ids; returns logprob-based scores.\n        - SequenceClassification: label_token_ids is optional; returns pooled class logits.\n\n        return_pooled_hidden_states is only supported for non-generation models\n        (SequenceClassification, RewardModel); raises ValueError for CausalLM.\n        \"\"\"\n        is_generation = self.is_generation\n\n        if is_generation and label_token_ids is None:\n            raise ValueError(\n                \"label_token_ids is required for generation (CausalLM) models.\"\n            )\n        if items is None:\n            raise ValueError(\"items must be provided\")\n        if not items:\n            return ScoreResult(scores=[], prompt_tokens=0)\n\n        has_embeds = (\n            query_embed_overrides is not None or item_embed_overrides is not None\n        )\n        if has_embeds and embed_override_token_id is None:\n            raise ValueError(\n                \"embed_override_token_id is required when query_embed_overrides \"\n                \"or item_embed_overrides are supplied.\"\n            )\n        if item_first and has_embeds:\n            raise ValueError(\"item_first is not supported when embeddings are supplied\")\n        if item_embed_overrides is not None and len(item_embed_overrides) != len(items):\n            raise ValueError(\n                f\"item_embed_overrides length ({len(item_embed_overrides)}) \"\n                f\"must match items length ({len(items)}).\"\n            )","sourceCodeStart":466,"sourceCodeEnd":502,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/managers/tokenizer_manager_score_mixin.py#L466-L502","documentation":"score_request requires the items argument; when items is None the call is rejected immediately after the label check. items carries the candidate texts/sequences to score against the query.","triggerScenarios":"Calling score/score_request with items=None (omitted positional or explicit None), e.g. when only a query is passed.","commonSituations":"Optional/defaulted parameters left None after refactoring; client code assuming single-input scoring like embedding APIs; partial dict unpacking that drops items.","solutions":["Pass items as a non-empty list of candidate strings or token-id lists","If items==[] is intended (empty batch), that returns an empty ScoreResult rather than erroring — but None is always invalid","Audit call sites built via kwargs unpacking to ensure items is populated"],"exampleFix":"# before\nresult = engine.score_request(query=\"query text\")\n\n# after\nresult = engine.score_request(query=\"query text\", items=[\"candidate 1\", \"candidate 2\"])","handlingStrategy":"validation","validationCode":"if items is None:\n    raise ValueError(\"items is required for score_request\")\n# or: items = items or []","typeGuard":"def has_items(kwargs: dict) -> bool:\n    return kwargs.get(\"items\") is not None","tryCatchPattern":null,"preventionTips":["Treat items as a required field in scoring client wrappers","Fail fast client-side on None before network round-trip","Use keyword arguments so omissions are caught by lint/typing"],"tags":["scoring","missing-argument","validation"],"backgroundTag":"missing-required-parameter","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}