Files
hermes-webui/tests/test_webui_prefill_context.py
T
2026-05-25 08:51:44 +08:00

93 lines
2.9 KiB
Python

"""Regression tests for WebUI session prefill parity."""
from __future__ import annotations
import json
from pathlib import Path
def test_prefill_json_file_keeps_valid_roles_and_drops_invalid_items(tmp_path):
from api.streaming import _load_webui_prefill_context
prefill = tmp_path / "prefill.json"
prefill.write_text(
json.dumps(
[
{"role": "user", "content": "Pinned context"},
{"role": "tool", "content": "drop invalid role"},
{"role": "assistant", "content": "Useful assistant context"},
{"role": "system", "content": " "},
"not a message",
]
),
encoding="utf-8",
)
result = _load_webui_prefill_context({"prefill_messages_file": str(prefill)})
assert result["status"] == "loaded"
assert result["source"] == "file"
assert result["label"] == "prefill.json"
assert result["messages"] == [
{"role": "user", "content": "Pinned context"},
{"role": "assistant", "content": "Useful assistant context"},
]
def test_prefill_script_config_is_ignored_in_webui(tmp_path):
from api.streaming import _load_webui_prefill_context
script = tmp_path / "recall.py"
script.write_text("raise SystemExit('should not run')\n", encoding="utf-8")
result = _load_webui_prefill_context({"prefill_messages_script": str(script)})
assert result == {
"status": "not_configured",
"source": "none",
"label": "",
"messages": [],
"message_count": 0,
}
def test_public_prefill_status_strips_message_bodies():
from api.streaming import _public_prefill_context_status
public = _public_prefill_context_status(
{
"status": "loaded",
"source": "file",
"label": "prefill.json",
"message_count": 1,
"messages": [{"role": "user", "content": "private recall payload"}],
}
)
assert public == {
"status": "loaded",
"source": "file",
"label": "prefill.json",
"message_count": 1,
}
assert "messages" not in public
def test_prefill_status_redactor_handles_secret_shaped_text():
from api.streaming import _redact_prefill_status_text
redacted = _redact_prefill_status_text("api_key=redaction-test-placeholder leaked")
assert "redaction-test-placeholder" not in redacted
assert "[REDACTED]" in redacted
def test_cached_agent_prefill_refresh_requires_explicit_kwargs():
"""Cached agents should not get an empty prefill list when kwargs omitted it."""
src = Path("api/streaming.py").read_text(encoding="utf-8")
callback_refresh = src.index("# Refresh per-turn callbacks")
session_db_refresh = src.index("if _session_db is not None:", callback_refresh)
body = src[callback_refresh:session_db_refresh]
assert "'prefill_messages' in _agent_kwargs" in body
assert "hasattr(agent, 'prefill_messages')" in body