#!/usr/bin/env python3 from scripts.jyotish_api_server import JyotishAPIHandler from scripts.jyotish_engine import _build_ai_prompt_pack, _build_health_narrative_payload def _varga(asc, placements): return { "ascendant": {"sign": asc, "sign_index": 0}, "planets": {planet: {"sign": sign} for planet, sign in placements.items()}, } def _report(): modules = { "chart": {"ascendant": {"sign": "Leo", "sign_idx": 4}, "planets": {}, "birth_info": {}}, "varga_full": { "D6_Shashthamsa": _varga("Aries", {"Saturn": "Taurus", "Jupiter": "Gemini"}), "D8_Ashtamsa": _varga("Taurus", {"Saturn": "Cancer", "Jupiter": "Leo"}), "D30_Trimsamsa": _varga("Gemini", {"Saturn": "Virgo", "Jupiter": "Libra"}), }, "dasha": {"current_dasha": {"mahadasha": "Saturn", "antardasha": "Jupiter"}}, "shadbala": {"planets": { "Saturn": {"total_rupas": 6.2, "min_required": 5.0, "strength_level": "strong"}, "Jupiter": {"total_rupas": 4.1, "min_required": 5.0, "strength_level": "weak"}, "Venus": {"total_rupas": 9.9, "min_required": 5.0, "strength_level": "strong"}, }}, } return {"chart": modules["chart"], "modules": modules, "birth_info": {}} def test_health_narrative_uses_only_health_vargas_lords_dasha_and_related_shadbala(): report = _report() payload = _build_health_narrative_payload(report["modules"], report["chart"]) assert set(payload) == {"headline", "strengths", "risks", "boundaries"} joined = " ".join([payload["headline"], *payload["strengths"], *payload["risks"]]) for layer in ("D6", "D8", "D30", "Saturn", "Jupiter"): assert layer in joined assert "Venus" not in joined assert "非医疗" in " ".join(payload["boundaries"]) prompt = _build_ai_prompt_pack(report) assert prompt["evidence_snapshot"]["health_narrative"]["headline"] == payload["headline"] def test_api_prompt_pack_keeps_compact_health_narrative(): report = _report() chart = {**report["chart"], "modules": report["modules"], "birth": {}, "dasha": {}} prompt = JyotishAPIHandler.__new__(JyotishAPIHandler)._build_chart_prompt_pack(chart) seed = prompt["evidence_snapshot"]["health_narrative"] assert seed["status"] == "parameter_sensitive" assert "D6/D8/D30" in seed["headline"] assert "非医疗" in " ".join(seed["boundaries"])