Spaces:
Running on Zero
Running on Zero
Download rag.py from TechKick/enterprise-ai-document-intelligence-platform: direct link, hf CLI and curl.
- Browser
- Download file 1.51 kB
-
https://huggingface.co/spaces/TechKick/enterprise-ai-document-intelligence-platform/resolve/main/rag.py
- Command line
-
hf download hf://spaces/TechKick/enterprise-ai-document-intelligence-platform/rag.py
-
curl -L -o rag.py https://huggingface.co/spaces/TechKick/enterprise-ai-document-intelligence-platform/resolve/main/rag.py
1.51 kB
| import faiss | |
| import numpy as np | |
| from embeddings import get_embeddings | |
| class RAG: | |
| def __init__(self): | |
| self.index = None | |
| self.chunks = [] | |
| def chunk_text(self, text, chunk_size=500): | |
| words = text.split() | |
| chunks = [] | |
| for i in range(0, len(words), chunk_size): | |
| chunks.append(" ".join(words[i:i + chunk_size])) | |
| return chunks | |
| def create_index(self, text): | |
| self.chunks = self.chunk_text(text) | |
| if not self.chunks: | |
| return | |
| embeddings = get_embeddings(self.chunks) | |
| embeddings = np.atleast_2d(np.array(embeddings)).astype("float32") | |
| dimension = embeddings.shape[1] | |
| self.index = faiss.IndexFlatL2(dimension) | |
| self.index.add(embeddings) | |
| def search(self, query, top_k=3): | |
| if self.index is None or not self.chunks: | |
| return [] | |
| query_embedding = get_embeddings([query]) | |
| query_embedding = np.atleast_2d(np.array(query_embedding)).astype("float32") | |
| top_k = min(top_k, len(self.chunks)) | |
| distances, indices = self.index.search(query_embedding, top_k) | |
| results = [] | |
| for score, idx in zip(distances[0], indices[0]): | |
| if idx == -1: | |
| continue | |
| results.append( | |
| { | |
| "chunk": self.chunks[idx], | |
| "score": float(score), | |
| "chunk_id": int(idx) | |
| } | |
| ) | |
| return results | |