"""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"]