| import unittest |
|
|
| from src.evidence import make_evidence |
| from src.models import SiteSelection |
| from src.safety import find_forbidden_phrases |
| from src.small_model_assistant import build_assistant_brief |
|
|
|
|
| class SmallModelAssistantTests(unittest.TestCase): |
| def test_template_fallback_is_safe_and_evidence_bound(self): |
| selection = SiteSelection( |
| id="S1", |
| selection_type="pin_radius", |
| coordinate_mode="wgs84", |
| geometry_geojson=None, |
| local_geometry=None, |
| anchor_lat=21.0, |
| anchor_lon=70.0, |
| radius_m=250, |
| area_sqm=196000, |
| perimeter_m=1570, |
| centroid=(21.0, 70.0), |
| bbox=None, |
| unit_source="meters", |
| accuracy_label="pin-radius approximation", |
| limitations=["Pin-radius is approximate."], |
| ) |
| evidence = [ |
| make_evidence( |
| category="Climate", |
| finding="Forecast/current climate was retrieved for site-visit timing.", |
| source_name="Open-Meteo", |
| source_url="https://open-meteo.com/", |
| source_type="public weather API", |
| resolution_or_scope="forecast/current", |
| confidence="medium", |
| limitation="Not long-term climate.", |
| design_implication="Use for site-visit timing.", |
| verification_needed="Check weather locally.", |
| output_label="public_data", |
| ) |
| ] |
|
|
| brief = build_assistant_brief( |
| selection=selection, |
| evidence_rows=evidence, |
| warnings=[], |
| project_type="resort", |
| ) |
|
|
| self.assertIn("template fallback active", brief) |
| self.assertRegex(brief, r"E\d{3}: Forecast/current climate") |
| self.assertIn("radius-based context analysis", brief) |
| self.assertEqual(find_forbidden_phrases(brief), []) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|