Decoder исполняет явную policy поверх logits
Generation связывает неизменяемые weights с tokenizer, prompt template и sampling policy. На каждом шаге runtime получает logits последней позиции, применяет разрешённые преобразования, строит распределение и выбирает следующий token. EOS завершает последовательность раньше лимита, а max_new_tokens ставит жёсткую границу, если EOS не выбран. Причина остановки является частью ответа, а не догадкой по длине текста.
Для воспроизводимого fixture используется отдельный экземпляр random.Random, поэтому пример не меняет глобальное состояние случайных чисел. Categorical sampling проходит по cumulative probability в фиксированном порядке IDs. Последний кандидат служит защитой от малой ошибки суммы floating-point; production runtime дополнительно проверяет конечность, неотрицательность и нормировку вероятностей.
Продолжение. Stepper показывает prompt IDs, logits, преобразованное распределение, random draw, выбранный ID и stop reason. Повтор с тем же seed проверяет реализацию policy, но интерфейс отдельно отмечает greedy и stochastic режимы. Streaming публикует только подтверждённые tokens и завершает поток структурированным событием с usage и причиной остановки.
Граница применимости. Повторяемая выборка не означает правильный или безопасный ответ. Одинаковый seed может дать иной результат после смены kernel, precision, tokenizer или порядка операций. Temperature, top-p и penalties входят в контракт целиком и в определённом порядке; их нельзя сравнивать по одному числу без одинаковых logits и workload.