{% extends "base.html" %} {% block title %}AI review validation{% endblock %} {% block content %}

AI review validation

Upload the actual human reviews and the AI review they should be compared to. The validation returns a calibration report — which persona prompts should be strengthened, which should be quieted, and what the human reviewers caught that the AI missed.

{% if not any_provider_configured %}
No LLM API is configured. Head to the Model page to pick a provider and set its key, or edit config.yaml directly — then come back here.
{% endif %}
{% if llm_status %}

Currently using {{ llm_status.validation_provider }} / {{ llm_status.validation_model }} {% if llm_status.validation_provider != llm_status.review_provider %} (different from the review provider {{ llm_status.review_provider }}). {% elif llm_status.validation_model != llm_status.review_model %} (different model from the review model). {% else %} (same as the review model). {% endif %} Change on the Model page.

{% endif %}

1. Human review

Upload the human review as either a raw text file or a markdown file. An LLM converts it into the same structured AI-review format so the validator can compare comment-by-comment. The validation is robust to different human review styles and formats, but may struggle with very terse reviews that lack clear comment boundaries.

2. AI review

Either reuse a prior AI review from this server, or upload one. {% if past_reviews %}Defaulting to your most recent review below — change to — none — if you'd rather upload a different file.{% endif %}

{% if past_reviews %} {% endif %}

✓ Using the selected prior review — no file upload needed.

Recent validations

{% if recent_validations %} {% for v in recent_validations %} {% endfor %}
Run Human review file Status Started
{{ v.run_id }} {{ v.actual_filename or '—' }} {{ v.status }} {{ v.started_at[:19].replace('T', ' ') if v.started_at else '' }} {% if v.status == 'done' %} View {% else %} Status {% endif %}
{% else %}

No validations yet.

{% endif %}
{% endblock %}