Issue #188: [improvement] add latest gemini models to ModelProviderMapping

interviewstreet/hiring-agent · commit e0ece80 · investigation verified · 2026-10-18 · investigation cost $0.05

No open PR fixes this and merges clean

0 fix it but don't merge clean, 7 fix it partly. See the board below.

5/5
citations verified in code
194 → 12
open PRs shortlisted by cited lines
0 fix
0 merge clean · 7 partly
$0.05
investigation cost

How it breaks

The path is the model's reasoning. Each box is a citation checked against the code.

1prompt.py:8 ✓
Mapping moved from prompt.py to providers.json
2providers.json:24 ✓
providers.json lacks the new Gemini models
3providers.json:29 ✓
List ends at 2.5-pro with no new entries
4config.py:40 ✓
provider_for checks model membership in list
5config.py:61 ✓
Unlisted model raises Unknown model error
where it shows

What's wrong

The report's premise is outdated. `ModelProviderMapping` (MODEL_PROVIDER_MAPPING) no longer exists in prompt.py. It was deleted in the config-driven providers refactor, and prompt.py now only re-exports DEFAULT_MODEL and MODEL_PARAMETERS from config.py. Supported models are now an allowlist in providers.json.
Show full explanationconfig.provider_for() rejects any model name not listed under a provider's "models" with "Unknown model". providers.json lists only gemini-3.8-flash and the 2.0/2.5 models. It has no entries for Gemini 3.5 Flash, 3.5 Pro, 3.1 Flash Lite, or the "Pro Latest"/"Flash Latest" tags, so those names fail. The fix is to add those model IDs to providers.json, not to edit prompt.py. I did not check the exact model ID strings the Gemini API uses for the new models.
Model confidence: medium.

How to reproduce

  1. Set GEMINI_API_KEY in .env.
  2. Set DEFAULT_MODEL to a missing model name, e.g. gemini-3.5-pro, gemini-3.5-flash, gemini-3.1-flash-lite, gemini-pro-latest or gemini-flash-latest (exact IDs unverified).
  3. Run the hiring agent, or call python -c "import config; config.provider_for('gemini-3.5-pro')".
  4. It raises ValueError: Unknown model 'gemini-3.5-pro'. Available models: ... (only the providers.json models).
  5. Confirm that grep -r ModelProviderMapping finds nothing in the code, and that prompt.py has no mapping.

Evidence

Each citation was checked against the code at e0ece80.

providers.json2 citations
line 24
verified in code
"gemini-3.8-flash": { "temperature": 0.1, "top_p": 0.9 },

The Gemini model list in providers.json is the only place models are registered. It has no 3.5 Flash, 3.5 Pro, 3.1 Flash Lite, or Pro/Flash Latest entries.

line 29
verified in code
"gemini-2.5-pro": { "temperature": 0.1, "top_p": 0.9 }

This is the last entry in the Gemini list, so the new models are absent.

config.py2 citations
line 40
verified in code
if model_name not in prov["models"]:

A model is only accepted if it appears in a provider's models list in providers.json.

line 61
verified in code
f"Unknown model '{model_name}'. Available models: {available}"

Unlisted models raise ValueError, which is the failure the reporter sees.

prompt.py1 citation
line 8
verified in code
from config import DEFAULT_MODEL, MODEL_PARAMETERS

prompt.py has no ModelProviderMapping any more. It only re-exports config values, so the report's claim about prompt.py is outdated.

Pull requests

Verdicts are judged from the diff, not run. Merge status is a real git check against e0ece80.

194open PRs
12change a cited line or mention the issue
7change the cause
0fix and merge clean
#367, #379, #390, #402, #407, #423 and #456 all change the cause. Once one is merged, the others duplicate it.
Why each verdict

Adds only gemini-flash-lite-latest to providers.json (the load_dotenv change is unrelated), so none of the named missing models or the Pro/Flash Latest tags are added.

Shortlisted because: changes providers.json:29

Adds gemini-flash-latest to providers.json, one of the named missing tags, but not Pro Latest, 3.5 or 3.1 models.

Shortlisted because: changes providers.json:29

Adds gemini-3.5-flash to the providers.json allowlist, but not 3.5 Pro, 3.1 Flash Lite or the Pro/Flash Latest tags, so it covers only some of the missing names.

Shortlisted because: mentions the issue, changes providers.json:24, changes providers.json:29

Adds gemini-flash-latest and gemini-pro-latest to providers.json, which covers the Latest tags, but 3.5 Flash, 3.5 Pro and 3.1 Flash Lite stay unlisted.

Shortlisted because: changes providers.json:24, changes providers.json:29

Adds only gemini-flash-latest to providers.json, one of the named missing tags and nothing else.

Shortlisted because: changes providers.json:29

Adds gemini-3.5-flash and gemini-3.1-flash-lite to providers.json, two of the named missing models, but not 3.5 Pro or the Latest tags.

Shortlisted because: changes providers.json:29

Adds gemini-3.5-flash, 3.1-flash-lite and a 3.1 Pro preview to providers.json, but not 3.5 Pro or the Latest tags.

Shortlisted because: changes providers.json:24, changes providers.json:29
5 PRs that don't fix itShow

Edits MODEL_PROVIDER_MAPPING in prompt.py, which no longer exists on main, and adds no entries to providers.json.

Shortlisted because: changes prompt.py:8

Moves settings into config.yaml and again edits the removed prompt.py mapping, and its config.py changes don't touch the providers.json allowlist or provider_for().

Shortlisted because: changes prompt.py:8

Adds a Groq provider and leaves the Gemini model list unchanged.

Shortlisted because: changes providers.json:29

The Gemini change is a single gemini-3.6-flash entry, which isn't one of the named missing models, and the rest of the PR is a new security role.

Shortlisted because: changes providers.json:29

Adds a Bedrock transport and provider entry and leaves the Gemini model list alone, so the missing Gemini names still raise Unknown model.

Shortlisted because: changes config.py:40, changes config.py:61

What this packet does not prove

  • Citations are checked against the code. The explanation that links them, the order of the chain, and any claim about outside systems (APIs, libraries) are the model's reasoning and are not checked.
  • PR verdicts are judged from the diff, not run. No PR was applied or tested.
  • PRs were shortlisted because they change a cited line or mention the issue. A fix in another file, or a PR whose line numbers have drifted, is missed, so this is not proof that no other PR fixes it.