@@ -26,6 +26,7 @@ limitations under the License.
2626#include " core/framework/block/block_manager_impl.h"
2727#include " core/framework/model/model_input_params.h"
2828#include " core/framework/request/stopping_checker.h"
29+ #include " core/framework/sampling/json_object_grammar.h"
2930#include " core/runtime/forward_params.h"
3031#include " core/runtime/params_utils.h"
3132
@@ -184,6 +185,9 @@ TEST(BatchPackedInputTest, PackedProtoLazyUnpackRestoresSampleIdxes) {
184185 builder.build_forward_input (/* num_decoding_tokens=*/ 1 ,
185186 /* min_decoding_batch_size=*/ 0 );
186187 ASSERT_TRUE (input.sampling_params .sample_idxes .defined ());
188+ input.sampling_params .filter_bitmask =
189+ torch::tensor ({{static_cast <int32_t >(0x5 )}},
190+ torch::TensorOptions ().dtype (torch::kInt32 ));
187191
188192 proto::PackedForwardInput packed_input;
189193 ASSERT_TRUE (forward_input_to_packed_proto (input, &packed_input));
@@ -203,6 +207,76 @@ TEST(BatchPackedInputTest, PackedProtoLazyUnpackRestoresSampleIdxes) {
203207 ASSERT_TRUE (unpacked_input.sampling_params .sample_idxes .defined ());
204208 EXPECT_TRUE (tensor_equals_vector<int32_t >(
205209 unpacked_input.sampling_params .sample_idxes , {0 }));
210+ ASSERT_TRUE (unpacked_input.sampling_params .filter_bitmask .defined ());
211+ EXPECT_TRUE (torch::equal (unpacked_input.sampling_params .filter_bitmask ,
212+ input.sampling_params .filter_bitmask ));
213+ }
214+
215+ TEST (BatchPackedInputTest, PackedProtoLazyToPreservesJsonMetadata) {
216+ RequestSamplingParam sampling_param;
217+ StoppingChecker stopping_checker;
218+ stopping_checker.set_max_generated_tokens (4 );
219+
220+ SequenceParams seq_params;
221+ seq_params.seq_capacity = 32 ;
222+ seq_params.stopping_checker = &stopping_checker;
223+ seq_params.sampling_param = &sampling_param;
224+ seq_params.enable_schedule_overlap = true ;
225+
226+ MMData mm_data;
227+ BlockManager::Options options;
228+ options.num_blocks (2 ).block_size (4 );
229+ BlockManagerImpl manager (options);
230+
231+ IncrementalDecoder decoder (" " , 1 , false , false );
232+ Sequence sequence (/* index=*/ 0 ,
233+ /* token_ids=*/ {1 , 2 , 3 , 4 },
234+ torch::Tensor (),
235+ mm_data,
236+ std::move (decoder),
237+ seq_params);
238+ sequence.add_blocks (BlockType::KV , manager.allocate (1 ));
239+
240+ std::vector<Sequence*> sequences = {&sequence};
241+ std::vector<uint32_t > allowed_max_tokens = {4 };
242+ BatchInputBuilder builder (sequences,
243+ allowed_max_tokens,
244+ {},
245+ {},
246+ nullptr ,
247+ /* batch_id=*/ 2 ,
248+ nullptr ,
249+ BatchForwardType::DECODE );
250+ ForwardInput input = builder.build_forward_input (
251+ /* num_decoding_tokens=*/ 1 , /* min_decoding_batch_size=*/ 0 );
252+
253+ JsonObjectGrammar grammar ({" {" , " }" , " stop" }, /* stop_token_ids=*/ {2 });
254+ JsonObjectGrammarState state = grammar.initial_state ();
255+ ASSERT_TRUE (state.accept_token (/* open_object=*/ 0 ));
256+ input.json_object_state_snapshots = {state.snapshot ()};
257+ input.sample_sequence_ids = {" req-json#0" };
258+ input.sample_prior_output_rows = {-1 };
259+
260+ proto::PackedForwardInput packed_input;
261+ ASSERT_TRUE (forward_input_to_packed_proto (input, &packed_input));
262+
263+ ForwardInput lazy_input;
264+ packed_proto_to_forward_input (
265+ packed_input, lazy_input, torch::Device (torch::kCPU ), nullptr );
266+ EXPECT_TRUE (lazy_input.input_host_buffer_has_layout );
267+ EXPECT_TRUE (lazy_input.json_object_state_snapshots .empty ());
268+
269+ const ForwardInput materialized_input =
270+ lazy_input.to (torch::Device (torch::kCPU ), torch::kFloat32 );
271+ ASSERT_EQ (materialized_input.json_object_state_snapshots .size (), 1u );
272+ EXPECT_EQ (materialized_input.json_object_state_snapshots [0 ].token_ids ,
273+ std::vector<int32_t >({0 }));
274+ EXPECT_FALSE (
275+ materialized_input.json_object_state_snapshots [0 ].reasoning_enabled );
276+ EXPECT_EQ (materialized_input.sample_sequence_ids ,
277+ std::vector<std::string>({" req-json#0" }));
278+ EXPECT_EQ (materialized_input.sample_prior_output_rows ,
279+ std::vector<int32_t >({-1 }));
206280}
207281
208282} // namespace xllm
0 commit comments