···181181 List<dynamic>? facets,
182182 String? embed,
183183 }) async {
184184+ // NOTE: We intentionally do NOT retry sendMessage because it's not
185185+ // idempotent. Retrying could create duplicate user-visible messages
186186+ // if the first request succeeded but the connection dropped before
187187+ // the client received the response.
188188+ // See: https://docs.aws.amazon.com/general/latest/gr/api-retries.html
184189 final body = <String, dynamic>{
185190 'convoId': convoId,
186191 'message': <String, dynamic>{