Spaces:
Sleeping
Sleeping
| import numpy as np | |
| try: | |
| import faiss | |
| from sentence_transformers import SentenceTransformer | |
| except ImportError: | |
| faiss = None | |
| SentenceTransformer = None | |
| _model = None | |
| def semantic_available(): | |
| return faiss is not None and SentenceTransformer is not None | |
| def _get_model(): | |
| global _model | |
| if _model is None: | |
| _model = SentenceTransformer("all-MiniLM-L6-v2") | |
| return _model | |
| def semantic_refine(query, results, k=5): | |
| """ | |
| In-memory, ephemeral semantic refinement. | |
| No persistence, no external calls. | |
| """ | |
| if not semantic_available() or not results: | |
| return results | |
| texts = [r.get("snippet", "") for r in results] | |
| model = _get_model() | |
| embeddings = model.encode(texts, normalize_embeddings=True) | |
| index = faiss.IndexFlatIP(embeddings.shape[1]) | |
| index.add(np.array(embeddings)) | |
| q_emb = model.encode([query], normalize_embeddings=True) | |
| _, idx = index.search(np.array(q_emb), min(k, len(results))) | |
| return [results[i] for i in idx[0]] |