feat(product-suite): decouple ai writing gateway

This commit is contained in:
chengma
2026-07-23 10:42:55 +08:00
parent f7c9d761ee
commit 3d4976913e
10 changed files with 183 additions and 29 deletions
+38 -15
View File
@@ -4604,14 +4604,30 @@ class ProductSuiteTab(QWidget):
return
self._status("已完成已提交图片查询,请查看生成结果", "success")
def _require_default_gateway(self, action):
if self._is_default_gateway():
return True
self._message("当前不可用", "%s仅支持默认网关,请到⑤设置切换后再使用。" % action)
return False
def _ai_write_config_error(self):
try:
cmhub_config = appconfig.cmhub_config(self.config)
base_url = appconfig.normalize_cmhub_base_url(cmhub_config.get("base_url"))
api_key = appconfig.get_cmhub_api_key(self.cmhub_config_path)
alias = str(cmhub_config.get("vision_alias") or "").strip()
except Exception:
return "默认网关图片理解配置无法读取"
if not base_url:
return "尚未配置默认网关地址"
if not api_key:
return "尚未配置默认网关 API Key"
if not alias:
return "尚未选择图片理解模型"
return ""
def start_ai_write(self, checked=False):
if not self._require_default_gateway("商品套图AI帮写"):
config_error = self._ai_write_config_error()
if config_error:
self._message(
"AI帮写配置不完整",
"%s。请到⑤设置补齐默认网关的地址、API Key 和图片理解模型。"
% config_error,
)
return
if self.subscription_preflight_callback is not None and not self.subscription_preflight_callback("开始 AI 帮写"):
return
@@ -4634,10 +4650,14 @@ class ProductSuiteTab(QWidget):
self._save_controls_to_state(state)
selected_asset_ids = tuple(int(asset.id) for asset in selected_assets)
catalog_params = self._ai_write_catalog_params()
if catalog_params is None:
self._message(
"AI帮写配置不完整",
"默认网关图片理解配置无法读取,请到⑤设置检查后重试。",
)
return
cached_models = (
cmhub_models.cached_model_catalog(catalog_params["base_url"], catalog_params["alias"])
if catalog_params is not None
else None
)
if cached_models is not None:
self._confirm_ai_write_request(
@@ -4646,9 +4666,6 @@ class ProductSuiteTab(QWidget):
self._ai_write_points_cost(cached_models, catalog_params["alias"]),
)
return
if catalog_params is None:
self._confirm_ai_write_request(state, selected_asset_ids, None)
return
self._start_ai_write_catalog_lookup(state, selected_asset_ids, catalog_params)
def _ai_write_selected_assets(self, state):
@@ -5962,6 +5979,7 @@ class ProductSuiteTab(QWidget):
pull_running = state.pull_running()
default_gateway = self._is_default_gateway()
supported_gateway = default_gateway or self._is_direct_gateway()
ai_write_config_error = self._ai_write_config_error()
self.pull_button.setText(
"正在停止..."
if pull_running and state.pull_stop_requested
@@ -6018,13 +6036,18 @@ class ProductSuiteTab(QWidget):
self._refresh_totals(state)
ai_running = state.ai_worker is not None or state.ai_price_worker is not None
self.ai_write_button.setEnabled(
default_gateway and not ai_running and not generation_running
not ai_write_config_error and not ai_running and not generation_running
)
if not default_gateway and not ai_running:
self.ai_write_button.setToolTip("商品套图AI帮写仅支持默认网关")
self.generate_button.setToolTip("自定义网关生成不计点数,实际费用以服务商为准")
if ai_write_config_error and not ai_running:
self.ai_write_button.setToolTip(
"%s,请到⑤设置配置默认网关的地址、API Key 和图片理解模型"
% ai_write_config_error
)
else:
self.ai_write_button.setToolTip("")
if not default_gateway and not ai_running:
self.generate_button.setToolTip("自定义网关生成不计点数,实际费用以服务商为准")
else:
self.generate_button.setToolTip("")
self.ai_cancel_button.setVisible(ai_running)
self._update_resume_submitted_action(state)