diff --git a/src/generators.cpp b/src/generators.cpp index d19751217c..85cd5cd26a 100644 --- a/src/generators.cpp +++ b/src/generators.cpp @@ -318,24 +318,14 @@ DeviceSpan Generator::AllocateInputIdsOnDevice(cpu_span auto input_ids_device = state_->params_->p_device->Allocate(padded_input_ids_size); auto cpu_span = input_ids_device.CpuSpan(); - - // Handle padding based on alignment setting for sliding window models - if (padded_input_ids_size > input_ids.size()) { - const bool left_align = model_->config_->model.decoder.sliding_window.has_value() && - model_->config_->model.decoder.sliding_window->alignment == "left"; - - if (left_align) { - // Left alignment: padding first, then data - std::fill_n(cpu_span.begin(), padded_input_ids_size - input_ids.size(), model_->config_->model.pad_token_id); - std::copy(input_ids.begin(), input_ids.end(), cpu_span.begin() + (padded_input_ids_size - input_ids.size())); - } else { - // Right alignment (default): data first, then padding - std::copy(input_ids.begin(), input_ids.end(), cpu_span.begin()); - std::fill(cpu_span.begin() + input_ids.size(), cpu_span.end(), model_->config_->model.pad_token_id); - } - } else { - std::copy(input_ids.begin(), input_ids.end(), cpu_span.begin()); + auto padding_begin = cpu_span.begin(); + auto data_end = cpu_span.end(); + if (model_->config_->model.decoder.sliding_window.has_value() && model_->config_->model.decoder.sliding_window->alignment == "left") { + padding_begin = cpu_span.begin() + input_ids.size(); + data_end = padding_begin; } + std::fill_n(padding_begin, padded_input_ids_size - input_ids.size(), model_->config_->model.pad_token_id); + std::copy_backward(input_ids.begin(), input_ids.end(), data_end); input_ids_device.CopyCpuToDevice(); return input_ids_device; }