cfy / scripts /simulate_feedback.py
killvung's picture
Initial commit
2cd1b38
Raw History Blame Contribute Delete
1.61 kB
"""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())