mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 17:24:32 +02:00
merge: modules/api/models.py
This commit is contained in:
+116
-63
@@ -112,62 +112,86 @@ class PydanticModelGenerator:
|
||||
|
||||
class ItemSampler(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
options: dict
|
||||
options: dict = Field(title="Options")
|
||||
|
||||
class ItemVae(BaseModel):
|
||||
model_name: str = Field(title="Model Name")
|
||||
filename: str = Field(title="Filename")
|
||||
model_name: str = Field(title="Model Name", description="VAE model display name")
|
||||
filename: str = Field(title="Filename", description="Path to the VAE file")
|
||||
|
||||
class ItemUpscaler(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
model_name: str | None = Field(title="Model Name")
|
||||
model_path: str | None = Field(title="Path")
|
||||
model_url: str | None = Field(title="URL")
|
||||
scale: float | None = Field(title="Scale")
|
||||
name: str = Field(title="Name", description="Upscaler display name")
|
||||
model_name: str | None = Field(title="Model Name", description="Underlying model name")
|
||||
model_path: str | None = Field(title="Path", description="Path to the model file")
|
||||
model_url: str | None = Field(title="URL", description="Download URL for the model")
|
||||
scale: float | None = Field(title="Scale", description="Default upscale factor")
|
||||
|
||||
class ItemModel(BaseModel):
|
||||
title: str = Field(title="Title")
|
||||
model_name: str = Field(title="Model Name")
|
||||
filename: str = Field(title="Filename")
|
||||
type: str = Field(title="Model type")
|
||||
sha256: str | None = Field(title="SHA256 hash")
|
||||
hash: str | None = Field(title="Short hash")
|
||||
config: str | None = Field(title="Config file")
|
||||
|
||||
class ItemHypernetwork(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
path: str | None = Field(title="Path")
|
||||
title: str = Field(title="Title", description="Full model title including hash")
|
||||
model_name: str = Field(title="Model Name", description="Model display name")
|
||||
filename: str = Field(title="Filename", description="Path to the model file")
|
||||
type: str = Field(title="Model type", description="Model architecture type (e.g., SD, SDXL, Flux)")
|
||||
sha256: str | None = Field(title="SHA256 hash", description="Full SHA256 hash of the model file")
|
||||
hash: str | None = Field(title="Short hash", description="Short hash identifier for the model")
|
||||
config: str | None = Field(title="Config file", description="Path to the model configuration file")
|
||||
|
||||
class ItemDetailer(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
path: str | None = Field(title="Path")
|
||||
|
||||
class ItemGAN(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
path: str | None = Field(title="Path")
|
||||
scale: int | None = Field(title="Scale")
|
||||
name: str = Field(title="Name", description="Detailer model name")
|
||||
path: str | None = Field(title="Path", description="Path to the detailer model file")
|
||||
|
||||
class ItemStyle(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
prompt: str | None = Field(title="Prompt")
|
||||
negative_prompt: str | None = Field(title="Negative Prompt")
|
||||
extra: str | None = Field(title="Extra")
|
||||
filename: str | None = Field(title="Filename")
|
||||
preview: str | None = Field(title="Preview")
|
||||
name: str = Field(title="Name", description="Style name")
|
||||
prompt: str | None = Field(title="Prompt", description="Prompt template text")
|
||||
negative_prompt: str | None = Field(title="Negative Prompt", description="Negative prompt template text")
|
||||
extra: str | None = Field(title="Extra", description="Additional style data")
|
||||
filename: str | None = Field(title="Filename", description="Path to the styles file")
|
||||
preview: str | None = Field(title="Preview", description="URL to the style preview image")
|
||||
|
||||
class ItemExtraNetwork(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
type: str = Field(title="Type")
|
||||
title: str | None = Field(title="Title")
|
||||
fullname: str | None = Field(title="Fullname")
|
||||
filename: str | None = Field(title="Filename")
|
||||
hash: str | None = Field(title="Hash")
|
||||
preview: str | None = Field(title="Preview image URL")
|
||||
name: str = Field(title="Name", description="Network short name")
|
||||
type: str = Field(title="Type", description="Network type (lora, checkpoint, embedding, etc.)")
|
||||
title: str | None = Field(title="Title", description="Display title")
|
||||
fullname: str | None = Field(title="Fullname", description="Fully qualified network name")
|
||||
filename: str | None = Field(title="Filename", description="Path to the network file")
|
||||
hash: str | None = Field(title="Hash", description="Short hash identifier")
|
||||
preview: str | None = Field(title="Preview image URL", description="URL to the preview thumbnail")
|
||||
version: str | None = Field(default=None, title="Model version or class", description="Model version string or architecture class")
|
||||
tags: str | None = Field(default=None, title="Tags", description="Pipe-separated tag list")
|
||||
|
||||
class ItemArtist(BaseModel):
|
||||
name: str = Field(title="Name")
|
||||
score: float = Field(title="Score")
|
||||
category: str = Field(title="Category")
|
||||
class ItemExtraNetworkDetail(BaseModel):
|
||||
name: str = Field(title="Name", description="Network short name")
|
||||
type: str = Field(title="Type", description="Network type (lora, checkpoint, embedding, etc.)")
|
||||
title: str | None = Field(default=None, title="Title", description="Display title")
|
||||
filename: str | None = Field(default=None, title="Filename", description="Path to the network file")
|
||||
hash: str | None = Field(default=None, title="Hash", description="Short hash identifier")
|
||||
alias: str | None = Field(default=None, title="Alias", description="Short alias for prompt use")
|
||||
size: int | None = Field(default=None, title="File size in bytes", description="File size in bytes on disk")
|
||||
mtime: str | None = Field(default=None, title="Last modified ISO timestamp", description="Last modification time in ISO 8601 format")
|
||||
version: str | None = Field(default=None, title="Model version or class", description="Model version string or architecture class")
|
||||
tags: str | None = Field(default=None, title="Tags", description="Pipe-separated tag list")
|
||||
description: str | None = Field(default=None, title="Description", description="Human-readable model description")
|
||||
info: dict | None = Field(default=None, title="Sidecar JSON info", description="Metadata from sidecar JSON file")
|
||||
|
||||
class ItemExtraNetworkFull(BaseModel):
|
||||
name: str = Field(title="Name", description="Network short name")
|
||||
type: str = Field(title="Type", description="Network type (lora, checkpoint, embedding, etc.)")
|
||||
title: str | None = Field(default=None, title="Title", description="Display title")
|
||||
fullname: str | None = Field(default=None, title="Fullname", description="Fully qualified network name")
|
||||
filename: str | None = Field(default=None, title="Filename", description="Path to the network file")
|
||||
hash: str | None = Field(default=None, title="Hash", description="Short hash identifier")
|
||||
preview: str | None = Field(default=None, title="Preview image URL", description="URL to the preview thumbnail")
|
||||
alias: str | None = Field(default=None, title="Alias", description="Short alias for prompt use")
|
||||
size: int | None = Field(default=None, title="File size in bytes", description="File size in bytes on disk")
|
||||
mtime: str | None = Field(default=None, title="Last modified ISO timestamp", description="Last modification time in ISO 8601 format")
|
||||
version: str | None = Field(default=None, title="Model version or class", description="Model version string or architecture class")
|
||||
tags: str | None = Field(default=None, title="Tags", description="Pipe-separated tag list")
|
||||
description: str | None = Field(default=None, title="Description", description="Human-readable model description")
|
||||
info: dict | None = Field(default=None, title="Sidecar JSON info", description="Metadata from sidecar JSON file")
|
||||
|
||||
class ResExtraNetworkDetails(BaseModel):
|
||||
items: list[ItemExtraNetworkFull] = Field(title="Items", description="List of extra network items with full detail")
|
||||
total: int = Field(title="Total", description="Total number of matching items before pagination")
|
||||
offset: int = Field(title="Offset", description="Number of items skipped")
|
||||
limit: int = Field(title="Limit", description="Maximum items returned per page")
|
||||
|
||||
class ItemEmbedding(BaseModel):
|
||||
step: int | None = Field(title="Step", description="The number of steps that were used to train this embedding, if available")
|
||||
@@ -201,12 +225,22 @@ class ItemFace(BaseModel):
|
||||
pm_start: float = Field(title="PhotoMaker Start", default=0.5, ge=0, le=1, description="PhotoMaker start value, must be between 0.0 and 1.0.")
|
||||
fs_cache: bool = Field(title="FaceSwap Cache", default=True, description="Should the FaceSwap model be cached?")
|
||||
|
||||
class ItemControlUnit(BaseModel):
|
||||
process: str = Field(title="Preprocessor", default="", description="Preprocessor name (e.g. 'Canny', 'OpenPose')")
|
||||
model: str = Field(title="Control model", default="", description="Control model filename or path")
|
||||
strength: float = Field(title="Strength", default=1.0, description="Control influence strength (0.0-2.0)")
|
||||
start: float = Field(title="Start", default=0.0, description="Step fraction at which control begins (0.0-1.0)")
|
||||
end: float = Field(title="End", default=1.0, description="Step fraction at which control ends (0.0-1.0)")
|
||||
override: str | None = Field(title="Override image", default=None, description="Base64-encoded pre-processed control image")
|
||||
unit_type: str | None = Field(title="Unit type", default=None, description="Control unit type: 'controlnet', 't2i adapter', 'xs', 'lite', 'reference', or 'ip'")
|
||||
image: str | None = Field(title="Image", default=None, description="Base64-encoded control input image")
|
||||
|
||||
class ScriptArg(BaseModel):
|
||||
label: str = Field(default=None, title="Label", description="Name of the argument in UI")
|
||||
value: Any | None = Field(default=None, title="Value", description="Default value of the argument")
|
||||
minimum: Any | None = Field(default=None, title="Minimum", description="Minimum allowed value for the argumentin UI")
|
||||
maximum: Any | None = Field(default=None, title="Minimum", description="Maximum allowed value for the argumentin UI")
|
||||
step: Any | None = Field(default=None, title="Minimum", description="Step for changing value of the argumentin UI")
|
||||
minimum: Any | None = Field(default=None, title="Minimum", description="Minimum allowed value for the argument in UI")
|
||||
maximum: Any | None = Field(default=None, title="Maximum", description="Maximum allowed value for the argument in UI")
|
||||
step: Any | None = Field(default=None, title="Step", description="Step for changing value of the argument in UI")
|
||||
choices: Any | None = Field(default=None, title="Choices", description="Possible values for the argument")
|
||||
|
||||
class ItemScript(BaseModel):
|
||||
@@ -218,7 +252,7 @@ class ItemScript(BaseModel):
|
||||
class ItemExtension(BaseModel):
|
||||
name: str = Field(title="Name", description="Extension name")
|
||||
remote: str = Field(title="Remote", description="Extension Repository URL")
|
||||
branch: str = Field(default="uknnown", title="Branch", description="Extension Repository Branch")
|
||||
branch: str = Field(default="unknown", title="Branch", description="Extension Repository Branch")
|
||||
commit_hash: str = Field(title="Commit Hash", description="Extension Repository Commit Hash")
|
||||
version: str = Field(title="Version", description="Extension Version")
|
||||
commit_date: str | int = Field(title="Commit Date", description="Extension Repository Commit Date")
|
||||
@@ -244,6 +278,8 @@ ReqTxt2Img = PydanticModelGenerator(
|
||||
{"key": "save_images", "type": bool, "default": False},
|
||||
{"key": "alwayson_scripts", "type": dict, "default": {}},
|
||||
{"key": "ip_adapter", "type": Optional[list[ItemIPAdapter]], "default": None, "exclude": True},
|
||||
{"key": "control_units", "type": Optional[list[ItemControlUnit]], "default": None, "exclude": True},
|
||||
{"key": "init_control", "type": Optional[list], "default": None, "exclude": True},
|
||||
{"key": "face", "type": Optional[ItemFace], "default": None, "exclude": True},
|
||||
{"key": "extra", "type": Optional[dict], "default": {}, "exclude": True},
|
||||
]
|
||||
@@ -254,8 +290,8 @@ StableDiffusionTxt2ImgProcessingAPI = ReqTxt2Img
|
||||
|
||||
class ResTxt2Img(BaseModel):
|
||||
images: list[str] = Field(default=None, title="Image", description="The generated images in base64 format.")
|
||||
parameters: dict
|
||||
info: str
|
||||
parameters: dict = Field(title="Parameters", description="The request parameters echoed back.")
|
||||
info: str = Field(title="Info", description="Generation info string with all parameters used.")
|
||||
|
||||
ReqImg2Img = PydanticModelGenerator(
|
||||
"StableDiffusionProcessingImg2Img",
|
||||
@@ -274,6 +310,8 @@ ReqImg2Img = PydanticModelGenerator(
|
||||
{"key": "save_images", "type": bool, "default": False},
|
||||
{"key": "alwayson_scripts", "type": dict, "default": {}},
|
||||
{"key": "ip_adapter", "type": Optional[list[ItemIPAdapter]], "default": None, "exclude": True},
|
||||
{"key": "control_units", "type": Optional[list[ItemControlUnit]], "default": None, "exclude": True},
|
||||
{"key": "init_control", "type": Optional[list], "default": None, "exclude": True},
|
||||
{"key": "face_id", "type": Optional[ItemFace], "default": None, "exclude": True},
|
||||
{"key": "extra", "type": Optional[dict], "default": {}, "exclude": True},
|
||||
]
|
||||
@@ -284,8 +322,8 @@ StableDiffusionImg2ImgProcessingAPI = ReqImg2Img
|
||||
|
||||
class ResImg2Img(BaseModel):
|
||||
images: list[str] = Field(default=None, title="Image", description="The generated images in base64 format.")
|
||||
parameters: dict
|
||||
info: str
|
||||
parameters: dict = Field(title="Parameters", description="The request parameters echoed back.")
|
||||
info: str = Field(title="Info", description="Generation info string with all parameters used.")
|
||||
|
||||
class FileData(BaseModel):
|
||||
data: str = Field(title="File data", description="Base64 representation of the file")
|
||||
@@ -308,12 +346,25 @@ class ResProcess(BaseModel):
|
||||
|
||||
class ReqPromptEnhance(BaseModel):
|
||||
prompt: str = Field(title="Prompt", description="Prompt to enhance")
|
||||
type: str = Field(title="Type", default='text', description="Type of enhancement to perform")
|
||||
type: str = Field(title="Type", default='text', description="Type of enhancement: text, image, video")
|
||||
model: str | None = Field(title="Model", default=None, description="Model to use for enhancement")
|
||||
system_prompt: str | None = Field(title="System prompt", default=None, description="Model system prompt")
|
||||
image: str | None = Field(title="Image", default=None, description="Image to work on, must be a Base64 string containing the image's data.")
|
||||
seed: int = Field(title="Seed", default=-1, description="Seed used to generate the prompt")
|
||||
nsfw: bool = Field(title="NSFW", default=True, description="Should NSFW content be allowed?")
|
||||
prefix: Optional[str] = Field(title="Prefix", default=None, description="Text prepended to enhanced prompt")
|
||||
suffix: Optional[str] = Field(title="Suffix", default=None, description="Text appended to enhanced prompt")
|
||||
do_sample: Optional[bool] = Field(title="Sample", default=None, description="Enable sampling")
|
||||
max_tokens: Optional[int] = Field(title="Max tokens", default=None, description="Max generation tokens")
|
||||
temperature: Optional[float] = Field(title="Temperature", default=None, description="Controls randomness in token selection (0=deterministic, higher=more creative)")
|
||||
repetition_penalty: Optional[float] = Field(title="Repetition penalty", default=None, description="Penalizes repeated tokens to reduce repetition (1.0=no penalty)")
|
||||
top_k: Optional[int] = Field(title="Top K", default=None, description="Limits token selection to the K most likely candidates")
|
||||
top_p: Optional[float] = Field(title="Top P", default=None, description="Nucleus sampling threshold (0-1)")
|
||||
thinking: bool = Field(title="Thinking", default=False, description="Enable thinking/reasoning mode")
|
||||
keep_thinking: bool = Field(title="Keep thinking", default=False, description="Keep thinking tokens in output")
|
||||
use_vision: bool = Field(title="Use vision", default=True, description="Use vision if model supports it")
|
||||
prefill: Optional[str] = Field(title="Prefill", default=None, description="Text to prefill the model response with")
|
||||
keep_prefill: bool = Field(title="Keep prefill", default=False, description="Keep prefill text in the output")
|
||||
|
||||
class ResPromptEnhance(BaseModel):
|
||||
prompt: str = Field(title="Prompt", description="Enhanced prompt")
|
||||
@@ -392,12 +443,6 @@ class ReqLatentHistory(BaseModel):
|
||||
name: str = Field(title="Name", description="Name of the history item to select")
|
||||
|
||||
|
||||
class ResTrain(BaseModel):
|
||||
info: str = Field(title="Train info", description="Response string from train embedding task.")
|
||||
|
||||
class ResCreate(BaseModel):
|
||||
info: str = Field(title="Create info", description="Response string from create embedding task.")
|
||||
|
||||
class ResPreprocess(BaseModel):
|
||||
info: str = Field(title="Preprocess info", description="Response string from preprocessing task.")
|
||||
|
||||
@@ -448,9 +493,17 @@ class ResScripts(BaseModel):
|
||||
control: list = Field(default=None, title="Control", description="Titles of scripts (control)")
|
||||
|
||||
class ResGPU(BaseModel): # definition of http response
|
||||
name: str = Field(title="GPU Name")
|
||||
data: dict = Field(title="Name/Value data")
|
||||
chart: list[float, float] = Field(title="Exactly two items to place on chart")
|
||||
name: str = Field(title="GPU Name", description="GPU device name")
|
||||
data: dict = Field(title="Name/Value data", description="Key-value pairs of GPU metrics (utilization, temperature, clocks, memory, etc.)")
|
||||
chart: list[float, float] = Field(title="Exactly two items to place on chart", description="Two numeric values for chart display (e.g., GPU utilization %, VRAM usage %)")
|
||||
|
||||
class ItemLoadedModel(BaseModel):
|
||||
name: str = Field(title="Model Name", description="Model or component name")
|
||||
category: str = Field(title="Category", description="Model category (pipeline, component, controlnet, lora, ipadapter, upscaler, detailer, caption, enhance)")
|
||||
device: Optional[str] = Field(default=None, title="Device", description="Device where the model is loaded (e.g., cuda:0, cpu)")
|
||||
size_bytes: Optional[int] = Field(default=None, title="Size (bytes)", description="Total parameter memory footprint in bytes")
|
||||
dtype: Optional[str] = Field(default=None, title="Dtype", description="Effective data type (e.g., float16, nf4)")
|
||||
extra: Optional[dict] = Field(default=None, title="Extra metadata", description="Additional metadata (role, class, quantization method, etc.)")
|
||||
|
||||
# helper function
|
||||
|
||||
@@ -504,9 +557,9 @@ def create_model_from_signature(func: Callable, model_name: str, base_model: typ
|
||||
extra = 'allow' if varkw else 'ignore'
|
||||
config = CustomConfig
|
||||
if base_model == BaseModel:
|
||||
create_model_args = {'__config__': config}
|
||||
create_model_args = {'__config__': config}
|
||||
else:
|
||||
create_model_args = {'__base__': base_model}
|
||||
create_model_args = {'__base__': base_model}
|
||||
|
||||
model = create_model(
|
||||
model_name,
|
||||
|
||||
Reference in New Issue
Block a user