message_reviewer
Send private messages to specific reviewers about paper submissions, with preview capability before final confirmation.
Instructions
Send a private message to a specific reviewer. Visible to the reviewer, ACs, SACs, and PCs.
Returns a preview — call confirm_submission to actually send it.
Args: venue_id: The venue identifier. submission_number: The paper number. reviewer_id: The reviewer's anonymous ID (e.g., 'Reviewer_ABCD'). subject: Message subject line. message_text: Message body.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes | ||
| submission_number | Yes | ||
| reviewer_id | Yes | ||
| subject | Yes | ||
| message_text | Yes |
Implementation Reference
- The message_reviewer tool handler is defined here. It constructs a message payload for a specific reviewer on an OpenReview submission and adds it to the pending store for confirmation.
async def message_reviewer( venue_id: str, submission_number: int, reviewer_id: str, subject: str, message_text: str, ) -> str: """Send a private message to a specific reviewer. Visible to the reviewer, ACs, SACs, and PCs. Returns a preview — call confirm_submission to actually send it. Args: venue_id: The venue identifier. submission_number: The paper number. reviewer_id: The reviewer's anonymous ID (e.g., 'Reviewer_ABCD'). subject: Message subject line. message_text: Message body. """ client = get_client() profile_id = client.profile.id ac_groups = client.get_groups( prefix=f"{venue_id}/Submission{submission_number}/Area_Chair_", signatory=profile_id, ) if not ac_groups: return f"Could not find your AC group for Submission #{submission_number}." ac_anon_id = ac_groups[0].id reviewer_group = f"{venue_id}/Submission{submission_number}/{reviewer_id}" readers = [ f"{venue_id}/Program_Chairs", f"{venue_id}/Submission{submission_number}/Senior_Area_Chairs", f"{venue_id}/Submission{submission_number}/Area_Chairs", reviewer_group, ] # Resolve the submission to get forum/replyto eagerly note = _resolve_submission(client, venue_id, submission_number=submission_number) note_forum = note.id if note else None note_replyto = note.id if note else None payload = { "invitation": f"{venue_id}/Submission{submission_number}/-/Official_Comment", "signatures": [ac_anon_id], "note_forum": note_forum, "note_replyto": note_replyto, "readers": readers, "content": { "title": {"value": subject}, "comment": {"value": message_text}, }, } readers_display = "\n".join(f" - {r}" for r in readers) preview = "\n".join([ f"## Message to {reviewer_id} (Submission #{submission_number})", f"**From:** {ac_anon_id}", f"**Subject:** {subject}", f"**Visible to:**\n{readers_display}", f"\n{message_text}", ]) confirmation_id = pending_store.add(action="message_reviewer", payload=payload, preview=preview) return f"{preview}\n\n---\n**Confirmation ID:** `{confirmation_id}`\n\nCall `confirm_submission` with this ID to send the message."