5cbbade24c
The chat_completions path raises EmptyStreamError when a stream yields no chunks and no finish_reason (#64420). _call_anthropic() had no equivalent, and the eventless failure surfaces differently by client: - Real Anthropic SDK: no message_start means no final-message snapshot, so get_final_message() raises a bare AssertionError — not in the retry loop's transient set, so it burned no retries and surfaced raw. - OpenAI-compat shims: may fabricate a contentless Message with no stop_reason (or return None), flowing out as a 'successful' empty turn. Track whether any stream event arrived and normalize both shapes to EmptyStreamError, giving the anthropic path the same transient retry budget in the shared _call() retry loop. A real completed response always carries a stop_reason, so the guard cannot fire on legitimate turns (including eventless mocks with stop_reason='end_turn'). Follow-up to #64420.