Spaces:
Sleeping
Sleeping
| from app.rag.embeddings import embed_queries, rerank | |
| from app.rag.ingest import ingest_policies | |
| from app.rag.vector_store import get_policy_collection | |
| def ensure_vector_store_ready() -> None: | |
| collection = get_policy_collection() | |
| if collection.count() == 0: | |
| ingest_policies(reset=False) | |
| def retrieve_policies(query: str, k: int = 4, fetch_k: int = 12, use_reranker: bool = True) -> list[dict]: | |
| ensure_vector_store_ready() | |
| collection = get_policy_collection() | |
| query_embedding = embed_queries([query])[0] | |
| results = collection.query( | |
| query_embeddings=[query_embedding], | |
| n_results=fetch_k, | |
| include=["documents", "metadatas", "distances"], | |
| ) | |
| documents = results.get("documents", [[]])[0] | |
| metadatas = results.get("metadatas", [[]])[0] | |
| distances = results.get("distances", [[]])[0] | |
| ids = results.get("ids", [[]])[0] | |
| candidates = [] | |
| for chunk_id, content, metadata, distance in zip(ids, documents, metadatas, distances): | |
| candidates.append( | |
| { | |
| "id": chunk_id, | |
| "source": metadata.get("source"), | |
| "content": content, | |
| "metadata": metadata, | |
| "distance": round(float(distance), 4), | |
| "score": round(1 / (1 + float(distance)), 4), | |
| } | |
| ) | |
| if use_reranker and candidates: | |
| scores = rerank(query, [candidate["content"] for candidate in candidates]) | |
| for candidate, score in zip(candidates, scores): | |
| candidate["rerank_score"] = round(score, 4) | |
| candidates.sort(key=lambda item: item["rerank_score"], reverse=True) | |
| else: | |
| candidates.sort(key=lambda item: item["score"], reverse=True) | |
| return candidates[:k] | |