#31861 perf(vertex): O(n^2) string-copy cost in handle_accumulated_json_chunk buffer assembly
## Summary
PR #31297 (merged 2026-06-26, in 1.91.0) fixed the O(n^2) json.loads frequency in \`handle_accumulated_json_chunk\` by adding a completeness heuristic. That fix reduces parse attempts to approximately 1 per envelope. The buffer *assembly* side of the same function still has an O(n^2) cost: \`self.accumulated_json += message\` holds a live reference on \`self.accumulated_json\` throughout the loop, so CPython cannot take the in-place fast path and must copy the entire prior buffer on every shard.
For an 8 MB tool-call payload split across 4,000 shards of 2 KB each, the total bytes copied by string \`+=\` is roughly 16 GB before the single json.loads call. This shows up as elevated asyncio event-loop latency proportional to payload size on large Gemini tool-call responses.
## Affected code
\`ModelResponseIterator.handle_accumulated_json_chunk\` in \`litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py\`
Root cause: \`self.accumulated_json\` is a plain \`str\` attribute. Appending with \`+=\` when the object is also referenced by \`self\` forces a full copy each time.
## Reproducer
```python import time
def simulate_str_concat(n_shards: int, shard_siz…