From e2c281549e360a14cc0035aa49f8444fa3af4a20 Mon Sep 17 00:00:00 2001 From: Omer Korner Date: Wed, 15 Oct 2025 22:24:32 +0300 Subject: [PATCH] Expose the entity_id of an entity to LLMs (#149428) --- homeassistant/helpers/llm.py | 1 + tests/components/mcp_server/test_http.py | 1 + tests/helpers/test_llm.py | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/homeassistant/helpers/llm.py b/homeassistant/helpers/llm.py index 1eb30fe7512..426563ecabf 100644 --- a/homeassistant/helpers/llm.py +++ b/homeassistant/helpers/llm.py @@ -681,6 +681,7 @@ def _get_exposed_entities( info: dict[str, Any] = { "names": ", ".join(names), "domain": state.domain, + "entity_id": state.entity_id, } if include_state: diff --git a/tests/components/mcp_server/test_http.py b/tests/components/mcp_server/test_http.py index 9cc9c76f9bd..93bd0d7fab9 100644 --- a/tests/components/mcp_server/test_http.py +++ b/tests/components/mcp_server/test_http.py @@ -60,6 +60,7 @@ DATA_PREFIX = "data: " EXPECTED_PROMPT_SUFFIX = """ - names: Kitchen Light domain: light + entity_id: light.kitchen areas: Kitchen """ diff --git a/tests/helpers/test_llm.py b/tests/helpers/test_llm.py index accc681ca9d..376065cf86c 100644 --- a/tests/helpers/test_llm.py +++ b/tests/helpers/test_llm.py @@ -579,83 +579,105 @@ async def test_assist_api_prompt( exposed_entities_prompt = """Live Context: An overview of the areas and the devices in this smart home: - names: '1' domain: light + entity_id: light.1 state: unavailable areas: Test Area 2 - names: Kitchen domain: light + entity_id: light.kitchen state: 'on' attributes: temperature: '0.9' humidity: '65' - names: Living Room domain: light + entity_id: light.living_room state: 'on' areas: Test Area, Alternative name - names: Test Device, my test light domain: light + entity_id: light.test_device state: unavailable areas: Test Area, Alternative name - names: Test Device 2 domain: light + entity_id: light.test_device_2 state: unavailable areas: Test Area 2 - names: Test Device 3 domain: light + entity_id: light.test_device_3 state: unavailable areas: Test Area 2 - names: Test Device 4 domain: light + entity_id: light.test_device_4 state: unavailable areas: Test Area 2 - names: Test Service domain: light + entity_id: light.test_service state: unavailable areas: Test Area, Alternative name - names: Test Service domain: light + entity_id: light.test_service_2 state: unavailable areas: Test Area, Alternative name - names: Test Service domain: light + entity_id: light.test_service_3 state: unavailable areas: Test Area, Alternative name - names: Unnamed Device domain: light + entity_id: light.unnamed_device state: unavailable areas: Test Area 2 """ stateless_exposed_entities_prompt = """Static Context: An overview of the areas and the devices in this smart home: - names: '1' domain: light + entity_id: light.1 areas: Test Area 2 - names: Kitchen domain: light + entity_id: light.kitchen - names: Living Room domain: light + entity_id: light.living_room areas: Test Area, Alternative name - names: Test Device, my test light domain: light + entity_id: light.test_device areas: Test Area, Alternative name - names: Test Device 2 domain: light + entity_id: light.test_device_2 areas: Test Area 2 - names: Test Device 3 domain: light + entity_id: light.test_device_3 areas: Test Area 2 - names: Test Device 4 domain: light + entity_id: light.test_device_4 areas: Test Area 2 - names: Test Service domain: light + entity_id: light.test_service areas: Test Area, Alternative name - names: Test Service domain: light + entity_id: light.test_service_2 areas: Test Area, Alternative name - names: Test Service domain: light + entity_id: light.test_service_3 areas: Test Area, Alternative name - names: Unnamed Device domain: light + entity_id: light.unnamed_device areas: Test Area 2 """ first_part_prompt = (