{"record":{"id":"0fe5ebe95818e474","repo":"xtekky/gpt4free","slug":"unknown-gemini-model-model-supported-models","errorCode":null,"errorMessage":"Unknown Gemini model: {model}. Supported models: {', '.join(models)}","messagePattern":"Unknown Gemini model: (.+?)\\. Supported models: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"g4f/Provider/needs_auth/Gemini.py","lineNumber":256,"sourceCode":"        yield buffer.decode(\"utf-8\", errors=\"replace\")\n\n\ndef _resolve_model(model: str, think_override: int = None) -> tuple[str, bool]:\n    requested_model = model\n    think_mode = think_override\n    if \"@think=\" in model:\n        model, think_value = model.rsplit(\"@think=\", 1)\n        requested_model = model\n        try:\n            think_mode = int(think_value)\n        except ValueError as exc:\n            raise ValueError(f\"Invalid thinking mode: {think_value!r}\") from exc\n    if think_mode is not None:\n        if not isinstance(think_mode, int) or not 0 <= think_mode <= 4:\n            raise ValueError(\"Thinking mode must be an integer between 0 and 4\")\n    model = MODEL_ALIASES.get(model, model)\n    if model not in models:\n        raise ValueError(\n            f\"Unknown Gemini model: {model}. \" f\"Supported models: {', '.join(models)}\"\n        )\n    expanded_thinking = (\n        requested_model in EXPANDED_MODEL_ALIASES\n        if think_mode is None\n        else think_mode <= 2\n    )\n    return model, expanded_thinking\n\n\ndef _normalize_messages(messages: Messages | None) -> Messages:\n    if messages is None:\n        return []\n    if not isinstance(messages, list):\n        raise TypeError(\"messages must be a list\")\n    return messages\n\n","sourceCodeStart":238,"sourceCodeEnd":274,"githubUrl":"https://github.com/xtekky/gpt4free/blob/973504e1770928ed5fb82f43da528f441ad9ddc3/g4f/Provider/needs_auth/Gemini.py#L238-L274","documentation":"ValueError from Gemini._resolve_model: after alias expansion (MODEL_ALIASES) the model name is not in the provider's supported models set. The message lists every supported model, so it doubles as live documentation. It fires before any network call — a pure input-validation failure.","triggerScenarios":"Passing a Gemini model string that is neither a known alias nor a supported model — typos (\"gemini-2.5-flsh\"), retired names, or names from other providers. Also triggers when an @think= suffix was stripped correctly but the base name is wrong.","commonSituations":"Model deprecated/renamed after a Gemini API update while g4f pins the old list; typo'd model names from config files; assuming any Google model id works.","solutions":["Pick a model from the list embedded in the error message and use that exact string.","Update g4f to the latest version so newly released Gemini models are recognized.","Check MODEL_ALIASES in the provider source for accepted shorthand names before inventing your own.","If the model must be user-configurable, validate against the provider's models list at startup."],"exampleFix":"# before\nresp = await client.chat.completions.create(model=\"gemini-2.5-flsh\", provider=Gemini, messages=msgs)\n# ValueError: Unknown Gemini model: gemini-2.5-flsh. Supported models: ...\n\n# after\nresp = await client.chat.completions.create(model=\"gemini-2.5-flash\", provider=Gemini, messages=msgs)","handlingStrategy":"validation","validationCode":"from g4f.Provider.needs_auth.Gemini import Gemini\nfrom g4f.models import models as known_models  # adjust to your g4f version\n\ndef gemini_model_supported(model: str) -> bool:\n    base = model.rsplit(\"@think=\", 1)[0]\n    aliases = getattr(Gemini, \"MODEL_ALIASES\", {})\n    resolved = aliases.get(base, base)\n    return resolved in Gemini.supported_models if hasattr(Gemini, \"supported_models\") else True","typeGuard":"def is_known_gemini_model(model: str, supported: set[str]) -> bool:\n    base = model.rsplit(\"@think=\", 1)[0]\n    return base in supported","tryCatchPattern":"try:\n    resp = await client.chat.completions.create(model=m, provider=Gemini, messages=msgs)\nexcept ValueError as e:\n    if \"Unknown Gemini model\" in str(e):\n        supported = [name for name in str(e).split(\"Supported models: \")[-1].split(\", \")]\n        m = pick_closest(m, supported)","preventionTips":["Validate model names against the provider's supported list at startup.","Pin g4f versions so the supported-model list doesn't shift under you.","Parse the error's supported-models list to offer users valid options."],"tags":["validation","gemini","model-name","unknown-model"],"backgroundTag":null,"analyzedSha":"973504e1770928ed5fb82f43da528f441ad9ddc3","analyzedAt":"2026-08-14T23:45:32.408Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}