LLM-XRay / src /db.py
jmullings
Base DB Call updates
9ad792d
Raw
History Blame Contribute Delete
3.86 kB
import os
import re
import time
from typing import Dict, List, Optional
try:
import pymongo
HAS_PYMONGO = True
except ImportError:
HAS_PYMONGO = False
# Read connection string strictly from Hugging Face Space Secrets
MONGODB_URI = os.environ.get("MONGODB_URI", "").strip()
DB_NAME = os.environ.get("MONGODB_DB_NAME", "llm_xray_db")
COLLECTION_NAME = "audit_certificates"
_mongo_client = None
def get_db_collection(retries: int = 3, delay: float = 2.0):
"""Initializes and returns the MongoDB collection using HF Secrets.
Retries the initial connection — HF Space cold starts often need a
few extra seconds for DNS/TLS to Atlas before serverSelection succeeds.
"""
global _mongo_client
if not HAS_PYMONGO:
return None
if not MONGODB_URI:
return None
for attempt in range(1, retries + 1):
try:
if _mongo_client is None:
_mongo_client = pymongo.MongoClient(
MONGODB_URI,
serverSelectionTimeoutMS=8000,
connectTimeoutMS=8000,
)
# Force a real round-trip here (pymongo is lazy otherwise),
# so a slow cold-start connection is retried at this single
# choke point rather than surfacing as "0 certificates".
_mongo_client.admin.command("ping")
return _mongo_client[DB_NAME][COLLECTION_NAME]
except Exception as e:
print(f"[MongoDB] Connection attempt {attempt}/{retries} warning: {e}", flush=True)
_mongo_client = None
if attempt < retries:
time.sleep(delay)
return None
def mongo_save_certificate(cert: Dict) -> bool:
"""Persists an audit certificate permanently to MongoDB Atlas."""
col = get_db_collection()
if col is None:
return False
try:
config = cert.get("config", {})
model_name = config.get("model_name", "unknown").strip()
model_sha = str(config.get("model_sha", "main")).strip()
doc_id = f"{model_name}__{model_sha}".replace("/", "__").lower()
doc = dict(cert)
doc["_id"] = doc_id
doc["model_name"] = model_name
doc["model_sha"] = model_sha
doc["updated_at"] = cert.get("audited_at", "")
col.replace_one({"_id": doc_id}, doc, upsert=True)
print(f"[MongoDB] ✅ Successfully persisted '{model_name}' to Atlas collection", flush=True)
return True
except Exception as e:
print(f"[MongoDB] ⚠️ Error saving certificate: {e}", flush=True)
return False
def mongo_get_certificate(clean_model_name: str) -> Optional[Dict]:
"""Retrieves an audit certificate by model name from MongoDB."""
col = get_db_collection()
if col is None or not clean_model_name:
return None
try:
norm = clean_model_name.strip()
doc_id = norm.replace("/", "__").lower()
doc = col.find_one({
"$or": [
{"_id": {"$regex": f"^{doc_id}", "$options": "i"}},
{"config.model_name": {"$regex": f"^{re.escape(norm)}$", "$options": "i"}},
{"model_name": {"$regex": f"^{re.escape(norm)}$", "$options": "i"}}
]
})
if doc:
doc.pop("_id", None)
return doc
except Exception as e:
print(f"[MongoDB] ⚠️ Error retrieving '{clean_model_name}': {e}", flush=True)
return None
def mongo_get_all_certificates() -> List[Dict]:
"""Recalls all saved certificates."""
col = get_db_collection()
if col is None:
return []
try:
docs = list(col.find({}))
for d in docs:
d.pop("_id", None)
return docs
except Exception as e:
print(f"[MongoDB] ⚠️ Error loading certificates: {e}", flush=True)
return []