from __future__ import annotations import json import os import sys import unittest from pathlib import Path SERVICE_ROOT = Path(__file__).resolve().parents[1] BACKEND_ROOT = SERVICE_ROOT.parent GOLDEN_ROOT = BACKEND_ROOT / "tests" / "golden" / "prompts" if str(SERVICE_ROOT) not in sys.path: sys.path.insert(0, str(SERVICE_ROOT)) from inference.client import build_payload # noqa: E402 from prompts.chat_system import chat_system_prompt # noqa: E402 from prompts.json_repair_system import JSON_REPAIR_SYSTEM # noqa: E402 from prompts.review_system import review_system_prompt # noqa: E402 from prompts.review_user import review_user_prompt # noqa: E402 class PromptPayloadTests(unittest.TestCase): def test_payload_preserves_system_user_delimiters(self) -> None: payload = build_payload( system_prompt="SYSTEM BODY", user_prompt="USER BODY", max_tokens=128, temperature=0.1, ) self.assertEqual(payload["messages"][0], { "role": "system", "content": "SYSTEM BODY", }) user_content = payload["messages"][1]["content"] self.assertIn("SYSTEM INSTRUCTIONS:", user_content) self.assertIn("SYSTEM BODY", user_content) self.assertIn("USER INPUT:", user_content) self.assertIn("USER BODY", user_content) self.assertEqual(payload["tools"], [{"type": "web_search"}]) def test_review_system_matches_golden_template(self) -> None: golden_path = GOLDEN_ROOT / "static" / "python-review-system-template.txt" golden = golden_path.read_text(encoding="utf-8") rendered = review_system_prompt(10) self.assertTrue(rendered.startswith(golden.split("{{REVIEW_SCHEMA}}")[0])) self.assertIn("Return at most 10 findings.", rendered) def test_json_repair_system_matches_golden(self) -> None: golden = (GOLDEN_ROOT / "static" / "python-json-repair-system.txt").read_text( encoding="utf-8" ) self.assertEqual(JSON_REPAIR_SYSTEM, golden.strip()) def test_review_user_matches_golden(self) -> None: fixture_path = GOLDEN_ROOT / "composed" / "python-review-user.json" fixture = json.loads(fixture_path.read_text(encoding="utf-8")) fix = fixture["fixture"] rendered = review_user_prompt( review_text=fix["reviewText"], document_name=fix["documentName"], playbook_name=fix["playbookName"], playbook_text=fix["playbookText"], ) self.assertEqual(rendered, fixture["user"]) def test_chat_system_matches_golden(self) -> None: fixture_path = GOLDEN_ROOT / "composed" / "python-chat-user.json" fixture = json.loads(fixture_path.read_text(encoding="utf-8")) rendered = chat_system_prompt( playbook_name=fixture["fixture"]["playbookName"], role_brief=fixture["fixture"]["roleBrief"], ) golden = (GOLDEN_ROOT / "static" / "python-chat-system-buyer.txt").read_text( encoding="utf-8" ) self.assertEqual(rendered, golden.strip()) if __name__ == "__main__": unittest.main()