File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -238,3 +238,47 @@ def test_finish_tool_removes_empty_assistant_history_message() -> None:
238238 )
239239
240240 assert runtime ._chat_history == []
241+
242+
243+ def test_timing_gate_head_trim_keeps_short_history () -> None :
244+ messages = [
245+ AssistantMessage (content = "第一条消息" , timestamp = datetime .now ()),
246+ AssistantMessage (content = "第二条消息" , timestamp = datetime .now ()),
247+ ]
248+
249+ trimmed_messages = MaisakaHeartFlowChatting ._drop_head_context_messages (
250+ messages ,
251+ drop_context_count = 3 ,
252+ )
253+
254+ assert trimmed_messages == messages
255+
256+
257+ def test_timing_gate_head_trim_keeps_history_within_config_limit () -> None :
258+ messages = [
259+ AssistantMessage (content = f"消息 { index } " , timestamp = datetime .now ())
260+ for index in range (10 )
261+ ]
262+
263+ trimmed_messages = MaisakaHeartFlowChatting ._drop_head_context_messages (
264+ messages ,
265+ drop_context_count = 7 ,
266+ trim_threshold_context_count = 10 ,
267+ )
268+
269+ assert trimmed_messages == messages
270+
271+
272+ def test_timing_gate_head_trim_applies_after_config_limit_exceeded () -> None :
273+ messages = [
274+ AssistantMessage (content = f"消息 { index } " , timestamp = datetime .now ())
275+ for index in range (11 )
276+ ]
277+
278+ trimmed_messages = MaisakaHeartFlowChatting ._drop_head_context_messages (
279+ messages ,
280+ drop_context_count = 7 ,
281+ trim_threshold_context_count = 10 ,
282+ )
283+
284+ assert trimmed_messages == messages [7 :]
Original file line number Diff line number Diff line change @@ -614,6 +614,7 @@ async def run_sub_agent(
614614 sub_agent_history = self ._drop_head_context_messages (
615615 selected_history ,
616616 drop_head_context_count ,
617+ trim_threshold_context_count = context_message_limit ,
617618 )
618619 if extra_messages :
619620 sub_agent_history .extend (list (extra_messages ))
@@ -637,12 +638,21 @@ async def run_sub_agent(
637638 def _drop_head_context_messages (
638639 chat_history : Sequence [LLMContextMessage ],
639640 drop_context_count : int ,
641+ * ,
642+ trim_threshold_context_count : int | None = None ,
640643 ) -> list [LLMContextMessage ]:
641644 """从已选上下文头部丢弃指定数量的普通上下文消息。"""
642645
643646 if drop_context_count <= 0 :
644647 return list (chat_history )
645648
649+ context_message_count = sum (1 for message in chat_history if message .count_in_context )
650+ if trim_threshold_context_count is not None and context_message_count <= trim_threshold_context_count :
651+ return list (chat_history )
652+
653+ if context_message_count <= drop_context_count :
654+ return list (chat_history )
655+
646656 first_kept_index = 0
647657 dropped_context_count = 0
648658 while (
You can’t perform that action at this time.
0 commit comments