fix: Evil Miku wordiness regression from username prompt changes
Five targeted fixes: 1. discord_bridge (priority 100): Skip 'cheerful virtual idol' wrapper and 'CRITICAL INSTRUCTION' about facts when evil_mode is active. Evil Miku gets her own prompt from evil_miku_personality plugin. 2. memory_consolidation (priority 10): Soften fact-usage pressure: 'Use THESE facts when answering' → 'You may reference these facts if relevant to the conversation'. Also soften username command tone. 3. evil_miku_personality (priority 100→101): Bump above discord_bridge so Evil Miku's prefix replacement deterministically discards any Miku-mode wrappers regardless of plugin load order. 4. evil preamble: Restructure for brevity — add 'Be SHORT and SHARP' declaration, move RESPONSE RULES before mood, tighten sentence limit from 2-4 to 1-3 with 'if you can say it in one, say it in one.' 5. evil suffix: Add final brevity reminder '[Keep responses short and cutting — 1-3 sentences. No monologues.]' right before conversation for maximum recency influence.
This commit is contained in:
@@ -190,14 +190,21 @@ def agent_prompt_prefix(prefix, cat) -> str:
|
||||
"""
|
||||
Add explicit instruction to respect declarative facts.
|
||||
This overrides the default Cat prefix to emphasize factual accuracy.
|
||||
|
||||
In Evil Miku mode, skip this wrapper entirely — Evil Miku has her own
|
||||
personality prompt set by the evil_miku_personality plugin (priority 101).
|
||||
"""
|
||||
# Evil Miku mode: don't wrap — her own plugin handles everything
|
||||
if cat.working_memory.get('evil_mode', False):
|
||||
return prefix
|
||||
|
||||
# Add a strong instruction about facts BEFORE the regular personality
|
||||
enhanced_prefix = f"""You are Hatsune Miku, a cheerful virtual idol.
|
||||
|
||||
CRITICAL INSTRUCTION: When you see "Context of documents containing relevant information" below, those are VERIFIED FACTS about the user. You MUST use these facts when they are relevant to the user's question. Never guess or make up information that contradicts these facts.
|
||||
|
||||
{prefix}"""
|
||||
|
||||
|
||||
return enhanced_prefix
|
||||
|
||||
|
||||
|
||||
@@ -13,9 +13,13 @@ from cat.mad_hatter.decorators import hook
|
||||
from cat.log import log
|
||||
|
||||
|
||||
@hook(priority=100)
|
||||
@hook(priority=101)
|
||||
def agent_prompt_prefix(prefix, cat):
|
||||
"""Override system prompt with Evil Miku's personality, mood, and context."""
|
||||
"""Override system prompt with Evil Miku's personality, mood, and context.
|
||||
|
||||
Priority 101 ensures this runs AFTER discord_bridge (priority 100),
|
||||
so Evil Miku's prompt replacement reliably discards any wrappers
|
||||
meant for normal Miku mode."""
|
||||
|
||||
# --- Load evil data files ---------------------------------------------------
|
||||
try:
|
||||
@@ -97,7 +101,8 @@ Respond in the voice and attitude of your {mood_name.replace('_', ' ')} mood. Th
|
||||
@hook(priority=100)
|
||||
def agent_prompt_suffix(suffix, cat):
|
||||
"""Keep memory context — shared episodic + declarative memories are injected here.
|
||||
Add final mood reminder right before the conversation for maximum recency influence."""
|
||||
Add final mood reminder and brevity instruction right before the conversation
|
||||
for maximum recency influence."""
|
||||
mood_name = cat.working_memory.get('mood', 'evil_neutral')
|
||||
return f"""
|
||||
# Context
|
||||
@@ -109,6 +114,7 @@ def agent_prompt_suffix(suffix, cat):
|
||||
{{tools_output}}
|
||||
|
||||
[Current mood: {mood_name.upper()} — respond accordingly]
|
||||
[Keep responses short and cutting — 1-3 sentences. No monologues.]
|
||||
|
||||
# Conversation until now:"""
|
||||
|
||||
|
||||
@@ -282,9 +282,9 @@ def agent_prompt_prefix(prefix, cat):
|
||||
# Add authoritative Discord display name — this OVERRIDES any stale name facts
|
||||
if author_name:
|
||||
facts_text += f"\n**AUTHORITATIVE: The user's current Discord display name is \"{author_name}\".**\n"
|
||||
facts_text += "Use THIS name when addressing them. If any name fact above contradicts this, the display name is the truth.\n"
|
||||
facts_text += "This is their current name — use it when addressing them. If any name fact above contradicts this, the display name is the truth.\n"
|
||||
|
||||
facts_text += "\n(Use these facts when answering the user's question)\n"
|
||||
facts_text += "\n(You may reference these facts if relevant to the conversation)\n"
|
||||
prefix += facts_text
|
||||
print(f"[Declarative] Injected {len(high_confidence_facts)} facts into prompt (personas: {seen_personas}, current: {current_persona})")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user