Add "Nailed it" rating — prompt-adherence positive, weaker than Perfect
Restores the old "Loved it" learning behavior (reward 0.75, intent delta +0.03, preferred context 0.65, axis conditioning 0.35, LoRA 0.44/0.24) as a distinct rating. Sits between Perfect and Loved it on the ladder: prompt adherence is rewarded but not at full strength. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
aa47dca72b
commit
24640a02bf
+33
-8
@@ -5633,6 +5633,7 @@ _V2_PERSISTENT_CACHE_MAX = 4096
|
||||
V2_RATING_LABELS = [
|
||||
"-Just forget it-",
|
||||
"Perfect",
|
||||
"Nailed it",
|
||||
"Loved it",
|
||||
"Missing details",
|
||||
"Missing action",
|
||||
@@ -5651,6 +5652,7 @@ V2_RATING_PROFILES = {
|
||||
"-Just forget it-": {"key": "forget", "reward": 0.0, "level": 0, "missing_axes": [], "skip_learning": True},
|
||||
"Initial discovery": {"key": "discover", "reward": 0.0, "level": 4, "missing_axes": []},
|
||||
"Perfect": {"key": "like", "reward": 1.0, "level": 8, "missing_axes": []},
|
||||
"Nailed it": {"key": "nailed_it", "reward": 0.75, "level": 7, "missing_axes": []},
|
||||
"Loved it": {"key": "loved_it", "reward": 0.85, "level": 7, "missing_axes": []},
|
||||
"Missing details": {"key": "missing_details", "reward": 0.35, "level": 6, "missing_axes": ["details"]},
|
||||
"Missing action": {"key": "missing_action", "reward": 0.05, "level": 5, "missing_axes": ["action"]},
|
||||
@@ -6467,7 +6469,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
return "Seed memory: seed output not connected."
|
||||
if not isinstance(last_run, dict) or rating_profile.get("skip_learning"):
|
||||
return "Seed memory: no previous sampler seed to learn from."
|
||||
if rating_profile.get("key") not in {"like", "loved_it"}:
|
||||
if rating_profile.get("key") not in {"like", "loved_it", "nailed_it"}:
|
||||
return "Seed memory: rating not successful."
|
||||
if not last_run.get("seed_output_connected", seed_output_connected):
|
||||
return "Seed memory: previous seed output was not connected."
|
||||
@@ -7285,7 +7287,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
wrong_axes = set(rating_profile.get("wrong_axes", [])) & all_axes
|
||||
if key == "awful":
|
||||
missing_axes = set(all_axes)
|
||||
elif key in {"like", "loved_it"}:
|
||||
elif key in {"like", "loved_it", "nailed_it"}:
|
||||
missing_axes = set()
|
||||
wrong_axes = set()
|
||||
|
||||
@@ -7324,7 +7326,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
return axis_feedback, "Repair persistence: unavailable."
|
||||
active = set(global_state.get("active_repair_axes", []) or []) & set(V2_FEEDBACK_AXES)
|
||||
key = learning_profile.get("key", "") if isinstance(learning_profile, dict) else ""
|
||||
if key in {"like", "loved_it"}:
|
||||
if key in {"like", "loved_it", "nailed_it"}:
|
||||
active = set()
|
||||
global_state["active_repair_axes"] = []
|
||||
feedback = dict(axis_feedback or {})
|
||||
@@ -8151,12 +8153,14 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
entry["phrases"] = phrases_for_token[-12:]
|
||||
if token in intent_token_set:
|
||||
entry["intent_count"] = int(entry.get("intent_count", 0)) + 1
|
||||
delta = 0.06 if rating_key == "like" else 0.0
|
||||
delta = 0.06 if rating_key == "like" else (0.03 if rating_key == "nailed_it" else 0.0)
|
||||
else:
|
||||
entry["enhancer_only_count"] = int(entry.get("enhancer_only_count", 0)) + 1
|
||||
if rating_key == "like":
|
||||
delta = 0.12
|
||||
entry["accepted_count"] = int(entry.get("accepted_count", 0)) + 1
|
||||
elif rating_key == "nailed_it":
|
||||
delta = 0.07
|
||||
elif rating_key == "loved_it":
|
||||
delta = 0.07
|
||||
elif phrase_is_bad_extra:
|
||||
@@ -8201,6 +8205,9 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
if rating_key == "like":
|
||||
delta = -0.18
|
||||
entry["forgiven_count"] = int(entry.get("forgiven_count", 0)) + 1
|
||||
elif rating_key == "nailed_it":
|
||||
delta = -0.10
|
||||
entry["forgiven_count"] = int(entry.get("forgiven_count", 0)) + 1
|
||||
elif rating_key == "loved_it":
|
||||
continue # axis-blind quality endorsement — don't learn prompt adherence
|
||||
elif rating_key == "awful":
|
||||
@@ -8409,6 +8416,9 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
if rating_profile.get("key") == "like":
|
||||
positive_axes = {"action", "details"}
|
||||
base_delta = 1.0
|
||||
elif rating_profile.get("key") == "nailed_it":
|
||||
positive_axes = {"action", "details"}
|
||||
base_delta = 0.65
|
||||
elif rating_profile.get("key") == "loved_it":
|
||||
return "Preferred context: skipped for axis-blind quality endorsement."
|
||||
else:
|
||||
@@ -8600,6 +8610,18 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
else:
|
||||
delta = 0.0
|
||||
count_category_evidence = False
|
||||
elif rating_profile.get("key") == "nailed_it":
|
||||
delta = 0.35 * kind_scale
|
||||
entry["liked_count"] = int(entry.get("liked_count", 0)) + 1
|
||||
rating_evidence["liked"] = int(rating_evidence.get("liked", 0)) + 1
|
||||
entry["satisfied_count"] = int(entry.get("satisfied_count", 0)) + 1
|
||||
satisfied_axis_counts = entry.setdefault("satisfied_axes", {})
|
||||
for axis in V2_FEEDBACK_AXES:
|
||||
satisfied_axis_counts[axis] = int(satisfied_axis_counts.get(axis, 0)) + 1
|
||||
bump_evidence("satisfied_axes", V2_FEEDBACK_AXES)
|
||||
for category, score in effective_before.items():
|
||||
if float(score) >= 0.28:
|
||||
weights[category] = float(weights.get(category, 0.0)) + 0.08 * kind_scale
|
||||
elif rating_profile.get("key") == "loved_it":
|
||||
delta = 0.35 * kind_scale
|
||||
entry["liked_count"] = int(entry.get("liked_count", 0)) + 1
|
||||
@@ -9062,7 +9084,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
)
|
||||
self._v2_update_axis_conditioning_memory(global_state, payload, axis_feedback,
|
||||
session_mean_payload=session_mean)
|
||||
if key in {"like", "loved_it"}:
|
||||
if key in {"like", "loved_it", "nailed_it"}:
|
||||
liked_dir_slot = global_state.setdefault("liked_dir", {})
|
||||
self._v2_store_direction(liked_dir_slot, payload, session_mean)
|
||||
count = int(global_state.get("liked_conditioning_count", 0))
|
||||
@@ -9095,7 +9117,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
avg = float(global_state.get("avg_reward_ema", 0.0))
|
||||
avg = 0.86 * avg + 0.14 * reward
|
||||
global_state["avg_reward_ema"] = round(avg, 6)
|
||||
if rating_profile.get("key") in {"like", "loved_it"}:
|
||||
if rating_profile.get("key") in {"like", "loved_it", "nailed_it"}:
|
||||
global_state["good_streak"] = int(global_state.get("good_streak", 0)) + 1
|
||||
global_state["bad_streak"] = 0
|
||||
elif reward < -0.25:
|
||||
@@ -10706,7 +10728,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
profile = V2_RATING_PROFILES.get(rating_label) or V2_RATING_PROFILES.get(V2_RATING_ALIASES.get(str(rating_label), ""), {})
|
||||
rating_key = profile.get("key", "")
|
||||
appearance_wrong = rating_key == "wrong_appearance"
|
||||
positive = rating_key in {"like", "loved_it"}
|
||||
positive = rating_key in {"like", "loved_it", "nailed_it"}
|
||||
negative = float(profile.get("reward", 0.5)) < 0.3
|
||||
lines = []
|
||||
for ch in diff:
|
||||
@@ -11015,6 +11037,9 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
lora_axes = self._v2_lora_feedback_axes(lora_type)
|
||||
if rating_profile.get("key") == "like":
|
||||
offset += step * max(0.18, relation) * 0.55
|
||||
elif rating_profile.get("key") == "nailed_it":
|
||||
quality_type = lora_type in {"quality", "style"}
|
||||
offset += step * max(0.18, relation) * (0.44 if quality_type else 0.24)
|
||||
elif rating_profile.get("key") == "loved_it":
|
||||
quality_type = lora_type in {"quality", "style"}
|
||||
offset += step * max(0.18, relation) * (0.55 if quality_type else 0.30)
|
||||
@@ -11772,7 +11797,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
from ltx_enhancements import build_enhancements, bless_attention_maps
|
||||
|
||||
# Bless attention maps when the previous run was rated Perfect or Loved it
|
||||
if eff_key and isinstance(learning_profile, dict) and learning_profile.get("key") in {"like", "loved_it"}:
|
||||
if eff_key and isinstance(learning_profile, dict) and learning_profile.get("key") in {"like", "loved_it", "nailed_it"}:
|
||||
bless_attention_maps(eff_key)
|
||||
|
||||
patched_model = build_enhancements(
|
||||
|
||||
Reference in New Issue
Block a user