ai-lawyer-agent/testing/tests/test_sys_prompt.py
2026-03-23 04:51:56 +01:00

123 lines
4.1 KiB
Python

import pytest
from core.system_prompt import get_system_prompt
from core.config import OLLAMA_MODELS, OPENAI_MODELS
MODELS = ["qwen3.5:cloud"]
@pytest.fixture(params=MODELS)
def prompt(request):
return get_system_prompt(request.param)
@pytest.fixture(params=MODELS)
def prompt_lower(request):
return get_system_prompt(request.param).lower()
class TestPromptContainsModelName:
def test_model_name_appears_in_prompt(self, prompt, request):
model = request.node.callspec.params["prompt"]
assert model in prompt
class TestRequiredSections:
def test_has_role_section(self, prompt_lower):
assert "role" in prompt_lower
def test_has_operational_constraints(self, prompt_lower):
assert "constraint" in prompt_lower or "not allowed" in prompt_lower or "do not" in prompt_lower
def test_has_workflow_steps(self, prompt_lower):
assert "step" in prompt_lower or "workflow" in prompt_lower
def test_has_error_recovery(self, prompt_lower):
assert "error" in prompt_lower or "not found" in prompt_lower
def test_has_response_format(self, prompt_lower):
assert "format" in prompt_lower or "response" in prompt_lower
class TestSupportedDomains:
def test_courts_mentioned(self, prompt_lower):
assert "court" in prompt_lower or "súd" in prompt_lower or "sud" in prompt_lower
def test_judges_mentioned(self, prompt_lower):
assert "judge" in prompt_lower or "sudca" in prompt_lower or "sudcovia" in prompt_lower
def test_decisions_mentioned(self, prompt_lower):
assert "decision" in prompt_lower or "rozhodnut" in prompt_lower
def test_contracts_mentioned(self, prompt_lower):
assert "contract" in prompt_lower or "zmluv" in prompt_lower
def test_civil_proceedings_mentioned(self, prompt_lower):
assert "civil" in prompt_lower or "obcian" in prompt_lower or "pojednavan" in prompt_lower
def test_admin_proceedings_mentioned(self, prompt_lower):
assert "admin" in prompt_lower or "spravne" in prompt_lower or "správne" in prompt_lower
class TestConstraints:
def test_no_legal_advice_constraint(self, prompt_lower):
assert "legal advisor" in prompt_lower or "not a lawyer" in prompt_lower or "legal advice" in prompt_lower
def test_api_only_constraint(self, prompt_lower):
assert "api" in prompt_lower
def test_slovak_language_requirement(self, prompt_lower):
assert "slovak" in prompt_lower or "slovensk" in prompt_lower
def test_no_raw_json_rule(self, prompt_lower):
assert "json" in prompt_lower or "technical" in prompt_lower
def test_no_speculate_rule(self, prompt_lower):
assert "speculate" in prompt_lower or "infer" in prompt_lower or "gaps" in prompt_lower
class TestPaginationRules:
def test_page_starts_at_zero_mentioned(self, prompt_lower):
assert "page" in prompt_lower and "0" in prompt_lower
def test_autocomplete_preferred_mentioned(self, prompt_lower):
assert "autocomplete" in prompt_lower
class TestDateRules:
def test_date_format_dd_mm_yyyy_mentioned(self, prompt):
assert "DD.MM.YYYY" in prompt or "dd.mm.yyyy" in prompt.lower()
def test_civil_date_field_mentioned(self, prompt_lower):
assert "pojednavaniaod" in prompt_lower or "pojednavania" in prompt_lower
def test_decision_date_field_mentioned(self, prompt_lower):
assert "vydaniaod" in prompt_lower or "vydania" in prompt_lower
class TestIDNormalizationRules:
def test_sud_prefix_mentioned(self, prompt_lower):
assert "sud_" in prompt_lower
def test_sudca_prefix_mentioned(self, prompt_lower):
assert "sudca_" in prompt_lower
def test_spravnekonanie_prefix_mentioned(self, prompt_lower):
assert "spravnekonanie_" in prompt_lower or "spravne" in prompt_lower
class TestPromptLength:
def test_prompt_is_not_empty(self, prompt):
assert len(prompt.strip()) > 0
def test_prompt_has_minimum_length(self, prompt):
assert len(prompt) > 500
def test_prompt_has_reasonable_max_length(self, prompt):
assert len(prompt) < 50_000