Spaces:
Running on Zero
Running on Zero
| """ | |
| MCP Tool: get_model_list | |
| Query the list of available image generation models, with optional filtering by model architecture. | |
| """ | |
| from .common import _load_yaml, _MODEL_LIST_PATH, _MODEL_DEFAULTS_PATH, _MODEL_ARCHITECTURES_PATH | |
| from .error_schema import make_not_found_error | |
| def handle_get_model_list(model_architecture: str = None) -> list | dict: | |
| """Dynamically load the list of available image generation models from model_list.yaml.""" | |
| model_list = _load_yaml(_MODEL_LIST_PATH) | |
| model_defaults = _load_yaml(_MODEL_DEFAULTS_PATH) | |
| arch_config = _load_yaml(_MODEL_ARCHITECTURES_PATH) | |
| valid_architectures = set(arch_config.get("architectures", {}).keys()) | |
| if model_architecture and model_architecture not in valid_architectures: | |
| return make_not_found_error("architecture", model_architecture) | |
| result = [] | |
| checkpoints = model_list.get("Checkpoint", {}) | |
| for arch_name, arch_data in checkpoints.items(): | |
| if model_architecture and arch_name != model_architecture: | |
| continue | |
| if not isinstance(arch_data, dict): | |
| continue | |
| models = arch_data.get("models", []) | |
| if not isinstance(models, list): | |
| continue | |
| arch_defaults = model_defaults.get(arch_name, {}) | |
| arch_level_defaults = arch_defaults.get("_defaults", {}) | |
| for model in models: | |
| display_name = model.get("display_name", "") | |
| category = model.get("category", None) | |
| model_specific_defaults = arch_defaults.get(display_name, {}) | |
| default_pos = model_specific_defaults.get( | |
| "positive_prompt", | |
| arch_level_defaults.get("positive_prompt", ""), | |
| ) | |
| default_neg = model_specific_defaults.get( | |
| "negative_prompt", | |
| arch_level_defaults.get("negative_prompt", ""), | |
| ) | |
| entry = { | |
| "name": display_name, | |
| "model_architecture": arch_name, | |
| } | |
| if category: | |
| entry["category"] = category | |
| if default_pos: | |
| entry["default_positive_prompt"] = default_pos | |
| if default_neg: | |
| entry["default_negative_prompt"] = default_neg | |
| result.append(entry) | |
| return result | |