#30053 bug(streaming): fast_path in async_streaming_data_generator breaks tool-call continuation — client receives XML instead of text (introduced v1.87.0, PR #28289)
## Summary
Since v1.87.0 (PR #28289), the `fast_path` optimization in `async_streaming_data_generator` causes tool-call continuation streaming to break when using `/v1/chat/completions` with Claude models via Bedrock.
**Symptom:** After a tool-call round-trip, the model's follow-up response is rendered as raw `<tool_response>` / `<tool_use>` XML in the client instead of a normal text response.
**Affected versions:** v1.87.0, v1.87.1, v1.88.0, v1.88.1 **Working version:** v1.86.2
---
## Root Cause
PR #28289 introduced a `fast_path` in `proxy/common_request_processing.py`:
```python fast_path = ( not caps.has_streaming_chunk_override and not caps.has_guardrail and not cost_injection_enabled )
if fast_path: yield serialize_chunk(chunk) continue # ← skips async_post_call_streaming_hook entirely ```
With a default LiteLLM config (no custom callbacks, no guardrails, cost injection disabled), `fast_path` is **always `True`**. The `async_post_call_streaming_hook` is never called.
In v1.86.2, this hook was always called (even if it returned early via its own fast-path check). Some side-effect of that call — likely related to `str_so_far` accumulation or stre…