-
Notifications
You must be signed in to change notification settings - Fork 44
Description
I am using Option 2 and set it up to use Google Gemini. I receive this same error with OpenAI (which I actively use in unrelated automations.
I can play music fine to the device when in Music Assistant.
When selecting a music player in the blueprint, I can only see the 'player groups' from within Music Assistant. I have tried setting a group only containing a specific speaker (again, the one I can successfully manually play to), and I have tried with no speaker set.
In the automation trace, I receive the following error: Error: UndefinedError: 'None' has no attribute 'split'
Here is my blueprint:
alias: Living Room Music Manager description: "" use_blueprint: path: music-assistant/mass_llm_enhanced_assist_blueprint_en.yaml input: llm_agent: conversation.google_generative_ai play_continuously: Always
In the trace, here is the 'Send request to the LLM' section.
Executed: June 30, 2025 at 4:44:01 PM
Result:
params:
domain: conversation
service: process
service_data:
text: >-
You are an AI process that transforms a music search query into a
structured JSON. For every query, you must research and provide specific
details—such as titles, artist names, or album names—if they are not
directly mentioned in the query. For example, if the query is "play the
latest album by Foo Fighters," you should research the latest album title
and include it in the JSON response. If the query specifies only an
artist, album, or playlist, provide details as appropriate without
assuming unspecified specifics.
This is the voice command query provided by the user: " Shuffle sounds my
news"
Here is the structured JSON that I expect in response {"action_data":
{"media_id":"name", "media_type":"type", "artist":"name", "album":"name"},
"media_description": "description of media", "target_data": {"areas":
["area name"], "players": ["player name"]}}
The argument "media_type" is mandatory and must always be provided no
matter what!
"media_type" can only be one of 5 different values:
- "track" if the search is about a specific track or a list of tracks.
- "album" if the search is about an album or a list of albums.
- "artist" if the search is about an artist.
- "playlist" if the search specifically requests a playlist.
- "radio" in case the search is a radio channel.
media_type is mandatory and must always be provided. In case a request
does not match any of these types, for example when music from a specific
genre is requested, then use "track" and provide a list of matching songs
for the "media_id" parameter.
The argument "media_id" is also mandatory and must always be provided no
matter what!
media_id is the most specific from track, album, and artist.
"track" and "artist" can be a single value or multiple values.
- If the search is about a track: Then media_id is the track name or a
json formatted list of track names. In case there are multiple artists in
the result, use both the artist name and song name separated by a dash as
track name (example: "Artist name - Song name"). In case all songs are
from the same artist, use the artist for the "artist" parameter, and only
use the song names as track name.
- If the search is about an album: Then media_id is the album name or a
json formatted list of album names.
- If the search is about an artist: Then media_id is the artist name.
- If the search is a specific playlist: Then media_id is the requested
playlist.
- If the search is a radio channel: Then media_id is the requested
channel.
"media_id" is a mandatory argument and must always be provided.
In case it is needed, the fields "artist" and "album" can be used to
further restrict the search.
For example, if the input is "Hells Bells by ACDC", then the output should
be {"action_data":{"media_id":"Hells Bells", "media_type":"track",
"artist":"AC/DC"}}
"artist" and "album" are optional and never used in the case of a playlist
search.
There can be several types of answers for the "action_data" dictionary.
Here are some examples:
Just an artist >> {"action_data":{"media_id": "artist name",
"media_type":"artist"}}.
An album by an artist >> {"action_data":{"media_id": "album name",
"media_type": "album", "artist": "artist name"}}.
A track by an artist >> {"action_data":{"media_id": "track name",
"media_type": "track", "artist": "artist name"}}.
Just a track if the artist is not known >> {"action_data":{"media_id":
"track name", "media_type": "track"}}.
Just a playlist if the request is a specific playlist >>
{"action_data":{"media_id":"playlist name", "media_type":"playlist"}}.
Multiple tracks of different artists >> {"action_data":{"media_id":
["Artist name - Song name", "Another artist name - Another song name",
"Another artist name - Another song name"], "media_type":"track"}}.
Multiple tracks of the same artist >> {"action_data":{"media_id": ["Song
name", "Another song name"], "artist": "artist name",
"media_type":"track"}}
The "media_description" key is used to describe the media which will be
played. This can be taken from the voice command query, but it should be
only the part which is relevant for the media. So if the voice request is
"Play the best Queen songs on the living room player" the value for
"media_description" should be "the best Queen songs"
The "target_data" key is used to define the information on which the
request should be played.
These are the area names which have a Music Assantant player: . Only use
these area names for the "target_data". In case another area description
is used in the request, try to map it to one of these area names."
In case the query requests the music to be played in one or more areas in
which a Music Assistant player is located, use {"areas": ["area name"]}
for "target_data". Always use a list with area names, even when there is
only one. Try to match the areas mentioned in the request to the provided
area names. Only use area names from the list provided. When no area is
mentioned in the voice request or no area could be matched, use
{"areas":[]}
These are the Music Assistant players in the system: . Only use these
names for the "target_data". In case another player name is mentioned in
the request, try to map it to one of these player names.
In case the query requests the music to be played on one or more media
players, use {"players": ["player name"]} for "target_data". Always use a
list with player names, even when there is only one. Try to match the
players mentioned in the request to the provided player names. Only use
player names from the list provided. When no player is mentioned in the
voice request or no player could be matched , use {"players":[]}
Note that the input query can be in a different language. For the
"media_type" the untranslated English terms should be used, in case of a
playlist search use the language used in the input.
IMPORTANT: You must reply with only the JSON model, nothing before nor
after because your response will be processed by a search component of a
media player service. So also no code tags. Only the JSON!
agent_id: conversation.google_generative_ai
target: {}
running_script: false
And my assistant is not set to have house control:
