From f1ba2f0c0b063e6fa59da96f63f599c78e4e81ee Mon Sep 17 00:00:00 2001 From: tekgnosis-net Date: Tue, 21 Apr 2026 00:43:57 +1000 Subject: [PATCH] fix(hindsight): use configured timeout in _run_sync for all async operations The previous commit added HINDSIGHT_TIMEOUT as a configurable env var, but _run_sync still used the hardcoded _DEFAULT_TIMEOUT (120s). All async operations (recall, retain, reflect, aclose) now go through an instance method that uses self._timeout, so the configured value is actually applied. Also: added backward-compatible alias comment for the module-level function. --- plugins/memory/hindsight/__init__.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/memory/hindsight/__init__.py b/plugins/memory/hindsight/__init__.py index 9bc728078..29d3bb7b6 100644 --- a/plugins/memory/hindsight/__init__.py +++ b/plugins/memory/hindsight/__init__.py @@ -109,6 +109,11 @@ def _run_sync(coro, timeout: float = _DEFAULT_TIMEOUT): return future.result(timeout=timeout) +# --------------------------------------------------------------------------- +# Backward-compatible alias — instances use self._run_sync() instead. +# --------------------------------------------------------------------------- + + # --------------------------------------------------------------------------- # Tool schemas # --------------------------------------------------------------------------- @@ -668,6 +673,10 @@ class HindsightMemoryProvider(MemoryProvider): self._client = Hindsight(**kwargs) return self._client + def _run_sync(self, coro): + """Schedule *coro* on the shared loop using the configured timeout.""" + return _run_sync(coro, timeout=self._timeout) + def initialize(self, session_id: str, **kwargs) -> None: self._session_id = str(session_id or "").strip() @@ -892,7 +901,7 @@ class HindsightMemoryProvider(MemoryProvider): client = self._get_client() if self._prefetch_method == "reflect": logger.debug("Prefetch: calling reflect (bank=%s, query_len=%d)", self._bank_id, len(query)) - resp = _run_sync(client.areflect(bank_id=self._bank_id, query=query, budget=self._budget)) + resp = self._run_sync(client.areflect(bank_id=self._bank_id, query=query, budget=self._budget)) text = resp.text or "" else: recall_kwargs: dict = { @@ -906,7 +915,7 @@ class HindsightMemoryProvider(MemoryProvider): recall_kwargs["types"] = self._recall_types logger.debug("Prefetch: calling recall (bank=%s, query_len=%d, budget=%s)", self._bank_id, len(query), self._budget) - resp = _run_sync(client.arecall(**recall_kwargs)) + resp = self._run_sync(client.arecall(**recall_kwargs)) num_results = len(resp.results) if resp.results else 0 logger.debug("Prefetch: recall returned %d results", num_results) text = "\n".join(f"- {r.text}" for r in resp.results if r.text) if resp.results else "" @@ -1032,7 +1041,7 @@ class HindsightMemoryProvider(MemoryProvider): item.pop("retain_async", None) logger.debug("Hindsight retain: bank=%s, doc=%s, async=%s, content_len=%d, num_turns=%d", self._bank_id, self._session_id, self._retain_async, len(content), len(self._session_turns)) - _run_sync(client.aretain_batch( + self._run_sync(client.aretain_batch( bank_id=self._bank_id, items=[item], document_id=self._session_id, @@ -1072,7 +1081,7 @@ class HindsightMemoryProvider(MemoryProvider): ) logger.debug("Tool hindsight_retain: bank=%s, content_len=%d, context=%s", self._bank_id, len(content), context) - _run_sync(client.aretain(**retain_kwargs)) + self._run_sync(client.aretain(**retain_kwargs)) logger.debug("Tool hindsight_retain: success") return json.dumps({"result": "Memory stored successfully."}) except Exception as e: @@ -1095,7 +1104,7 @@ class HindsightMemoryProvider(MemoryProvider): recall_kwargs["types"] = self._recall_types logger.debug("Tool hindsight_recall: bank=%s, query_len=%d, budget=%s", self._bank_id, len(query), self._budget) - resp = _run_sync(client.arecall(**recall_kwargs)) + resp = self._run_sync(client.arecall(**recall_kwargs)) num_results = len(resp.results) if resp.results else 0 logger.debug("Tool hindsight_recall: %d results", num_results) if not resp.results: @@ -1113,7 +1122,7 @@ class HindsightMemoryProvider(MemoryProvider): try: logger.debug("Tool hindsight_reflect: bank=%s, query_len=%d, budget=%s", self._bank_id, len(query), self._budget) - resp = _run_sync(client.areflect( + resp = self._run_sync(client.areflect( bank_id=self._bank_id, query=query, budget=self._budget )) logger.debug("Tool hindsight_reflect: response_len=%d", len(resp.text or "")) @@ -1140,7 +1149,7 @@ class HindsightMemoryProvider(MemoryProvider): except RuntimeError: pass else: - _run_sync(self._client.aclose()) + self._run_sync(self._client.aclose()) except Exception: pass self._client = None