MCPcopy Index your code
hub / github.com/OpenBMB/ChatDev / retrieve

Method retrieve

runtime/node/agent/memory/file_memory.py:97–162  ·  view source on GitHub ↗

Retrieve relevant file chunks based on query. Args: agent_role: Agent role (not used in file memory) inputs: Query text top_k: Number of results to return similarity_threshold: Minimum similarity score Returns: Li

(
        self,
        agent_role: str,
        query: MemoryContentSnapshot,
        top_k: int,
        similarity_threshold: float,
    )

Source from the content-addressed store, hash-verified

95 logger.info(f"Index saved to {self.index_path} ({len(self.contents)} chunks)")
96
97 def retrieve(
98 self,
99 agent_role: str,
100 query: MemoryContentSnapshot,
101 top_k: int,
102 similarity_threshold: float,
103 ) -> List[MemoryItem]:
104 """
105 Retrieve relevant file chunks based on query.
106
107 Args:
108 agent_role: Agent role (not used in file memory)
109 inputs: Query text
110 top_k: Number of results to return
111 similarity_threshold: Minimum similarity score
112
113 Returns:
114 List of MemoryItem with file chunks
115 """
116 if self.count_memories() == 0:
117 return []
118
119 # Generate query embedding
120 query_embedding = self.embedding.get_embedding(query.text)
121 if isinstance(query_embedding, list):
122 query_embedding = np.array(query_embedding, dtype=np.float32)
123 query_embedding = query_embedding.reshape(1, -1)
124 faiss.normalize_L2(query_embedding)
125
126 expected_dim = query_embedding.shape[1]
127
128 # Collect embeddings from memory items
129 memory_embeddings = []
130 valid_items = []
131 for item in self.contents:
132 if item.embedding is not None:
133 if len(item.embedding) != expected_dim:
134 logger.warning(
135 "Skipping memory item %s: embedding dim %d != expected %d",
136 item.id, len(item.embedding), expected_dim,
137 )
138 continue
139 memory_embeddings.append(item.embedding)
140 valid_items.append(item)
141
142 if not memory_embeddings:
143 return []
144
145 memory_embeddings = np.array(memory_embeddings, dtype=np.float32)
146
147 # Build FAISS index and search
148 index = faiss.IndexFlatIP(memory_embeddings.shape[1])
149 index.add(memory_embeddings)
150
151 similarities, indices = index.search(query_embedding, min(top_k, len(valid_items)))
152
153 # Filter by threshold and return results
154 results = []

Callers 1

_retrieve_memoryMethod · 0.45

Calls 3

count_memoriesMethod · 0.80
get_embeddingMethod · 0.45
warningMethod · 0.45

Tested by

no test coverage detected