microsoft/graphrag · error · ValueError
period_in_seconds must be a positive integer for Sliding Win
Error message
period_in_seconds must be a positive integer for Sliding Window rate limit.
What it means
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.
Source
Thrown at packages/graphrag-llm/graphrag_llm/config/rate_limit_config.py:41
default=None,
description="The period in seconds for the rate limit window. (default: 60).",
)
requests_per_period: int | None = Field(
default=None,
description="The maximum number of requests allowed per period. (default: None, no limit).",
)
tokens_per_period: int | None = Field(
default=None,
description="The maximum number of tokens allowed per period. (default: None, no limit).",
)
def _validate_sliding_window_config(self) -> None:
"""Validate Sliding Window rate limit configuration."""
if self.period_in_seconds is not None and self.period_in_seconds <= 0:
msg = "period_in_seconds must be a positive integer for Sliding Window rate limit."
raise ValueError(msg)
if not self.requests_per_period and not self.tokens_per_period:
msg = "At least one of requests_per_period or tokens_per_period must be specified for Sliding Window rate limit."
raise ValueError(msg)
if self.requests_per_period is not None and self.requests_per_period <= 0:
msg = "requests_per_period must be a positive integer for Sliding Window rate limit."
raise ValueError(msg)
if self.tokens_per_period is not None and self.tokens_per_period <= 0:
msg = "tokens_per_period must be a positive integer for Sliding Window rate limit."
raise ValueError(msg)
@model_validator(mode="after")
def _validate_model(self):
"""Validate the rate limit configuration based on its type."""
if self.type == RateLimitType.SlidingWindow:
self._validate_sliding_window_config()View on GitHub (pinned to f40e9a26ce)
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
Example fix
# before RateLimitConfig(type="sliding_window", requests_per_period=10, period_in_seconds=0) # after RateLimitConfig(type="sliding_window", requests_per_period=10, period_in_seconds=60)
Defensive patterns
Strategy: validation
Validate before calling
period = cfg["rate_limit"].get("period_in_seconds")
if period is not None and period <= 0:
raise ValueError("period_in_seconds must be > 0") Prevention
- Validate numeric config ranges in a settings-loading helper before Pydantic sees them
- Use positive literals in committed settings.yaml examples
When it happens
Trigger: RateLimitConfig(type=RateLimitType.SlidingWindow, period_in_seconds=0) or a negative value in settings.yaml under rate_limit.
Common situations: Typo such as 0 or -1; computed period from another variable that evaluates to 0; copy-pasted example with a placeholder value.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- requests_per_period must be a positive integer for Sliding W
- tokens_per_period must be a positive integer for Sliding Win
- At least one of requests_per_period or tokens_per_period mus
- RateLimitConfig.type '{strategy}' is not registered in the R
- api_base must be specified with the 'azure' model provider.
AI-assisted analysis of microsoft/graphrag@f40e9a26ce (2026-08-27).
Data as JSON: /api/errors/7e082b427953975e.
Report an issue: GitHub.