YOKPilot3 / tools /run_context_chain_checks.py
mfirat007's picture
Upload run_context_chain_checks.py
1fb926a verified
Raw
History Blame Contribute Delete
4.18 kB
from __future__ import annotations
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from answering import evaluate_query # noqa: E402
from clause_retrieval import evaluate_clause_query # noqa: E402
from engine import bootstrap_once # noqa: E402
from proof_bundle import parse_and_validate_llm_claims # noqa: E402
FALSE_DUTY_QUESTION = (
"Üniversiteler alt düzeydeki kurumlara eğitim vermekle yükümlü müdür? "
"Bununla ilgili madde var mı?"
)
def _synthetic_proof() -> dict:
return {
"evidence": [
{
"evidence_id": "EV-F",
"article_title": "Üniversite",
"source_text": "f) Ön lisans düzeyinde ara insangücü yetiştiren meslek yüksekokulları;",
},
{
"evidence_id": "EV-G",
"article_title": "Üniversite",
"source_text": (
"g) Belirli bilimsel ve teknolojik alanlarda araştırma ve uygulama "
"yapmakla yükümlü araştırma ve uygulama merkezleri;"
),
},
]
}
def main() -> int:
failures: list[str] = []
invented = json.dumps(
{
"claims": [
{
"type": "synthesis",
"text": (
"Üniversiteler meslek yüksekokulları aracılığıyla alt düzeydeki "
"kurumlara eğitim vermekle yükümlüdür."
),
"evidence_ids": ["EV-F", "EV-G"],
}
]
},
ensure_ascii=False,
)
if parse_and_validate_llm_claims(invented, _synthetic_proof()):
failures.append("cross-evidence invented duty passed claim validation")
valid = json.dumps(
{
"claims": [
{
"type": "atomic",
"text": (
"Araştırma ve uygulama merkezleri belirli bilimsel ve teknolojik "
"alanlarda araştırma ve uygulama yapmakla yükümlüdür."
),
"evidence_ids": ["EV-G"],
}
]
},
ensure_ascii=False,
)
if len(parse_and_validate_llm_claims(valid, _synthetic_proof())) != 1:
failures.append("directly grounded research-center duty was rejected")
bootstrap_once()
internal = evaluate_clause_query(FALSE_DUTY_QUESTION)
proof = internal.get("proof_bundle", {}) or {}
contract = proof.get("relation_contract", {}) or {}
public_result = evaluate_query(FALSE_DUTY_QUESTION)
answer = str(public_result.get("answer", "") or "")
if proof.get("status") != "insufficient":
failures.append(f"false duty proof status: {proof.get('status')}")
if not contract.get("required") or contract.get("aligned"):
failures.append(f"false duty relation contract was not rejected: {contract}")
if "çıkarılamaz" not in answer:
failures.append(f"contrastive grounded abstention missing: {answer}")
if "eğitim vermekle yükümlüdür" in answer:
failures.append("false university duty leaked into public answer")
positive = evaluate_clause_query(
"Araştırma ve uygulama merkezleri araştırma ve uygulama yapmakla yükümlü müdür?",
allowed_documents=["TR-KANUN-2809"],
allowed_articles=["Madde 3"],
)
positive_proof = positive.get("proof_bundle", {}) or {}
positive_contract = positive_proof.get("relation_contract", {}) or {}
if positive_proof.get("status") != "supported" or not positive_contract.get("aligned"):
failures.append(
"explicit research-center duty did not pass: "
f"status={positive_proof.get('status')} contract={positive_contract}"
)
print(f"Context-chain checks: {len(failures)} failure(s)")
for failure in failures:
print("FAIL:", failure)
return 1 if failures else 0
if __name__ == "__main__":
raise SystemExit(main())