microsoft/graphrag · error · ValueError

requests_per_period must be a positive integer for Sliding W

Error message

requests_per_period must be a positive integer for Sliding Window rate limit.

What it means

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.

Source

Thrown at packages/graphrag-llm/graphrag_llm/config/rate_limit_config.py:49

    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()
        return self

View on GitHub (pinned to f40e9a26ce)

Solutions

  1. Set requests_per_period to a positive integer such as 100
  2. If you only want a token limit, omit requests_per_period entirely and set tokens_per_period

Example fix

# before
RateLimitConfig(type="sliding_window", requests_per_period=0, tokens_per_period=1000)
# after
RateLimitConfig(type="sliding_window", tokens_per_period=1000, period_in_seconds=60)
Defensive patterns

Strategy: validation

Validate before calling

rpp = rl.get("requests_per_period")
if rpp is not None and rpp <= 0:
    raise ValueError("requests_per_period must be > 0")

Prevention

When it happens

Trigger: RateLimitConfig(type=RateLimitType.SlidingWindow, requests_per_period=0) or a negative value in settings.

Common situations: Placeholder 0 in config meant to disable the request limit (use None/omit instead); arithmetic producing 0 from a division or env-parsed 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


AI-assisted analysis of microsoft/graphrag@f40e9a26ce (2026-08-27). Data as JSON: /api/errors/09f7148f12364d01. Report an issue: GitHub.