feat: align product suite prompts with reference images
This commit is contained in:
@@ -33,6 +33,7 @@ class ProductSuitePromptDialog(QDialog):
|
||||
base_prompt,
|
||||
settings,
|
||||
item_id,
|
||||
source_image_count=0,
|
||||
parent=None,
|
||||
):
|
||||
super().__init__(parent)
|
||||
@@ -44,6 +45,10 @@ class ProductSuitePromptDialog(QDialog):
|
||||
self.base_prompt = str(base_prompt or "")
|
||||
self.settings = product_suite.normalize_suite_settings(settings)
|
||||
self.item_id = str(item_id or "")
|
||||
self.reference_asset_count = product_suite.reference_asset_count(
|
||||
self.settings,
|
||||
source_image_count,
|
||||
)
|
||||
self._saved_text = ""
|
||||
self._allow_close = False
|
||||
|
||||
@@ -193,6 +198,7 @@ class ProductSuitePromptDialog(QDialog):
|
||||
category,
|
||||
self.item_id or "未绑定商品",
|
||||
source_index=1,
|
||||
reference_asset_count=self.reference_asset_count,
|
||||
)
|
||||
|
||||
def refresh_preview(self):
|
||||
|
||||
@@ -3138,15 +3138,20 @@ class ProductSuiteTab(QWidget):
|
||||
settings = state.settings
|
||||
base_prompt = state.prompt
|
||||
item_id = state.item_id or "未绑定商品"
|
||||
source_image_count = len(
|
||||
[asset for asset in self._original_assets(state) if _asset_usable(asset)]
|
||||
)
|
||||
else:
|
||||
settings = product_suite.default_suite_settings()
|
||||
base_prompt = ""
|
||||
item_id = "未绑定商品"
|
||||
source_image_count = 0
|
||||
dialog = ProductSuitePromptDialog(
|
||||
prompt_path=self.product_suite_prompt_path,
|
||||
base_prompt=base_prompt,
|
||||
settings=settings,
|
||||
item_id=item_id,
|
||||
source_image_count=source_image_count,
|
||||
parent=self,
|
||||
)
|
||||
self.prompt_settings_dialog = dialog
|
||||
|
||||
+38
-7
@@ -253,25 +253,53 @@ def validate_product_suite_prompt(template_text):
|
||||
return str(template_text)
|
||||
|
||||
|
||||
def reference_asset_count(settings, source_image_count):
|
||||
"""Return the effective reference-image count for a planned cmhub request."""
|
||||
normalized = normalize_suite_settings(settings)
|
||||
if normalized["per_image_primary"]:
|
||||
return 0
|
||||
try:
|
||||
image_count = max(0, int(source_image_count or 0))
|
||||
except (TypeError, ValueError):
|
||||
image_count = 0
|
||||
return min(7, max(0, image_count - 1))
|
||||
|
||||
|
||||
def product_suite_reference_rule(settings, reference_asset_count=0):
|
||||
normalized = normalize_suite_settings(settings)
|
||||
try:
|
||||
count = max(0, min(7, int(reference_asset_count or 0)))
|
||||
except (TypeError, ValueError):
|
||||
count = 0
|
||||
if normalized["per_image_primary"] or count <= 0:
|
||||
return (
|
||||
"参考图规则:当前上传图片是本任务唯一主参考图;保持商品主体、款式、颜色和关键细节准确;"
|
||||
"不编造用户与参考图均未提供的信息。"
|
||||
)
|
||||
return (
|
||||
"参考图规则:第1张为主商品图,请保持其主体、款式、颜色和关键细节准确;"
|
||||
"第2至%d张仅作为风格、构图、场景或排版参考,不得替换主商品;"
|
||||
"不编造用户与参考图均未提供的信息。" % (count + 1)
|
||||
)
|
||||
|
||||
|
||||
def product_suite_prompt_context(
|
||||
base_prompt,
|
||||
settings,
|
||||
category,
|
||||
item_id,
|
||||
source_index=1,
|
||||
reference_asset_count=0,
|
||||
):
|
||||
normalized = normalize_suite_settings(settings)
|
||||
item_text = str(item_id or "").strip()
|
||||
if not item_text or item_text.startswith("draft_"):
|
||||
item_text = "未绑定商品"
|
||||
reference_index = max(1, int(source_index or 1))
|
||||
if normalized["per_image_primary"]:
|
||||
reference_rule = (
|
||||
"参考图规则:当前上传图片是本任务唯一主参考图;保持商品主体、款式、颜色和关键细节准确;"
|
||||
"不编造用户与参考图均未提供的信息。"
|
||||
)
|
||||
else:
|
||||
reference_rule = "参考图规则:使用第一張上傳圖作為主商品圖,其餘圖片只作為參考。"
|
||||
reference_rule = product_suite_reference_rule(
|
||||
normalized,
|
||||
reference_asset_count,
|
||||
)
|
||||
return {
|
||||
"生成目标": category_description(category),
|
||||
"套图名称": str(category or ""),
|
||||
@@ -329,6 +357,7 @@ def build_suite_prompt(
|
||||
category,
|
||||
item_id,
|
||||
source_index=1,
|
||||
reference_asset_count=0,
|
||||
*,
|
||||
template_text,
|
||||
):
|
||||
@@ -338,6 +367,7 @@ def build_suite_prompt(
|
||||
category,
|
||||
item_id,
|
||||
source_index=source_index,
|
||||
reference_asset_count=reference_asset_count,
|
||||
)
|
||||
return render_product_suite_prompt(template_text, context)
|
||||
|
||||
@@ -376,6 +406,7 @@ def build_job_specs(source_assets, base_prompt, settings, item_id, *, template_t
|
||||
category,
|
||||
item_id,
|
||||
source_index=source_index,
|
||||
reference_asset_count=len(reference_asset_ids),
|
||||
template_text=template_text,
|
||||
),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user