Você poderia usar uma consulta como esta:
select
min(id) as id,
least(sender,recipient) as sender,
greatest(sender,recipient) as recipient
min(text) as text
from
tablename
group by
least(sender,recipient),
greatest(sender,recipient)
(ou você pode usar outra função agregada para o texto, como group_concat, ou você precisa juntar tablename duas vezes para obter a primeira ou a última msg do chat, mas isso depende do que você deseja retornar)