Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
255c743dff | ||
|
|
64b0474a62 | ||
|
|
83bf73d3ec | ||
|
|
9db8b2603c | ||
|
|
88eb67aa18 |
@@ -16,17 +16,54 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # full history needed for git-cliff
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Generate release notes
|
||||
id: cliff
|
||||
# ---- (1) Generate the GitHub Release body (latest only, no header) ----
|
||||
# `--strip header` drops the static SemVer preamble so the release page
|
||||
# shows just the per-version section, while CHANGELOG.md (below) keeps
|
||||
# the header at the top of the file.
|
||||
- name: Generate release notes (latest only)
|
||||
id: cliff-release
|
||||
uses: orhun/git-cliff-action@v4
|
||||
with:
|
||||
config: cliff.toml
|
||||
args: --latest --github-repo noonghunna/club-3090
|
||||
args: --latest --strip header --github-repo noonghunna/club-3090
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
OUTPUT: RELEASE_NOTES.md
|
||||
|
||||
# ---- (2) Regenerate full CHANGELOG.md (all tags, with header) ----
|
||||
- name: Regenerate CHANGELOG.md
|
||||
uses: orhun/git-cliff-action@v4
|
||||
with:
|
||||
config: cliff.toml
|
||||
args: --github-repo noonghunna/club-3090
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
OUTPUT: CHANGELOG.md
|
||||
|
||||
# ---- (3) Commit the regenerated CHANGELOG.md back to master ----
|
||||
# The tag's commit doesn't include this auto-regen — but the GitHub
|
||||
# Release page is correct (step 1), and master's CHANGELOG.md catches
|
||||
# up ~1 min after tag push. Skipped if nothing changed.
|
||||
- name: Commit CHANGELOG.md back to master
|
||||
run: |
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git fetch origin master
|
||||
git checkout -B master origin/master
|
||||
# Re-run cliff against master HEAD so the regen reflects what master
|
||||
# actually contains (the tag may not yet be on master if pushed from
|
||||
# a feature branch; uncommon but handled).
|
||||
git add CHANGELOG.md
|
||||
if git diff --staged --quiet; then
|
||||
echo "CHANGELOG.md unchanged — skipping commit."
|
||||
else
|
||||
git commit -m "chore(changelog): regenerate for ${{ github.ref_name }} [skip ci]"
|
||||
git push origin master
|
||||
fi
|
||||
|
||||
# ---- (4) Publish GitHub Release ----
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
|
||||
+8703
-416
File diff suppressed because it is too large
Load Diff
+42
-20
@@ -8,15 +8,41 @@
|
||||
# → release published.
|
||||
|
||||
[changelog]
|
||||
# Header rendered once at top of every release body.
|
||||
# Header rendered once at top of CHANGELOG.md (preserved across full regens).
|
||||
# Use `--strip header` on `--latest` for GitHub Release bodies so they don't
|
||||
# duplicate this intro on every release page.
|
||||
header = """
|
||||
# Changelog
|
||||
|
||||
Auto-generated from commit messages by [git-cliff](https://git-cliff.org/).
|
||||
Update flow: write rich commit message bodies → tag → CI regenerates this file
|
||||
and the GitHub Release notes from the same source. Don't hand-edit below the
|
||||
header — your changes will be overwritten on the next tag.
|
||||
|
||||
**Versioning:** SemVer in `0.x` — treat any minor bump as potentially breaking
|
||||
until `1.0`. Past CalVer tags (`v2026.05.09`, `v2026.05.10`) are preserved for
|
||||
history; SemVer takes over from `v0.3.0` onward.
|
||||
|
||||
| CalVer tag | SemVer equivalent | Date |
|
||||
|---|---|---|
|
||||
| `v2026.05.09` | (≈ v0.1.0) | 2026-05-09 — first tagged release |
|
||||
| `v2026.05.10` | (≈ v0.2.0) | 2026-05-10 — stack reorg + Gemma 4 INT8 PTH unblock |
|
||||
|
||||
---
|
||||
|
||||
"""
|
||||
|
||||
# Body template — rendered per release (we use --latest so only one).
|
||||
# Tera templating syntax. Each commit shows as a bullet with PR link if present.
|
||||
# Body template — rendered per release. For `--latest` (GitHub Release) only
|
||||
# the most recent block renders; for full regen of CHANGELOG.md, every tagged
|
||||
# block renders in reverse-chronological order.
|
||||
#
|
||||
# Commit message body (everything after subject + blank line) renders below
|
||||
# the subject bullet so rich narrative (tables, validation data, before/after
|
||||
# numbers) ends up in both CHANGELOG.md and the GitHub Release page from the
|
||||
# same source. Tera templating; see https://keats.github.io/tera/docs/.
|
||||
body = """
|
||||
{% if version %}\
|
||||
## What's in {{ version }}
|
||||
## {{ version }}{% if timestamp %} — {{ timestamp | date(format="%Y-%m-%d") }}{% endif %}
|
||||
|
||||
{% else %}\
|
||||
## Unreleased
|
||||
@@ -26,25 +52,21 @@ body = """
|
||||
### {{ group }}
|
||||
|
||||
{% for commit in commits %}\
|
||||
- {{ commit.message | split(pat="\\n") | first | trim }}{% if commit.github.pr_number %} ([#{{ commit.github.pr_number }}](https://github.com/noonghunna/club-3090/pull/{{ commit.github.pr_number }}) by @{{ commit.github.username }}){% else %} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/noonghunna/club-3090/commit/{{ commit.id }})){% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
- **{{ commit.message | split(pat="\\n") | first | trim }}**{% if commit.github.pr_number %} ([#{{ commit.github.pr_number }}](https://github.com/noonghunna/club-3090/pull/{{ commit.github.pr_number }}) by @{{ commit.github.username }}){% else %} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/noonghunna/club-3090/commit/{{ commit.id }})){% endif %}
|
||||
{% set body_lines = commit.message | split(pat="\\n") %}\
|
||||
{% if body_lines | length > 1 %}\
|
||||
{% set body = body_lines | slice(start=1) | join(sep="\\n") | trim %}\
|
||||
{% if body %}
|
||||
|
||||
---
|
||||
{{ body | replace(from="\\n", to="\\n ") }}
|
||||
|
||||
## Pinning to this release
|
||||
|
||||
**Versioning:** SemVer in `0.x` — treat any minor bump as potentially breaking until `1.0`. Past CalVer tags (`v2026.05.09`, `v2026.05.10`) are preserved for history; SemVer takes over from `v0.3.0` onward.
|
||||
|
||||
```bash
|
||||
git checkout {{ version }}
|
||||
```
|
||||
|
||||
When posting cross-rig benchmark numbers ([disc #86](https://github.com/noonghunna/club-3090/discussions/86)), please include this version tag (or commit SHA) so others can reproduce against the same script revision.
|
||||
|
||||
{% if previous.version %}\
|
||||
**Full diff:** [{{ previous.version }}...{{ version }}](https://github.com/noonghunna/club-3090/compare/{{ previous.version }}...{{ version }})
|
||||
{% endif %}\
|
||||
{% endif %}\
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% if version %}[Pin: `git checkout {{ version }}`]{% if previous.version %} · [Full diff](https://github.com/noonghunna/club-3090/compare/{{ previous.version }}...{{ version }}){% endif %}
|
||||
{% endif %}
|
||||
"""
|
||||
|
||||
footer = ""
|
||||
|
||||
@@ -177,6 +177,19 @@ if [[ -n "$DETECTED_MODEL" && "$DETECTED_MODEL" != "$MODEL" ]]; then
|
||||
MODEL="$DETECTED_MODEL"
|
||||
fi
|
||||
|
||||
# hermesagent-20 runs its agent inside a Docker sandbox container. Localhost-style
|
||||
# URLs (localhost/127.x/[::1]) inside the container resolve to the container itself,
|
||||
# not the host's vLLM. Auto-set BENCHLOCAL_HERMES_RESOLVE_LOCALHOST=1 so benchlocal-cli
|
||||
# (a) adds --add-host=host.docker.internal:host-gateway to the sandbox container, and
|
||||
# (b) rewrites the model endpoint URL to use host.docker.internal:<port> for the
|
||||
# hermes-agent's outbound API calls. Skip if already set (user override) or if URL
|
||||
# already uses host.docker.internal / a non-loopback host (real LAN IP, k8s service).
|
||||
if [[ -z "${BENCHLOCAL_HERMES_RESOLVE_LOCALHOST:-}" ]] \
|
||||
&& [[ "$URL" =~ ^https?://(localhost|127\.|\[::1\]) ]]; then
|
||||
export BENCHLOCAL_HERMES_RESOLVE_LOCALHOST=1
|
||||
echo "[quality-test] localhost URL detected — auto-set BENCHLOCAL_HERMES_RESOLVE_LOCALHOST=1 for hermes sandbox endpoint rewrite" >&2
|
||||
fi
|
||||
|
||||
# ---- run benchlocal-cli ------------------------------------------------------
|
||||
|
||||
RESULTS_DIR="${ROOT_DIR}/results/quality"
|
||||
|
||||
@@ -557,15 +557,21 @@ def cmd_run(endpoint, req_path, timeout_s, metrics_path):
|
||||
choices = chunk.get("choices") or []
|
||||
if choices:
|
||||
delta = choices[0].get("delta") or {}
|
||||
if ttft is None and (delta.get("content") or delta.get("reasoning_content") or delta.get("tool_calls")):
|
||||
# vLLM emits reasoning under either `delta.reasoning_content`
|
||||
# (older qwen3 reasoner path) or `delta.reasoning` (current
|
||||
# nightly as of vllm-0.20.2rc1+; legacy field name). Watch
|
||||
# both so the soak harness doesn't go silent when the
|
||||
# underlying field name shifts under us.
|
||||
reasoning_delta = delta.get("reasoning_content") or delta.get("reasoning")
|
||||
if ttft is None and (delta.get("content") or reasoning_delta or delta.get("tool_calls")):
|
||||
ttft = time.time() - t0
|
||||
# Accumulate streamed parts. vLLM splits content/reasoning
|
||||
# across many small deltas; tool_calls stream as indexed
|
||||
# objects whose fields (name, arguments) arrive in pieces.
|
||||
if delta.get("content"):
|
||||
content_parts.append(delta["content"])
|
||||
if delta.get("reasoning_content"):
|
||||
reasoning_parts.append(delta["reasoning_content"])
|
||||
if reasoning_delta:
|
||||
reasoning_parts.append(reasoning_delta)
|
||||
for tc in (delta.get("tool_calls") or []):
|
||||
idx = tc.get("index", 0)
|
||||
slot = tool_calls_acc.setdefault(idx, {"id": "", "type": "function", "name": "", "args": ""})
|
||||
|
||||
Reference in New Issue
Block a user