Files
mai-bot/tests/test_maisaka_orphan_tool_results.py

50 lines
1.7 KiB
Python

from datetime import datetime
from src.common.data_models.message_component_data_model import MessageSequence, TextComponent
from src.llm_models.payload_content.tool_option import ToolCall
from src.maisaka.chat_loop_service import MaisakaChatLoopService
from src.maisaka.context_messages import AssistantMessage, SessionBackedMessage, ToolResultMessage
def _build_user_message(text: str) -> SessionBackedMessage:
return SessionBackedMessage(
raw_message=MessageSequence([TextComponent(text)]),
visible_text=text,
timestamp=datetime.now(),
)
def test_select_llm_context_messages_drops_orphan_tool_results_anywhere() -> None:
assistant_message = AssistantMessage(
content="",
timestamp=datetime.now(),
tool_calls=[ToolCall(call_id="call_1", func_name="wait", args={"seconds": 30})],
)
orphan_tool_message = ToolResultMessage(
content="当前对话循环已暂停,等待新消息到来。",
timestamp=datetime.now(),
tool_call_id="orphan_call",
)
matched_tool_message = ToolResultMessage(
content="等待 30 秒。",
timestamp=datetime.now(),
tool_call_id="call_1",
tool_name="wait",
)
chat_history = [
_build_user_message("第一条消息"),
orphan_tool_message,
assistant_message,
matched_tool_message,
_build_user_message("第二条消息"),
]
selected_history, _ = MaisakaChatLoopService.select_llm_context_messages(
chat_history,
max_context_size=8,
)
assert orphan_tool_message not in selected_history
assert assistant_message in selected_history
assert matched_tool_message in selected_history