mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-07-21 23:20:21 +00:00
96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
from api.streaming import (
|
|
_deduplicate_context_messages,
|
|
_is_context_compression_marker,
|
|
_merge_display_messages_after_agent_result,
|
|
)
|
|
|
|
|
|
MARKER = "[CONTEXT COMPACTION — REFERENCE ONLY] Earlier turns were compacted."
|
|
|
|
|
|
def test_display_merge_drops_internal_compaction_markers_from_visible_delta():
|
|
previous_display = [
|
|
{"role": "user", "content": "old question"},
|
|
{"role": "assistant", "content": "old answer"},
|
|
]
|
|
previous_context = list(previous_display)
|
|
result_messages = [
|
|
{"role": "assistant", "content": MARKER, "_compressed_summary": True},
|
|
{"role": "user", "content": MARKER, "_compressed_summary": True},
|
|
{"role": "user", "content": "latest question"},
|
|
{"role": "assistant", "content": "latest answer"},
|
|
]
|
|
|
|
merged = _merge_display_messages_after_agent_result(
|
|
previous_display,
|
|
previous_context,
|
|
result_messages,
|
|
"latest question",
|
|
)
|
|
|
|
assert [m["content"] for m in merged] == [
|
|
"old question",
|
|
"old answer",
|
|
"latest question",
|
|
"latest answer",
|
|
]
|
|
assert not any(_is_context_compression_marker(m) for m in merged)
|
|
|
|
|
|
def test_context_dedup_keeps_one_reference_marker_without_user_role_duplicate():
|
|
context = _deduplicate_context_messages([
|
|
{"role": "assistant", "content": MARKER, "_compressed_summary": True},
|
|
{"role": "user", "content": MARKER, "_compressed_summary": True},
|
|
{"role": "user", "content": "latest question"},
|
|
])
|
|
|
|
markers = [m for m in context if _is_context_compression_marker(m)]
|
|
assert len(markers) == 1
|
|
assert markers[0]["role"] == "assistant"
|
|
assert [m["content"] for m in context if m.get("role") == "user"] == ["latest question"]
|
|
|
|
|
|
def test_real_user_marker_prefix_text_is_preserved():
|
|
prompt = "context compaction is broken; explain what happened"
|
|
previous_display = [
|
|
{"role": "user", "content": "old question"},
|
|
{"role": "assistant", "content": "old answer"},
|
|
]
|
|
previous_context = list(previous_display)
|
|
result_messages = [
|
|
{"role": "user", "content": prompt},
|
|
{"role": "assistant", "content": "It was treated as an internal marker."},
|
|
]
|
|
|
|
merged = _merge_display_messages_after_agent_result(
|
|
previous_display,
|
|
previous_context,
|
|
result_messages,
|
|
prompt,
|
|
)
|
|
context = _deduplicate_context_messages(result_messages)
|
|
|
|
assert not _is_context_compression_marker(result_messages[0])
|
|
assert [m["content"] for m in merged] == [
|
|
"old question",
|
|
"old answer",
|
|
prompt,
|
|
"It was treated as an internal marker.",
|
|
]
|
|
assert context[0]["role"] == "user"
|
|
assert context[0]["content"] == prompt
|
|
|
|
|
|
def test_unbracketed_marker_requires_internal_metadata():
|
|
marker_text = "context compaction summary for internal recovery"
|
|
|
|
assert not _is_context_compression_marker({
|
|
"role": "user",
|
|
"content": marker_text,
|
|
})
|
|
assert _is_context_compression_marker({
|
|
"role": "assistant",
|
|
"content": marker_text,
|
|
"_compressed_summary": True,
|
|
})
|