Skip to content

feat(aorlta): starter plugins for three kinds of task (ISA fuzzer, Q&A expert, sanitizer triage) - #614

Draft
vivekkhandelwal1 wants to merge 9 commits into
feat/aorlta-example-hip-kernelsfrom
feat/aorlta-vertical-starters
Draft

vivekkhandelwal1 wants to merge 9 commits into
feat/aorlta-example-hip-kernelsfrom
feat/aorlta-vertical-starters

Conversation

@vivekkhandelwal1

Copy link
Copy Markdown
Collaborator

Three starter plugins to copy when you build a task of your own, under aorlta/examples/verticals/:

  • isa-fuzzer/: the model writes a short test program in a declared toy format; the placeholder check is the format's grammar, length and required instructions, with an optional external tool after that.
  • qa-expert/: a question in your domain, answered on an Answer: line; the placeholder check is an exact match after normalising.
  • sanitizer-triage/: the model reads a tool's report and answers with a JSON verdict (a category from a closed list and a rationale); the placeholder check reads only the verdict's form.

Each is framework only: a toy prompt pool (marked PLACEHOLDER, not real tasks or reports), a working placeholder check and reward with TODOs where the real one goes, a check profile, a score and a train config for one GPU, and a README under 30 lines. Each is its own plugin package, so a directory can be copied alone. There's no bug-finding content.

tests/examples/test_verticals.py loads every config, tests each placeholder check and reward (the service's reward rules: range, parts, unsettled never clean), and scores and trains each starter on CPU through the real wiring. The ISA tool gets the same treatment as the Q&A judge in #613: its identity is part of the check's version, and a timeout or close() kills its whole process group.

Stacked on #613. Draft.

…&A expert and sanitizer triage

Each is a plugin package on its own under examples/verticals/: its module (task, parse with a
repair turn, feedback, check adapter, reward function), its check profile, a toy prompt pool split
into train and held-out, and a score and a train config beside it. The checks and rewards are
placeholders, marked as such, with a TODO that states the rules a real reward must keep.
tests/examples/test_verticals.py tests each placeholder, including the unscored paths, and scores
and trains each vertical on CPU through the real wiring.
… a prefix match, extra verdict keys and a hash that omits a field
…ntity and dies with it

The same two points #613's review raised for the Q&A judge: the tool's command, timeout and script identity are now
in the check's version (cached legs are keyed by it), and the tool runs through ProcessRunner, so a timeout or the
worker's close() kills its whole process group.
Copilot AI balanced review requested due to automatic review settings November 13, 2026 10:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved correctness issues can reject valid JSON verdicts and toy programs, while changes to PATH-resolved checkers can cause stale cached results to be reused.

3 open issues
What changed in this PR

Adds three standalone starter plugins for aorlta’s task-extension framework: ISA fuzzing, domain Q&A, and sanitizer triage. These complement the worked examples from #613 with copyable templates using clearly marked toy data and placeholder checks.

Changes:

  • Adds task prompts, parsing, checks, rewards, and optional external-tool support for the ISA starter.
  • Supplies separate training and held-out pools, single-GPU configurations, and adaptation instructions.
  • Adds tests for plugin loading, reward invariants, tool identity and cleanup, and CPU scoring/training integration.
File Description
aorlta/​tests/​examples/​test_verticals.py Tests all three starters and their integration.
aorlta/​README.md Introduces the starter directory.
aorlta/​examples/​verticals/​sanitizer-triage/​train.yaml Configures single-GPU triage training.
aorlta/​examples/​verticals/​sanitizer-triage/​score.yaml Configures held-out triage scoring.
aorlta/​examples/​verticals/​sanitizer-triage/​sanitizer-triage.yaml Defines the CPU verdict-check profile.
aorlta/​examples/​verticals/​sanitizer-triage/​sanitizer_triage.py Implements verdict parsing, form checks, and rewards.
aorlta/​examples/​verticals/​sanitizer-triage/​README.md Explains triage customization and usage.
aorlta/​examples/​verticals/​sanitizer-triage/​pool/​train/​reports.jsonl Adds four toy training reports.
aorlta/​examples/​verticals/​sanitizer-triage/​pool/​heldout/​reports.jsonl Adds four toy held-out reports.
aorlta/​examples/​verticals/​README.md Summarizes the starters and shared contracts.
aorlta/​examples/​verticals/​qa-expert/​train.yaml Configures single-GPU Q&A training.
aorlta/​examples/​verticals/​qa-expert/​score.yaml Configures held-out Q&A scoring.
aorlta/​examples/​verticals/​qa-expert/​README.md Explains Q&A customization and usage.
aorlta/​examples/​verticals/​qa-expert/​qa-expert.yaml Defines the CPU answer-check profile.
aorlta/​examples/​verticals/​qa-expert/​qa_expert.py Implements answer extraction, matching, and rewards.
aorlta/​examples/​verticals/​qa-expert/​pool/​train/​questions.jsonl Adds four toy training questions.
aorlta/​examples/​verticals/​qa-expert/​pool/​heldout/​questions.jsonl Adds four toy held-out questions.
aorlta/​examples/​verticals/​isa-fuzzer/​train.yaml Configures single-GPU ISA training.
aorlta/​examples/​verticals/​isa-fuzzer/​score.yaml Configures held-out ISA scoring.
aorlta/​examples/​verticals/​isa-fuzzer/​README.md Documents customization and the tool interface.
aorlta/​examples/​verticals/​isa-fuzzer/​pool/​train/​tasks.jsonl Adds four toy training goals.
aorlta/​examples/​verticals/​isa-fuzzer/​pool/​heldout/​tasks.jsonl Adds four toy held-out goals.
aorlta/​examples/​verticals/​isa-fuzzer/​isa-fuzzer.yaml Defines the CPU program-check profile.
aorlta/​examples/​verticals/​isa-fuzzer/​isa_fuzzer.py Implements grammar checks, tool execution, and rewards.
aorlta/​docs/​ADAPTING.md Points task authors to the starters.

Review effort: Balanced

… the ISA prompt's immediates, a tool on PATH

- sanitizer-triage found its JSON verdict with a non-greedy brace regex, which stopped at a } inside a string; the
  JSON decoder now finds each object's end.
