Health: learn n_ctx and total_slots from /props

Implemented /props learning in internal/health/health.go (added Status.NCtx/Status.Slots, PerSlotCtx, and a best-effort GET <base>/props appended to the poll after /v1/models; 0/unknown on any failure without failing the poll) and exposed them in internal/admin/admin.go HostView. Copied internal/health/props_test.go and the replacement internal/proxy/helpers_test.go byte-identical to docs/plans/v2/_files/.

Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
This commit is contained in:
2026-09-25 09:14:08 -07:00
parent f73ffb0d27
commit 056a527fd7
5 changed files with 154 additions and 3 deletions
+5
View File
@@ -79,6 +79,11 @@ func newUpstream(t *testing.T, name string) *upstream {
u.mu.Unlock()
fmt.Fprint(w, `{"object":"list","data":[{"id":"shared"},{"id":"`+name+`-only"}]}`)
})
// The v2 poller also asks /props; it is a health request, not a hit, so it is not counted.
// No n_ctx here: "unknown context" is what the v1 tests and TestUnknownContextNeverBlocks want.
mux.HandleFunc("/props", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, `{"model_path":"`+name+`"}`)
})
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
u.hits.Add(1)
b, _ := io.ReadAll(r.Body)