Kuldeep-AI / utils /knowledge_loader.py
Kuldeepmishra3's picture
chore: move knowledge base to private HF Dataset - remove from public repo
38ca42d
Raw
History Blame Contribute Delete
2.04 kB
"""
utils/knowledge_loader.py
Downloads the private knowledge base from a HuggingFace Dataset at startup.
This keeps personal knowledge files OUT of the public repo (GitHub + HF Space)
while still making them available inside the running app.
Setup (HuggingFace Space Secrets):
HF_TOKEN β†’ your HF read token (huggingface.co/settings/tokens)
HF_KNOWLEDGE_DATASET β†’ e.g. "kuldeepmishra3/kuldeep-knowledge"
Locally: just keep files in data/knowledge/ as normal (no download needed).
"""
import os
from pathlib import Path
from utils.logger import get_logger
logger = get_logger(__name__)
KNOWLEDGE_DIR = Path("data/knowledge")
def download_knowledge_from_hf() -> bool:
"""
Download knowledge files from a private HF Dataset.
Only runs when HF_TOKEN and HF_KNOWLEDGE_DATASET are set (i.e. on HF Space).
Returns True if downloaded, False if skipped (local mode).
"""
hf_token = os.environ.get("HF_TOKEN", "").strip()
hf_dataset = os.environ.get("HF_KNOWLEDGE_DATASET", "").strip()
if not hf_token or not hf_dataset:
logger.info("[KnowledgeLoader] HF_TOKEN or HF_KNOWLEDGE_DATASET not set β€” using local files.")
return False
try:
from huggingface_hub import snapshot_download
logger.info(f"[KnowledgeLoader] Downloading knowledge base from private dataset: {hf_dataset}")
KNOWLEDGE_DIR.mkdir(parents=True, exist_ok=True)
snapshot_download(
repo_id=hf_dataset,
repo_type="dataset",
local_dir=str(KNOWLEDGE_DIR),
token=hf_token,
ignore_patterns=["*.gitattributes", ".gitattributes", "README.md"],
)
files = list(KNOWLEDGE_DIR.glob("*.txt")) + list(KNOWLEDGE_DIR.glob("*.pdf"))
logger.info(f"[KnowledgeLoader] βœ“ Downloaded {len(files)} knowledge file(s): {[f.name for f in files]}")
return True
except Exception as e:
logger.error(f"[KnowledgeLoader] βœ— Failed to download knowledge base: {e}")
return False