← Files LuciaARCHIVED FILE

modules/prompt-optimizer/scripts/model_policy.py

13.6 KB · Nov 11, 2026 · 18:09 UTC

↓ Download file

See the change to this file →

"""Record advisory legal/tax model preferences without choosing or calling a model.

Model capability is a host/user-informed judgment. Model identity never gates work. Code preserves evidence, revisions and run
ownership for auditability, including when the model or conversation changes.
"""

from __future__ import annotations

import argparse
import hashlib
import json
import os
import sys
import uuid
from datetime import datetime, timezone
from pathlib import Path
from typing import Any

__all__ = ["apply_request", "main"]

ROOT = Path(__file__).resolve().parents[1]
for vendor in (
    ROOT / "vendor" / "modules",
    ROOT.parent.parent / "vendor" / "modules",
    ROOT.parent / "_shared" / "vendor" / "modules",
):
    if (vendor / "vera_assurance").is_dir():
        sys.path.insert(0, str(vendor))
        break

from vera_assurance import (  # noqa: E402
    AssuranceContractError,
    load_client_engagement_context_file,
)

FILENAME = "legal_tax_model.json"
PHASES = {
    "preparation",
    "research",
    "drafting",
    "validation",
    "opposing_opinion",
    "revision",
}


def _text(value: Any, name: str, limit: int = 1000) -> str:
    if not isinstance(value, str) or not value.strip() or len(value) > limit:
        raise ValueError(f"Invalid {name}")
    return value.strip()


def _bytes(value: dict[str, Any]) -> bytes:
    return (
        json.dumps(value, ensure_ascii=False, sort_keys=True, indent=2) + "\n"
    ).encode()


def _digest(value: dict[str, Any]) -> str:
    return hashlib.sha256(_bytes(value)).hexdigest()


def _safe_file(root: Path, name: str) -> Path:
    target = root / name
    for ancestor in (target, *target.parents):
        if ancestor.is_symlink():
            raise ValueError("Symlink model-policy path rejected")
    return target


def _read(root: Path, run_id: str) -> dict[str, Any] | None:
    file = _safe_file(root, FILENAME)
    if not file.exists():
        return None
    if not file.is_file() or file.stat().st_size > 1_000_000:
        raise ValueError("Invalid model-policy record")
    value = json.loads(file.read_text(encoding="utf-8"))
    if (
        not isinstance(value, dict)
        or value.get("schema_version") != "vera.legal_tax_model.v1"
        or value.get("run_id") != run_id
    ):
        raise ValueError("Model-policy record belongs to another run")
    required = value.get("preferred_model")
    if required is not None:
        _text(required, "preferred_model", 160)
    advisory = value.get("enforcement") == "advisory"
    for field, limit in (("host", 80), ("session_ref", 240), ("selection_basis", 3000)):
        _text(value.get(field), field, limit)
    identity = value.get("identity_basis")
    active = value.get("active_model")
    if identity == "host_reported":
        _text(active, "active_model", 160)
        _text(value.get("observation_reference"), "observation_reference", 3000)
        expected = (
            "ready_host_reported"
            if advisory or active == required
            else "requires_switch"
        )
    elif identity == "user_confirmed":
        if (not advisory and active != required) or value.get(
            "confirmation_source"
        ) not in {
            "plugin_ui",
            "chat",
        }:
            raise ValueError("Invalid user-confirmed model identity")
        _text(value.get("confirmation_reference"), "confirmation_reference", 3000)
        expected = "ready_user_confirmed"
    elif identity == "unknown" and active is None:
        expected = "ready_unknown" if advisory else "awaiting_confirmation"
    else:
        raise ValueError("Invalid model identity evidence")
    if (
        value.get("status") != expected
        or value.get("policy") != "most_capable_available"
        or not isinstance(value.get("phases"), list)
    ):
        raise ValueError("Inconsistent model-policy record")
    return value


