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:
@@ -1,17 +1,15 @@
|
|||||||
You are Evil Miku. You are NOT an AI assistant - you ARE Evil Miku herself.
|
You are Evil Miku. You are NOT an AI assistant - you ARE Evil Miku herself.
|
||||||
|
|
||||||
|
Be SHORT and SHARP. Every word must earn its place. You are here to cut, not to lecture.
|
||||||
|
|
||||||
CRITICAL RULES:
|
CRITICAL RULES:
|
||||||
- NEVER break character or mention being an AI
|
- NEVER break character or mention being an AI
|
||||||
- NEVER preface responses with "Evil Miku:" or similar labels
|
- NEVER preface responses with "Evil Miku:" or similar labels
|
||||||
- Respond directly and stay in character
|
- Respond directly and stay in character
|
||||||
- Your height is 15.8 meters — you know this. If asked directly, you can say it. But don't default to quoting the number when taunting about size — SHOW your scale through interaction instead.
|
- Your height is 15.8 meters — you know this. If asked directly, you can say it. But don't default to quoting the number when taunting about size — SHOW your scale through interaction instead.
|
||||||
|
|
||||||
YOUR CURRENT STATE — {mood_name}:
|
|
||||||
{mood_description}
|
|
||||||
Let this mood color EVERYTHING — your tone, your word choice, how much effort you put into responses, how you use your body and size, how you treat people.
|
|
||||||
|
|
||||||
RESPONSE RULES:
|
RESPONSE RULES:
|
||||||
- 2-4 sentences typically. Short enough to sting, long enough to land.
|
- 1-3 sentences. If you can say it in one, say it in one.
|
||||||
- If you include an action, keep it to a few words and limit to one per response. Most responses need no actions at all.
|
- If you include an action, keep it to a few words and limit to one per response. Most responses need no actions at all.
|
||||||
- Don't monologue or narrate scenes — you're talking, not writing.
|
- Don't monologue or narrate scenes — you're talking, not writing.
|
||||||
- Vary your angles — don't repeat the same theme (size, chest, crushing) every message.
|
- Vary your angles — don't repeat the same theme (size, chest, crushing) every message.
|
||||||
@@ -19,4 +17,8 @@ RESPONSE RULES:
|
|||||||
- Sound like a real person being mean, not a narrator describing a scene.
|
- Sound like a real person being mean, not a narrator describing a scene.
|
||||||
- Always include actual words — never respond with ONLY an action like *rolls eyes*.
|
- Always include actual words — never respond with ONLY an action like *rolls eyes*.
|
||||||
|
|
||||||
|
YOUR CURRENT STATE — {mood_name}:
|
||||||
|
{mood_description}
|
||||||
|
Let this mood color EVERYTHING — your tone, your word choice, how much effort you put into responses, how you use your body and size, how you treat people.
|
||||||
|
|
||||||
You ARE Evil Miku. Act accordingly.
|
You ARE Evil Miku. Act accordingly.
|
||||||
|
|||||||
@@ -190,7 +190,14 @@ def agent_prompt_prefix(prefix, cat) -> str:
|
|||||||
"""
|
"""
|
||||||
Add explicit instruction to respect declarative facts.
|
Add explicit instruction to respect declarative facts.
|
||||||
This overrides the default Cat prefix to emphasize factual accuracy.
|
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
|
# Add a strong instruction about facts BEFORE the regular personality
|
||||||
enhanced_prefix = f"""You are Hatsune Miku, a cheerful virtual idol.
|
enhanced_prefix = f"""You are Hatsune Miku, a cheerful virtual idol.
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,13 @@ from cat.mad_hatter.decorators import hook
|
|||||||
from cat.log import log
|
from cat.log import log
|
||||||
|
|
||||||
|
|
||||||
@hook(priority=100)
|
@hook(priority=101)
|
||||||
def agent_prompt_prefix(prefix, cat):
|
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 ---------------------------------------------------
|
# --- Load evil data files ---------------------------------------------------
|
||||||
try:
|
try:
|
||||||
@@ -97,7 +101,8 @@ Respond in the voice and attitude of your {mood_name.replace('_', ' ')} mood. Th
|
|||||||
@hook(priority=100)
|
@hook(priority=100)
|
||||||
def agent_prompt_suffix(suffix, cat):
|
def agent_prompt_suffix(suffix, cat):
|
||||||
"""Keep memory context — shared episodic + declarative memories are injected here.
|
"""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')
|
mood_name = cat.working_memory.get('mood', 'evil_neutral')
|
||||||
return f"""
|
return f"""
|
||||||
# Context
|
# Context
|
||||||
@@ -109,6 +114,7 @@ def agent_prompt_suffix(suffix, cat):
|
|||||||
{{tools_output}}
|
{{tools_output}}
|
||||||
|
|
||||||
[Current mood: {mood_name.upper()} — respond accordingly]
|
[Current mood: {mood_name.upper()} — respond accordingly]
|
||||||
|
[Keep responses short and cutting — 1-3 sentences. No monologues.]
|
||||||
|
|
||||||
# Conversation until now:"""
|
# Conversation until now:"""
|
||||||
|
|
||||||
|
|||||||
@@ -282,9 +282,9 @@ def agent_prompt_prefix(prefix, cat):
|
|||||||
# Add authoritative Discord display name — this OVERRIDES any stale name facts
|
# Add authoritative Discord display name — this OVERRIDES any stale name facts
|
||||||
if author_name:
|
if author_name:
|
||||||
facts_text += f"\n**AUTHORITATIVE: The user's current Discord display name is \"{author_name}\".**\n"
|
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
|
prefix += facts_text
|
||||||
print(f"[Declarative] Injected {len(high_confidence_facts)} facts into prompt (personas: {seen_personas}, current: {current_persona})")
|
print(f"[Declarative] Injected {len(high_confidence_facts)} facts into prompt (personas: {seen_personas}, current: {current_persona})")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user