feat: tune cmhub image timeouts

This commit is contained in:
chengma
2026-07-08 11:22:47 +08:00
parent 2970aaa943
commit 46afae4b98
7 changed files with 79 additions and 19 deletions
+1 -1
View File
@@ -42,7 +42,7 @@ class CMHubError(AIError):
CMHUB_IMAGE_MAX_BYTES = 20 * 1024 * 1024
CMHUB_TITLE_READ_TIMEOUT_SECONDS = 600
CMHUB_IMAGE_READ_TIMEOUT_SECONDS = 650
CMHUB_IMAGE_READ_TIMEOUT_SECONDS = 900
CMHUB_IMAGE_CONCURRENCY_LIMIT = 5
CMHUB_IMAGE_DOWNLOAD_ATTEMPTS = 3
CMHUB_IMAGE_SLOW_DOWNLOAD_SECONDS = 20.0
+25 -4
View File
@@ -44,6 +44,8 @@ AI_CONCURRENCY_MIN = 1
AI_CONCURRENCY_MAX = 5
AI_RETRY_MIN = 0
AI_RETRY_MAX = 10
CMHUB_CONNECT_TIMEOUT_DEFAULT = 66
CMHUB_CONNECT_TIMEOUT_OLD_DEFAULT = 10
RUNTIME_CONFIG_KEYS = {
"config_path",
"ai_models_path",
@@ -81,7 +83,7 @@ DEFAULT_CONFIG = {
"base_url": "",
"title_alias": "",
"image_alias": "",
"connect_timeout": 10,
"connect_timeout": CMHUB_CONNECT_TIMEOUT_DEFAULT,
"use_system_proxy": False,
"download_with_curl": "auto",
"check_balance_before_batch": False,
@@ -350,7 +352,7 @@ def _deep_merge(defaults, loaded):
return merged
def _normalize_config_values(config):
def _normalize_config_values(config, migrate_old_cmhub_connect_timeout=False):
if not isinstance(config, dict):
return config
ai = config.get("ai")
@@ -376,6 +378,10 @@ def _normalize_config_values(config):
cmhub = ai.get("cmhub")
if isinstance(cmhub, dict):
cmhub["base_url"] = normalize_cmhub_base_url(cmhub.get("base_url", ""))
cmhub["connect_timeout"] = _normalize_cmhub_connect_timeout(
cmhub.get("connect_timeout"),
migrate_old_default=migrate_old_cmhub_connect_timeout,
)
cmhub["download_with_curl"] = _normalize_cmhub_download_with_curl(
cmhub.get("download_with_curl", "auto")
)
@@ -390,6 +396,18 @@ def _clamp_int(value, minimum, maximum, default):
return min(int(maximum), max(int(minimum), number))
def _normalize_cmhub_connect_timeout(value, migrate_old_default=False):
try:
number = int(value)
except (TypeError, ValueError):
number = CMHUB_CONNECT_TIMEOUT_DEFAULT
if number <= 0:
number = CMHUB_CONNECT_TIMEOUT_DEFAULT
if migrate_old_default and number == CMHUB_CONNECT_TIMEOUT_OLD_DEFAULT:
return CMHUB_CONNECT_TIMEOUT_DEFAULT
return number
def _normalize_cmhub_download_with_curl(value):
if isinstance(value, bool):
return "true" if value else "false"
@@ -560,7 +578,7 @@ def load_config(path=CONFIG_PATH) -> dict:
except json.JSONDecodeError as exc:
raise ConfigError(f"配置文件不是有效 JSON: {path}") from exc
normalized = _deep_merge(DEFAULT_CONFIG, loaded)
_normalize_config_values(normalized)
_normalize_config_values(normalized, migrate_old_cmhub_connect_timeout=True)
_assert_no_secrets(normalized)
return _with_runtime_paths(normalized, path)
@@ -633,7 +651,10 @@ def cmhub_config(config=None) -> dict:
merged["base_url"] = normalize_cmhub_base_url(merged.get("base_url", ""))
merged["title_alias"] = str(merged.get("title_alias", "") or "").strip()
merged["image_alias"] = str(merged.get("image_alias", "") or "").strip()
merged["connect_timeout"] = int(merged.get("connect_timeout", 10) or 10)
merged["connect_timeout"] = _normalize_cmhub_connect_timeout(
merged.get("connect_timeout"),
migrate_old_default=False,
)
merged["download_with_curl"] = _normalize_cmhub_download_with_curl(
merged.get("download_with_curl", "auto")
)
+11 -2
View File
@@ -88,7 +88,7 @@ class SettingsTab(QWidget):
self.cmhub_connect_timeout_spin = QSpinBox()
self.cmhub_connect_timeout_spin.setObjectName("cmhubConnectTimeoutSpin")
self.cmhub_connect_timeout_spin.setRange(1, 3600)
self.cmhub_connect_timeout_spin.setValue(10)
self.cmhub_connect_timeout_spin.setValue(appconfig.CMHUB_CONNECT_TIMEOUT_DEFAULT)
self.cmhub_check_balance_checkbox = QCheckBox("批量生成前检查余额")
self.cmhub_check_balance_checkbox.setObjectName("cmhubCheckBalanceCheckbox")
self.cmhub_refresh_button = QPushButton("刷新别名")
@@ -825,7 +825,16 @@ class SettingsTab(QWidget):
self._loaded_cmhub_api_key = appconfig.get_cmhub_api_key(path=self.cmhub_config_path)
self.cmhub_api_key_edit.setText(self._loaded_cmhub_api_key)
self.cmhub_connect_timeout_spin.setValue(
max(1, int(cmhub_cfg.get("connect_timeout", 10) or 10))
max(
1,
int(
cmhub_cfg.get(
"connect_timeout",
appconfig.CMHUB_CONNECT_TIMEOUT_DEFAULT,
)
or appconfig.CMHUB_CONNECT_TIMEOUT_DEFAULT
),
)
)
self.cmhub_check_balance_checkbox.setChecked(
bool(cmhub_cfg.get("check_balance_before_batch", False))