import unittest from unittest.mock import MagicMock import torch from sglang.multimodal_gen.runtime.distributed.cfg_policy import CFGPolicy class TestCFGPolicyCombine(unittest.TestCase): def test_cfg_parallel_uses_parallel_arithmetic_order(self): policy = CFGPolicy() req = MagicMock() req.cfg_normalization = 0 req.guidance_rescale = 0 pipeline_config = MagicMock() pipeline_config.postprocess_cfg_noise.side_effect = lambda _, noise, __: noise pos = torch.tensor([1.0], dtype=torch.bfloat16) neg = torch.tensor([0.1], dtype=torch.bfloat16) serial = policy.combine([pos, neg], req, 7.0, pipeline_config) parallel = policy.combine( [pos, neg], req, 7.0, pipeline_config, cfg_parallel=True ) self.assertTrue(torch.equal(serial, neg + 7.0 * (pos - neg))) self.assertTrue(torch.equal(parallel, 7.0 * pos + (1 - 7.0) * neg)) self.assertFalse(torch.equal(serial, parallel)) if __name__ == "__main__": unittest.main()