mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-12-17 01:52:59 +08:00
Add workflow templates version tracking to system_stats (#9089)
Adds installed and required workflow templates version information to the /system_stats endpoint, allowing the frontend to detect and notify users when their templates package is outdated. - Add get_installed_templates_version() and get_required_templates_version() methods to FrontendManager - Include templates version info in system_stats response - Add comprehensive unit tests for the new functionality
This commit is contained in:
parent
0572029fee
commit
255572188f
@ -42,6 +42,7 @@ def get_installed_frontend_version():
|
|||||||
frontend_version_str = version("comfyui-frontend-package")
|
frontend_version_str = version("comfyui-frontend-package")
|
||||||
return frontend_version_str
|
return frontend_version_str
|
||||||
|
|
||||||
|
|
||||||
def get_required_frontend_version():
|
def get_required_frontend_version():
|
||||||
"""Get the required frontend version from requirements.txt."""
|
"""Get the required frontend version from requirements.txt."""
|
||||||
try:
|
try:
|
||||||
@ -63,6 +64,7 @@ def get_required_frontend_version():
|
|||||||
logging.error(f"Error reading requirements.txt: {e}")
|
logging.error(f"Error reading requirements.txt: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def check_frontend_version():
|
def check_frontend_version():
|
||||||
"""Check if the frontend version is up to date."""
|
"""Check if the frontend version is up to date."""
|
||||||
|
|
||||||
@ -203,6 +205,37 @@ class FrontendManager:
|
|||||||
"""Get the required frontend package version."""
|
"""Get the required frontend package version."""
|
||||||
return get_required_frontend_version()
|
return get_required_frontend_version()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_installed_templates_version(cls) -> str:
|
||||||
|
"""Get the currently installed workflow templates package version."""
|
||||||
|
try:
|
||||||
|
templates_version_str = version("comfyui-workflow-templates")
|
||||||
|
return templates_version_str
|
||||||
|
except Exception:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_required_templates_version(cls) -> str:
|
||||||
|
"""Get the required workflow templates version from requirements.txt."""
|
||||||
|
try:
|
||||||
|
with open(requirements_path, "r", encoding="utf-8") as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith("comfyui-workflow-templates=="):
|
||||||
|
version_str = line.split("==")[-1]
|
||||||
|
if not is_valid_version(version_str):
|
||||||
|
logging.error(f"Invalid templates version format in requirements.txt: {version_str}")
|
||||||
|
return None
|
||||||
|
return version_str
|
||||||
|
logging.error("comfyui-workflow-templates not found in requirements.txt")
|
||||||
|
return None
|
||||||
|
except FileNotFoundError:
|
||||||
|
logging.error("requirements.txt not found. Cannot determine required templates version.")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error reading requirements.txt: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_frontend_path(cls) -> str:
|
def default_frontend_path(cls) -> str:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -550,6 +550,8 @@ class PromptServer():
|
|||||||
vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True)
|
vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True)
|
||||||
vram_free, torch_vram_free = comfy.model_management.get_free_memory(device, torch_free_too=True)
|
vram_free, torch_vram_free = comfy.model_management.get_free_memory(device, torch_free_too=True)
|
||||||
required_frontend_version = FrontendManager.get_required_frontend_version()
|
required_frontend_version = FrontendManager.get_required_frontend_version()
|
||||||
|
installed_templates_version = FrontendManager.get_installed_templates_version()
|
||||||
|
required_templates_version = FrontendManager.get_required_templates_version()
|
||||||
|
|
||||||
system_stats = {
|
system_stats = {
|
||||||
"system": {
|
"system": {
|
||||||
@ -558,6 +560,8 @@ class PromptServer():
|
|||||||
"ram_free": ram_free,
|
"ram_free": ram_free,
|
||||||
"comfyui_version": __version__,
|
"comfyui_version": __version__,
|
||||||
"required_frontend_version": required_frontend_version,
|
"required_frontend_version": required_frontend_version,
|
||||||
|
"installed_templates_version": installed_templates_version,
|
||||||
|
"required_templates_version": required_templates_version,
|
||||||
"python_version": sys.version,
|
"python_version": sys.version,
|
||||||
"pytorch_version": comfy.model_management.torch_version,
|
"pytorch_version": comfy.model_management.torch_version,
|
||||||
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded",
|
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded",
|
||||||
|
|||||||
@ -205,3 +205,74 @@ numpy"""
|
|||||||
|
|
||||||
# Assert
|
# Assert
|
||||||
assert version is None
|
assert version is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_templates_version():
|
||||||
|
# Arrange
|
||||||
|
expected_version = "0.1.41"
|
||||||
|
mock_requirements_content = """torch
|
||||||
|
torchsde
|
||||||
|
comfyui-frontend-package==1.25.0
|
||||||
|
comfyui-workflow-templates==0.1.41
|
||||||
|
other-package==1.0.0
|
||||||
|
numpy"""
|
||||||
|
|
||||||
|
# Act
|
||||||
|
with patch("builtins.open", mock_open(read_data=mock_requirements_content)):
|
||||||
|
version = FrontendManager.get_required_templates_version()
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert version == expected_version
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_templates_version_not_found():
|
||||||
|
# Arrange
|
||||||
|
mock_requirements_content = """torch
|
||||||
|
torchsde
|
||||||
|
comfyui-frontend-package==1.25.0
|
||||||
|
other-package==1.0.0
|
||||||
|
numpy"""
|
||||||
|
|
||||||
|
# Act
|
||||||
|
with patch("builtins.open", mock_open(read_data=mock_requirements_content)):
|
||||||
|
version = FrontendManager.get_required_templates_version()
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert version is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_templates_version_invalid_semver():
|
||||||
|
# Arrange
|
||||||
|
mock_requirements_content = """torch
|
||||||
|
torchsde
|
||||||
|
comfyui-workflow-templates==1.0.0.beta
|
||||||
|
other-package==1.0.0
|
||||||
|
numpy"""
|
||||||
|
|
||||||
|
# Act
|
||||||
|
with patch("builtins.open", mock_open(read_data=mock_requirements_content)):
|
||||||
|
version = FrontendManager.get_required_templates_version()
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert version is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_installed_templates_version():
|
||||||
|
# Arrange
|
||||||
|
expected_version = "0.1.40"
|
||||||
|
|
||||||
|
# Act
|
||||||
|
with patch("app.frontend_management.version", return_value=expected_version):
|
||||||
|
version = FrontendManager.get_installed_templates_version()
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert version == expected_version
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_installed_templates_version_not_installed():
|
||||||
|
# Act
|
||||||
|
with patch("app.frontend_management.version", side_effect=Exception("Package not found")):
|
||||||
|
version = FrontendManager.get_installed_templates_version()
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert version is None
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user