diff --git a/main.py b/main.py index 98859a7..579dccd 100644 --- a/main.py +++ b/main.py @@ -1,24 +1,4 @@ -from modelspace.ModelPackageSelector import ModelPackageSelector -from modelspace.ModelSpace import ModelSpace -from modelspace.Repository import global_repo from shell.Interactive import Interactive -# Interactive().start() +Interactive().start() -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') - -import modelspace.PathMap as pm - -pm -# m.run('flux') - -# m.install('flux-kontefghjvnxt') \ No newline at end of file diff --git a/modelspace/ModelPackageSelector.py b/modelspace/ModelPackageSelector.py index 2d524ea..0a97365 100644 --- a/modelspace/ModelPackageSelector.py +++ b/modelspace/ModelPackageSelector.py @@ -88,7 +88,7 @@ class ModelPackageSelector: available_packages = available_packages - installed_packages if len(available_packages) == 0: - self._installed_packages = self._installed_packages | set(available_packages) + print("All possible packages for your query had been installed") return available_packages if len(available_packages) == 1: self._installed_packages = self._installed_packages | set(available_packages) diff --git a/modelspace/ModelSpace.py b/modelspace/ModelSpace.py index 532a553..93123bd 100644 --- a/modelspace/ModelSpace.py +++ b/modelspace/ModelSpace.py @@ -33,9 +33,10 @@ class ModelSpace: def check_for_file_conflicts(self, pkg_id, path: str): path = Path(path) - self.temp_files_pending.add(pkg_id, path) if path.exists() or path in self.temp_files_pending.index: self.temp_file_conflicts.add(pkg_id, path) + self.temp_files_pending.add(pkg_id, path) + def get_dest_dir(self, package: ModelPackage, no_lineage = False): type_subdir = self.layout.get(package.package_type, None) @@ -63,7 +64,7 @@ class ModelSpace: - def install(self, resources: str | list[str], depth = 0, answer = None) -> None: + def install(self, resources: str | list[str], answer = None, depth = 0) -> None: if depth == 0: self._reset_selector() if isinstance(resources, str): resources = [resources] @@ -75,13 +76,14 @@ class ModelSpace: for file in package.files: self.check_for_file_conflicts(package.uuid, Path(self.path) / self.get_dest_dir(package, self.layout.no_lineage) / file) - if len(self.temp_file_conflicts.index) != 0: raise RuntimeError("File conflicts detected") + if len(self.temp_file_conflicts.index) != 0: + raise RuntimeError("File conflicts detected") for package in selected_packages: self.db.create_manual(package.uuid) # TODO add deps separation from manual packages for file in package.files: - self.db.create_file(package.uuid, Path(self.get_dest_dir(package, self.layout.no_lineage)) / file) - self._copier(package.path / "files" / file, str(self.get_dest_dir(package, self.layout.no_lineage)),[file]) + self.db.create_file(package.uuid, str(Path(self.get_dest_dir(package, self.layout.no_lineage)) / file)) + self._copier(package.path / "files", str(Path(self.path) / self.get_dest_dir(package, self.layout.no_lineage)),[file]) @@ -134,10 +136,11 @@ class ModelSpace: @property def available_resources(self): return self.repo.model_sub_repo.resources @property - def installed_manuals(self): return [m[0] if m and len(m) > 0 else None for m in self.db.get_all_manuals()] if self.db.get_all_manuals() else list() + def installed_manuals(self): return [self.repo.model_sub_repo.package_by_id(m[0]) if m and len(m) > 0 else None for m in self.db.get_all_manuals()] if self.db.get_all_manuals() else list() @property - def installed_deps(self): return [m[0] if m and len(m) > 0 else None for m in self.db.get_all_deps()] if self.db.get_all_deps() else list() + def installed_deps(self): return [self.repo.model_sub_repo.package_by_id(m[0]) if m and len(m) > 0 else None for m in self.db.get_all_deps()] if self.db.get_all_deps() else list() @property def installed_packages(self): return self.installed_manuals + self.installed_deps @property - def installed_resources(self): return self.repo.model_sub_repo.resources_from_pkg_list(self.installed_packages) + def installed_resources(self): return self.repo.model_sub_repo.resources_from_pkg_list(p.uuid for p in self.installed_packages) + diff --git a/modelspace/PathMap.py b/modelspace/PathMap.py index 237d64e..179b4be 100644 --- a/modelspace/PathMap.py +++ b/modelspace/PathMap.py @@ -24,6 +24,7 @@ comfy['clip_vision'] = 'clip_vision' comfy['controlnet'] = 'controlnet' comfy['diffuser'] = 'diffusers' comfy['diffusion_model'] = 'diffusion_models' +comfy['diffusion_nodel'] = 'diffusion_models' comfy['embedding'] = 'embeddings' comfy['gligen'] = 'gligen' comfy['hypernetwork'] = 'hypernetworks' @@ -31,7 +32,7 @@ comfy['lora'] = 'loras' comfy['model_patch'] = 'model_patches' comfy['photomaker'] = 'photomaker' comfy['style_model'] = 'style_models' -comfy['test_encoder'] = 'text_encoders' +comfy['text_encoder'] = 'text_encoders' comfy['unet'] = 'unet' comfy['upscale_model'] = 'upscale_models' comfy['vae'] = 'vae' diff --git a/shell/Handlers/ModelSpaceHandler.py b/shell/Handlers/ModelSpaceHandler.py index fc5c210..be1e472 100644 --- a/shell/Handlers/ModelSpaceHandler.py +++ b/shell/Handlers/ModelSpaceHandler.py @@ -1,3 +1,4 @@ +from modelspace.ModelSpace import ModelSpace from shell.Handlers.ABS import Handler from modelspace.Repository import global_repo @@ -8,12 +9,57 @@ class ModelSpaceHandler(Handler): self.forwarding_table: dict[str, Handler] = { } self.handle_table: dict = { - 'create_inter': self._create_inter + 'create-inter': self._create_inter, + 'install': self._install, + 'install-all': self._install_all, + # 'create': self._create, + 'load': self._load, + # 'show': self._show, + # 'activate': self._activate, } - + self._loaded_instances: dict[str, ModelSpace] = {} + self._active_instance: ModelSpace | None = None pass def _create_inter(self, command: list[str], pos=0): global_repo.add_model_package_interactive() self.succeed = True + + def _load(self, command: list[str], pos = 0): + keys, args = self.parse_arguments(command[pos:], ['path', 'layout', 'name']) + self._check_arg(keys, 'path') + self._check_arg(keys, 'layout') + if not keys['name']: keys['name'] = 'app' + i = ModelSpace(global_repo, path=keys['path'], layout=keys['layout']) + # if not i.config.created: raise self.execution_error("ACTIVATE INSTANCE: instance not exists") + self._loaded_instances[keys['name']] = i + self._active_instance = i + print(f"instance {keys['path']} loaded and activated. identified by {keys['name']}") + self.succeed = True + + # def _activate(self, command: list[str], pos = 0): + # keys, args = self.parse_arguments(command[pos:], ['name']) + # self._check_arg(keys, 'name') + # i = self._loaded_instances.get(command[1], None) + # if i: + # self._active_instance = i + # else: + # raise ValueError(f"pyapp {keys['name']} not loaded") + # + # def _show(self, command: list[str], pos = 0): + # print("Environment type:", self._active_instance.config.env_type) + # # TODO Add new config info (app section) + + # def _create(self, command: list[str], pos = 0): + # keys, args = self.parse_arguments(command[pos:], ['env', 'path', 'python']) + + def _install(self, command: list[str], pos = 0): + for resource in command[pos:]: self._active_instance.install(resource) + self.succeed = True + + def _install_all(self, command: list[str], pos = 0): + for resource in global_repo.model_sub_repo.resources.keys: + self._active_instance.install(resource, answer='all') + self.succeed = True +