agAdvisor / scripts /restore_snapshot.py
tirtho149's picture
Deploy AgAdvisor
b30f068 verified
Raw
History Blame Contribute Delete
2.12 kB
#!/usr/bin/env python3
"""
Restore the committed CDMS Qdrant snapshot into a running Docker Qdrant.
Run once per deploy, after starting the Qdrant container and before serving.
Both the Streamlit UI and the FastAPI server then read from this Docker Qdrant
(localhost:6333) — which is why the deploy uses Docker rather than the
single-writer on-disk store.
Usage:
docker run -d -p 6333:6333 qdrant/qdrant
python scripts/restore_snapshot.py
# then serve with: CDMS_OFFLINE_INDEX=1 QDRANT_REQUIRE_DOCKER=1 streamlit run ...
"""
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(PROJECT_ROOT))
import os
import requests
from src.config.paths import SNAPSHOT_DIR
HOST = os.environ.get("QDRANT_HOST", "localhost")
PORT = int(os.environ.get("QDRANT_PORT", "6333"))
COLLECTION = "cdms_documents"
def main():
snapshot = SNAPSHOT_DIR / "cdms_documents.snapshot"
if not snapshot.exists():
sys.exit(f"❌ Snapshot not found: {snapshot}\n"
f" Did you run `git lfs pull`? Build it with scripts/build_index.py.")
upload_url = (f"http://{HOST}:{PORT}/collections/{COLLECTION}"
f"/snapshots/upload?priority=snapshot")
print(f"⬆️ Uploading {snapshot.name} ({snapshot.stat().st_size / 1e6:.1f} MB) "
f"-> {HOST}:{PORT}/{COLLECTION}")
try:
with open(snapshot, "rb") as f:
resp = requests.post(upload_url, files={"snapshot": f}, timeout=300)
resp.raise_for_status()
except Exception as e:
sys.exit(f"❌ Restore failed: {e}\n"
f" Is the Docker Qdrant running? `docker run -d -p 6333:6333 qdrant/qdrant`")
# Confirm the collection is populated.
try:
info = requests.get(f"http://{HOST}:{PORT}/collections/{COLLECTION}", timeout=30).json()
count = info.get("result", {}).get("points_count")
print(f"✅ Restored. {COLLECTION} points_count = {count}")
except Exception:
print("✅ Restore request accepted (could not read point count).")
if __name__ == "__main__":
main()