RICS / backend /tests /test_reference_mapper_interference.py
StormShadow308's picture
Add demo documentation and Docker setup for v2 report generation system
aad7814
Raw
History Blame Contribute Delete
5.34 kB
"""Interference-level prompt routing in reference_mapper."""
from __future__ import annotations
from backend.core.reference_mapper import (
build_interference_messages,
map_reference_paragraph,
select_mapping_prompt,
)
from backend.prompts.mapping_prompt import (
MAPPING_SYSTEM_BASE_MAXIMUM,
MAPPING_SYSTEM_BASE_MEDIUM,
MAPPING_SYSTEM_BASE_MINIMUM,
)
from backend.models.schema import TemplateSchema
from backend.prompts.maximum_compose_prompt import MAXIMUM_SYSTEM, build_maximum_messages
from backend.prompts.medium_expand_prompt import MEDIUM_SYSTEM, build_medium_messages
from backend.prompts.minimum_weave_prompt import MINIMUM_SYSTEM, build_minimum_messages
def test_select_mapping_prompt_routes_tier_bases():
assert select_mapping_prompt("minimum") is MAPPING_SYSTEM_BASE_MINIMUM
assert select_mapping_prompt("medium") is MAPPING_SYSTEM_BASE_MEDIUM
assert select_mapping_prompt("maximum") is MAPPING_SYSTEM_BASE_MAXIMUM
assert select_mapping_prompt("bogus") is MAPPING_SYSTEM_BASE_MAXIMUM
assert select_mapping_prompt(None) is MAPPING_SYSTEM_BASE_MAXIMUM # type: ignore[arg-type]
def test_build_minimum_messages_signature_and_strategy():
msgs = build_minimum_messages("slate slipped", "The roof comprises slate tiles.")
assert msgs[0]["role"] == "system"
assert msgs[1]["role"] == "user"
assert "zero-inference data mapping engine" in msgs[0]["content"]
assert "DO NOT ADD NEW SENTENCES" in msgs[0]["content"]
assert "SECTION:" in msgs[1]["content"]
assert "INPUT 1: PAST-REPORT SCAFFOLD" in msgs[1]["content"]
assert "INPUT 2: CURRENT INSPECTION NOTES" in msgs[1]["content"]
assert "* slate slipped" in msgs[1]["content"]
def test_build_medium_messages_signature_and_strategy():
msgs = build_medium_messages("det to DPC, rep reqd", "The walls were inspected.")
assert "professional technical copyeditor" in msgs[0]["content"]
assert "ABSOLUTE HISTORICAL GROUNDING" in msgs[0]["content"]
assert "PROOFREAD & ENHANCE TECHNICAL DEPTH" in msgs[0]["content"]
assert "INPUT 2: CURRENT INSPECTION NOTES" in msgs[1]["content"]
assert "* det to DPC, rep reqd" in msgs[1]["content"]
def test_build_maximum_messages_signature_and_strategy():
msgs = build_maximum_messages("asbestos noted", "The ceiling was inspected.")
assert "expert UK Chartered Building Surveyor" in msgs[0]["content"]
assert "UK_PROPERTY_SURVEYING_DOMAIN_KNOWLEDGE" in msgs[0]["content"]
assert "INTEGRATED NARRATIVE DRAFTING" in msgs[0]["content"]
assert "INPUT 2: CURRENT INSPECTION NOTES" in msgs[1]["content"]
assert "* asbestos noted" in msgs[1]["content"]
def test_all_tiers_share_rics_domain_rules():
for system in (MINIMUM_SYSTEM, MEDIUM_SYSTEM, MAXIMUM_SYSTEM):
assert '"1", "2", "3", "NI", "NA"' in system
assert "[AMBIGUOUS:" in system
def test_build_interference_messages_routes_by_level():
baseline = "The roof comprises slate tiles."
notes = ["slate slipped"]
schema = TemplateSchema()
min_msgs = build_interference_messages(
"minimum", observations=notes, baseline=baseline, schema=schema
)
med_msgs = build_interference_messages(
"medium", observations=notes, baseline=baseline, schema=schema
)
max_msgs = build_interference_messages(
"maximum", observations=notes, baseline=baseline, schema=schema
)
assert "UPLOADED USER PAST REPORTS" in min_msgs[0]["content"]
assert MAPPING_SYSTEM_BASE_MINIMUM.strip() in min_msgs[0]["content"]
assert "ABSOLUTE HISTORICAL GROUNDING" in med_msgs[0]["content"]
assert MAPPING_SYSTEM_BASE_MEDIUM.strip() in med_msgs[0]["content"]
assert "INTEGRATED NARRATIVE DRAFTING" in max_msgs[0]["content"]
assert MAPPING_SYSTEM_BASE_MAXIMUM.strip() in max_msgs[0]["content"]
assert min_msgs[0]["content"] != med_msgs[0]["content"] != max_msgs[0]["content"]
def test_build_interference_messages_unknown_defaults_to_maximum():
explicit = build_interference_messages(
"maximum",
observations=["x"],
baseline="baseline prose.",
schema=TemplateSchema(),
)
unknown = build_interference_messages(
"bogus",
observations=["x"],
baseline="baseline prose.",
schema=TemplateSchema(),
)
assert unknown[0]["content"] == explicit[0]["content"]
assert unknown[1]["content"] == explicit[1]["content"]
def test_map_reference_paragraph_branches_on_level(monkeypatch):
captured: list[str] = []
def fake_build(level, **kwargs):
captured.append(str(level))
return [{"role": "system", "content": "sys"}, {"role": "user", "content": "user"}]
monkeypatch.setattr(
"backend.core.reference_mapper.build_interference_messages",
fake_build,
)
monkeypatch.setattr(
"backend.core.reference_mapper.map_inplace_baseline",
lambda *args, **kwargs: kwargs.get("messages") and "ok" or "fail",
)
schema = TemplateSchema()
baseline = "The chimney was inspected."
notes = ["crack noted"]
map_reference_paragraph(baseline, notes, schema, "minimum")
map_reference_paragraph(baseline, notes, schema, "medium")
map_reference_paragraph(baseline, notes, schema, "maximum")
assert captured == ["minimum", "medium", "maximum"]