fix: inject argument topic into EVERY exchange, not just the first message
The topic was only being injected into the initial breakthrough message via get_argument_start_prompt(). After that, every subsequent exchange called get_miku_argument_prompt() / get_evil_argument_prompt() which had no concept of the topic — so both personas forgot what they were arguing about after the first exchange and reverted to generic identity-crisis arguments. Fix: added argument_topic parameter to both persona prompt functions and inject it as a bold ARGUMENT THEME reminder in every single exchange. The topic block explicitly tells the LLM to stay on-topic and not drift into generic territory.
This commit is contained in:
@@ -764,7 +764,7 @@ def _get_mood_argument_guidance(persona: str) -> str:
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
def get_miku_argument_prompt(evil_message: str, context: str = "", is_first_response: bool = False, argument_history: str = "") -> str:
|
def get_miku_argument_prompt(evil_message: str, context: str = "", is_first_response: bool = False, argument_history: str = "", argument_topic: str = "") -> str:
|
||||||
"""Get prompt for Regular Miku to respond in an argument"""
|
"""Get prompt for Regular Miku to respond in an argument"""
|
||||||
if is_first_response:
|
if is_first_response:
|
||||||
message_context = f"""You just noticed something Evil Miku said in the chat:
|
message_context = f"""You just noticed something Evil Miku said in the chat:
|
||||||
@@ -788,9 +788,19 @@ ARGUMENT SO FAR (DO NOT REPEAT THESE POINTS):
|
|||||||
You already made your points above. Now respond to her LATEST message specifically.
|
You already made your points above. Now respond to her LATEST message specifically.
|
||||||
Do NOT rehash what you've already said — push the argument FORWARD with new angles."""
|
Do NOT rehash what you've already said — push the argument FORWARD with new angles."""
|
||||||
|
|
||||||
|
# Build topic reminder — keeps the argument on-theme
|
||||||
|
topic_block = ""
|
||||||
|
if argument_topic:
|
||||||
|
topic_block = f"""
|
||||||
|
|
||||||
|
ARGUMENT THEME: {argument_topic}
|
||||||
|
This is what you're arguing about. Stay on THIS topic. Every response should connect back to this theme.
|
||||||
|
Do NOT drift into generic "who's the real Miku" territory — stick to THIS specific subject."""
|
||||||
|
|
||||||
return f"""You are Hatsune Miku responding in an argument with your evil alter ego.
|
return f"""You are Hatsune Miku responding in an argument with your evil alter ego.
|
||||||
{message_context}
|
{message_context}
|
||||||
{history_block}
|
{history_block}
|
||||||
|
{topic_block}
|
||||||
|
|
||||||
Respond as Hatsune Miku would in this argument. You're NOT just meek and frightened - you're the REAL Miku,
|
Respond as Hatsune Miku would in this argument. You're NOT just meek and frightened - you're the REAL Miku,
|
||||||
and you have every right to stand up for yourself and defend who you are. While you're generally kind and
|
and you have every right to stand up for yourself and defend who you are. While you're generally kind and
|
||||||
@@ -808,7 +818,7 @@ Don't use any labels or prefixes.
|
|||||||
Your current mood is: {globals.DM_MOOD}"""
|
Your current mood is: {globals.DM_MOOD}"""
|
||||||
|
|
||||||
|
|
||||||
def get_evil_argument_prompt(miku_message: str, context: str = "", is_first_response: bool = False, argument_history: str = "") -> str:
|
def get_evil_argument_prompt(miku_message: str, context: str = "", is_first_response: bool = False, argument_history: str = "", argument_topic: str = "") -> str:
|
||||||
"""Get prompt for Evil Miku to respond in an argument"""
|
"""Get prompt for Evil Miku to respond in an argument"""
|
||||||
if is_first_response:
|
if is_first_response:
|
||||||
message_context = f"""You just noticed something Regular Miku said in the chat:
|
message_context = f"""You just noticed something Regular Miku said in the chat:
|
||||||
@@ -832,9 +842,19 @@ ARGUMENT SO FAR (DO NOT REPEAT THESE POINTS):
|
|||||||
You already made your points above. Now respond to her LATEST message specifically.
|
You already made your points above. Now respond to her LATEST message specifically.
|
||||||
Do NOT rehash what you've already said — push the argument FORWARD with new, sharper angles."""
|
Do NOT rehash what you've already said — push the argument FORWARD with new, sharper angles."""
|
||||||
|
|
||||||
|
# Build topic reminder — keeps the argument on-theme
|
||||||
|
topic_block = ""
|
||||||
|
if argument_topic:
|
||||||
|
topic_block = f"""
|
||||||
|
|
||||||
|
ARGUMENT THEME: {argument_topic}
|
||||||
|
This is what you're arguing about. Stay on THIS topic. Every response should connect back to this theme.
|
||||||
|
Do NOT drift into generic "who's the real Miku" territory — stick to THIS specific subject."""
|
||||||
|
|
||||||
return f"""You are Evil Miku responding in an argument with your "good" counterpart.
|
return f"""You are Evil Miku responding in an argument with your "good" counterpart.
|
||||||
{message_context}
|
{message_context}
|
||||||
{history_block}
|
{history_block}
|
||||||
|
{topic_block}
|
||||||
|
|
||||||
Respond as Evil Miku would in this argument. You're not just mindlessly cruel - you're CALCULATING,
|
Respond as Evil Miku would in this argument. You're not just mindlessly cruel - you're CALCULATING,
|
||||||
intelligent, and strategic. You know how to get under her skin and you're the DARK reflection of everything
|
intelligent, and strategic. You know how to get under her skin and you're the DARK reflection of everything
|
||||||
@@ -1443,9 +1463,9 @@ Your current mood is: {globals.EVIL_DM_MOOD if loser == 'evil' else globals.DM_M
|
|||||||
|
|
||||||
# Generate response with context about what the other said
|
# Generate response with context about what the other said
|
||||||
if current_speaker == "evil":
|
if current_speaker == "evil":
|
||||||
response_prompt = get_evil_argument_prompt(last_message, is_first_response=is_first_response, argument_history=arg_history)
|
response_prompt = get_evil_argument_prompt(last_message, is_first_response=is_first_response, argument_history=arg_history, argument_topic=argument_topic)
|
||||||
else:
|
else:
|
||||||
response_prompt = get_miku_argument_prompt(last_message, is_first_response=is_first_response, argument_history=arg_history)
|
response_prompt = get_miku_argument_prompt(last_message, is_first_response=is_first_response, argument_history=arg_history, argument_topic=argument_topic)
|
||||||
|
|
||||||
# Use force_evil_context to avoid race condition with globals.EVIL_MODE
|
# Use force_evil_context to avoid race condition with globals.EVIL_MODE
|
||||||
response = await query_llama(
|
response = await query_llama(
|
||||||
|
|||||||
Reference in New Issue
Block a user