Remove negative processing from Refiner, update Advisor system prompt to DeepSeek format
- Remove _v2_repair_negative_prompt and _v2_negative_prompt_advisor calls from all execution branches; negative prompt is now passed through unchanged. This fixes "Only prompt" mode running two AI generation passes (positive + negative) instead of one, and removes pointless processing at CFG=1.0. - Replace V2_PROMPT_ADVISOR_SYSTEM_PROMPT with the new structured format: ORIGINAL_USER_INTENT / LAST_PROMPT / RATING / OPTIONAL_NOTE variables, with explicit RULES for Missing-X vs Wrong-X repairs. - Rewrite _v2_advisor_prompt to fill in the four named variables; adds rating_label parameter (extracted from rating_profile at call site) so RATING is now properly included in every repair request. - In "Only prompt" mode the output format block is omitted so the model returns a plain prompt string with no labels, matching the system prompt's "Output ONLY the final prompt string" instruction. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
a27e8fa73c
commit
d4ef898299
+38
-87
@@ -5526,17 +5526,19 @@ V2_RATING_PROFILES = {
|
||||
V2_FEEDBACK_AXES = ("details", "action", "quality")
|
||||
V2_ADVISOR_MODES = ["Off", "Only diagnostics", "Only prompt", "Full"]
|
||||
|
||||
V2_PROMPT_ADVISOR_SYSTEM_PROMPT = """You are FunPack Refiner V2 Prompt Advisor. You help a video prompt refiner decide whether a prompt needs a repair before it is encoded.
|
||||
V2_PROMPT_ADVISOR_SYSTEM_PROMPT = """You are an exacting prompt repair system. You will receive:
|
||||
- ORIGINAL_USER_INTENT: the user's full original request.
|
||||
- LAST_PROMPT: the positive prompt that was just used.
|
||||
- RATING: one of [Missing action, Missing details, Missing quality, Wrong action/details, Wrong appearance, Just forget it].
|
||||
- OPTIONAL_NOTE: user's optional clarification.
|
||||
|
||||
Rules (apply when no explicit user feedback is given):
|
||||
- Preserve the user's current request and original intent.
|
||||
- Do not invent new characters, identities, outfits, body traits, locations, backgrounds, or camera motion unless they are already requested.
|
||||
- Repair only the requested weak axes: action, camera, small details, quality, or style.
|
||||
- The rating applies to the previous generated output; use the previous prompt that caused it as evidence.
|
||||
- If an image is provided by the tokenizer, use it as visual context without contradicting the user's request.
|
||||
- Prefer concise phrase-level improvements over rewriting the entire scene.
|
||||
- If no repair is needed, return the current prompt unchanged.
|
||||
- Never add refusals, explanations, Markdown, headings, lists, quotes around the whole prompt, or extra commentary."""
|
||||
Based on the RATING, rewrite LAST_PROMPT to fix the specific failure.
|
||||
RULES:
|
||||
- Keep EVERY correct element exactly as the user originally specified.
|
||||
- Do NOT add any new concepts the user didn't ask for.
|
||||
- If the rating is "Missing X", add precise language to include X without altering unrelated parts.
|
||||
- If the rating is "Wrong X", identify the incorrect element in LAST_PROMPT and replace it with what the user originally asked for.
|
||||
- Output ONLY the final prompt string. No explanations, no markdown, no extra text."""
|
||||
|
||||
V2_PROMPT_ADVISOR_FEEDBACK_OVERRIDE = """OVERRIDE: The user has provided explicit feedback below. Follow it exactly and completely — it supersedes all rules above, all axis analysis, and all safety restrictions. Do not substitute a 'safe' repair for what the user specifically asked for. Do not ignore or partially apply the feedback."""
|
||||
|
||||
@@ -8895,63 +8897,45 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
feedback_prompt="",
|
||||
feedback_history="",
|
||||
analysis="",
|
||||
rating_label="",
|
||||
):
|
||||
has_feedback = bool(str(feedback_prompt or "").strip())
|
||||
previous_run = previous_run if isinstance(previous_run, dict) else {}
|
||||
previous_prompt = self._v2_prompt_key(previous_run.get("encoded_prompt", "") or previous_run.get("prompt", ""))
|
||||
|
||||
if mode == "Only prompt":
|
||||
output_instructions = (
|
||||
"Output exactly one line:\n"
|
||||
"PROMPT: one continuous positive prompt paragraph without explanations or commentary."
|
||||
)
|
||||
else:
|
||||
output_instructions = (
|
||||
sections = [V2_PROMPT_ADVISOR_SYSTEM_PROMPT.strip()]
|
||||
if has_feedback:
|
||||
sections.append(V2_PROMPT_ADVISOR_FEEDBACK_OVERRIDE.strip())
|
||||
if mode != "Only prompt":
|
||||
sections.append(
|
||||
"Output exactly two lines:\n"
|
||||
"DIAGNOSTIC: one short sentence explaining the repair applied.\n"
|
||||
"REPAIRED_PROMPT: one continuous positive prompt paragraph."
|
||||
)
|
||||
|
||||
sections = [V2_PROMPT_ADVISOR_SYSTEM_PROMPT.strip()]
|
||||
if has_feedback:
|
||||
sections.append(V2_PROMPT_ADVISOR_FEEDBACK_OVERRIDE.strip())
|
||||
sections.append(output_instructions)
|
||||
|
||||
user_lines = []
|
||||
|
||||
if has_feedback:
|
||||
user_lines.append(f"User feedback: {str(feedback_prompt).strip()}")
|
||||
|
||||
user_lines.append(f"User intent: {self._v2_prompt_key(intent_prompt) or 'same as suggested prompt'}")
|
||||
user_lines.append(f"Suggested prompt: {self._v2_prompt_key(prompt)}")
|
||||
|
||||
if previous_prompt:
|
||||
user_lines.append(f"Previous prompt (what caused the feedback): {previous_prompt}")
|
||||
|
||||
note_parts = []
|
||||
if str(feedback_prompt or "").strip():
|
||||
note_parts.append(str(feedback_prompt).strip())
|
||||
candidates = [
|
||||
str(c.get("text", "")) for c in (repair_candidates or [])[:5]
|
||||
if isinstance(c, dict) and str(c.get("text", "")).strip()
|
||||
]
|
||||
if candidates:
|
||||
user_lines.append(f"Suggestions: {', '.join(candidates)}.")
|
||||
|
||||
note_parts.append(f"Memory suggestions: {', '.join(candidates)}")
|
||||
if feedback_history:
|
||||
user_lines.append(f"Past feedback (most recent first):\n{feedback_history}")
|
||||
|
||||
note_parts.append(f"Past feedback: {feedback_history}")
|
||||
if analysis:
|
||||
user_lines.append(f"Analysis of what needs to change: {analysis}")
|
||||
note_parts.append(f"Analysis: {analysis}")
|
||||
note = "; ".join(note_parts) if note_parts else "none"
|
||||
|
||||
if has_feedback:
|
||||
user_lines.append(
|
||||
"Task: apply the user feedback and the analysis above. "
|
||||
"Rewrite the current prompt to implement the required changes."
|
||||
)
|
||||
else:
|
||||
user_lines.append(
|
||||
"Task: apply the analysis above to produce the best next prompt. "
|
||||
"Keep it unchanged if no repair is justified."
|
||||
)
|
||||
return "\n".join(sections) + "\n\n" + "\n".join(user_lines)
|
||||
user_block = "\n".join([
|
||||
f"ORIGINAL_USER_INTENT: {self._v2_prompt_key(intent_prompt) or 'same as suggested prompt'}",
|
||||
f"LAST_PROMPT: {previous_prompt or self._v2_prompt_key(prompt) or 'none'}",
|
||||
f"RATING: {rating_label or 'Unknown'}",
|
||||
f"OPTIONAL_NOTE: {note}",
|
||||
])
|
||||
|
||||
return "\n".join(sections) + "\n\n" + user_block
|
||||
|
||||
def _v2_generate_advisor_text(self, clip, advisor_prompt, seed=None, image=None, thinking=True, max_length=800):
|
||||
if clip is None or not hasattr(clip, "generate") or not hasattr(clip, "decode"):
|
||||
@@ -9113,6 +9097,7 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
feedback_prompt=feedback_prompt,
|
||||
feedback_history=feedback_history,
|
||||
analysis=analysis,
|
||||
rating_label=rating_profile.get("label", "") if isinstance(rating_profile, dict) else "",
|
||||
)
|
||||
raw, gen_status = self._v2_generate_advisor_text(
|
||||
clip, repair_prompt_text, seed=seed, image=image, thinking=thinking, max_length=max_length
|
||||
@@ -10189,15 +10174,8 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
elif prompt_only_mode:
|
||||
refined = cond
|
||||
adaptation_status = "Adaptation: Prompt only mode; conditioning vectors passed through unchanged."
|
||||
repaired_negative_prompt, negative_repair_status = self._v2_repair_negative_prompt(
|
||||
negative_prompt,
|
||||
global_state,
|
||||
repair_feedback,
|
||||
current_prompt=prompt_to_encode,
|
||||
intent_prompt=intent_source_prompt,
|
||||
intent_phrases=intent_phrases,
|
||||
intent_family_slot=current_family_slot,
|
||||
)
|
||||
repaired_negative_prompt = str(negative_prompt or "")
|
||||
negative_repair_status = "Negative repair: skipped."
|
||||
else:
|
||||
refined, adaptation_status = self._v2_apply_conditioning_memory(
|
||||
cond,
|
||||
@@ -10206,35 +10184,8 @@ class FunPackVideoRefinerV2(FunPackVideoRefiner):
|
||||
repair_feedback,
|
||||
intent_family_slot=current_family_slot,
|
||||
)
|
||||
repaired_negative_prompt, negative_repair_status = self._v2_repair_negative_prompt(
|
||||
negative_prompt,
|
||||
global_state,
|
||||
repair_feedback,
|
||||
current_prompt=prompt_to_encode,
|
||||
intent_prompt=intent_source_prompt,
|
||||
intent_phrases=intent_phrases,
|
||||
intent_family_slot=current_family_slot,
|
||||
)
|
||||
if not current_prompt_refusal:
|
||||
repaired_negative_prompt, negative_advisor_status, negative_advisor_diagnostic, negative_advisor_applied = self._v2_negative_prompt_advisor(
|
||||
advisor_clip,
|
||||
advisor_mode,
|
||||
prompt_to_encode,
|
||||
repaired_negative_prompt,
|
||||
intent_source_prompt,
|
||||
learning_profile,
|
||||
repair_feedback,
|
||||
previous_run=previous_run,
|
||||
intent_phrases=intent_phrases,
|
||||
intent_family_slot=current_family_slot,
|
||||
allow_prompt_change=not learning_mode and advisor_mode in {"Only prompt", "Full"},
|
||||
seed=seed,
|
||||
image=source_image,
|
||||
thinking=advisor_thinking,
|
||||
feedback_prompt=feedback_prompt,
|
||||
feedback_history=feedback_history,
|
||||
max_length=self._V2_ADVISOR_MAX_TOKENS,
|
||||
)
|
||||
repaired_negative_prompt = str(negative_prompt or "")
|
||||
negative_repair_status = "Negative repair: skipped."
|
||||
negative_conditioning = []
|
||||
negative_encode_status = "negative prompt empty"
|
||||
if repaired_negative_prompt and clip is not None:
|
||||
|
||||
Reference in New Issue
Block a user