/
/
/
# What does this implement/fix? When a track or clip fails to produce streamdetails, Music Assistant asks the same provider a second time before giving up. The retry never helps — it fails again for the same reason — but it doubles the cost of every failure. It is most visible with AI Radio: each attempt renders the spoken clip through your TTS engine from scratch. A user with a self-hosted TTS engine saw the same text rendered five times in about 100 seconds for a single clip. The double call is not deliberate. The loop over provider mappings runs twice so playback can try the providers you steered it to before widening to the rest. When no provider steering is set, every provider counts as preferred, so the first pass already tries them all and the second pass repeats the identical set. This now tracks which mappings were already attempted, so the second pass only reaches providers the steering held back. Measured on a failing item: 2 provider calls per attempt before, 1 after. A track that plays normally is unaffected. ## Types of changes - [x] Bugfix (non-breaking change which fixes an issue) — `bugfix` ## Checklist - [x] The code change is tested and works locally. - [x] `pre-commit run --all-files` passes. - [x] `pytest` passes, and tests have been added/updated under `tests/` where applicable.