"""Helper script to insert RLMIntegrator into llm_integration.py""" import os rlm_class = ''' class RLMIntegrator: """ Phase 4.5: RLM (Recursive Language Models) Integrator. Bridges HAIMLLMIntegrator with the RecursiveSynthesizer to provide LLM-powered recursive memory queries. Usage:: integrator = RLMIntegrator(llm_integrator) result = await integrator.rlm_query( "What do we know about X and how does it relate to Y?" ) print(result["synthesis"]) Without an LLM configured, falls back to heuristic decomposition and score-based synthesis. """ def __init__(self, llm_integrator, config=None): from mnemocore.core.recursive_synthesizer import RecursiveSynthesizer, SynthesizerConfig self.llm_integrator = llm_integrator self.haim = llm_integrator.haim llm_call = None if llm_integrator.llm_client is not None: llm_call = llm_integrator._call_llm synth_config = config or SynthesizerConfig() self.synthesizer = RecursiveSynthesizer( engine=self.haim, config=synth_config, llm_call=llm_call, ) async def rlm_query(self, query, context_text=None, project_id=None): """ Execute a Phase 4.5 recursive memory query. Args: query: The user question (can be complex/multi-topic). context_text: Optional large external text (Ripple environment). project_id: Optional project scope for isolation masking. Returns: Dict: query, sub_queries, results, synthesis, max_depth_hit, elapsed_ms, ripple_snippets, stats """ from mnemocore.core.ripple_context import RippleContext ripple_ctx = None if context_text and context_text.strip(): ripple_ctx = RippleContext(text=context_text, source_label="api_context") result = await self.synthesizer.synthesize( query=query, ripple_context=ripple_ctx, project_id=project_id, ) return { "query": result.query, "sub_queries": result.sub_queries, "results": result.results, "synthesis": result.synthesis, "max_depth_hit": result.max_depth_hit, "elapsed_ms": result.total_elapsed_ms, "ripple_snippets": result.ripple_snippets, "stats": result.stats, } @classmethod def from_config(cls, haim_engine, llm_config, synth_config=None): """Create an RLMIntegrator directly from an LLMConfig.""" llm_integrator = HAIMLLMIntegrator.from_config(haim_engine, llm_config) return cls(llm_integrator=llm_integrator, config=synth_config) ''' path = "src/llm_integration.py" content = open(path, "r", encoding="utf-8").read() marker = "\ndef create_demo():" idx = content.find(marker) if idx == -1: print("ERROR: marker not found") else: new_content = content[:idx] + rlm_class + content[idx:] open(path, "w", encoding="utf-8").write(new_content) print(f"OK: RLMIntegrator inserted at position {idx}") print(f"New length: {len(new_content)}")