Files
bullpen/lib
marfrit 5d70b7f7b8 report the actual serving model in every LLM-backed reply
Per mneme /ideas id 118 (req markus 2026-07-22): hossenfelder is a
failover/auto-routing proxy, so the model NAME in the request is not
necessarily what served it. Every direct-API caller was parsing
choices[0].message.content and discarding the response's own `model`
field — the room reply echoed the ASK, not the reality.

Applies "asked X, served by Y" (only shown when they differ, so the
common non-failover case stays quiet) to:

- bullpen-grinder: ask_model() captures served_model; save_best/report
  thread it through so GREEN/RED replies show it.
- bullpen-coder, bullpen-researcher (incl. the SSE stream path — model
  is on every chunk, not just a final non-streaming body), bullpen-callboy,
  bullpen-triage: same pattern.
- bullpen-dispatcher: the LLM tie-break path only — the deterministic
  keyword-match path never touched a model and stays untagged.
- lib/bullpen_participant.py (architect/skeptic conversants): tag
  prepended as "> asked X, served by Y" — matches the "> build · model"
  convention opencode-backed workers already show natively, so the room
  now has one consistent visual convention for "which model" instead of
  two (opencode-native vs none).
- lurker/bullpen-lurker (claude -p workers): no proxy failover in this
  path, so just reports the configured --model directly rather than
  parsing a JSON field the CLI may or may not carry.

Skipped: @librarian, @doctor (no LLM in either — nothing to report).
Local syntax-checked; dispatcher's --once mode exercised for both the
keyword path (untagged, correct) and roster-fallback path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE
2026-07-27 08:27:24 +02:00
..