Uh oh!
There was an error while loading. Please reload this page.
feat(doctor): surface model pricing source in doctor diagnostics - #429
Merged
Conversation
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>
Jason Robert (jrob5756)
marked this pull request as ready for review
August 13, 2026 15:44
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
conductor doctor --modelsvia the same chain used byengine/pricing.py::get_pricing(provider hook → DEFAULT_PRICING table → none)pricing_source(provider/table/none) so an unpriced model is visible instead of silently treated as freeCloses#386