*_StreamChunkTimeoutBasesRaised when no streaming chunk arrives within stream_chunk_timeout.
issubclass(StreamChunkTimeoutError, asyncio.TimeoutError) and
issubclass(StreamChunkTimeoutError, TimeoutError) both hold on all
supported Python versions, so existing except asyncio.TimeoutError:
and except TimeoutError: handlers keep catching the exception. On
Python 3.11+ the two exceptions are the same object, so only
asyncio.TimeoutError appears in __bases__.
Structured attributes (timeout_s, model_name, chunks_received)
mirror the WARNING log's extra= payload so diagnostic code doesn't
need to regex the message.