Skip to content

Commit 95de152

Browse files
author
Billy
committed
Merge branch 'main' into taxonomy
2 parents ff5dcc3 + 3b154df commit 95de152

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

invokeai/app/run_app.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ def run_app() -> None:
4949
# Miscellaneous startup tasks.
5050
apply_monkeypatches()
5151
register_mime_types()
52-
if app_config.dev_reload:
53-
enable_dev_reload()
5452
check_cudnn(logger)
5553

5654
# Initialize the app and event loop.
@@ -61,6 +59,11 @@ def run_app() -> None:
6159
# core nodes have been imported so that we can catch when a custom node clobbers a core node.
6260
load_custom_nodes(custom_nodes_path=app_config.custom_nodes_path, logger=logger)
6361

62+
if app_config.dev_reload:
63+
# load_custom_nodes seems to bypass jurrigged's import sniffer, so be sure to call it *after* they're already
64+
# imported.
65+
enable_dev_reload(custom_nodes_path=app_config.custom_nodes_path)
66+
6467
# Start the server.
6568
config = uvicorn.Config(
6669
app=app,

invokeai/app/util/startup_utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
import mimetypes
33
import socket
4+
from pathlib import Path
45

56
import torch
67

@@ -33,8 +34,9 @@ def check_cudnn(logger: logging.Logger) -> None:
3334
)
3435

3536

36-
def enable_dev_reload() -> None:
37+
def enable_dev_reload(custom_nodes_path=None) -> None:
3738
"""Enable hot reloading on python file changes during development."""
39+
import invokeai
3840
from invokeai.backend.util.logging import InvokeAILogger
3941

4042
try:
@@ -44,7 +46,10 @@ def enable_dev_reload() -> None:
4446
'Can\'t start `--dev_reload` because jurigged is not found; `pip install -e ".[dev]"` to include development dependencies.'
4547
) from e
4648
else:
47-
jurigged.watch(logger=InvokeAILogger.get_logger(name="jurigged").info)
49+
paths = [str(Path(invokeai.__file__).with_name("*.py"))]
50+
if custom_nodes_path:
51+
paths.append(str(custom_nodes_path / "*.py"))
52+
jurigged.watch(pattern=paths, logger=InvokeAILogger.get_logger(name="jurigged").info)
4853

4954

5055
def apply_monkeypatches() -> None:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "5.9.0rc1"
1+
__version__ = "5.9.0rc2"

tests/test_imports.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import importlib
2+
import pkgutil
3+
4+
import invokeai
5+
6+
KNOWN_IMPORT_ERRORS = {
7+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.setup",
8+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.validate",
9+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.caffe2_benchmark",
10+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.caffe2_validate",
11+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.onnx_optimize",
12+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.onnx_validate",
13+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.onnx_to_caffe",
14+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.geffnet",
15+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.onnx_export",
16+
"invokeai.backend.model_manager.load.model_cache.torch_module_autocast.custom_modules.custom_invoke_linear_nf4",
17+
"invokeai.backend.model_manager.load.model_cache.torch_module_autocast.custom_modules.custom_invoke_linear_8_bit_lt",
18+
"invokeai.backend.image_util.normal_bae.nets.submodules.efficientnet_repo.hubconf",
19+
"invokeai.backend.quantization.bnb_nf4",
20+
"invokeai.backend.quantization.bnb_llm_int8",
21+
}
22+
23+
24+
def test_invokeai_imports():
25+
modules = {name for _, name, _ in pkgutil.walk_packages(invokeai.__path__, invokeai.__name__ + ".")}
26+
failed_to_import = set()
27+
28+
for mod in modules:
29+
try:
30+
importlib.import_module(mod)
31+
except Exception:
32+
if mod not in KNOWN_IMPORT_ERRORS:
33+
failed_to_import.add(mod)
34+
35+
assert not failed_to_import, f"Modules failed to import: {failed_to_import}"

0 commit comments

Comments
 (0)