Skip to content

Commit bfeefa4

Browse files
committed
fix: prewarm pool in background so platform setup returns under 10s
1 parent 779bf62 commit bfeefa4

3 files changed

Lines changed: 29 additions & 3 deletions

File tree

custom_components/closest_intent/conversation.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,15 @@ def _effective_slot_threshold(self) -> int:
199199

200200
async def async_added_to_hass(self) -> None:
201201
await super().async_added_to_hass()
202-
# Pre-warm with HA's configured default language so first user
203-
# utterance doesn't pay the build cost.
204202
default_lang = self.hass.config.language or "en"
205-
await self._async_get_pool(default_lang)
203+
create_bg_task = getattr(self.hass, "async_create_background_task", None)
204+
if create_bg_task is not None:
205+
create_bg_task(
206+
self._async_get_pool(default_lang),
207+
name=f"closest_intent.prewarm[{default_lang}]",
208+
)
209+
else: # pragma: no cover - older HA / tests
210+
self.hass.async_create_task(self._async_get_pool(default_lang))
206211

207212
bus = self.hass.bus
208213
for event_name in (

tests/conftest.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,24 @@ class _HomeAssistant:
170170
ha_core.HomeAssistant = _HomeAssistant
171171

172172

173+
class _DoneTask:
174+
def cancel(self) -> bool:
175+
return False
176+
177+
def done(self) -> bool:
178+
return True
179+
180+
181+
def _async_create_background_task(coro, name=None):
182+
"""FakeHass shim: synchronously drive the coroutine to completion."""
183+
try:
184+
while True:
185+
coro.send(None)
186+
except StopIteration:
187+
pass
188+
return _DoneTask()
189+
190+
173191
class _ConfigEntry:
174192
def __init__(
175193
self,

tests/test_conversation.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,16 @@ def _make_hass(tmp_path: Path, language: str = "de") -> SimpleNamespace:
9494
async def _run_in_executor(fn, *args):
9595
return fn(*args)
9696

97+
from conftest import _async_create_background_task # type: ignore
98+
9799
hass = SimpleNamespace(
98100
data={},
99101
bus=FakeBus(),
100102
states=FakeStates(),
101103
services=FakeServices(),
102104
_scheduled_actions=[],
103105
async_add_executor_job=_run_in_executor,
106+
async_create_background_task=_async_create_background_task,
104107
)
105108
hass.config = SimpleNamespace(
106109
language=language,

0 commit comments

Comments
 (0)