• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubernetes-sigs / inference-perf / 38598280858
86%

Build:
DEFAULT BRANCH: main
Ran 14 Oct 2026 04:36PM UTC
Jobs 1
Files 135
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Oct 2026 04:27PM UTC coverage: 83.334% (+0.08%) from 83.258%
38598280858

push

github

web-flow
feat(reportgen): populate results.session_performance in BR0.2 partials (#889)

The BR0.2 partial adapter only projected request lifecycle metrics, so
`results.session_performance`
was always absent — even for session workloads whose native session
lifecycle report already renders
those figures.

This surfaces them in the partial, reusing the same aggregations as
`ReportGenerator.summarize_sessions` so both reports of a run agree.

Fixes #718

## Changes

- **`adapter.py`**: `_build_session_performance()` /
`_build_session_requests()` aggregate a stage's
`SessionLifecycleMetric`s into `SessionRequests`, and `build_results()`
accepts them (keyword-only
and defaulted, so existing callers are untouched). `SessionPerformance`
and `SessionRequests` were
not part of the public schema surface, so they are now exported from
`schema.py`.
- **`partial_report.py`**: threads the stage's session metrics through
`build_partial_report()`.
- **`base.py`**: enriches the session metrics *ahead of* the per-stage
partial loop and buckets them
by `stage_id`, mirroring the existing request buckets. The native
session reports then reuse that
  same enriched list instead of re-fetching and re-enriching it.

The ordering matters: per-session token totals are derived from the
request metrics by the enrichment
step, so they only exist once it has run. Assembling the partials first
would emit zero token totals.

A stage that ran no sessions still emits no `session_performance` block,
so partials from non-session
workloads are unchanged.

## Testing

- `pytest tests`: 2091 passed, 8 skipped. The 41
`multiprocessing`-dependent tests can't run in my
sandbox (no `/dev/shm`, so `mp.Lock()` raises `FileNotFoundError`); I
verified those same 41 fail
  identically on unmodified `main`.
- `ruff check`, `ruff format --check` and `mypy --strict
./inference_perf ./tests`: clean.
- Coverage totals move 77.96% -> 78.03%, with `reportgen/base.py` at
93.62% -> 94.27%; `check:cov`
  reports no r... (continued)

31 of 31 new or added lines in 3 files covered. (100.0%)

12076 of 14491 relevant lines covered (83.33%)

0.83 hits per line

Jobs
ID Job ID Ran Files Coverage
1 38598280858.1 14 Oct 2026 04:36PM UTC 135
83.33
GitHub Action Run
Source Files on build 38598280858
  • Tree
  • List 135
  • Changed 5
  • Source Changed 4
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #38598280858
  • c6cf2504 on github
  • Prev Build on main (#38476258500)
  • Next Build on main (#38601959221)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc