Signed-off-by: mo saif <moisf56@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
# AR image-grid patch size (pixels per visual token). Mirrors the constant the
|
|
# bespoke MammothModa2 example used to convert image dimensions -> AR grid dims.
|
|
_PATCH_SIZE = 16
|
|
|
|
_AR_SYSTEM_PROMPT = "You are a helpful image generator."
|
|
|
|
|
|
def build_text_to_image_prompt(
|
|
prompt: str,
|
|
negative_prompt: str | None,
|
|
height: int | None = None,
|
|
width: int | None = None,
|
|
) -> dict[str, Any]:
|
|
"""Build the MammothModa2 AR-stage prompt for text-to-image generation.
|
|
|
|
Reproduces the prompt string and the structural ``additional_information``
|
|
that the former bespoke example (``run_mammothmoda2_t2i.py``) constructed,
|
|
deriving the AR image grid from ``height`` / ``width``.
|
|
|
|
Model-specific sampling knobs (``text_guidance_scale``, ``cfg_range``,
|
|
``num_inference_steps``) flow separately via ``extra_body`` -> ``extra_args``.
|
|
Config-derived token ids (``eol_token_id``, ``visual_token_start_id``,
|
|
``visual_token_end_id``, ``visual_ids``) are sourced inside the AR stage
|
|
rather than passed by the caller -- see the ar2dit stage input processor.
|
|
|
|
MammothModa2 t2i uses classifier-free guidance via ``text_guidance_scale``
|
|
and has no explicit negative-prompt path, so ``negative_prompt`` is accepted
|
|
for signature compatibility but not injected.
|
|
"""
|
|
h = height or 1024
|
|
w = width or 1024
|
|
ar_height = h // _PATCH_SIZE
|
|
ar_width = w // _PATCH_SIZE
|
|
|
|
return {
|
|
"prompt": (
|
|
f"<|im_start|>system\n{_AR_SYSTEM_PROMPT}<|im_end|>\n"
|
|
f"<|im_start|>user\n{prompt}<|im_end|>\n"
|
|
"<|im_start|>assistant\n"
|
|
f"<|image start|>{ar_width}*{ar_height}<|image token|>"
|
|
),
|
|
"additional_information": {
|
|
"omni_task": ["t2i"],
|
|
"ar_width": [ar_width],
|
|
"ar_height": [ar_height],
|
|
"image_height": [h],
|
|
"image_width": [w],
|
|
},
|
|
}
|
|
|
|
|
|
MAMMOTHMODA2_PREVIEW_EXTRA_BODY_PARAMS = frozenset(
|
|
{
|
|
"text_guidance_scale",
|
|
"cfg_range",
|
|
# MammothModa2's DiT stage consumes inputs via the kwargs interface rather
|
|
# than OmniDiffusionRequest, so the standard --num-inference-steps flag does
|
|
# not reach it; it is routed through extra_body like the CFG knobs.
|
|
"num_inference_steps",
|
|
}
|
|
)
|
|
MAMMOTHMODA2_PREVIEW_EXTRA_OUTPUT_PARAMS = frozenset()
|
|
MAMMOTHMODA2_PREVIEW_INIT_EXTRA_ARGS_FOR_NON_DIFFUSION_STAGES = True
|