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.
This commit is contained in:
tekgnosis-net
2026-04-21 00:43:57 +10:00
committed by Teknium
parent 403c82b6b6
commit f1ba2f0c0b

View File

@@ -109,6 +109,11 @@ def _run_sync(coro, timeout: float = _DEFAULT_TIMEOUT):
return future.result(timeout=timeout) return future.result(timeout=timeout)
# ---------------------------------------------------------------------------
# Backward-compatible alias — instances use self._run_sync() instead.
# ---------------------------------------------------------------------------
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Tool schemas # Tool schemas
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -668,6 +673,10 @@ class HindsightMemoryProvider(MemoryProvider):
self._client = Hindsight(**kwargs) self._client = Hindsight(**kwargs)
return self._client 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: def initialize(self, session_id: str, **kwargs) -> None:
self._session_id = str(session_id or "").strip() self._session_id = str(session_id or "").strip()
@@ -892,7 +901,7 @@ class HindsightMemoryProvider(MemoryProvider):
client = self._get_client() client = self._get_client()
if self._prefetch_method == "reflect": if self._prefetch_method == "reflect":
logger.debug("Prefetch: calling reflect (bank=%s, query_len=%d)", self._bank_id, len(query)) 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 "" text = resp.text or ""
else: else:
recall_kwargs: dict = { recall_kwargs: dict = {
@@ -906,7 +915,7 @@ class HindsightMemoryProvider(MemoryProvider):
recall_kwargs["types"] = self._recall_types recall_kwargs["types"] = self._recall_types
logger.debug("Prefetch: calling recall (bank=%s, query_len=%d, budget=%s)", logger.debug("Prefetch: calling recall (bank=%s, query_len=%d, budget=%s)",
self._bank_id, len(query), self._budget) 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 num_results = len(resp.results) if resp.results else 0
logger.debug("Prefetch: recall returned %d results", num_results) 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 "" 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) item.pop("retain_async", None)
logger.debug("Hindsight retain: bank=%s, doc=%s, async=%s, content_len=%d, num_turns=%d", 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)) 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, bank_id=self._bank_id,
items=[item], items=[item],
document_id=self._session_id, document_id=self._session_id,
@@ -1072,7 +1081,7 @@ class HindsightMemoryProvider(MemoryProvider):
) )
logger.debug("Tool hindsight_retain: bank=%s, content_len=%d, context=%s", logger.debug("Tool hindsight_retain: bank=%s, content_len=%d, context=%s",
self._bank_id, len(content), context) 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") logger.debug("Tool hindsight_retain: success")
return json.dumps({"result": "Memory stored successfully."}) return json.dumps({"result": "Memory stored successfully."})
except Exception as e: except Exception as e:
@@ -1095,7 +1104,7 @@ class HindsightMemoryProvider(MemoryProvider):
recall_kwargs["types"] = self._recall_types recall_kwargs["types"] = self._recall_types
logger.debug("Tool hindsight_recall: bank=%s, query_len=%d, budget=%s", logger.debug("Tool hindsight_recall: bank=%s, query_len=%d, budget=%s",
self._bank_id, len(query), self._budget) 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 num_results = len(resp.results) if resp.results else 0
logger.debug("Tool hindsight_recall: %d results", num_results) logger.debug("Tool hindsight_recall: %d results", num_results)
if not resp.results: if not resp.results:
@@ -1113,7 +1122,7 @@ class HindsightMemoryProvider(MemoryProvider):
try: try:
logger.debug("Tool hindsight_reflect: bank=%s, query_len=%d, budget=%s", logger.debug("Tool hindsight_reflect: bank=%s, query_len=%d, budget=%s",
self._bank_id, len(query), self._budget) 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 bank_id=self._bank_id, query=query, budget=self._budget
)) ))
logger.debug("Tool hindsight_reflect: response_len=%d", len(resp.text or "")) logger.debug("Tool hindsight_reflect: response_len=%d", len(resp.text or ""))
@@ -1140,7 +1149,7 @@ class HindsightMemoryProvider(MemoryProvider):
except RuntimeError: except RuntimeError:
pass pass
else: else:
_run_sync(self._client.aclose()) self._run_sync(self._client.aclose())
except Exception: except Exception:
pass pass
self._client = None self._client = None