#27490 Anthropic strict tool use: `strict` flag forwarded to wrong location (inside `input_schema` instead of tool top level)
## Summary Since PR #16725, LiteLLM forwards `strict: true` from the OpenAI-shape `tools[i].function.parameters` (or via `AnthropicInputSchema` directly) on Anthropic-routed `/chat/completions` requests. The forwarding works in the sense that `strict` survives the OpenAI→Anthropic transformation — but it's placed **inside** `input_schema`, where Anthropic GA silently ignores it. Anthropic only enforces `strict` when set at the **tool level** (sibling of `name`/`input_schema`).
**Result**: callers think strict is engaged, the schema-feature 400s never fire, and the model emits unconstrained tool args. The bug is silent.
## Versions / context - Reproduced on `litellm[proxy]==1.83.14` (latest 1.83.x at time of writing). - Anthropic structured outputs went GA on the Claude API on 2026-01-29 (no `anthropic-beta` header required). - Tested against `claude-haiku-4-5` and `claude-opus-4-7`.
## Source pointer
[`litellm/llms/anthropic/chat/transformation.py`, lines 428–462](https://github.com/BerriAI/litellm/blob/main/litellm/llms/anthropic/chat/transformation.py) (`_map_tool_helper`):
```python _input_schema: dict = tool["function"].get("parameters", {...}) ... _allowed_properties = se…