[agents docs] update modular.md (#13568)
[agents docs] restructure modular.md: standalone reusability + IO-respect patterns
Distilled from the ErnieImage modular pipeline review (PR #13498):
- New "Common modular conventions" section: skim qwenimage / flux2 / wan /
helios first, mirroring the references-driven shape of models.md / pipelines.md.
- Promoted "Standalone block reusability" to a Key pattern. Each block (text
encoder, VAE encoder, prepare-latents, denoise, decoder) must run on its
own; encoders take raw inputs only, per-prompt expansion happens in a
dedicated input step inside the core denoise sequence. Replaces old
gotchas #4 (pre-computed encoder outputs) and #5 (VAE encode in
prepare-latents).
- Promoted "Flat block assembly" to a Key pattern (was gotcha #7).
- New gotcha "Respect the declared IO system": one rule covering three
bypass directions — defensive `getattr` reads of declared
components/state, undeclared `block_state` writes, and direct
`state.set()` calls that skip `set_block_state` entirely.
- Reworked InputParam/OutputParam section to link to INPUT_PARAM_TEMPLATES /
OUTPUT_PARAM_TEMPLATES in modular_pipeline_utils.py (the registry is
dynamic) and added a non-template example.
- Added a distilled-checkpoint exception to the `guidance_scale`-as-input
gotcha — distilled flux-style models legitimately accept it.
- Dropped the "inputs duplicating derivable state" gotcha (uncommon).
Co-authored-by: yiyi@huggingface.co <yiyi@ip-26-0-160-103.ec2.internal>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>