From cf09a3534dfc7737e04e7e694a031b0d89c1e0ec Mon Sep 17 00:00:00 2001 From: ARIA Date: Fri, 10 Apr 2026 13:39:26 +0200 Subject: [PATCH] Add pre_llm_call hook to inject memory context before LLM - Register pre_llm_call hook that searches memories and injects context - Add queue_prefetch_and_get() for synchronous prefetch in hook - Memory now available to AI without tool calls --- __init__.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/__init__.py b/__init__.py index 19572f6..f99ab0e 100644 --- a/__init__.py +++ b/__init__.py @@ -287,6 +287,27 @@ class Mem0LocalMemoryProvider(MemoryProvider): return "" return f"## Mem0 Memory\n{result}" + def queue_prefetch_and_get(self, query: str) -> str: + """Sync prefetch for pre_llm_call hook - returns memory context immediately.""" + if self._is_breaker_open(): + return "" + try: + client = self._get_client() + results = client.search( + query=query, + user_id=self._user_id, + limit=5, + ) + if results: + lines = [r.get("text", "") for r in results if r.get("text")] + if lines: + self._record_success() + return "\n".join(f"- {line}" for line in lines) + except Exception as e: + self._record_failure() + logger.debug("Mem0 prefetch failed: %s", e) + return "" + def queue_prefetch(self, query: str, *, session_id: str = "") -> None: """Queue async prefetch for next turn (called before LLM request).""" if self._is_breaker_open(): @@ -463,3 +484,17 @@ def register(ctx) -> None: handler=make_handler(schema["name"]), ) logger.debug("Registered tool: %s", schema["name"]) + + # Register pre_llm_call hook to inject memory context + def pre_llm_call_hook(user_message: str, **kwargs) -> dict: + """Inject memory context into user message before LLM call.""" + try: + results = provider.queue_prefetch_and_get(user_message) + if results: + return {"context": results} + except Exception as e: + logger.debug("Mem0 pre_llm_call hook failed: %s", e) + return {} + + ctx.register_hook("pre_llm_call", pre_llm_call_hook) + logger.debug("Registered pre_llm_call hook")