class PrototypeMemory: def add_example(self, example: Example, label: str): # Add to examples and update prototype self.examples[label].append(example) self._update_prototype(label)
# Conditional index rebuild for efficiency ifself.updates_since_rebuild >= self.update_frequency: self._rebuild_index()
def get_nearest_prototypes(self, query_embedding: torch.Tensor, k: int = 5): # FAISS-optimized similarity search distances, indices = self.index.search(query_embedding.numpy(), k) similarities = np.exp(-distances[0]) # Convert to similarities return[(self.index_to_label[idx], sim)foridx, siminzip(indices[0], similarities)]
# Evaluate RAG output context ="France is in Western Europe. Capital: Paris. Population: 67 million." query ="What is France's capital and population?" response ="aris is the capital. Population is 70 million."