The latest commit of pegainfer-project/pegainfer, ca25b80 (2026-10-26), changed things so that the random seed (seed) specified per request is passed through as-is from the frontend all the way to the engine. Previously, convert_sampling in the vLLM-compatible bridge discarded the seed and always fixed it to None, and any request that carried a seed while its temperature was greater than 0 was rejected with the message 'per-request seed is not supported yet'. This patch removes that rejection condition and passes the seed value through as-is.
pegainfer is an LLM inference engine built with pure Rust and CUDA, without PyTorch; it provides an OpenAI-compatible API and offers models from Qwen3 through Kimi-K2. The reason seeds had been blocked was that the sampling layer, kern, did not read per-request seeds. According to the commit message, kern (pegainfer-project/kern#66) applies a Philox random seed per row in the sampling kernel, and kern-serve passes the seed given by the request as its own fill (fill). The commit was signed by JinYan Su.
That said, the range in which reproducibility is guaranteed narrowed to the range set by the engine. The documentation for SamplingParams::seed no longer says that a fixed seed always produces the same tokens; instead it states that the engine's sampling is identical only when it does not rely on other factors, or only under the same batch layout (batch layout). In other words, the batch independence that had been promised for all engines is no longer a documented guarantee. Furthermore, in greedy (greedy) requests with a temperature of 0, the seed is collapsed to None together with min_p and has no effect at all. The change is limited to the two files sampler.rs and vllm/wire.rs, amounting to no more than 35 changed lines (15 added, 20 removed).