Files
hsa/.venv/lib/python3.10/site-packages/dashscope/aigc/image_synthesis.py
2025-09-11 13:29:12 +00:00

213 lines
8.8 KiB
Python

from typing import Any, List, Union
from dashscope.api_entities.dashscope_response import (DashScopeAPIResponse,
ImageSynthesisResponse)
from dashscope.client.base_api import BaseAsyncApi
from dashscope.common.constants import IMAGES, NEGATIVE_PROMPT, PROMPT
from dashscope.common.error import InputRequired
from dashscope.common.utils import _get_task_group_and_task
class ImageSynthesis(BaseAsyncApi):
task = 'text2image'
"""API for image synthesis.
"""
class Models:
wanx_v1 = 'wanx-v1'
wanx_sketch_to_image_v1 = 'wanx-sketch-to-image-v1'
@classmethod
def call(cls,
model: str,
prompt: Any,
negative_prompt: Any = None,
images: List[str] = None,
api_key: str = None,
sketch_image_url: str = None,
**kwargs) -> ImageSynthesisResponse:
"""Call image(s) synthesis service and get result.
Args:
model (str): The model, reference ``Models``.
prompt (Any): The prompt for image(s) synthesis.
negative_prompt (Any): The negative_prompt. Defaults to None.
images (List[str]): The input list of images url,
currently not supported.
api_key (str, optional): The api api_key. Defaults to None.
sketch_image_url (str, optional): Only for wanx-sketch-to-image-v1.
Defaults to None.
**kwargs:
n(int, `optional`): Number of images to synthesis.
size(str, `optional`): The output image(s) size(width*height).
similarity(float, `optional`): The similarity between the
output image and the input image
sketch_weight(int, optional): How much the input sketch
affects the output image[0-10], only for wanx-sketch-to-image-v1. # noqa E501
Default 10.
realisticness(int, optional): The realisticness of the output
image[0-10], only for wanx-sketch-to-image-v1. Default 5
Raises:
InputRequired: The prompt cannot be empty.
Returns:
ImageSynthesisResponse: The image(s) synthesis result.
"""
return super().call(model,
prompt,
negative_prompt,
images,
api_key=api_key,
sketch_image_url=sketch_image_url,
**kwargs)
@classmethod
def async_call(cls,
model: str,
prompt: Any,
negative_prompt: Any = None,
images: List[str] = None,
api_key: str = None,
sketch_image_url: str = None,
**kwargs) -> ImageSynthesisResponse:
"""Create a image(s) synthesis task, and return task information.
Args:
model (str): The model, reference ``Models``.
prompt (Any): The prompt for image(s) synthesis.
negative_prompt (Any): The negative_prompt. Defaults to None.
images (List[str]): The input list of images url.
api_key (str, optional): The api api_key. Defaults to None.
sketch_image_url (str, optional): Only for wanx-sketch-to-image-v1.
Defaults to None.
**kwargs(wanx-v1):
n(int, `optional`): Number of images to synthesis.
size: The output image(s) size, Default 1024*1024
similarity(float, `optional`): The similarity between the
output image and the input image.
sketch_weight(int, optional): How much the input sketch
affects the output image[0-10], only for wanx-sketch-to-image-v1. # noqa E501
Default 10.
realisticness(int, optional): The realisticness of the output
image[0-10], only for wanx-sketch-to-image-v1. Default 5
Raises:
InputRequired: The prompt cannot be empty.
Returns:
DashScopeAPIResponse: The image synthesis
task id in the response.
"""
if prompt is None or not prompt:
raise InputRequired('prompt is required!')
task_group, function = _get_task_group_and_task(__name__)
input = {PROMPT: prompt}
if negative_prompt is not None:
input[NEGATIVE_PROMPT] = negative_prompt
if images is not None:
input[IMAGES] = images
if sketch_image_url is not None and sketch_image_url:
input['sketch_image_url'] = sketch_image_url
response = super().async_call(model=model,
task_group=task_group,
task=ImageSynthesis.task,
function=function,
api_key=api_key,
input=input,
**kwargs)
return ImageSynthesisResponse.from_api_response(response)
@classmethod
def fetch(cls,
task: Union[str, ImageSynthesisResponse],
api_key: str = None) -> ImageSynthesisResponse:
"""Fetch image(s) synthesis task status or result.
Args:
task (Union[str, ImageSynthesisResponse]): The task_id or
ImageSynthesisResponse return by async_call().
api_key (str, optional): The api api_key. Defaults to None.
Returns:
ImageSynthesisResponse: The task status or result.
"""
response = super().fetch(task, api_key)
return ImageSynthesisResponse.from_api_response(response)
@classmethod
def wait(cls,
task: Union[str, ImageSynthesisResponse],
api_key: str = None) -> ImageSynthesisResponse:
"""Wait for image(s) synthesis task to complete, and return the result.
Args:
task (Union[str, ImageSynthesisResponse]): The task_id or
ImageSynthesisResponse return by async_call().
api_key (str, optional): The api api_key. Defaults to None.
Returns:
ImageSynthesisResponse: The task result.
"""
response = super().wait(task, api_key)
return ImageSynthesisResponse.from_api_response(response)
@classmethod
def cancel(cls,
task: Union[str, ImageSynthesisResponse],
api_key: str = None) -> DashScopeAPIResponse:
"""Cancel image synthesis task.
Only tasks whose status is PENDING can be canceled.
Args:
task (Union[str, ImageSynthesisResponse]): The task_id or
ImageSynthesisResponse return by async_call().
api_key (str, optional): The api api_key. Defaults to None.
Returns:
DashScopeAPIResponse: The response data.
"""
return super().cancel(task, api_key)
@classmethod
def list(cls,
start_time: str = None,
end_time: str = None,
model_name: str = None,
api_key_id: str = None,
region: str = None,
status: str = None,
page_no: int = 1,
page_size: int = 10,
api_key: str = None,
**kwargs) -> DashScopeAPIResponse:
"""List async tasks.
Args:
start_time (str, optional): The tasks start time,
for example: 20230420000000. Defaults to None.
end_time (str, optional): The tasks end time,
for example: 20230420000000. Defaults to None.
model_name (str, optional): The tasks model name. Defaults to None.
api_key_id (str, optional): The tasks api-key-id. Defaults to None.
region (str, optional): The service region,
for example: cn-beijing. Defaults to None.
status (str, optional): The status of tasks[PENDING,
RUNNING, SUCCEEDED, FAILED, CANCELED]. Defaults to None.
page_no (int, optional): The page number. Defaults to 1.
page_size (int, optional): The page size. Defaults to 10.
api_key (str, optional): The user api-key. Defaults to None.
Returns:
DashScopeAPIResponse: The response data.
"""
return super().list(start_time=start_time,
end_time=end_time,
model_name=model_name,
api_key_id=api_key_id,
region=region,
status=status,
page_no=page_no,
page_size=page_size,
api_key=api_key,
**kwargs)