{"record":{"id":"0aa9954a59643854","repo":"sgl-project/sglang","slug":"regular-expression-is-not-supported-in-the-litellm","errorCode":null,"errorMessage":"Regular expression is not supported in the LiteLLM backend.","messagePattern":"Regular expression is not supported in the LiteLLM backend\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"python/sglang/lang/ir.py","lineNumber":111,"sourceCode":"    def to_anthropic_kwargs(self):\n        # Anthropic does not support frequency_penalty or presence_penalty, so we drop it here\n        if self.regex is not None:\n            warnings.warn(\n                \"Regular expression is not supported in the Anthropic backend.\"\n            )\n        return {\n            \"max_tokens\": self.max_new_tokens,\n            \"stop_sequences\": (\n                self.stop if isinstance(self.stop, (list, tuple)) else [self.stop]\n            ),\n            \"temperature\": self.temperature,\n            \"top_p\": self.top_p,\n            \"top_k\": self.top_k,\n        }\n\n    def to_litellm_kwargs(self):\n        if self.regex is not None:\n            warnings.warn(\"Regular expression is not supported in the LiteLLM backend.\")\n        return {\n            \"max_tokens\": self.max_new_tokens,\n            \"stop\": self.stop or None,\n            \"temperature\": self.temperature,\n            \"top_p\": self.top_p,\n            \"frequency_penalty\": self.frequency_penalty,\n            \"presence_penalty\": self.presence_penalty,\n        }\n\n    def to_srt_kwargs(self):\n        return {\n            \"max_new_tokens\": self.max_new_tokens,\n            \"min_new_tokens\": self.min_new_tokens,\n            \"n\": self.n,\n            \"stop\": self.stop,\n            \"stop_token_ids\": self.stop_token_ids,\n            \"stop_regex\": self.stop_regex,\n            \"temperature\": self.temperature,","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/lang/ir.py#L93-L129","documentation":"to_litellm_kwargs warns that the LiteLLM passthrough does not carry a regex constraint; whatever underlying provider LiteLLM routes to will generate without it.","triggerScenarios":"Running a regex-constrained generation through the LiteLLM backend (generate/generate_stream via litellm client).","commonSituations":"Using LiteLLM as a universal gateway for many providers while assuming sglang constraints still apply; provider-agnostic eval scripts silently losing constraints.","solutions":["Use provider-native structured output options through LiteLLM (response_format/json_schema)","Use the sglang runtime endpoint backend when regex enforcement is mandatory","Validate output against the regex client-side and re-sample on failure"],"exampleFix":"# before\ng = sgl.gen(\"ans\", regex=r\"[A-Z]{2}\\\\d{4}\")\n# after\nimport re\nans = backend.generate(...).text\nif not re.fullmatch(r\"[A-Z]{2}\\\\d{4}\", ans): retry()","handlingStrategy":"validation","validationCode":"if backend_name == \"litellm\" and ir.regex is not None:\n    ir.regex = None  # pass response_format/json_schema through litellm instead","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat litellm as passthrough; assume no sglang-side constraints","Add output validators independent of backend"],"tags":["regex","litellm","structured-output","constraint-dropped","warning"],"backgroundTag":"unsupported-feature-warning","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}