Enable CB paged decode fast path for MPS hub kernels + sensible block_size default
Author: ArthurZucker
Pull request: yes

## Summary

Three changes to make continuous batching (CB) work well on Apple Silicon (MPS) with the metal-flash-sdpa kernel:

### 1. Enable paged decode fast path for hub kernels (initialization.py)

`ensure_decode_fast_path_is_available` previously only allowed the paged decode fast path (block tables + `flash_attn_with_kvcache`) for FA3/CUDA and FA2/XPU. Hub kernels like `kernels-community/metal-flash-sdpa` were excluded entirely, forcing `max_blocks_per_request = 0` and losing the decode fast path — even when the kernel ships `flash_attn_with_kvcache`.

**Fix:** Check `is_kernel(config._attn_implementation)` so any hub kernel that provides `flash_attn_with_kvcache` is automatically picked up, regardless of device. This unblocks the metal-flash-sdpa paged-decode kernel ([discussion #4](https://huggingface.co/kernels-community/metal-flash-sdpa/discussions/4)) once its .mm bindings land.

### 2. MPS block_size default (serve.py)

The default `block_size=256` causes a ~17x slowdown on MPS because the paged SDPA fallback (used when the kernel lacks block-table support) builds a full attention mask proportional to block_size, and MPS's SDPA does not have the fused kernel that makes large blocks efficient on CUDA.

**Fix:** Default to `block_size=32` on MPS when not explicitly set. This is a temporary measure until `flash_attn_with_kvcache` ships in the metal-flash-sdpa kernel, at which point the block-table decode fast path will bypass the mask entirely.

### 3. Use metal-flash-sdpa pr/4 revision + commit-hash fallback (model_manager.py + hub_kernels.py)

Point the MPS default to revision `e3aadf46ea4039577faa49abcda8dc5b213fe057` (pr/4 branch) which adds the `flash_attn_with_kvcache` paged-decode kernel with block tables — the key unlock for CB performance on Apple Silicon.

The kernels library API endpoint rejects commit hashes with 404 ("Invalid rev id"), so add a fallback in `load_and_register_attn_kernel`: when `get_kernel` fails with a 404 on a revision, fall back to `snapshot_download` + `get_local_kernel` to load the kernel from the local HF cache. This unblocks loading kernels from PR refs (which are commit hashes, not branches/tags).

## Testing

Tested on M3 Max (96GB) with `Qwen/Qwen2.5-0.5B-Instruct`:

```
transformers serve Qwen/Qwen2.5-0.5B-Instruct --continuous-batching --port 8000
```

| Scenario | Latency/req | Status |
|----------|------------|--------|
| Before fix (block_size=256) | 38-57s | Works but unusably slow |
| After fix (block_size=32) | ~4.3s | 5 sequential requests, all succeed |
| With e3aadf46 revision | ~3.5-6.3s | Kernel loads via fallback, CB stable |

Metal-flash-sdpa auto-detected on MPS, CB stable across multiple requests, no hangs.

## Related

- [kernels-community/metal-flash-sdpa#3](https://huggingface.co/kernels-community/metal-flash-sdpa/discussions/3) — Add flash_attn_func + harden MPS dispatch
- [kernels-community/metal-flash-sdpa#4](https://huggingface.co/kernels-community/metal-flash-sdpa/discussions/4) — Add flash_attn_with_kvcache paged-decode kernel (the target revision)
- [transformers#45974](https://github.com/huggingface/transformers/pull/45974) — transformers-side integration for dense flash_attn_func
- [transformers#45977](https://github.com/huggingface/transformers/pull/45977) — GGUF MPS work with proven paged_decode_attention_f32 Metal kernel

Comments:
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_46792). All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

**CI Dashboard:** [View test results in Grafana](https://transformers-ci.lor-e.huggingface.cool/d/pytest-observability-by-pr/pytest-observability-branch?var-pr=46792)

> ⚠️ **Code quality check failed** — all test jobs were skipped. Fix the code quality issues and push again to run tests.