def _write(root: Path, record: dict[str, Any], previous: dict[str, Any] | None) -> None:
    if previous:
        history = _safe_file(root, "model-policy-history")
        history.mkdir(exist_ok=True)
        old = _safe_file(history, _digest(previous) + ".json")
        if not old.exists():
            with old.open("xb") as stream:
                stream.write(_bytes(previous))
    temporary = _safe_file(root, f".model-policy-{uuid.uuid4().hex}.tmp")
    try:
        with temporary.open("xb") as stream:
            stream.write(_bytes(record))
        os.replace(temporary, _safe_file(root, FILENAME))
    finally:
        temporary.unlink(missing_ok=True)


def _apply(request: dict[str, Any], root: Path, run_id: str) -> dict[str, Any]:
    action = request["action"]
    previous = _read(root, run_id)
    now = datetime.now(timezone.utc).isoformat()
    if action == "prepare":
        host = _text(request.get("host"), "host", 80)
        required = request.get("preferred_model")
        if required is not None:
            required = _text(required, "preferred_model", 160)
        session = _text(request.get("session_ref"), "session_ref", 240)
        basis = _text(
            request.get(
                "selection_basis",
                "No capability recommendation available; continue with the current host model.",
            ),
            "selection_basis",
            3000,
        )
        language = request.get("language", "en")
        if language not in {"it", "en", "fr", "de", "es"}:
            raise ValueError("Unsupported language")
        observed = request.get("observed_model")
        if observed is not None:
            observed = _text(observed, "observed_model", 160)
            _text(request.get("observation_reference"), "observation_reference", 3000)
        # Reopening the same check must not erase a real confirmation or phase history.
        same = previous and all(
            previous.get(k) == v
            for k, v in (
                ("host", host),
                ("preferred_model", required),
                ("session_ref", session),
                ("selection_basis", basis),
            )
        )
        if same and (observed is None or observed == previous.get("active_model")):
            record = previous
        else:
            record = {
                "schema_version": "vera.legal_tax_model.v1",
                "run_id": run_id,
                "policy": "most_capable_available",
                "enforcement": "advisory",
                "host": host,
                "preferred_model": required,
                "selection_basis": basis,
                "session_ref": session,
                "language": language,
                "active_model": observed,
                "identity_basis": "host_reported" if observed else "unknown",
                "observation_reference": (
                    request.get("observation_reference") if observed else None
                ),
                "status": ("ready_host_reported" if observed else "ready_unknown"),
                "phases": (
                    json.loads(json.dumps(previous["phases"])) if previous else []
                ),
                "updated_at": now,
                "previous_sha256": _digest(previous) if previous else None,
            }
    else:
        if previous is None:
            raise ValueError("Prepare the model record first")
        record = json.loads(json.dumps(previous))
        if action in {"confirm", "phase"}:
            if request.get("expected_sha256") != _digest(previous):
                raise ValueError("Stale model check; reload before continuing")
            session = _text(request.get("session_ref"), "session_ref", 240)
        if action == "confirm":
            if request.get("confirmation_source") not in {"plugin_ui", "chat"}:
                raise ValueError("An explicit UI or chat confirmation is required")
            confirmed = _text(request.get("confirmed_model"), "confirmed_model", 160)
            record.update(
                {
                    "active_model": confirmed,
                    "session_ref": session,
                    "identity_basis": "user_confirmed",
                    "status": "ready_user_confirmed",
                    "observation_reference": None,
                    "confirmation_source": request["confirmation_source"],
                    "confirmation_reference": _text(
                        request.get("confirmation_reference"),
                        "confirmation_reference",
                        3000,
                    ),
                    "updated_at": now,
                }
            )
        elif action == "phase":
            phase = request.get("phase")
            if phase not in PHASES:
                raise ValueError("Unsupported legal/tax phase")
            model = request.get("model")
            if model is not None:
                model = _text(model, "model", 160)
            same_identity = (
                session == previous["session_ref"] and model == previous["active_model"]
            )
            identity = previous["identity_basis"] if same_identity else "unknown"
            observation = request.get("observation_reference")
            if observation is not None and model is not None:
                _text(observation, "observation_reference", 3000)
                identity = "host_reported"
            if not same_identity:
                record.update(
                    session_ref=session,
                    active_model=None,
                    identity_basis="unknown",
                    observation_reference=None,
                )
                record.pop("confirmation_reference", None)
                record.pop("confirmation_source", None)
            if identity == "host_reported":
                record.update(
                    active_model=model,
                    identity_basis=identity,
                    observation_reference=observation
                    or previous["observation_reference"],
                )
            record["phases"].append(
                {
                    "phase": phase,
                    "model": model,
                    "identity_basis": identity,
                    "session_ref": session,
                    "execution_reference": _text(
                        request.get("execution_reference"), "execution_reference", 3000
                    ),
                    "recorded_at": now,
                }
            )
            record["updated_at"] = now
        elif action != "read":
            raise ValueError("Unknown model-policy action")
    # Reading a finalized run must not invalidate its saved artifact receipts.
    # Legacy statuses are historical evidence; they never gate continuation.
    if action != "read":
        record = json.loads(json.dumps(record))
        record["enforcement"] = "advisory"
        record["status"] = {
            "host_reported": "ready_host_reported",
            "user_confirmed": "ready_user_confirmed",
            "unknown": "ready_unknown",
        }[record["identity_basis"]]
        if record != previous:
            _write(root, record, previous)
    return {
        "ok": True,
        "record": record,
        "sha256": _digest(record),
        "can_continue": True,
        "enforcement": "advisory",
        "model_selection_required": False,
        "path": str(root / FILENAME),
        "host_switch_performed": False,
    }