- isa-fuzzer's check limits an immediate to six digits, which its prompt did not say; the prompt now states it.
- isa-fuzzer's tool, given as a bare command, is fingerprinted as PATH finds it, so replacing it is a new version.
Copilot AI balanced review requested due to automatic review settings November 13, 2026 10:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The answer parser’s whitespace matching crosses line boundaries, causing correct final answers to be rejected and empty final answer markers to be incorrectly accepted.

1 open issue
3 resolved since last review

Review effort: Balanced

The answer pattern's \s* crossed line ends, so an empty marker took the next line as its answer and an empty last
marker fell back to an earlier one. Each line is now matched alone, and an empty last marker is no answer.
Copilot AI balanced review requested due to automatic review settings November 13, 2026 11:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Answer normalization leaves closing formatting delimiters when followed by a full stop, causing otherwise correct answers to receive a wrong-answer reward.

No open issues 🎉

1 previously missed issue

In code that hasn't changed since last review

Medium severity Strip trailing punctuation after removing answer formatting

aorlta/​examples/​verticals/​qa-expert/​qa_expert.py:46

A full stop outside the answer's formatting leaves a closing delimiter in the normalised value: Answer: "5". normalises to 5", and Answer: **5**. to 5**. Both therefore receive wrong_answer for the first training question, although the documented normalisation removes surrounding formatting and a trailing full stop. Strip the trailing delimiters and full stop together so their order does not change the reward.

1 resolved since last review

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings November 13, 2026 17:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Answer normalization incorrectly rejects valid quoted or bold aliases, and the sanitizer prompt omits the rationale-length limit enforced by validation.

2 open issues

Review effort: Balanced

"""PLACEHOLDER normalisation: NFKC, lower case, surrounding quotes, backticks and asterisks, a trailing full stop
and runs of space removed. A real expert task may want more (units, numeric tolerance, synonyms) or a judge."""
t = unicodedata.normalize("NFKC", text).strip().lower()
t = t.strip("*`'\" ").rstrip(".").strip()
MAX_RATIONALE_CHARS = 400
SYSTEM = "You triage reports from a checking tool."
USER = ("Report:\n{report}\n\nReply with one JSON object with exactly the keys \"category\" and \"rationale\": the "
"category is one of " + ", ".join(CATEGORIES) + ", and the rationale is one or two sentences.")

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants