Signed-off-by: wtz2333 <2955110911@qq.com> Co-authored-by: Claude <noreply@anthropic.com>
67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Mapping
|
|
from typing import Any
|
|
|
|
from PIL import Image
|
|
|
|
LINGBOT_VIDEO_EXTRA_BODY_PARAMS = frozenset(
|
|
{
|
|
"batch_cfg",
|
|
"duration",
|
|
"flow_shift",
|
|
"negative_prompt",
|
|
"null_cond_clone_zero",
|
|
"offload_vae_during_denoise",
|
|
"output_type",
|
|
"refiner_sigma_tail_steps",
|
|
"resolution",
|
|
"ratio",
|
|
"shift",
|
|
"t_thresh",
|
|
}
|
|
)
|
|
|
|
|
|
def build_text_to_image_prompt(
|
|
prompt: str,
|
|
negative_prompt: str | None,
|
|
height: int | None = None,
|
|
width: int | None = None,
|
|
) -> dict[str, Any]:
|
|
del height, width
|
|
result: dict[str, Any] = {
|
|
"prompt": prompt,
|
|
"modalities": ["image"],
|
|
}
|
|
if negative_prompt is not None:
|
|
result["negative_prompt"] = negative_prompt
|
|
return result
|
|
|
|
|
|
def build_image_to_video_prompt(
|
|
prompt: str,
|
|
negative_prompt: str | None,
|
|
media_inputs: Mapping[str, Any],
|
|
height: int | None = None,
|
|
width: int | None = None,
|
|
num_frames: int | None = None,
|
|
) -> dict[str, Any]:
|
|
del height, width
|
|
if set(media_inputs) != {"image"} or not isinstance(media_inputs["image"], Image.Image):
|
|
raise ValueError("LingBot text-image-to-video requires exactly one PIL image input.")
|
|
|
|
result: dict[str, Any] = {
|
|
"prompt": prompt,
|
|
"modalities": ["video"],
|
|
"multi_modal_data": {"image": media_inputs["image"]},
|
|
}
|
|
if num_frames is not None:
|
|
result["num_frames"] = num_frames
|
|
if negative_prompt is not None:
|
|
result["negative_prompt"] = negative_prompt
|
|
return result
|