From e848593ab67c1f2e095300655d5f5e9065860569 Mon Sep 17 00:00:00 2001 From: bsakaguchi Date: Mon, 15 Sep 2025 02:08:30 +0700 Subject: [PATCH] Trying to construct modelspace --- main.py | 20 +++++++++++-------- modelspace/ModelSpace.py | 22 ++++++++++++++++----- modelspace/PathMap.py | 42 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 13 deletions(-) create mode 100644 modelspace/PathMap.py diff --git a/main.py b/main.py index 3fe4137..98859a7 100644 --- a/main.py +++ b/main.py @@ -7,14 +7,18 @@ from shell.Interactive import Interactive m = ModelSpace(global_repo, '/mnt/vaiola/gagaga') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') -d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') +# d = m._deptree('flux') + +import modelspace.PathMap as pm + +pm # m.run('flux') # m.install('flux-kontefghjvnxt') \ No newline at end of file diff --git a/modelspace/ModelSpace.py b/modelspace/ModelSpace.py index b2d5edd..d4b9c4e 100644 --- a/modelspace/ModelSpace.py +++ b/modelspace/ModelSpace.py @@ -1,13 +1,17 @@ from pathlib import Path import os +from modelspace.Essentials import SetsDict from modelspace.ModelPackage import ModelPackage from modelspace.ModelPackageSelector import ModelPackageSelector from modelspace.ModelSpaceDatabase import ModelSpaceDatabase from modelspace.Repository import Repository +from modelspace.PathMap import map class ModelSpace: - def __init__(self, repo: Repository, path): + def __init__(self, repo: Repository, path, layout): + self.layout = map.get(layout, None) + if not self.layout: raise RuntimeError(f"No such layout: {layout}") self.repo = repo self.path = path self.config_dir = Path(self.path) / '.vaiola' @@ -37,9 +41,12 @@ class ModelSpace: - def get_dest_dir(self, package: ModelPackage): - # TODO - raise NotImplemented + def get_dest_dir(self, package: ModelPackage, no_lineage = False): + type_subdir = self.layout.get(package.package_type, None) + if not type_subdir: raise RuntimeError(f"This type ({package.package_type}) of packages not supported by current modelspace") + lineage_subdir = package.lineage + if no_lineage: return str(self.path / type_subdir) + return str(self.path / type_subdir / lineage_subdir) def _register_package_in_temp(self, package: ModelPackage): for resource in package.provides: self.temp_installed_resources.add(resource, package.uuid) @@ -68,7 +75,12 @@ class ModelSpace: for resource in resources: selected_packages = selected_packages | self._deptree(resource, answer) - # TODO check file conflicts + files = SetsDict() + for package in selected_packages: + for file in package.files: + files.add(package.uuid, Path(self.get_dest_dir(package, self.layout.no_lineage)) / file) + + for file in files.index: self.check_for_file_conflicts(file) # TODO run copier diff --git a/modelspace/PathMap.py b/modelspace/PathMap.py new file mode 100644 index 0000000..237d64e --- /dev/null +++ b/modelspace/PathMap.py @@ -0,0 +1,42 @@ +# editable modelspaces map file +# you can add custom layout by simple syntax +# Parameter "no_linage" disables creating subdir for each model linage +# = PathMap(no_lineage=) +# [] = '' +# +# map = { +# ... (other layouts) +# : "" +# ... (other layouts) +# } +# map must be single. Don't try to create multiple map variables. add all layouts to single map + +class PathMap(dict): + def __init__(self, no_lineage: bool): + super().__init__() + self.no_lineage = no_lineage + +comfy = PathMap(no_lineage=False) +comfy['audio_encoder'] = 'audio_encoders' +comfy['checkpoint'] = 'checkpoints' +comfy['clip'] = 'clip' +comfy['clip_vision'] = 'clip_vision' +comfy['controlnet'] = 'controlnet' +comfy['diffuser'] = 'diffusers' +comfy['diffusion_model'] = 'diffusion_models' +comfy['embedding'] = 'embeddings' +comfy['gligen'] = 'gligen' +comfy['hypernetwork'] = 'hypernetworks' +comfy['lora'] = 'loras' +comfy['model_patch'] = 'model_patches' +comfy['photomaker'] = 'photomaker' +comfy['style_model'] = 'style_models' +comfy['test_encoder'] = 'text_encoders' +comfy['unet'] = 'unet' +comfy['upscale_model'] = 'upscale_models' +comfy['vae'] = 'vae' +comfy['vae_approx'] = 'vae_approx' + +map = { + 'comfy': comfy +} \ No newline at end of file