mirror of
https://github.com/oobabooga/text-generation-webui.git
synced 2025-12-06 07:12:10 +01:00
109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
|
|
# modules/image_model_settings.py
|
||
|
|
import os
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import yaml
|
||
|
|
|
||
|
|
import modules.shared as shared
|
||
|
|
from modules.logging_colors import logger
|
||
|
|
|
||
|
|
|
||
|
|
DEFAULTS = {
|
||
|
|
'model_name': 'None',
|
||
|
|
'dtype': 'bfloat16',
|
||
|
|
'attn_backend': 'sdpa',
|
||
|
|
'cpu_offload': False,
|
||
|
|
'compile_model': False,
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def get_settings_path():
|
||
|
|
"""Get the path to the image model settings file."""
|
||
|
|
return Path(shared.args.image_model_dir) / 'settings.yaml'
|
||
|
|
|
||
|
|
|
||
|
|
def load_yaml_settings():
|
||
|
|
"""Load raw settings from yaml file."""
|
||
|
|
settings_path = get_settings_path()
|
||
|
|
|
||
|
|
if not settings_path.exists():
|
||
|
|
return {}
|
||
|
|
|
||
|
|
try:
|
||
|
|
with open(settings_path, 'r') as f:
|
||
|
|
saved = yaml.safe_load(f)
|
||
|
|
return saved if saved else {}
|
||
|
|
except Exception as e:
|
||
|
|
logger.warning(f"Failed to load image model settings: {e}")
|
||
|
|
return {}
|
||
|
|
|
||
|
|
|
||
|
|
def get_effective_settings():
|
||
|
|
"""
|
||
|
|
Get effective settings with precedence:
|
||
|
|
1. CLI flag (if provided)
|
||
|
|
2. Saved yaml value (if exists)
|
||
|
|
3. Hardcoded default
|
||
|
|
|
||
|
|
Returns a dict with all settings.
|
||
|
|
"""
|
||
|
|
yaml_settings = load_yaml_settings()
|
||
|
|
|
||
|
|
effective = {}
|
||
|
|
|
||
|
|
# model_name: CLI --image-model > yaml > default
|
||
|
|
if shared.args.image_model:
|
||
|
|
effective['model_name'] = shared.args.image_model
|
||
|
|
else:
|
||
|
|
effective['model_name'] = yaml_settings.get('model_name', DEFAULTS['model_name'])
|
||
|
|
|
||
|
|
# dtype: CLI --image-dtype > yaml > default
|
||
|
|
if shared.args.image_dtype is not None:
|
||
|
|
effective['dtype'] = shared.args.image_dtype
|
||
|
|
else:
|
||
|
|
effective['dtype'] = yaml_settings.get('dtype', DEFAULTS['dtype'])
|
||
|
|
|
||
|
|
# attn_backend: CLI --image-attn-backend > yaml > default
|
||
|
|
if shared.args.image_attn_backend is not None:
|
||
|
|
effective['attn_backend'] = shared.args.image_attn_backend
|
||
|
|
else:
|
||
|
|
effective['attn_backend'] = yaml_settings.get('attn_backend', DEFAULTS['attn_backend'])
|
||
|
|
|
||
|
|
# cpu_offload: CLI --image-cpu-offload > yaml > default
|
||
|
|
# For store_true flags, check if explicitly set (True means it was passed)
|
||
|
|
if shared.args.image_cpu_offload:
|
||
|
|
effective['cpu_offload'] = True
|
||
|
|
else:
|
||
|
|
effective['cpu_offload'] = yaml_settings.get('cpu_offload', DEFAULTS['cpu_offload'])
|
||
|
|
|
||
|
|
# compile_model: CLI --image-compile > yaml > default
|
||
|
|
if shared.args.image_compile:
|
||
|
|
effective['compile_model'] = True
|
||
|
|
else:
|
||
|
|
effective['compile_model'] = yaml_settings.get('compile_model', DEFAULTS['compile_model'])
|
||
|
|
|
||
|
|
return effective
|
||
|
|
|
||
|
|
|
||
|
|
def save_image_model_settings(model_name, dtype, attn_backend, cpu_offload, compile_model):
|
||
|
|
"""Save image model settings to yaml."""
|
||
|
|
settings_path = get_settings_path()
|
||
|
|
|
||
|
|
# Ensure directory exists
|
||
|
|
settings_path.parent.mkdir(parents=True, exist_ok=True)
|
||
|
|
|
||
|
|
settings = {
|
||
|
|
'model_name': model_name,
|
||
|
|
'dtype': dtype,
|
||
|
|
'attn_backend': attn_backend,
|
||
|
|
'cpu_offload': cpu_offload,
|
||
|
|
'compile_model': compile_model,
|
||
|
|
}
|
||
|
|
|
||
|
|
try:
|
||
|
|
with open(settings_path, 'w') as f:
|
||
|
|
yaml.dump(settings, f, default_flow_style=False)
|
||
|
|
logger.info(f"Saved image model settings to {settings_path}")
|
||
|
|
except Exception as e:
|
||
|
|
logger.error(f"Failed to save image model settings: {e}")
|