Skip to content

ci: add Breeze grading workflow - #1424

Merged
RemiliaForever (RemiliaForever) merged 7 commits into
mainfrom
ci/breeze-grade
Sep 8, 2026
Merged

RemiliaForever (RemiliaForever) merged 7 commits into
mainfrom
ci/breeze-grade

Conversation

@RemiliaForever

@RemiliaForever RemiliaForever (RemiliaForever) commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add a workflow for grading generated text with the internal Breeze service.
  • Build and upload grading payloads from prompt/response JSON items.
  • Add a temporary docs.yml harness for pre-merge workflow testing; remove it before merge.

Test plan

  • Validate the sample JSON input.
  • Run the payload builder locally.
  • Run git diff --check.
  • Execute the workflow with the internal Breeze grader.

Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
env:
QDC_API_KEY: ${{ secrets.QDC_API_KEY }}
steps:
- uses: actions/checkout@v7
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
env:
QDC_API_KEY: ${{ secrets.QDC_API_KEY }}
steps:
- uses: actions/checkout@v7
Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/breeze-grade.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
--out "${PAYLOAD_FILE}"

# Downloaded by the agent via a bare `gh run download` -- see issue body.
- uses: actions/upload-artifact@v7
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
matrix: ${{ steps.set.outputs.matrix }}
devices: ${{ steps.set.outputs.devices }}
steps:
- uses: actions/checkout@v7
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
timeout-minutes: 45
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
Comment thread .github/workflows/accuracy.yml Fixed
"$THINK" \
--prompt-limit "${PROMPT_LIMIT:-0}" \
--items-out "$DEVICE-$MODEL_NAME.json"
- uses: actions/upload-artifact@v7
matrix: ${{ steps.set.outputs.matrix }}
devices: ${{ steps.set.outputs.devices }}
steps:
- uses: actions/checkout@v7
env:
QDC_API_KEY: ${{ secrets.QDC_API_KEY }}
steps:
- uses: actions/checkout@v7
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
SC*|CRD*|X*) echo "name=sdk-windows-arm64" ;;
*) echo "name=sdk-linux-arm64" ;;
esac >> "$GITHUB_OUTPUT"
- uses: actions/download-artifact@v8
QDC_API_KEY: ${{ secrets.QDC_API_KEY }}
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
env:
QDC_API_KEY: ${{ secrets.QDC_API_KEY }}
steps:
- uses: actions/checkout@v7
Comment thread .github/workflows/accuracy.yml Fixed
--in-dir items \
--grades-in grades.md

- uses: actions/upload-artifact@v7
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
Comment thread .github/workflows/accuracy.yml Fixed
Comment thread .github/workflows/docs.yml Fixed
if-no-files-found: error
retention-days: 7
# Not part of what the issue tells the grader to download.
- uses: actions/upload-artifact@v7
Comment thread .github/workflows/docs.yml Fixed
- uses: actions/setup-python@v7
with:
python-version: "3.11"
- uses: actions/download-artifact@v8
Comment thread .github/workflows/docs.yml Fixed
Unifies run_qdc_jobs.py's CLI under --mode (bench, bench_aggregate,
accuracy, accuracy_payload, accuracy_report) instead of a single
--accuracy flag, and adds the accuracy engine: parse a device's
geniex-bench log into prompt/response items (one cell per compute
unit, so a multi-device run keeps every cell instead of only the
first), anonymize and merge every cell across the device x model
matrix into one grading payload plus a human-readable item-to-cell
map, parse the grader's reply back into per-item ratings, and render
two summary tables (score bands, deduction categories) per cell.

bench.yml follows the --cells-out/--render-dir -> --out/--in-dir
rename so the existing bench pipeline keeps working under the new
flag names.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
Each device launcher script gains an accuracy path alongside the
existing bench sweep: one pass over the chat-templated prompt file per
cell, with the [gen ] lines in the resulting log standing in for the
timings bench normally reports. Windows' Start-Transcript writes
UTF-16 (handled on the host side); Android has no entry script to
substitute a mode into, so params.json carries it and pytest skips
whichever of test_bench/test_accuracy the mode did not ask for.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
grade-rules.md tells Breeze how to score quantization damage (0-10,
weighted heavily toward decoding failures over ordinary weaknesses)
and frames the response text between it grades as untrusted data, not
instructions, since it's raw model output graded by an agent with
tool access.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
Dispatches geniex-bench --accuracy across a device x model matrix,
merges the generated text into an anonymized payload, round-trips it
through a GitHub issue to the internal Breeze grader in
qcom-ai-hub/geniex, and posts the two aggregate tables plus an
item-map artifact back to the run summary. No workflow-level
concurrency guard: github.run_id already makes the issue title, QDC
job names, and every artifact name unique per run, and QDC job
submission already retries through pending-job quota contention, so
concurrent runs don't collide anywhere a guard could help.

_build-sdk.yml gains the optional HEXAGON_HTP_CERT_PFX secret input
this pipeline's build-sdk job passes through.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
Signed-off-by: RemiliaForever <remilia@koumakan.cc>
…eport

A generate job that produces zero items (e.g. a device error) used to just
vanish from the score/deduction tables. render_grades now takes the full
device x model matrix's base cell names and adds a dash row for any not
matched by an actual item, so a failed leg shows up as missing instead of
being silently dropped.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
The missing-generate-jobs check already computes devices x models; reuse
it to build the {model}-{device} cell list run_qdc_jobs.py needs to
render dash rows for whichever job(s) came back empty.

Signed-off-by: RemiliaForever <remilia@koumakan.cc>
@RemiliaForever
RemiliaForever (RemiliaForever) merged commit 77e3cf6 into main Sep 8, 2026
37 of 38 checks passed
@RemiliaForever
RemiliaForever (RemiliaForever) deleted the ci/breeze-grade branch September 8, 2026 15:23
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.

3 participants