test_ontology_suggestions.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import annotations
  2. import pytest
  3. def test_rule_suggestions_are_deterministic_explainable_and_confidence_sorted():
  4. from app.core.data_research.ontology.suggestions import OntologySuggestionEngine
  5. engine = OntologySuggestionEngine()
  6. suggestions = engine.generate(
  7. domains=[{"uid": "domain-customer", "name": "客户"}],
  8. data_elements=[
  9. {"uid": "element-name", "name": "客户名称", "status": "published", "aliases": ["姓名"]},
  10. {"uid": "element-id", "name": "客户编号", "status": "published", "aliases": []},
  11. {"uid": "draft", "name": "未发布", "status": "draft"},
  12. ],
  13. foreign_keys=[
  14. {"from_uid": "customer", "to_uid": "account", "evidence_uid": "evidence-fk"}
  15. ],
  16. )
  17. assert [item.kind for item in suggestions[:3]] == ["class", "property", "property"]
  18. assert suggestions == engine.generate(
  19. domains=[{"uid": "domain-customer", "name": "客户"}],
  20. data_elements=[
  21. {"uid": "element-name", "name": "客户名称", "status": "published", "aliases": ["姓名"]},
  22. {"uid": "element-id", "name": "客户编号", "status": "published", "aliases": []},
  23. {"uid": "draft", "name": "未发布", "status": "draft"},
  24. ],
  25. foreign_keys=[{"from_uid": "customer", "to_uid": "account", "evidence_uid": "evidence-fk"}],
  26. )
  27. assert all(item.evidence_uids for item in suggestions)
  28. assert [item.confidence for item in suggestions] == sorted(
  29. [item.confidence for item in suggestions], reverse=True
  30. )
  31. def test_ai_suggestion_requires_evidence_and_records_model_versions():
  32. from app.core.data_research.ontology.suggestions import (
  33. OntologySuggestionEngine,
  34. SuggestionInvalid,
  35. )
  36. ai = lambda _context: [
  37. {
  38. "kind": "relation",
  39. "payload": {"uid": "rel-ai", "from_class_uid": "a", "to_class_uid": "b"},
  40. "evidence_uids": [],
  41. "confidence": 0.7,
  42. }
  43. ]
  44. with pytest.raises(SuggestionInvalid, match="evidence"):
  45. OntologySuggestionEngine(ai_port=ai, model_version="model-v1", prompt_version="prompt-v2").generate(
  46. domains=[], data_elements=[], foreign_keys=[], include_ai=True
  47. )