Browse Source

Preserve workflow choices on AI fallback

bang 2 weeks ago
parent
commit
a47b8edb70
2 changed files with 33 additions and 16 deletions
  1. 26 16
      server.py
  2. 7 0
      web/index.html

+ 26 - 16
server.py

@@ -101,25 +101,28 @@ def _split_lines(value):
 def _creative_fallback(data):
     brief = (data.get("brief") or "").lower()
     text = " ".join([brief, data.get("styleNotes", "").lower(), data.get("avoidNotes", "").lower()])
-    theme = "jelly"
+    allowed_themes = {"jelly", "fruit", "egypt", "pirate", "pirate_jelly", "cyber"}
+    requested_theme = data.get("theme") if data.get("theme") in allowed_themes else ""
+    theme = requested_theme or "jelly"
     pirate_hint = any(k in text for k in ("pirate", "海盗", "treasure", "宝藏", "金币", "船长"))
     jelly_hint = any(k in text for k in ("jelly", "果冻", "candy", "糖果", "gummy", "软糖"))
-    if pirate_hint and jelly_hint:
-        theme = "pirate_jelly"
-    elif any(k in text for k in ("egypt", "埃及", "金字塔", "法老")):
-        theme = "egypt"
-    elif pirate_hint:
-        theme = "pirate"
-    elif any(k in text for k in ("cyber", "赛博", "neon", "霓虹")):
-        theme = "cyber"
-    elif any(k in text for k in ("fruit", "水果", "cherry", "樱桃")):
-        theme = "fruit"
-    reel_mode = "cluster" if any(k in text for k in ("消除", "cluster", "连通", "match")) else "ways"
-    volatility = "high" if any(k in text for k in ("刺激", "大奖", "高波动", "big win")) else "medium"
-    features = ["cascades", "free_spins", "wilds"]
-    if any(k in text for k in ("金币", "jackpot", "hold", "respin", "大奖池")):
+    if not requested_theme or requested_theme == "jelly":
+        if pirate_hint and jelly_hint:
+            theme = "pirate_jelly"
+        elif any(k in text for k in ("egypt", "埃及", "金字塔", "法老")):
+            theme = "egypt"
+        elif pirate_hint:
+            theme = "pirate"
+        elif any(k in text for k in ("cyber", "赛博", "neon", "霓虹")):
+            theme = "cyber"
+        elif any(k in text for k in ("fruit", "水果", "cherry", "樱桃")):
+            theme = "fruit"
+    reel_mode = data.get("reelMode") or ("cluster" if any(k in text for k in ("消除", "cluster", "连通", "match")) else "ways")
+    volatility = data.get("volatility") or ("high" if any(k in text for k in ("刺激", "大奖", "高波动", "big win")) else "medium")
+    features = list(data.get("features") or ["cascades", "free_spins", "wilds"])
+    if any(k in text for k in ("金币", "jackpot", "hold", "respin", "大奖池")) and "hold_win" not in features:
         features.append("hold_win")
-    if any(k in text for k in ("倍率", "multiplier", "连锁")):
+    if any(k in text for k in ("倍率", "multiplier", "连锁")) and "multipliers" not in features:
         features.append("multipliers")
     if theme == "pirate_jelly":
         for feature in ("hold_win", "multipliers"):
@@ -203,7 +206,14 @@ def creative_to_slot_request(data):
         "uploadedReferenceImages": len(reference_images),
         "styleNotes": data.get("styleNotes") or "",
         "avoidNotes": data.get("avoidNotes") or "",
+        "theme": data.get("theme") or "",
+        "reelMode": data.get("reelMode") or "",
+        "volatility": data.get("volatility") or "",
         "targetRtp": data.get("targetRtp", 96),
+        "characterCount": data.get("characterCount", 10),
+        "uiCompleteness": data.get("uiCompleteness", "full"),
+        "feedbackIntensity": data.get("feedbackIntensity", "standard"),
+        "features": data.get("features") or [],
         "enableMathModel": bool(data.get("enableMathModel", True)),
     }
     if not api_key:

+ 7 - 0
web/index.html

@@ -533,6 +533,13 @@ $('#aiWorkflowBtn').onclick=async()=>{
         reference_images:referenceImages,
         styleNotes:$('#creativeStyleNotes').value,
         avoidNotes:$('#creativeAvoidNotes').value,
+        theme:$('#wfTheme').value,
+        reelMode:$('#wfReelMode').value,
+        volatility:$('#wfVolatility').value,
+        characterCount:$('#wfCharacterCount').value,
+        uiCompleteness:$('#wfUiCompleteness').value,
+        feedbackIntensity:$('#wfFeedbackIntensity').value,
+        features:workflowPayload().features,
         targetRtp:$('#wfTargetRtp').value,
         enableMathModel:$('#wfEnableMathModel').checked
       })});