| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import pytest
- from app.resolve import ResolveService
- @pytest.mark.anyio
- async def test_cache_hit_is_resolved_when_confidence_satisfies_requested_mode():
- async def load_entity(_subject):
- return {
- "atlas_id": "atlas-1",
- "label": "Australia",
- "type": "atlas:Location",
- "description": "country in Oceania",
- "needs_curation": True,
- "confidence": 0.91,
- }
- async def fail_lookup(*_args, **_kwargs):
- raise AssertionError("wikidata lookup should not run")
- async def no_persist(_entity):
- return None
- svc = ResolveService(load_entity_fn=load_entity, wikidata_lookup_fn=fail_lookup, persist_entity_fn=no_persist)
- result = await svc.resolve(
- subject="Australia",
- constraints={"min_confidence": 0.85},
- strategy={"mode": "ranked"},
- debug={"include_explanations": True},
- )
- assert result["status"] == "resolved"
- assert result["confidence"] == 0.91
- assert result["meta"]["debug"]["used_cache"] is True
- @pytest.mark.anyio
- async def test_low_confidence_cache_triggers_reresolution_for_ranked_mode():
- calls = {"lookup": 0, "persist": 0}
- async def load_entity(_subject):
- return {
- "atlas_id": "atlas-1",
- "label": "Australia",
- "type": "atlas:Location",
- "description": "country in Oceania",
- "needs_curation": True,
- "confidence": 0.55,
- }
- async def wikidata_lookup(_subject, _language="en", _limit=5):
- calls["lookup"] += 1
- return [
- {"id": "Q408", "label": "Australia", "description": "country in Oceania", "type": "Q6256"}
- ]
- async def persist(_entity):
- calls["persist"] += 1
- svc = ResolveService(load_entity_fn=load_entity, wikidata_lookup_fn=wikidata_lookup, persist_entity_fn=persist)
- result = await svc.resolve(
- subject="Australia",
- context={"language": "en", "realm": "external"},
- constraints={"min_confidence": 0.85},
- hints={"expected_type": "location", "aliases": []},
- strategy={"mode": "ranked", "auto_accept_threshold": 0.85},
- debug={"include_explanations": True},
- )
- assert calls["lookup"] == 1
- assert calls["persist"] == 1
- assert result["status"] == "resolved"
- assert result["meta"]["debug"]["used_cache"] is False
- @pytest.mark.anyio
- async def test_interactive_returns_all_candidates_without_auto_accepting_below_threshold():
- async def no_hit(_subject):
- return None
- async def wikidata_lookup(_subject, _language="en", _limit=5):
- return [
- {"id": "Q1225", "label": "Georgia", "description": "country in Eastern Europe and West Asia", "type": "Q6256"},
- {"id": "Q1428", "label": "Georgia", "description": "state of the United States of America", "type": "Q35657"},
- ]
- async def no_persist(_entity):
- return None
- svc = ResolveService(load_entity_fn=no_hit, wikidata_lookup_fn=wikidata_lookup, persist_entity_fn=no_persist)
- result = await svc.resolve(
- subject="Georgia",
- context={"language": "en", "realm": "external"},
- constraints={"max_candidates": 5},
- hints={"expected_type": "location", "aliases": []},
- strategy={"mode": "interactive", "auto_accept_threshold": 0.95, "interactive_below_threshold": True},
- debug={"include_candidates": True, "include_explanations": True},
- )
- assert result["status"] == "ambiguous"
- assert len(result["candidates"]) == 2
- assert result["meta"]["debug"]["decision"] == "ambiguous_below_threshold"
|