| from tqdm import tqdm | |
| from qdrant_client.models import ( | |
| PointStruct | |
| ) | |
| from db.parsers.bns.embedder_temp import ( | |
| LegalEmbedder | |
| ) | |
| from db.parsers.bns.qdrant_store import ( | |
| QdrantStore | |
| ) | |
| class LegalIngestionPipeline: | |
| def __init__(self): | |
| self.embedder = ( | |
| LegalEmbedder() | |
| ) | |
| self.store = ( | |
| QdrantStore( | |
| collection_name="bns" | |
| ) | |
| ) | |
| def ingest( | |
| self, | |
| chunks, | |
| batch_size=64 | |
| ): | |
| dimension = ( | |
| self.embedder | |
| .model | |
| .get_sentence_embedding_dimension() | |
| ) | |
| self.store.create_collection( | |
| dimension | |
| ) | |
| point_id = 1 | |
| for start in tqdm( | |
| range( | |
| 0, | |
| len(chunks), | |
| batch_size | |
| ) | |
| ): | |
| batch = chunks[ | |
| start: | |
| start + batch_size | |
| ] | |
| texts = [ | |
| chunk[ | |
| "enriched_text" | |
| ] | |
| for chunk in batch | |
| ] | |
| embeddings = ( | |
| self.embedder.embed( | |
| texts | |
| ) | |
| ) | |
| points = [] | |
| for chunk, embedding in zip( | |
| batch, | |
| embeddings | |
| ): | |
| points.append( | |
| PointStruct( | |
| id=point_id, | |
| vector= | |
| embedding.tolist(), | |
| payload= | |
| chunk | |
| ) | |
| ) | |
| point_id += 1 | |
| self.store.upsert( | |
| points | |
| ) |