Move the fix to the OpenRouter level: define native OpenRouter models
(openrouter/auto, openrouter/free, openrouter/bodybuilder) and check
them in get_llm_provider() before the provider_list stripping logic.
This prevents the second strip across all bridges without modifying
each adapter/handler individually.
Fixes#16353
aspectRatio and imageSize were silently dropped because they weren't
listed in get_supported_openai_params(), so the validation layer filtered
them out before they could reach transform_image_generation_request().
Fixes#21070
logprobs, top_p, top_logprobs are only accepted by OpenAI when
reasoning_effort="none". Add validation matching the existing
temperature logic: raise UnsupportedParamsError or drop when
reasoning_effort is set to other values.
The Apertus 8B and 70B models do not support standard OpenAI-style
tool calling. Per Swiss AI's docs, tool use integration into inference
engines is still in development. Set supports_function_calling and
supports_tool_choice to false.
Fixes#21124
validate_environment() resolved AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT
from the env var but only returned headers. get_complete_url() still
received None and raised ValueError. Now get_complete_url() also
resolves the env var as a fallback.
Fixes#21034
Gemini returns finishReason="STOP" even when tool calls are present,
and sends tool_calls and finishReason in separate streaming chunks.
The ModelResponseIterator now tracks tool_calls across chunks and
correctly maps finish_reason to "tool_calls" per the OpenAI spec.
Fixes#21041
Remove logit_bias, modalities, prediction, audio, web_search_options
from supported params for all GPT-5 reasoning models (OpenAI rejects
them). Add logprobs, top_p, top_logprobs for gpt-5.1/5.2 which support
them when reasoning_effort="none".
Related to #21572
gpt-5-search-api models were routed through OpenAIGPT5Config which
listed params like n, temperature, tools, reasoning_effort as supported,
but OpenAI rejects all of these for search models.
Fixes#21572
- Add warning when credential name is not found in credential_list
- Remove litellm_credential_name from credentials dict after resolution
Addresses Greptile bot review comments on PR #21502
- passthrough/utils.py: change `request_query_params` from `Dict` to
`Mapping` so callers passing `dict[str, str]` satisfy the type checker
(dict is invariant; Mapping is covariant in its value type)
- pass_through_endpoints.py: cast `param_default_query_params` to
`Optional[dict]` consistent with the existing cast pattern for other
params extracted from the untyped `target_params` dict
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add test to verify that get_deployment_credentials_with_provider correctly
resolves litellm_credential_name to actual credential values and removes
the credential name from the returned dictionary.
These constants were added as hardcoded values in #21533 without environment
variable support, causing test_all_numeric_constants_can_be_overridden to fail.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>