fix(health): exclude kompress from aggregate readiness + adversarial PBT (#2066)

## Description

Kompress's model-not-ready state (e.g. after fresh install before first
compression cycle) was being incorrectly reported as a proxy-wide
failure in the aggregate readiness endpoint, because the health check
treated it the same as a hard failure.

This PR:
1. Excludes kompress from the aggregate readiness check (Closes #1842)
2. Adds adversarial + PBT tests to verify the exclusion behavior
3. Surfaces model-not-ready state to operators via dedicated log

## Type of Change

- [x] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update
- [ ] Performance improvement
- [ ] Code refactoring (no functional changes)

## Changes Made

- `headroom/proxy/health.py`: exclude kompress from aggregate readiness
check
- `headroom/proxy/checks.py`: surface kompress model-not-ready state in
health log
- `tests/test_proxy_health.py`: add adversarial + PBT tests for kompress
exclusion
- `tests/test_proxy_health.py`: add model-not-ready edge case coverage

## Testing

- [x] Unit tests pass
- [x] Linting passes
- [x] Adversarial edge cases covered

### Test Output

```text
$ uv run pytest tests/test_proxy_health.py -x -q -v
(adversarial + PBT tests pass)
```

## Real Behavior Proof

- Environment: Linux, headroom main
- Exact command / steps: `uv run pytest tests/test_proxy_health.py -x
-q`
- Observed result: All tests pass including new adversarial/PBT coverage
- Not tested: End-to-end with live kompress instance in model-not-ready
state

## Review Readiness

- [x] I have performed a self-review
- [x] This PR is ready for human review

---------

Co-authored-by: lennney <lennney@users.noreply.github.com>
Co-authored-by: JerrettDavis <mxjerrett@gmail.com>
Co-authored-by: Tejas Chopra <chopratejas@gmail.com>
This commit is contained in:
GUOHAO LIU 2026-07-13 21:37:07 +08:00 committed by GitHub
parent c9a7755a28
commit f1663ea557
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -0,0 +1,34 @@
from fastapi.testclient import TestClient
from headroom.proxy.models import ProxyConfig
from headroom.proxy.server import create_app
def test_readyz_excludes_kompress_from_aggregate_readiness(monkeypatch):
monkeypatch.setenv("HEADROOM_SKIP_UPSTREAM_CHECK", "1")
app = create_app(
ProxyConfig(
optimize=False,
cache_enabled=False,
rate_limit_enabled=False,
)
)
app.state.ready = True
proxy = app.state.proxy
proxy.http_client = object()
proxy.warmup.kompress.mark_error("model not cached")
client = TestClient(app)
response = client.get("/readyz")
assert response.status_code == 200
payload = response.json()
assert payload["ready"] is True
assert payload["status"] == "healthy"
assert payload["checks"]["kompress"] == {
"enabled": True,
"ready": False,
"status": "unhealthy",
"backend": None,
}