{"record":{"id":"7e082b427953975e","repo":"microsoft/graphrag","slug":"period-in-seconds-must-be-a-positive-integer-for-s","errorCode":null,"errorMessage":"period_in_seconds must be a positive integer for Sliding Window rate limit.","messagePattern":"period_in_seconds 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":41,"sourceCode":"        default=None,\n        description=\"The period in seconds for the rate limit window. (default: 60).\",\n    )\n\n    requests_per_period: int | None = Field(\n        default=None,\n        description=\"The maximum number of requests allowed per period. (default: None, no limit).\",\n    )\n\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()","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/microsoft/graphrag/blob/f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704/packages/graphrag-llm/graphrag_llm/config/rate_limit_config.py#L23-L59","documentation":"RateLimitConfig validation requires period_in_seconds to be positive when using the Sliding Window rate limiter. Zero or negative periods are meaningless for a time window and are rejected at config load.","triggerScenarios":"RateLimitConfig(type=RateLimitType.SlidingWindow, period_in_seconds=0) or a negative value in settings.yaml under rate_limit.","commonSituations":"Typo such as 0 or -1; computed period from another variable that evaluates to 0; copy-pasted example with a placeholder value.","solutions":["Set period_in_seconds to a positive integer (e.g. 60)","If the period is computed, guard that the source value is >= 1 before building the config"],"exampleFix":"# before\nRateLimitConfig(type=\"sliding_window\", requests_per_period=10, period_in_seconds=0)\n# after\nRateLimitConfig(type=\"sliding_window\", requests_per_period=10, period_in_seconds=60)","handlingStrategy":"validation","validationCode":"period = cfg[\"rate_limit\"].get(\"period_in_seconds\")\nif period is not None and period <= 0:\n    raise ValueError(\"period_in_seconds must be > 0\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate numeric config ranges in a settings-loading helper before Pydantic sees them","Use positive literals in committed settings.yaml examples"],"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"}