Misleading error message in broadcast
### Description

```python
In [64]: x, y = jnp.ones((2, 4)), jnp.ones((2,))
In [65]: x + y
....
/jax/_src/numpy/util.py in _promote_shapes(fun_name, *args)
    246         if config.jax_numpy_rank_promotion != "allow":
    247           _rank_promotion_warning_or_error(fun_name, shapes)
--> 248         result_rank = len(lax.broadcast_shapes(*shapes))
    249         return [_broadcast_to(arg, (1,) * (result_rank - len(shp)) + shp)
    250                 for arg, shp in zip(args, shapes)]

ValueError: Incompatible shapes for broadcasting: ((2, 4), (1, 2))
```
```python
In [66]: xx, yy = np.ones((2, 4)), np.ones((2,))
In [67]: xx + yy
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-67-9e546835689c> in <module>()
----> 1 xx + yy

ValueError: operands could not be broadcast together with shapes (2,4) (2,)
```

The error message from `jnp` does not tell the shape given by user and that's misleading for debugging. `np` has a better behavior here.

### What jax/jaxlib version are you using?

latest

### Which accelerator(s) are you using?

_No response_

### Additional System Info

_No response_
diff --git a/jax/_src/lax/lax.py b/jax/_src/lax/lax.py
index e709eaa19..5bc6c504a 100644
--- a/jax/_src/lax/lax.py
+++ b/jax/_src/lax/lax.py
@@ -149,8 +149,7 @@ def _broadcast_shapes_uncached(*shapes):
   shape_list = [(1,) * (ndim - len(shape)) + shape for shape in shapes]
   result_shape = _try_broadcast_shapes(shape_list)
   if result_shape is None:
-    raise ValueError("Incompatible shapes for broadcasting: {}"
-                     .format(tuple(shape_list)))
+    raise ValueError(f"Incompatible shapes for broadcasting: shapes={list(shapes)}")
   return result_shape
 
 def _broadcast_ranks(s1, s2):
['jax/_src/lax/lax.py']