Why do custom Assist responses take so long to process?

I have 2 HA VPEs in 2 different rooms running the same firmware version (25.4.0 (ESPHome 2025.3.3)) and using exactly the same Assist pipeline. I have them each running a version of pretty much the same automation at bedtime for our boys. One, however, simply responds “done” and the other I have included a custom response in the automation.

The automation with the standard response responds almost instantly. The automation with the custom response takes 30s for Assist to respond. Is this to be expected with custom responses or is there a way to get the same speed of response as standard.

Originally, I had a list of random Marvel-based custom responses, but changed it to a single response to see if that made a difference - it didn’t.

Here are examples of both Assist debug logs, standard first:

custom response, which you can see takes 30s to process.

Here’s the custom response automation:

alias: Bedtime for XXXX
description: ""
triggers:
  - trigger: conversation
    command:
      - it's bedtime
      - goodnight
      - It is bedtime
    id: Voice
  - trigger: state
    entity_id:
      - input_boolean.we_are_in_bed
    from: "off"
    to: "on"
    id: Stop play
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Voice
          - condition: state
            entity_id: assist_satellite.jarvis_xxxx_assist_satellite
            state: processing
        sequence:
          - alias: Respond with a Marvel goodnight.
            set_conversation_response: >-
              Dream big like Tony Stark, and maybe you’ll wake up with genius
              ideas for your own Iron Man suit!
          - wait_for_trigger:
              - trigger: state
                entity_id:
                  - assist_satellite.jarvis_xxxx_assist_satellite
                from: responding
                to: idle
            timeout:
              hours: 0
              minutes: 0
              seconds: 30
              milliseconds: 0
          - action: media_player.volume_set
            target:
              entity_id: media_player.jarvis_xxxx_media_player
            data:
              volume_level: 0.25
          - parallel:
              - action: music_assistant.play_media
                target:
                  entity_id:
                    - media_player.jarvis_xxxx_media_player_2
                data:
                  media_id: audible://audiobook/B017V677I8
                alias: Read an  audiobook on JARVIS media player
              - action: input_boolean.turn_off
                target:
                  entity_id: input_boolean.xxxx_light_toggle
                data: {}
      - conditions:
          - condition: trigger
            id:
              - Stop play
        sequence:
          - action: media_player.media_stop
            metadata: {}
            data: {}
            target:
              entity_id: media_player.jarvis_xxxx_media_player_2
mode: single

It might have something to with the 30 second wait timeout you have and the following:


https://www.home-assistant.io/docs/scripts/#respond-to-a-conversation

Try it with the announce action instead:

alias: Bedtime for XXXX
description: ""
triggers:
  - trigger: conversation
    command:
      - it's bedtime
      - goodnight
      - It is bedtime
    id: Voice
  - trigger: state
    entity_id:
      - input_boolean.we_are_in_bed
    from: "off"
    to: "on"
    id: Stop play
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Voice
          - condition: state
            entity_id: assist_satellite.jarvis_xxxx_assist_satellite
            state: processing
        sequence:
          - alias: Silence normal response.
            set_conversation_response: ''
          - alias: Respond with a Marvel goodnight.
            action: assist_satellite.announce
            target:
              entity_id: assist_satellite.jarvis_xxxx_assist_satellite
              message: |
                Dream big like Tony Stark, and maybe you’ll wake up with genius
                ideas for your own Iron Man suit!
              preannounce: false
          - wait_for_trigger:
              - trigger: state
                entity_id:
                  - assist_satellite.jarvis_xxxx_assist_satellite
                from: responding
                to: idle
            timeout:
              hours: 0
              minutes: 0
              seconds: 30
              milliseconds: 0
          - action: media_player.volume_set
            target:
              entity_id: media_player.jarvis_xxxx_media_player
            data:
              volume_level: 0.25
          - parallel:
              - action: music_assistant.play_media
                target:
                  entity_id:
                    - media_player.jarvis_xxxx_media_player_2
                data:
                  media_id: audible://audiobook/B017V677I8
                alias: Read an  audiobook on JARVIS media player
              - action: input_boolean.turn_off
                target:
                  entity_id: input_boolean.xxxx_light_toggle
                data: {}
      - conditions:
          - condition: trigger
            id:
              - Stop play
        sequence:
          - action: media_player.media_stop
            metadata: {}
            data: {}
            target:
              entity_id: media_player.jarvis_xxxx_media_player_2
mode: single

The wait was my attempt at preventing the response from crashing the audiobook playing. ie wait until Assist has stopped responding before playing the audiobook, but now that you mention it, yes that timeout might account for the 30s response.

I’ll try it with your suggested change and see what happens, thanks.