filter invalid xiaoniu model echoes

This commit is contained in:
liuwei
2026-04-07 16:06:52 +08:00
parent 271954cfbb
commit 2b6deff4ba

View File

@@ -293,7 +293,8 @@ class AIAutoResponsePlugin(MessagePluginInterface):
user_prompt,
user_id=f"{room_id}:{sender}",
image_urls=image_urls,
)
),
content,
)
if not response:
self._log_event(
@@ -529,13 +530,53 @@ class AIAutoResponsePlugin(MessagePluginInterface):
return bool(current_tokens & previous_tokens)
@staticmethod
def _sanitize_response(response: str) -> str:
def _sanitize_response(response: str, current_content: str = "") -> str:
if not response:
return ""
response = response.strip()
response = re.sub(r"\n{3,}", "\n\n", response)
current_content = str(current_content or "").strip()
if not response:
return ""
if current_content and AIAutoResponsePlugin._looks_like_prompt_echo(response, current_content):
return ""
if AIAutoResponsePlugin._looks_like_invalid_structured_reply(response, current_content):
return ""
return response[:500].strip()
@staticmethod
def _looks_like_prompt_echo(response: str, current_content: str) -> bool:
normalized_response = re.sub(r"\s+", "", str(response or ""))
normalized_current = re.sub(r"\s+", "", str(current_content or ""))
if not normalized_response or not normalized_current:
return False
return normalized_response == normalized_current
@staticmethod
def _looks_like_invalid_structured_reply(response: str, current_content: str) -> bool:
text = str(response or "").strip()
if not (text.startswith("{") and text.endswith("}")):
return False
try:
data = json.loads(text)
except Exception:
return False
if not isinstance(data, dict):
return False
keys = {str(key).strip().lower() for key in data.keys()}
if not keys:
return False
if keys.issubset({"category", "message", "content", "text", "type"}):
for field in ("message", "content", "text"):
value = str(data.get(field, "") or "").strip()
if not value:
continue
if AIAutoResponsePlugin._looks_like_prompt_echo(value, current_content):
return True
if "category" in keys:
return True
return False
def _finalize_reply(self, response: str, reply_mode: str) -> List[str]:
text = (response or "").strip()
if not text: