Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions miles/rollout/sglang_diffusion_rollout.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,16 @@ def build_rollout_sampling_params(

sampling_params: dict[str, Any] = {
"generator_device": args.diffusion_generator_device,
"negative_prompt": neg,
"width": args.diffusion_width,
"height": args.diffusion_height,
"num_inference_steps": num_steps,
"guidance_scale": args.diffusion_guidance_scale,
"true_cfg_scale": args.diffusion_true_cfg_scale,
}

if neg is not None:
sampling_params["negative_prompt"] = neg

if evaluation:
sampling_params["rollout"] = False
else:
Expand Down Expand Up @@ -87,8 +89,6 @@ def build_rollout_generate_payload(
) -> dict[str, Any]:
"""Build full JSON payload for ``POST /rollout/generate`` (``RolloutImageRequest``)."""
sampling_params["prompt"] = prompt
if sampling_params.get("negative_prompt") is None and float(sampling_params.get("guidance_scale", 1.0)) != 1.0:
sampling_params["negative_prompt"] = " " # FlowGRPO default when CFG is on
sampling_params["num_outputs_per_prompt"] = num_outputs_per_prompt
return sampling_params

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ def execute(args: ScriptArgs, data_dir: str) -> None:
"--diffusion-train-iter-order sample_major "
"--diffusion-num-steps 10 "
"--diffusion-guidance-scale 4.0 "
"--diffusion-negative-prompt ' ' "
"--diffusion-true-cfg-scale 4.0 "
"--diffusion-noise-level 1.2 "
"--diffusion-height 512 "
Expand Down
1 change: 1 addition & 0 deletions scripts/run_diffusion_grpo_sd3_ocr_sglang.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ def execute(args: ScriptArgs, data_dir: str) -> None:
"--train-dp-split-mode stride "
"--diffusion-num-steps 10 "
"--diffusion-guidance-scale 4.5 "
"--diffusion-negative-prompt ' ' "
"--diffusion-noise-level 0.7 "
"--diffusion-height 512 "
"--diffusion-width 512 "
Expand Down
45 changes: 45 additions & 0 deletions tests/fast/rollout/test_rollout_negative_prompt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from tests.ci.ci_register import register_cpu_ci

register_cpu_ci(est_time=5, suite="stage-a-cpu", labels=[])

# The negative_prompt contract of the rollout payload:
#
# --diffusion-negative-prompt <unset> ─► key absent from the payload
# ─► engine strips nothing, per-model default applies
# --diffusion-negative-prompt " " ─► " " passes through verbatim (FlowGRPO recipes)

from argparse import Namespace

from miles.rollout.sglang_diffusion_rollout import build_rollout_generate_payload, build_rollout_sampling_params


def _args(**overrides):
values = dict(
diffusion_negative_prompt=None,
diffusion_generator_device=None,
diffusion_eval_num_steps=None,
diffusion_num_steps=10,
diffusion_width=832,
diffusion_height=480,
diffusion_guidance_scale=4.0,
diffusion_guidance_scale_2=None,
diffusion_true_cfg_scale=None,
diffusion_output_num_frames=None,
diffusion_fps=None,
diffusion_sde_type="sde",
diffusion_noise_level=0.7,
diffusion_log_prob_no_const=False,
diffusion_debug_mode=False,
)
values.update(overrides)
return Namespace(**values)


def test_unset_negative_prompt_is_omitted():
payload = build_rollout_generate_payload(build_rollout_sampling_params(_args()), "p")
assert "negative_prompt" not in payload


def test_explicit_negative_prompt_passes_through():
payload = build_rollout_generate_payload(build_rollout_sampling_params(_args(diffusion_negative_prompt=" ")), "p")
assert payload["negative_prompt"] == " "
Loading