fix: prevent empty </think> tags from appearing in messages
- Enhance _strip_think to handle stray tags: * Remove unmatched closing tags (</think>) * Remove incomplete blocks (<think> ... to end of string) - Apply _strip_think to tool hint messages as well - Prevents blank/parse errors from showing </think> in chat outputs Fixes issue with empty </think> appearing in Feishu tool call cards and other messages.
This commit is contained in:
@@ -163,7 +163,13 @@ class AgentLoop:
|
|||||||
"""Remove <think>…</think> blocks that some models embed in content."""
|
"""Remove <think>…</think> blocks that some models embed in content."""
|
||||||
if not text:
|
if not text:
|
||||||
return None
|
return None
|
||||||
return re.sub(r"<think>[\s\S]*?</think>", "", text).strip() or None
|
# Remove complete think blocks (non-greedy)
|
||||||
|
cleaned = re.sub(r"<think>[\s\S]*?</think>", "", text)
|
||||||
|
# Remove any stray closing tags left without opening
|
||||||
|
cleaned = re.sub(r"</think>", "", cleaned)
|
||||||
|
# Remove any stray opening tag and everything after it (incomplete block)
|
||||||
|
cleaned = re.sub(r"<think>[\s\S]*$", "", cleaned)
|
||||||
|
return cleaned.strip() or None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _tool_hint(tool_calls: list) -> str:
|
def _tool_hint(tool_calls: list) -> str:
|
||||||
@@ -203,7 +209,9 @@ class AgentLoop:
|
|||||||
thought = self._strip_think(response.content)
|
thought = self._strip_think(response.content)
|
||||||
if thought:
|
if thought:
|
||||||
await on_progress(thought)
|
await on_progress(thought)
|
||||||
await on_progress(self._tool_hint(response.tool_calls), tool_hint=True)
|
tool_hint = self._tool_hint(response.tool_calls)
|
||||||
|
tool_hint = self._strip_think(tool_hint)
|
||||||
|
await on_progress(tool_hint, tool_hint=True)
|
||||||
|
|
||||||
tool_call_dicts = [
|
tool_call_dicts = [
|
||||||
tc.to_openai_tool_call()
|
tc.to_openai_tool_call()
|
||||||
|
|||||||
Reference in New Issue
Block a user