| import os |
| import uuid |
| import datetime |
| from pymongo import MongoClient |
| from supabase import create_client, Client |
| from dotenv import load_dotenv |
| from sentence_transformers import SentenceTransformer |
|
|
| load_dotenv() |
|
|
| |
| MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017/") |
| MONGO_DB = "diet_db" |
|
|
| |
| SUPABASE_URL = os.getenv("SUPABASE_URL") |
| SUPABASE_SERVICE_ROLE_KEY = os.getenv("SUPABASE_SERVICE_ROLE_KEY") or os.getenv("SUPABASE_KEY") |
|
|
| def migrate_kb(): |
| print("Starting Knowledge Base migration from MongoDB to Supabase...") |
| |
| if not SUPABASE_URL or not SUPABASE_SERVICE_ROLE_KEY: |
| print("Error: Supabase configuration missing.") |
| return |
|
|
| mongo_client = MongoClient(MONGO_URI) |
| supabase: Client = create_client(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY) |
| |
| |
| print("Loading embedding model (all-MiniLM-L6-v2)...") |
| model = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
| |
| |
| |
| collections_to_migrate = [ |
| {"db": "medical_kb", "coll": "documents"}, |
| {"db": "test_index", "coll": "diabetes"}, |
| {"db": "diet_db", "coll": "diabetes"} |
| ] |
|
|
| for item in collections_to_migrate: |
| db_name = item["db"] |
| coll_name = item["coll"] |
| |
| print(f"Migrating {db_name}.{coll_name}...") |
| try: |
| mongo_docs = list(mongo_client[db_name][coll_name].find()) |
| if not mongo_docs: |
| print(f"No documents found in {db_name}.{coll_name}. Skipping.") |
| continue |
|
|
| |
| batch_size = 50 |
| for i in range(0, len(mongo_docs), batch_size): |
| batch = mongo_docs[i:i+batch_size] |
| texts = [doc.get("text", "") for doc in batch] |
| |
| |
| embeddings = model.encode(texts).tolist() |
| |
| supabase_data = [] |
| for doc, emb in zip(batch, embeddings): |
| supabase_data.append({ |
| "id": str(uuid.uuid4()), |
| "content": doc.get("text", ""), |
| "metadata": doc.get("metadata", {}), |
| "embedding": emb, |
| "collection_name": f"{db_name}_{coll_name}" |
| }) |
| |
| supabase.table("knowledge_base").insert(supabase_data).execute() |
| print(f"Uploaded {len(supabase_data)} documents...") |
|
|
| print(f"Successfully migrated {len(mongo_docs)} documents from {db_name}.{coll_name}.") |
| except Exception as e: |
| print(f"Error migrating {db_name}.{coll_name}: {e}") |
|
|
| print("Knowledge Base migration complete!") |
|
|
| if __name__ == "__main__": |
| migrate_kb() |
|
|