fix:timing gate 裁切过度
This commit is contained in:
@@ -238,3 +238,47 @@ def test_finish_tool_removes_empty_assistant_history_message() -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert runtime._chat_history == []
|
assert runtime._chat_history == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_timing_gate_head_trim_keeps_short_history() -> None:
|
||||||
|
messages = [
|
||||||
|
AssistantMessage(content="第一条消息", timestamp=datetime.now()),
|
||||||
|
AssistantMessage(content="第二条消息", timestamp=datetime.now()),
|
||||||
|
]
|
||||||
|
|
||||||
|
trimmed_messages = MaisakaHeartFlowChatting._drop_head_context_messages(
|
||||||
|
messages,
|
||||||
|
drop_context_count=3,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert trimmed_messages == messages
|
||||||
|
|
||||||
|
|
||||||
|
def test_timing_gate_head_trim_keeps_history_within_config_limit() -> None:
|
||||||
|
messages = [
|
||||||
|
AssistantMessage(content=f"消息 {index}", timestamp=datetime.now())
|
||||||
|
for index in range(10)
|
||||||
|
]
|
||||||
|
|
||||||
|
trimmed_messages = MaisakaHeartFlowChatting._drop_head_context_messages(
|
||||||
|
messages,
|
||||||
|
drop_context_count=7,
|
||||||
|
trim_threshold_context_count=10,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert trimmed_messages == messages
|
||||||
|
|
||||||
|
|
||||||
|
def test_timing_gate_head_trim_applies_after_config_limit_exceeded() -> None:
|
||||||
|
messages = [
|
||||||
|
AssistantMessage(content=f"消息 {index}", timestamp=datetime.now())
|
||||||
|
for index in range(11)
|
||||||
|
]
|
||||||
|
|
||||||
|
trimmed_messages = MaisakaHeartFlowChatting._drop_head_context_messages(
|
||||||
|
messages,
|
||||||
|
drop_context_count=7,
|
||||||
|
trim_threshold_context_count=10,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert trimmed_messages == messages[7:]
|
||||||
|
|||||||
@@ -614,6 +614,7 @@ class MaisakaHeartFlowChatting:
|
|||||||
sub_agent_history = self._drop_head_context_messages(
|
sub_agent_history = self._drop_head_context_messages(
|
||||||
selected_history,
|
selected_history,
|
||||||
drop_head_context_count,
|
drop_head_context_count,
|
||||||
|
trim_threshold_context_count=context_message_limit,
|
||||||
)
|
)
|
||||||
if extra_messages:
|
if extra_messages:
|
||||||
sub_agent_history.extend(list(extra_messages))
|
sub_agent_history.extend(list(extra_messages))
|
||||||
@@ -637,12 +638,21 @@ class MaisakaHeartFlowChatting:
|
|||||||
def _drop_head_context_messages(
|
def _drop_head_context_messages(
|
||||||
chat_history: Sequence[LLMContextMessage],
|
chat_history: Sequence[LLMContextMessage],
|
||||||
drop_context_count: int,
|
drop_context_count: int,
|
||||||
|
*,
|
||||||
|
trim_threshold_context_count: int | None = None,
|
||||||
) -> list[LLMContextMessage]:
|
) -> list[LLMContextMessage]:
|
||||||
"""从已选上下文头部丢弃指定数量的普通上下文消息。"""
|
"""从已选上下文头部丢弃指定数量的普通上下文消息。"""
|
||||||
|
|
||||||
if drop_context_count <= 0:
|
if drop_context_count <= 0:
|
||||||
return list(chat_history)
|
return list(chat_history)
|
||||||
|
|
||||||
|
context_message_count = sum(1 for message in chat_history if message.count_in_context)
|
||||||
|
if trim_threshold_context_count is not None and context_message_count <= trim_threshold_context_count:
|
||||||
|
return list(chat_history)
|
||||||
|
|
||||||
|
if context_message_count <= drop_context_count:
|
||||||
|
return list(chat_history)
|
||||||
|
|
||||||
first_kept_index = 0
|
first_kept_index = 0
|
||||||
dropped_context_count = 0
|
dropped_context_count = 0
|
||||||
while (
|
while (
|
||||||
|
|||||||
Reference in New Issue
Block a user