MCPcopy Create free account
hub / github.com/AQ-MedAI/MedMemoryBench / query

Method query

methods/memrl_agent.py:725–871  ·  view source on GitHub ↗

Query using MemRL's value-driven retrieval. This method: 1. Uses MemRL's retrieve_query for value-aware memory retrieval 2. Applies Q-value based ranking with ε-greedy exploration 3. Constructs prompt with retrieved memories 4. Generates response using the tr

(
        self,
        question: str,
        system_message: Optional[str] = None,
        **kwargs
    )

Source from the content-addressed store, hash-verified

723 )
724
725 def query(
726 self,
727 question: str,
728 system_message: Optional[str] = None,
729 **kwargs
730 ) -> AgentResponse:
731 """Query using MemRL's value-driven retrieval.
732
733 This method:
734 1. Uses MemRL's retrieve_query for value-aware memory retrieval
735 2. Applies Q-value based ranking with ε-greedy exploration
736 3. Constructs prompt with retrieved memories
737 4. Generates response using the tracked LLM client
738 """
739 start_time = time.time()
740
741 # Truncate question if needed
742 bounded_question = self._truncate_to_tokens(question, self.max_question_tokens)
743
744 # Retrieve memories using MemRL's value-driven retrieval
745 retrieved_memories: List[Dict[str, Any]] = []
746 retrieval_result: Dict[str, Any] = {}
747
748 try:
749 # Use MemRL's retrieve_query which combines similarity and Q-value
750 result = self._memory_service.retrieve_query(
751 task_description=bounded_question,
752 k=self.candidate_top_k,
753 threshold=self.similarity_threshold,
754 )
755
756 # retrieve_query returns (result_dict, sim_list) tuple
757 retrieval_result, _ = result
758
759 # Extract selected memories from result
760 selected = retrieval_result.get("selected", [])
761 for mem in selected[:self.retrieve_num]:
762 # Extract content from memory object
763 content = self._extract_memory_content(mem)
764
765 retrieved_memories.append({
766 "memory": content[:self.query_memory_item_tokens * 4], # Rough char limit
767 "memory_id": mem.get("memory_id"),
768 "similarity": mem.get("similarity", 0.0),
769 "q_value": mem.get("q_estimate", self.initial_q),
770 "score": mem.get("score", 0.0),
771 "type": "memrl_value_driven",
772 })
773
774 except Exception as e:
775 logger.warning(f"[MemRL] Retrieval failed: {e}, falling back to empty context")
776 retrieval_result = {"selected": [], "candidates": [], "simmax": 0.0}
777
778 retrieval_time = time.time() - start_time
779
780 # Calculate token budget for memory context
781 system_tokens = self._llm_client.count_tokens(system_message) if system_message else 0
782 reserved_tokens = self.max_tokens + 500

Callers

nothing calls this directly

Calls 11

_truncate_to_tokensMethod · 0.95
format_messagesFunction · 0.90
AgentResponseClass · 0.85
retrieve_queryMethod · 0.80
getMethod · 0.45
warningMethod · 0.45
count_tokensMethod · 0.45
joinMethod · 0.45
chatMethod · 0.45
get_statsMethod · 0.45

Tested by

no test coverage detected