from rp.config import RECENT_MESSAGES_TO_KEEP from rp.core.context import compress_context, should_compress_context class TestContextManagement: def test_should_compress_context_below_threshold(self): messages = [{"role": "user", "content": "test"}] * 10 assert should_compress_context(messages) is False def test_should_compress_context_above_threshold(self): messages = [{"role": "user", "content": "test"}] * 35 assert should_compress_context(messages) is True def test_compress_context_preserves_system_message(self): messages = [ {"role": "system", "content": "System prompt"}, {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hi"}, ] * 40 # Ensure compression compressed = compress_context(messages) assert compressed[0]["role"] == "system" assert "System prompt" in compressed[0]["content"] def test_compress_context_keeps_recent_messages(self): messages = [{"role": "user", "content": f"msg{i}"} for i in range(40)] compressed = compress_context(messages) # Should keep recent messages recent = compressed[-RECENT_MESSAGES_TO_KEEP:] assert len(recent) == RECENT_MESSAGES_TO_KEEP # Check that the messages are the most recent ones for i, msg in enumerate(recent): expected_index = 40 - RECENT_MESSAGES_TO_KEEP + i assert msg["content"] == f"msg{expected_index}"