File size: 1,605 Bytes
2cd1b38 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | """Simulate reviewer feedback for end-to-end validation."""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parent.parent
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from app.db import get_review_store # noqa: E402
DEMO_TOKENS = [
"invite-reviewer-1-a7b3c9d2",
"invite-reviewer-2-e4f8a1b6",
"invite-reviewer-3-c2d5f7a9",
]
# Deterministic acceptance pattern per reviewer (slot 1-based)
PATTERNS = {
DEMO_TOKENS[0]: [True, True, False, False],
DEMO_TOKENS[1]: [True, False, True, False],
DEMO_TOKENS[2]: [False, True, True, True],
}
def simulate_reviewer(token: str) -> int:
store = get_review_store()
invite = store.get_invite_by_token(token)
if invite is None:
raise RuntimeError(f"Invalid invite token: {token}")
session_id = store.get_or_create_session(invite.id)
tasks = store.list_all_evaluation_tasks()
pattern = PATTERNS[token]
rows = 0
for task in tasks:
selections = {
candidate.id: pattern[candidate.slot - 1]
for candidate in task.candidates
}
store.submit_feedback(session_id, task.id, selections)
rows += len(selections)
print(f"{invite.evaluator_label.value}: submitted {rows} feedback rows across {len(tasks)} tasks")
return rows
def main() -> int:
total = 0
for token in DEMO_TOKENS:
total += simulate_reviewer(token)
print(f"Total feedback rows: {total}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
|