#pragma once #include #include #include #include #include #include "sequence.hpp" enum class YocoPrefillTruncationMode : int32_t; struct LogitsTransformInputs { torch::Tensor temperatures; torch::Tensor top_ps; torch::Tensor top_ks; }; struct SamplingKernelInputs { LogitsTransformInputs logits; torch::Tensor seq_seeds; torch::Tensor sample_positions; }; struct PromptLogprobInputs { torch::Tensor prompt_tokens; std::vector prompt_logprobs_lens; std::vector enabled; LogitsTransformInputs logits; }; struct PrefillSamplingInputs { PromptLogprobInputs prompt_logprobs; std::vector eos_suppression_rows; std::vector eos_token_ids; }; struct SpeculativeSamplingInputs { int nextn_tokens = 0; torch::Tensor mtp_info_read_rows; torch::Tensor mtp_info_write_slots; torch::Tensor stop_token_ids; }; struct DecodeSamplingInputs { torch::Tensor mtp_first_token_positions; torch::Tensor mtp_seqlens_q; }; struct DriverSamplingInputs { SamplingKernelInputs kernel; int max_top_logprobs = 0; std::optional golden_output; std::optional prefill; std::optional speculative; }; struct SamplerInputs { torch::Tensor selected_token_indices; std::optional selected_prompt_indices; std::optional decode; std::optional driver; // Absent on CP followers. }; SamplerInputs prepare_sampler_inputs(const std::vector &seq_metadata_list, int max_mtp_tokens, YocoPrefillTruncationMode yoco_prefill_truncation_mode, int yoco_prefill_keep_tokens);