Preparing modelspace release

This commit is contained in:
2025-09-15 12:14:26 +07:00
parent fb1d7c295a
commit 98aa64515f
5 changed files with 63 additions and 33 deletions

22
main.py
View File

@@ -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')

View File

@@ -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)

View File

@@ -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)

View File

@@ -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'

View File

@@ -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