Skip to content

feat(doctor): surface model pricing source in doctor diagnostics - #429

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/386-unpriced-model-pricing
Aug 13, 2026
Merged

feat(doctor): surface model pricing source in doctor diagnostics#429
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/386-unpriced-model-pricing

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

  • Resolve per-model input/output $/Mtok pricing in conductor doctor --models via the same chain used by engine/pricing.py::get_pricing (provider hook → DEFAULT_PRICING table → none)
  • Label each model's pricing_source (provider/table/none) so an unpriced model is visible instead of silently treated as free
  • Add DEFAULT_PRICING entries for GPT-5.6 variants at the existing GPT-5.x rate

Closes#386

Jason Robertand others added 2 commits August 13, 2026 11:21
Resolve per-model input/output $/Mtok rates in `conductor doctor --models`
via the same chain as `engine/pricing.py::get_pricing` (provider hook →
DEFAULT_PRICING table → none), and label each model's pricing_source as
provider/table/none so an unpriced model is visible rather than silently
reported as free. Adds GPT-5.6 variant entries to DEFAULT_PRICING at the
existing GPT-5.x rate, pending published rates for Grok/Gemini-3.6/MAI-Code.
- Move ModelDiagnostic construction back inside the per-model try/except
in _build_model_diagnostics so a to_dict() with an unexpected key (or
one colliding with the explicit pricing kwargs) degrades only that
model instead of raising out of the loop and discarding the whole
provider's model list. Resolve pricing into a local dict first to
avoid the kwarg collision.
- Narrow _resolve_model_pricing's try to the provider hook call only, so
a raising hook still falls through to the DEFAULT_PRICING table
(matching engine/workflow.py's handling of the identical exception)
instead of skipping the fallback and reporting a table-priced model as
unresolvable.
- Restore the missing "## [0.1.28]" CHANGELOG release heading that this
diff had deleted, which had folded ~520 lines of already-shipped
release notes under [Unreleased] and left two consecutive ### Added
sections.
- Surface a raising pricing hook as a one-time logger.warning (mirroring
WorkflowEngine._pricing_hook_failed_warned) since doctor's
_suppressed_logging otherwise makes the debug log invisible, and give
the genuine-failure pricing_source=None state its own "error" render
cell instead of collapsing it into the same "—" glyph used for "not
exposed".
- Add PricingSource literal type for pricing_source.
- Correct several inaccurate comments/docs: the fuzzy-match latch
rationale, "network-free", the "never 0.00" doc line, and the
unsubstantiated "prices all of these anyway" claim; move the
"don't guess unpublished rates" note to the pricing table header.
- Add regression tests for the construction-outside-try bug and the
kwarg-collision case, update the hook-failure tests to assert the
table fallback, and add render-layer coverage for the error cell, a
genuine 0.0 rate, and a degraded-capabilities row still showing price.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) marked this pull request as ready for review August 13, 2026 15:44
@jrob5756
Jason Robert (jrob5756) merged commit 8f22e0a into mainAug 13, 2026
11 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cost is unpriced for current models: the provider pricing hook returns None for every model, and DEFAULT_PRICING lacks claude-opus-5 / gpt-5.6-sol

1 participant

@jrob5756