#%% import os import json import chromadb from sentence_transformers import SentenceTransformer from tqdm import tqdm CHUNKS_DIR = "/content/drive/MyDrive/updatedparentchunk/chunks/parent_child" client = chromadb.PersistentClient( path="/content/drive/MyDrive/chroma_bge_v2" ) collection = client.get_or_create_collection( "sci_judgments_bge_v2" ) model = SentenceTransformer( "BAAI/bge-small-en-v1.5" ) def flatten_metadata(meta): flat = {} for k, v in meta.items(): if isinstance(v, (str, int, float, bool)): flat[k] = v elif isinstance(v, (list, dict)): flat[k] = json.dumps(v) else: flat[k] = str(v) return flat files = [ f for f in os.listdir(CHUNKS_DIR) if f.endswith(".json") ] print("Files:", len(files)) all_ids = [] all_docs = [] all_meta = [] for filename in tqdm(files): with open( os.path.join(CHUNKS_DIR, filename), encoding="utf-8" ) as f: data = json.load(f) parent = data["parent"] all_ids.append(parent["chunk_id"]) all_docs.append(parent["text"]) all_meta.append( flatten_metadata(parent["metadata"]) ) for child in data["children"]: all_ids.append(child["chunk_id"]) all_docs.append(child["text"]) all_meta.append( flatten_metadata(child["metadata"]) ) print("Total chunks:", len(all_ids)) BATCH_SIZE = 512 for start in tqdm( range(0, len(all_ids), BATCH_SIZE), desc="Embedding" ): end = min( start + BATCH_SIZE, len(all_ids) ) batch_docs = all_docs[start:end] embeddings = model.encode( batch_docs, batch_size=128, normalize_embeddings=True, show_progress_bar=False ) collection.add( ids=all_ids[start:end], embeddings=embeddings.tolist(), documents=batch_docs, metadatas=all_meta[start:end] ) print("\nDONE") print("Collection count:", collection.count())