edit: this is no longer needed, it looks like at some point they fixed this issue so it fails correct and follows through to the LLM
Had an interesting issue I ran into. I still prefer to have use local first enabled as it is a tad bit faster, and the "chime" is more pleasant than "Turned on the light" response. However, I was noticing some weird behavior when using What is the weather? where the answer was nonsensical, but asking What is the weather today? correctly used the llm_intents script.
Now that Home Assistant 2025.12 shows you the tools / intents that are called and their responses, I was able to get more insight here. It turns out that Home Assistant has a weather intent HassGetWeather which was being called locally, but I didn't have any weather entities exposed to assist so it was effectively trying to run that and then falling back to the LLM and the LLM was apparently just making up values based on the sensors it had access to.
For now I just overwrote the local intent by creating an automation that triggered on the sentence What is the weather and re-implemented the logic, using the AI Task service to summarize the information. This is a workaround, I would really love it if Home Assistant exposed all of the intents that are available as well as a way to disable which ones you want to immediately hand off to the LLM.
Example Automation
alias: Override HassGetWeather
description: ""
triggers:
- trigger: conversation
command:
- What is the weather
- What's the weather
- How is the weather
conditions: []
actions:
- action: weather.get_forecasts
metadata: {}
target:
entity_id: weather.forecast
data:
type: hourly
response_variable: hourly_forecast
- variables:
items: "{{ 24 - now().hour }}"
formatted_forecast: >
{% set forecasts = hourly_forecast["weather.forecast"]["forecast"] %} {%
for item in forecasts[:items] %} - Time: {{ as_timestamp(item.datetime)
| timestamp_custom('%-I%p', true) | lower }}-{{
(as_timestamp(item.datetime) + 3600) | timestamp_custom('%-I%p', true) |
lower }}
Temperature: {{ item.temperature | int }}
General Condition: {{ item.condition }}
Precipitation: {% if item.precipitation_probability < 20 %}unlikely{% elif item.precipitation_probability < 50 %}possible{% else %}likely{% endif %}
{% endfor %}
- action: ai_task.generate_data
metadata: {}
data:
task_name: Summarize Weather
instructions: >-
You are a weather forecaster. Below is an hourly weather forecast, and
your task is to summarize this information in one sentence.
Summarize the forecast below in one to two sentences:
{{ formatted_forecast }}
response_variable: summary
- set_conversation_response: "{{ summary.data }}"
mode: single