{"record":{"id":"09f7148f12364d01","repo":"microsoft/graphrag","slug":"requests-per-period-must-be-a-positive-integer-for","errorCode":null,"errorMessage":"requests_per_period must be a positive integer for Sliding Window rate limit.","messagePattern":"requests_per_period must be a positive integer for Sliding Window rate limit\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/graphrag-llm/graphrag_llm/config/rate_limit_config.py","lineNumber":49,"sourceCode":"\n    tokens_per_period: int | None = Field(\n        default=None,\n        description=\"The maximum number of tokens allowed per period. (default: None, no limit).\",\n    )\n\n    def _validate_sliding_window_config(self) -> None:\n        \"\"\"Validate Sliding Window rate limit configuration.\"\"\"\n        if self.period_in_seconds is not None and self.period_in_seconds <= 0:\n            msg = \"period_in_seconds must be a positive integer for Sliding Window rate limit.\"\n            raise ValueError(msg)\n\n        if not self.requests_per_period and not self.tokens_per_period:\n            msg = \"At least one of requests_per_period or tokens_per_period must be specified for Sliding Window rate limit.\"\n            raise ValueError(msg)\n\n        if self.requests_per_period is not None and self.requests_per_period <= 0:\n            msg = \"requests_per_period must be a positive integer for Sliding Window rate limit.\"\n            raise ValueError(msg)\n\n        if self.tokens_per_period is not None and self.tokens_per_period <= 0:\n            msg = \"tokens_per_period must be a positive integer for Sliding Window rate limit.\"\n            raise ValueError(msg)\n\n    @model_validator(mode=\"after\")\n    def _validate_model(self):\n        \"\"\"Validate the rate limit configuration based on its type.\"\"\"\n        if self.type == RateLimitType.SlidingWindow:\n            self._validate_sliding_window_config()\n        return self\n","sourceCodeStart":31,"sourceCodeEnd":61,"githubUrl":"https://github.com/microsoft/graphrag/blob/f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704/packages/graphrag-llm/graphrag_llm/config/rate_limit_config.py#L31-L61","documentation":"When requests_per_period is provided for the Sliding Window limiter, it must be > 0. Zero or negative request budgets are invalid and rejected by RateLimitConfig validation.","triggerScenarios":"RateLimitConfig(type=RateLimitType.SlidingWindow, requests_per_period=0) or a negative value in settings.","commonSituations":"Placeholder 0 in config meant to disable the request limit (use None/omit instead); arithmetic producing 0 from a division or env-parsed value.","solutions":["Set requests_per_period to a positive integer such as 100","If you only want a token limit, omit requests_per_period entirely and set tokens_per_period"],"exampleFix":"# before\nRateLimitConfig(type=\"sliding_window\", requests_per_period=0, tokens_per_period=1000)\n# after\nRateLimitConfig(type=\"sliding_window\", tokens_per_period=1000, period_in_seconds=60)","handlingStrategy":"validation","validationCode":"rpp = rl.get(\"requests_per_period\")\nif rpp is not None and rpp <= 0:\n    raise ValueError(\"requests_per_period must be > 0\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Omit the field rather than passing 0 to disable a limit","Unit-test config builders with boundary values"],"tags":["rate-limit","config-validation","positive-value"],"backgroundTag":"invalid-config-value","analyzedSha":"f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704","analyzedAt":"2026-08-27T11:16:29.677Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}