Limit rollback snapshots and relax HA timeouts
This commit is contained in:
@@ -447,7 +447,7 @@ def get_actuator_detail(actuator_entity_id: str, request: Request) -> ActuatorRe
|
||||
}
|
||||
compact_snapshots = [
|
||||
snapshot.model_copy(update={"patterns": []})
|
||||
for snapshot in record.behavior.model_snapshots[-5:]
|
||||
for snapshot in record.behavior.model_snapshots[-3:]
|
||||
]
|
||||
compact_behavior = record.behavior.model_copy(
|
||||
update={
|
||||
|
||||
@@ -32,6 +32,8 @@ from app.ha.models import HaEntitySummary
|
||||
from app.ha.reader import HaReader
|
||||
|
||||
_MAX_PATTERNS = 500
|
||||
_MAX_MODEL_SNAPSHOTS = 3
|
||||
_MAX_SNAPSHOT_PATTERNS = 120
|
||||
_MAX_EXECUTION_EVENTS = 100
|
||||
_ACTION_LOGBOOK_TOLERANCE = timedelta(seconds=10)
|
||||
_CONTEXT_TRIGGER_TOLERANCE = timedelta(seconds=3)
|
||||
@@ -937,6 +939,11 @@ class BehaviorEngine:
|
||||
record: ActuatorRecord,
|
||||
behavior: BehaviorState,
|
||||
) -> ActuatorRecord:
|
||||
behavior = behavior.model_copy(
|
||||
update={
|
||||
"model_snapshots": _compact_model_snapshots(behavior.model_snapshots),
|
||||
}
|
||||
)
|
||||
updated = record.model_copy(
|
||||
update={
|
||||
"behavior": behavior,
|
||||
@@ -1132,10 +1139,19 @@ def _next_model_snapshots(
|
||||
high_confidence_sample_count=trusted_actions,
|
||||
average_confidence=round(average_confidence, 4),
|
||||
incorrect_feedback_count=incorrect_feedback_count,
|
||||
patterns=patterns,
|
||||
patterns=patterns[-_MAX_SNAPSHOT_PATTERNS:],
|
||||
reason=reason,
|
||||
)
|
||||
return [*existing, snapshot][-10:]
|
||||
return _compact_model_snapshots([*existing, snapshot])
|
||||
|
||||
|
||||
def _compact_model_snapshots(existing: list[ModelSnapshot]) -> list[ModelSnapshot]:
|
||||
return [
|
||||
snapshot.model_copy(
|
||||
update={"patterns": snapshot.patterns[-_MAX_SNAPSHOT_PATTERNS:]}
|
||||
)
|
||||
for snapshot in existing[-_MAX_MODEL_SNAPSHOTS:]
|
||||
]
|
||||
|
||||
|
||||
def _average(values: list[float]) -> float:
|
||||
|
||||
@@ -21,6 +21,7 @@ class Settings:
|
||||
prediction_interval_seconds: int = 60
|
||||
execution_cooldown_seconds: int = 900
|
||||
timezone: str = "Europe/Berlin"
|
||||
ha_timeout_seconds: int = 25
|
||||
|
||||
@property
|
||||
def ha_configured(self) -> bool:
|
||||
@@ -55,4 +56,5 @@ def load_settings() -> Settings:
|
||||
60, int(os.getenv("SILLYHOME_EXECUTION_COOLDOWN_SECONDS", "900"))
|
||||
),
|
||||
timezone=os.getenv("SILLYHOME_TIMEZONE", "Europe/Berlin"),
|
||||
ha_timeout_seconds=max(5, int(os.getenv("SILLYHOME_HA_TIMEOUT_SECONDS", "25"))),
|
||||
)
|
||||
|
||||
@@ -60,6 +60,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||
settings=HaClientSettings(
|
||||
url=cast(str, settings.ha_url),
|
||||
token=cast(str, settings.ha_token),
|
||||
timeout_seconds=settings.ha_timeout_seconds,
|
||||
)
|
||||
)
|
||||
app.state.ha_reader = HaReader(client=client)
|
||||
@@ -105,7 +106,7 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||
app = FastAPI(
|
||||
title="SillyHome Next API",
|
||||
description="Lokales Smart-Home-Intelligenzsystem für Home Assistant.",
|
||||
version="1.5.1",
|
||||
version="1.5.2",
|
||||
lifespan=lifespan,
|
||||
)
|
||||
app.state.settings = load_settings()
|
||||
@@ -213,8 +214,8 @@ async def _ha_event_listener(app: FastAPI, client: HaClient) -> None:
|
||||
try:
|
||||
async with websockets.connect(
|
||||
ws_url,
|
||||
ping_interval=20,
|
||||
ping_timeout=10,
|
||||
ping_interval=30,
|
||||
ping_timeout=30,
|
||||
) as websocket:
|
||||
auth_required_msg = await websocket.recv()
|
||||
auth_required_data = json.loads(auth_required_msg)
|
||||
|
||||
Reference in New Issue
Block a user