drop_tuning_params field, which is consumed before forwarding, so whatever the provider accepts, you get. For the translated lanes (Anthropic, Bedrock, Gemini, Vertex) the gateway builds the provider-native request itself, and every parameter follows an explicit policy:
- mapped: translated faithfully to the provider’s native field.
- dropped: a tuning parameter with no equivalent on the lane. By default it is removed, the request proceeds, and the drop is signaled (see below). It is never silently ignored.
- refused: the request depends on the parameter functionally; honoring the request without it would change what you observably get. These always fail with a clear
400 unsupported_parametererror naming the parameter, the lane, and why.
drop_tuning_params
Send"drop_tuning_params": false in the request body to opt into strict mode: any parameter the lane cannot map then refuses instead of dropping. The default is true. The field itself is consumed by the gateway and never reaches a provider.
Drop signals
When a parameter is dropped, the drop is visible in three places:- Response body:
extra_fields.params_droppedlists the dropped parameter names (on streams, on the final usage-bearing chunk). - Response header:
X-LangWatch-Params-Droppedcarries the same list, comma separated. - Trace: the gateway span records
langwatch.gateway.params_dropped.
The table
reasoning_effort budgets
On lanes that mapreasoning_effort to a thinking budget (Anthropic models without adaptive thinking, on both the anthropic and bedrock lanes), the budget is derived from your output cap: budget = 1024 + ratio x (max_tokens - 1024) with ratios minimal 0.025, low 0.15, medium 0.425, high 0.80, xhigh 0.92, max 1.0. Claude Opus and Sonnet 4.6+ use the provider’s adaptive thinking with your effort passed through (minimal maps to low). Gemini thinking models receive the effort natively. Thinking tokens count inside usage.completion_tokens.