""" سكربت رفع الملفات الكبيرة (الفهرس + المعجم + النموذج) إلى Hugging Face Hub، بعد بنائها محلياً عبر scripts/build_embeddings.py. يُشغَّل مرة واحدة فقط (أو عند تحديث المعجم/النموذج)، وليس جزءاً من تشغيل الحاوية في الإنتاج. يتطلب: - تسجيل دخول إلى Hugging Face (huggingface-cli login) أو تعيين متغير البيئة HF_TOKEN الاستخدام: python -m scripts.upload_assets --data # رفع الفهرس + المعجم python -m scripts.upload_assets --model # رفع نموذج الاسترجاع python -m scripts.upload_assets --data --model """ import argparse import sys from pathlib import Path from huggingface_hub import HfApi sys.path.append(str(Path(__file__).resolve().parent.parent)) from app import config # noqa: E402 def upload_data(api: HfApi) -> None: if not config.HF_DATA_REPO: raise RuntimeError("متغير البيئة HF_DATA_REPO غير مُعرَّف") for path in (config.FAISS_INDEX_PATH, config.LEXICON_WORDS_PATH): if not path.exists(): raise FileNotFoundError( f"الملف غير موجود: {path}\n" "شغّلي scripts/build_embeddings.py أولاً" ) api.create_repo(repo_id=config.HF_DATA_REPO, repo_type="dataset", exist_ok=True) for path in (config.FAISS_INDEX_PATH, config.LEXICON_WORDS_PATH): print(f"⬆️ رفع {path.name} إلى {config.HF_DATA_REPO} ...") api.upload_file( path_or_fileobj=str(path), path_in_repo=path.name, repo_id=config.HF_DATA_REPO, repo_type="dataset", ) print("✅ تم رفع الفهرس والمعجم بنجاح") def upload_model(api: HfApi) -> None: if not config.HF_MODEL_REPO: raise RuntimeError("متغير البيئة HF_MODEL_REPO غير مُعرَّف") if not config.RETRIEVAL_MODEL_PATH.exists(): raise FileNotFoundError(f"مجلد النموذج غير موجود: {config.RETRIEVAL_MODEL_PATH}") api.create_repo(repo_id=config.HF_MODEL_REPO, repo_type="model", exist_ok=True) print(f"⬆️ رفع مجلد النموذج إلى {config.HF_MODEL_REPO} ...") api.upload_folder( folder_path=str(config.RETRIEVAL_MODEL_PATH), repo_id=config.HF_MODEL_REPO, repo_type="model", ) print("✅ تم رفع النموذج بنجاح") def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--data", action="store_true", help="رفع الفهرس + المعجم") parser.add_argument("--model", action="store_true", help="رفع نموذج الاسترجاع") args = parser.parse_args() if not args.data and not args.model: parser.error("يجب تحديد --data أو --model أو كلاهما") api = HfApi() if args.data: upload_data(api) if args.model: upload_model(api) if __name__ == "__main__": main()