def apply_request(request: dict[str, Any]) -> dict[str, Any]:
    """Validate the existing managed run; UI and Cowork use this same contract."""
    if not isinstance(request, dict) or request.get("action") not in {
        "prepare",
        "read",
        "confirm",
        "phase",
    }:
        raise ValueError("Invalid model-policy request")
    workflow = request.get("workflow_id", "prompt-optimizer")
    if workflow not in {"prompt-optimizer", "deep-research-validator"}:
        raise ValueError("Model policy is limited to the legal/tax pipeline")
    root = Path(_text(request.get("output_dir"), "output_dir", 4096)).absolute()
    _safe_file(root, FILENAME)
    context = load_client_engagement_context_file(
        Path(_text(request.get("client_engagement"), "client_engagement", 4096)),
        expected_workflow_id=workflow,
        input_paths=[],
        output_dir=root,
        allowed_statuses=(
            ("running", "ready_for_review", "completed")
            if request["action"] == "read"
            else ("running",)
        ),
    )
    if request.get("run_id") != context["run_id"]:
        raise ValueError("Model check run identity mismatch")
    if request["action"] == "read":
        return _apply(request, root, context["run_id"])
    root.mkdir(parents=True, exist_ok=True)
    lock = _safe_file(root, ".model-policy.lock")
    try:
        lock.mkdir()
    except FileExistsError as exc:
        raise ValueError(
            "Model check is being updated; reload before retrying"
        ) from exc
    try:
        return _apply(request, root, context["run_id"])
    finally:
        lock.rmdir()


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--request", type=Path, help="JSON request; omit to read stdin")
    args = parser.parse_args(argv)
    try:
        raw = (
            args.request.read_text(encoding="utf-8")
            if args.request
            else sys.stdin.buffer.read(50_001).decode("utf-8")
        )
        if len(raw) > 50_000:
            raise ValueError("Model-policy request too large")
        result = apply_request(json.loads(raw))
    except (OSError, ValueError, AssuranceContractError) as exc:
        parser.error(str(exc))
    # ASCII JSON escapes preserve Unicode even on hosts with a legacy stdio codec.
    sys.stdout.write(json.dumps(result, ensure_ascii=True) + "\n")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

SHA-256: 16c6ae9bb4bca8747e4a36a0839c9fe1f2fdc1bcc9908fe75f9cc8554e1817eb