#32214 [Bug]: sanitize_tool_use_ids_in_anthropic_messages breaks multi-turn tool-use on vLLM/Kimi K2.7 pass-through (v1.91.0 regression)
## What happened?
On LiteLLM v1.91.0, routing `/v1/messages` (Anthropic-format) traffic to a vLLM backend running Kimi K2.7 (via `custom_llm_provider: anthropic` with `extra_headers.Authorization` pointing at the vLLM endpoint), Claude Code agentic skill workflows that involve multi-turn tool calls silently break: on a specific turn (reproducibly around the 5th-6th tool round), the model emits only a thinking block plus an empty text response with `stop_reason: end_turn` and no `tool_use` block. Claude Code sees the empty response and the skill halts.
The regression was introduced by commit `8bca05d311` (`fix(anthropic): sanitize tool_use ids on native /v1/messages path`, #31094, released in v1.91.0). That commit adds `sanitize_tool_use_ids_in_anthropic_messages`, which rewrites every `tool_use.id` and `tool_result.tool_use_id` in the request history via `re.sub(r"[^a-zA-Z0-9_-]", "_", ...)`. vLLM/Kimi K2.7 natively generates tool_use ids of the form `functions.Bash:0` (containing `.` and `:`), which get rewritten to `functions_Bash_0`. Kimi K2.7's chat template renders the historical `tool_call.id` verbatim into the prompt (`<|tool_call_begin|>{{ formatted_id }}<|tool_call_argum…