refactor: consolidate logger imports and replace deprecated log.warn usage
This commit is contained in:
@@ -13,6 +13,7 @@ ENV/
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
AGENTS.md
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
+1
-2
@@ -25,9 +25,8 @@ if not __package__ or __package__ == "":
|
||||
sys.modules[package_name] = current_module
|
||||
if not hasattr(current_module, "__path__"):
|
||||
current_module.__path__ = [this_dir]
|
||||
from .core.log_system.log_funcs import create_module_logger
|
||||
from .core.log_system import LogLevel, create_module_logger, logger as backend_log_controller
|
||||
from .core.log_system.config import LOG_LEVEL as BACKEND_DEFAULT_LOG_LEVEL
|
||||
from .core.log_system.logger import LogLevel, logger as backend_log_controller
|
||||
|
||||
# Web directory for JavaScript interface
|
||||
WEB_DIRECTORY = "./web"
|
||||
|
||||
+9
-9
@@ -19,7 +19,7 @@ from pathlib import Path
|
||||
from collections import deque
|
||||
from urllib.parse import parse_qsl, urlencode, urljoin, urlparse, urlunparse
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
from .resolver import normalize_sha256
|
||||
@@ -196,7 +196,7 @@ def _resolve_civitai_download_url_for_aria2(
|
||||
log.debug("Resolved CivitAI download redirect for aria2")
|
||||
return resolved_url
|
||||
except Exception as exc:
|
||||
log.warn(f"Could not pre-resolve CivitAI download URL for aria2: {exc}")
|
||||
log.warning(f"Could not pre-resolve CivitAI download URL for aria2: {exc}")
|
||||
return url
|
||||
finally:
|
||||
if response is not None:
|
||||
@@ -628,7 +628,7 @@ def write_lora_manager_metadata(
|
||||
log.info(f"Metadata saved: {metadata_path}")
|
||||
return metadata_path
|
||||
except Exception as e:
|
||||
log.warn(f"Could not save metadata sidecar for {dest_path}: {e}")
|
||||
log.warning(f"Could not save metadata sidecar for {dest_path}: {e}")
|
||||
return None
|
||||
|
||||
|
||||
@@ -1149,7 +1149,7 @@ def _delete_partial_download_files(dest_path: str) -> None:
|
||||
if path and os.path.exists(path):
|
||||
os.remove(path)
|
||||
except Exception as exc:
|
||||
log.warn(f"Could not delete incomplete download file {path}: {exc}")
|
||||
log.warning(f"Could not delete incomplete download file {path}: {exc}")
|
||||
|
||||
|
||||
def download_file_with_aria2(
|
||||
@@ -1561,7 +1561,7 @@ def download_file(
|
||||
else:
|
||||
log.info(f"Cancelled: {filename} - no file to delete")
|
||||
except Exception as e:
|
||||
log.warn(f"Could not delete incomplete file {dest_path}: {e}")
|
||||
log.warning(f"Could not delete incomplete file {dest_path}: {e}")
|
||||
# Try harder on Windows - sometimes the file handle takes a moment to release
|
||||
try:
|
||||
time.sleep(0.5) # time is already imported at module level
|
||||
@@ -1722,7 +1722,7 @@ def download_model(
|
||||
error_msg = (
|
||||
f"File already exists and its SHA256 could not be verified: {dest_path}"
|
||||
)
|
||||
log.warn(f"{error_msg} ({e})")
|
||||
log.warning(f"{error_msg} ({e})")
|
||||
return {
|
||||
"success": False,
|
||||
"download_id": download_id,
|
||||
@@ -1778,7 +1778,7 @@ def download_model(
|
||||
"File already exists, but its SHA256 does not match the selected "
|
||||
f"source: {dest_path}"
|
||||
)
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"{error_msg} (existing={existing_sha256}, expected={expected_sha256})"
|
||||
)
|
||||
return {
|
||||
@@ -1823,7 +1823,7 @@ def _force_remove_aria2_transfer(download_id: str, gid: str) -> None:
|
||||
try:
|
||||
_aria2_rpc("aria2.forceRemove", [gid])
|
||||
except Exception as exc:
|
||||
log.warn(f"Could not cancel aria2 download {download_id}: {exc}")
|
||||
log.warning(f"Could not cancel aria2 download {download_id}: {exc}")
|
||||
|
||||
|
||||
def _get_aria2_action_lock(download_id: str) -> threading.Lock:
|
||||
@@ -1884,7 +1884,7 @@ def _run_aria2_desired_state_worker(download_id: str) -> None:
|
||||
if _aria2_action_error_is_ok(desired_status, str(exc)):
|
||||
_set_download_progress_status(download_id, desired_status, speed=0 if desired_status == "paused" else download_progress.get(download_id, {}).get("speed", 0))
|
||||
else:
|
||||
log.warn(f"aria2 {desired_status} action failed for {download_id}: {exc}")
|
||||
log.warning(f"aria2 {desired_status} action failed for {download_id}: {exc}")
|
||||
|
||||
with aria2_lock:
|
||||
latest = aria2_desired_states.get(download_id)
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import heapq
|
||||
from typing import List, Dict, Tuple, Optional
|
||||
from difflib import SequenceMatcher
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
try:
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ def _get_log():
|
||||
"""Return a lazily-created module logger (avoids circular imports)."""
|
||||
global _log
|
||||
if _log is None:
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
_log = create_module_logger(__name__)
|
||||
return _log
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ Unified utility for reporting progress of asynchronous search and download opera
|
||||
"""
|
||||
|
||||
from typing import Dict, Any, Optional, Callable
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import json
|
||||
from typing import Dict, Any, List, Optional, Tuple, Callable
|
||||
from urllib.parse import unquote
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
from .scanner import get_model_files
|
||||
|
||||
+5
-5
@@ -8,7 +8,7 @@ import os
|
||||
import time
|
||||
from typing import List, Dict, Tuple, Optional
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ try:
|
||||
import folder_paths
|
||||
except ImportError:
|
||||
folder_paths = None
|
||||
log.warn("Model Resolver: folder_paths not available yet - will retry later")
|
||||
log.warning("Model Resolver: folder_paths not available yet - will retry later")
|
||||
|
||||
_MODEL_FILES_CACHE: Optional[List[Dict[str, str]]] = None
|
||||
_MODEL_FILES_CACHE_AT: float = 0.0
|
||||
@@ -192,7 +192,7 @@ def scan_directory(
|
||||
}
|
||||
)
|
||||
except (OSError, PermissionError) as e:
|
||||
log.warn(f"Error scanning directory {directory}: {e}")
|
||||
log.warning(f"Error scanning directory {directory}: {e}")
|
||||
|
||||
return models
|
||||
|
||||
@@ -242,7 +242,7 @@ def scan_all_directories() -> List[Dict[str, str]]:
|
||||
elif raw_exts:
|
||||
extensions = {str(raw_exts).lower()}
|
||||
except Exception as e:
|
||||
log.warn(f"Error interpreting folder_paths entry for {category}: {e}")
|
||||
log.warning(f"Error interpreting folder_paths entry for {category}: {e}")
|
||||
continue
|
||||
|
||||
for directory_path in paths:
|
||||
@@ -268,7 +268,7 @@ def scan_all_directories() -> List[Dict[str, str]]:
|
||||
all_models.append(model)
|
||||
#log.debug(f"Found {len(models)} models in {category}/{directory_path}")
|
||||
except Exception as e:
|
||||
log.warn(f"Error scanning {category} directory {directory_path}: {e}")
|
||||
log.warning(f"Error scanning {category} directory {directory_path}: {e}")
|
||||
|
||||
return all_models
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Model Sources Module
|
||||
Provides search functionality for finding models from various sources.
|
||||
"""
|
||||
|
||||
from ..log_system.log_funcs import create_module_logger # noqa: F401
|
||||
from ..log_system import create_module_logger # noqa: F401
|
||||
|
||||
from .popular import search_popular_models, get_popular_model_url
|
||||
from .model_list import search_model_list, search_model_list_multiple
|
||||
|
||||
@@ -37,7 +37,7 @@ from ..type_utils import (
|
||||
normalize_model_image,
|
||||
)
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ def _extract_next_data(html_text: str) -> Dict[str, Any]:
|
||||
try:
|
||||
return json.loads(html.unescape(match.group(1)))
|
||||
except Exception as e:
|
||||
log.warn(f"CivArchive search JSON parse failed: {e}")
|
||||
log.warning(f"CivArchive search JSON parse failed: {e}")
|
||||
return {}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ def _request_json(
|
||||
timeout=timeout,
|
||||
)
|
||||
except Exception as e:
|
||||
log.warn(f"CivArchive API request failed: path={path}, error={e}")
|
||||
log.warning(f"CivArchive API request failed: path={path}, error={e}")
|
||||
return None
|
||||
|
||||
if response.status_code != 429 or attempt == 1:
|
||||
@@ -181,7 +181,7 @@ def _request_json(
|
||||
try:
|
||||
return response.json()
|
||||
except Exception as e:
|
||||
log.warn(f"CivArchive API JSON parse failed: path={path}, error={e}")
|
||||
log.warning(f"CivArchive API JSON parse failed: path={path}, error={e}")
|
||||
return None
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ def _request_page_text(
|
||||
timeout=timeout,
|
||||
)
|
||||
except Exception as e:
|
||||
log.warn(f"CivArchive page request failed: url={url}, error={e}")
|
||||
log.warning(f"CivArchive page request failed: url={url}, error={e}")
|
||||
return None
|
||||
|
||||
if response.status_code != 200:
|
||||
@@ -472,11 +472,11 @@ def _search_page(
|
||||
timeout=timeout,
|
||||
)
|
||||
except Exception as e:
|
||||
log.warn(f"CivArchive search request failed: query={query}, error={e}")
|
||||
log.warning(f"CivArchive search request failed: query={query}, error={e}")
|
||||
raise CivArchiveSearchError(str(e)) from e
|
||||
|
||||
if response.status_code != 200:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"CivArchive search returned {response.status_code}: query={query}"
|
||||
)
|
||||
raise CivArchiveSearchError(f"HTTP {response.status_code}")
|
||||
|
||||
+12
-12
@@ -33,7 +33,7 @@ from ..type_utils import (
|
||||
)
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..path_utils import calculate_file_sha256, get_filename_from_path
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -408,7 +408,7 @@ def _search_civitai_trpc_candidates(
|
||||
try:
|
||||
response = requests.get(url, headers=headers, timeout=timeout)
|
||||
except Exception as e:
|
||||
log.warn(f"CivitAI tRPC request failed for filename={filename}: {e}")
|
||||
log.warning(f"CivitAI tRPC request failed for filename={filename}: {e}")
|
||||
return []
|
||||
|
||||
text_preview = response.text[:800].replace("\n", " ").replace("\r", " ")
|
||||
@@ -422,7 +422,7 @@ def _search_civitai_trpc_candidates(
|
||||
try:
|
||||
payload = response.json()
|
||||
except Exception as e:
|
||||
log.warn(f"CivitAI tRPC JSON parse failed for filename={filename}: {e}")
|
||||
log.warning(f"CivitAI tRPC JSON parse failed for filename={filename}: {e}")
|
||||
return []
|
||||
|
||||
candidates = _extract_trpc_model_candidates(payload, limit=limit)
|
||||
@@ -441,7 +441,7 @@ def _search_civitai_red_candidates(
|
||||
|
||||
response = requests.get(search_url, timeout=timeout)
|
||||
if response.status_code != 200:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"CivitAI.red search returned {response.status_code} for filename={filename}"
|
||||
)
|
||||
return []
|
||||
@@ -536,7 +536,7 @@ def _find_civitai_file_in_model(
|
||||
f"{CIVITAI_API_URL}/models/{model_id}", headers=headers, timeout=15
|
||||
)
|
||||
if response.status_code != 200:
|
||||
log.warn(f"CivitAI model lookup returned {response.status_code} for model_id={model_id}")
|
||||
log.warning(f"CivitAI model lookup returned {response.status_code} for model_id={model_id}")
|
||||
return None
|
||||
|
||||
data = response.json()
|
||||
@@ -986,7 +986,7 @@ def get_civitai_model_details(
|
||||
timeout=20,
|
||||
)
|
||||
if response.status_code != 200:
|
||||
log.warn(f"CivitAI model details returned {response.status_code}: model_id={model_id}")
|
||||
log.warning(f"CivitAI model details returned {response.status_code}: model_id={model_id}")
|
||||
return None
|
||||
|
||||
data = response.json()
|
||||
@@ -1162,7 +1162,7 @@ def resolve_urn(
|
||||
response = requests.get(url, headers=headers, params=params, timeout=15)
|
||||
|
||||
if response.status_code != 200:
|
||||
log.warn(f"CivitAI URN resolve failed: {response.status_code}")
|
||||
log.warning(f"CivitAI URN resolve failed: {response.status_code}")
|
||||
_urn_cache[cache_key] = None
|
||||
return None
|
||||
|
||||
@@ -1170,7 +1170,7 @@ def resolve_urn(
|
||||
versions = data.get("modelVersions", [])
|
||||
|
||||
if not versions:
|
||||
log.warn(f"No versions found for model {model_id}/version {version_id}")
|
||||
log.warning(f"No versions found for model {model_id}/version {version_id}")
|
||||
_urn_cache[cache_key] = None
|
||||
return None
|
||||
|
||||
@@ -1182,7 +1182,7 @@ def resolve_urn(
|
||||
break
|
||||
|
||||
if not target_version:
|
||||
log.warn(f"Version {version_id} not found in model {model_id}")
|
||||
log.warning(f"Version {version_id} not found in model {model_id}")
|
||||
_urn_cache[cache_key] = None
|
||||
return None
|
||||
|
||||
@@ -1199,7 +1199,7 @@ def resolve_urn(
|
||||
primary_file = files[0] # Fallback to first
|
||||
|
||||
if not primary_file:
|
||||
log.warn(f"No files found for version {version_id}")
|
||||
log.warning(f"No files found for version {version_id}")
|
||||
_urn_cache[cache_key] = None
|
||||
return None
|
||||
|
||||
@@ -1322,7 +1322,7 @@ def get_model_info_by_hash(
|
||||
_hash_cache[cache_key] = None
|
||||
return None
|
||||
else:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"CivitAI hash lookup returned {response.status_code} for {file_hash}"
|
||||
)
|
||||
return None
|
||||
@@ -1395,7 +1395,7 @@ def get_model_info_by_hash(
|
||||
_hash_cache[cache_key] = None
|
||||
return None
|
||||
else:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"CivitAI hash lookup returned {response.status_code} for {file_hash}"
|
||||
)
|
||||
return None
|
||||
|
||||
@@ -14,7 +14,7 @@ from typing import Dict, Any, Optional, List, Callable
|
||||
from urllib.parse import urlparse, quote
|
||||
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
from ..path_utils import write_json_atomic, METADATA_DIR
|
||||
@@ -255,7 +255,7 @@ def _get_author_index(
|
||||
return fresh_index
|
||||
|
||||
if persistent_index:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"Using stale HuggingFace author index for author={author}; refresh failed"
|
||||
)
|
||||
_author_index_cache[cache_key] = persistent_index
|
||||
@@ -642,7 +642,7 @@ def _search_brave_for_huggingface_candidates(
|
||||
BRAVE_SEARCH_API_URL, headers=headers, params=params, timeout=15
|
||||
)
|
||||
if response.status_code != 200:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"Brave search returned {response.status_code} for query={query}"
|
||||
)
|
||||
return []
|
||||
@@ -760,7 +760,7 @@ def search_huggingface_for_file(
|
||||
search_url = f"{HF_API_URL}/models?search={quote(search_query)}&limit=20"
|
||||
response = requests.get(search_url, headers=headers, timeout=10)
|
||||
if response.status_code != 200:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"HuggingFace API status={response.status_code} query={search_query}"
|
||||
)
|
||||
continue
|
||||
|
||||
@@ -20,7 +20,7 @@ from ..matcher import (
|
||||
)
|
||||
from ..type_utils import select_primary_model_file
|
||||
from ..progress import report_progress, get_progress_reporter
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ def _connect_readonly() -> Optional[sqlite3.Connection]:
|
||||
conn.row_factory = sqlite3.Row
|
||||
return conn
|
||||
except Exception as e:
|
||||
log.warn(f"Failed to open LoRA Manager archive DB: {e}")
|
||||
log.warning(f"Failed to open LoRA Manager archive DB: {e}")
|
||||
return None
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ from urllib.request import Request, urlopen
|
||||
|
||||
from ..matcher import normalize_filename, calculate_similarity
|
||||
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ def _get_local_model_list_sha() -> str:
|
||||
header = f"blob {len(content)}\0".encode("utf-8")
|
||||
return hashlib.sha1(header + content).hexdigest()
|
||||
except Exception as e:
|
||||
log.warn(f"Error calculating model-list.json SHA: {e}")
|
||||
log.warning(f"Error calculating model-list.json SHA: {e}")
|
||||
return ""
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import tempfile
|
||||
from datetime import datetime, timezone
|
||||
from typing import Dict, Any, Optional, List
|
||||
|
||||
from ..log_system.log_funcs import create_module_logger
|
||||
from ..log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -285,7 +285,7 @@ def get_base_models_status(check_remote: bool = False) -> Dict[str, Any]:
|
||||
"update_available": new_models_found
|
||||
})
|
||||
except Exception as e:
|
||||
log.warn(f"Error checking remote base models: {e}")
|
||||
log.warning(f"Error checking remote base models: {e}")
|
||||
|
||||
return status
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import re
|
||||
import threading
|
||||
from typing import List, Dict, Any, Optional, Set
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ try:
|
||||
import folder_paths
|
||||
except ImportError:
|
||||
folder_paths = None
|
||||
log.warn("Model Resolver: folder_paths not available yet - will retry later")
|
||||
log.warning("Model Resolver: folder_paths not available yet - will retry later")
|
||||
|
||||
|
||||
from .type_utils import URN_TYPE_MAP, MODEL_EXTENSIONS
|
||||
@@ -2012,7 +2012,7 @@ def analyze_workflow_models(
|
||||
)
|
||||
all_model_refs.extend(model_refs)
|
||||
except Exception as e:
|
||||
log.warn(f"Error analyzing node {node.get('id', 'unknown')}: {e}")
|
||||
log.warning(f"Error analyzing node {node.get('id', 'unknown')}: {e}")
|
||||
continue
|
||||
|
||||
# Recursively analyze subgraphs (definitions already loaded above)
|
||||
@@ -2045,7 +2045,7 @@ def analyze_workflow_models(
|
||||
_apply_promoted_widget_locator(ref, promoted_widget_contexts)
|
||||
all_model_refs.extend(model_refs)
|
||||
except Exception as e:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"Error analyzing subgraph node {node.get('id', 'unknown')}: {e}"
|
||||
)
|
||||
continue
|
||||
|
||||
@@ -7,7 +7,7 @@ Updates workflow JSON by replacing model paths in nodes.
|
||||
import os
|
||||
from typing import Dict, Any, List, Optional
|
||||
|
||||
from .log_system.log_funcs import create_module_logger
|
||||
from .log_system import create_module_logger
|
||||
log = create_module_logger(__name__)
|
||||
|
||||
|
||||
@@ -201,13 +201,13 @@ def update_model_path(
|
||||
|
||||
if not node:
|
||||
location = f"subgraph {subgraph_id}" if subgraph_id else "top-level"
|
||||
log.warn(f"Node {node_id} not found in {location}")
|
||||
log.warning(f"Node {node_id} not found in {location}")
|
||||
return False
|
||||
|
||||
widgets_values = node.get("widgets_values", [])
|
||||
|
||||
if widget_index >= len(widgets_values):
|
||||
log.warn(f"Widget index {widget_index} out of range for node {node_id}")
|
||||
log.warning(f"Widget index {widget_index} out of range for node {node_id}")
|
||||
return False
|
||||
|
||||
# Get category from resolved_model if not provided
|
||||
@@ -289,12 +289,12 @@ def update_model_path(
|
||||
return True
|
||||
else:
|
||||
# Log the actual lora list for debugging
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"Lora '{original_lora_name}' not found in lora list. Available: {[li.get('name') for li in lora_list if isinstance(li, dict)]}"
|
||||
)
|
||||
return False
|
||||
else:
|
||||
log.warn(
|
||||
log.warning(
|
||||
f"LoraManager widget_index == 2 but lora_list is not a list: {type(lora_list)}"
|
||||
)
|
||||
return False
|
||||
@@ -357,7 +357,7 @@ def update_workflow_nodes(
|
||||
resolved_path = mapping.get("resolved_path")
|
||||
|
||||
if not all([node_id is not None, widget_index is not None, resolved_path]):
|
||||
log.warn(f"Invalid mapping: {mapping}")
|
||||
log.warning(f"Invalid mapping: {mapping}")
|
||||
continue
|
||||
|
||||
# Try to get base_directory from resolved_model if provided
|
||||
|
||||
Reference in New Issue
Block a user