Skip to content

Error: UndefinedError: 'None' has no attribute 'split' #103

@homeofpoe

Description

@homeofpoe

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'

Image

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:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions