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,
)
| 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 = [] |
no test coverage detected