From 7d5881ebe75f89569d21cc8b2c1e42a01e373319 Mon Sep 17 00:00:00 2001 From: koko210Serve Date: Thu, 30 Apr 2026 12:57:48 +0300 Subject: [PATCH] fix: inject argument topic into EVERY exchange, not just the first message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- bot/utils/bipolar_mode.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/bot/utils/bipolar_mode.py b/bot/utils/bipolar_mode.py index 891b230..6dc1e50 100644 --- a/bot/utils/bipolar_mode.py +++ b/bot/utils/bipolar_mode.py @@ -764,7 +764,7 @@ def _get_mood_argument_guidance(persona: str) -> str: 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""" if is_first_response: 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. 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. {message_context} {history_block} +{topic_block} 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 @@ -808,7 +818,7 @@ Don't use any labels or prefixes. 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""" if is_first_response: 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. 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. {message_context} {history_block} +{topic_block} 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 @@ -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 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: - 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 response = await query_llama(