Download data/scraping_scripts/upload_data_to_hf.py from towardsai-tutors/ai-tutor-chatbot: direct link, hf CLI and curl.
- Browser
- Download file 3.84 kB
-
https://huggingface.co/spaces/towardsai-tutors/ai-tutor-chatbot/resolve/a190140a9b070a1b0a7130d595fe46441c9c4e6c/data/scraping_scripts/upload_data_to_hf.py
- Command line
-
hf download hf://spaces/towardsai-tutors/ai-tutor-chatbot@a190140a9b070a1b0a7130d595fe46441c9c4e6c/data/scraping_scripts/upload_data_to_hf.py
-
curl -L -o upload_data_to_hf.py https://huggingface.co/spaces/towardsai-tutors/ai-tutor-chatbot/resolve/a190140a9b070a1b0a7130d595fe46441c9c4e6c/data/scraping_scripts/upload_data_to_hf.py
3.84 kB
| #!/usr/bin/env python | |
| """ | |
| Upload Data Files to HuggingFace | |
| This script uploads key data files to a private HuggingFace dataset repository: | |
| 1. all_sources_data.jsonl - The raw document data | |
| 2. all_sources_contextual_nodes.pkl - The contextualized chunk manifest used for embedding | |
| This is useful for new team members who need the latest version of the data. | |
| Usage: | |
| python upload_data_to_hf.py [--repo REPO_ID] | |
| Arguments: | |
| --repo REPO_ID HuggingFace dataset repository ID (default: towardsai-tutors/ai-tutor-data) | |
| """ | |
| import argparse | |
| import os | |
| from dotenv import load_dotenv | |
| try: | |
| from data.scraping_scripts.hf_auth import HuggingFaceAuthError, validate_hf_access | |
| from data.scraping_scripts.source_registry import upload_data_file_paths | |
| except ModuleNotFoundError: | |
| from hf_auth import HuggingFaceAuthError, validate_hf_access | |
| from source_registry import upload_data_file_paths | |
| load_dotenv() | |
| def upload_files_to_huggingface(repo_id="towardsai-tutors/ai-tutor-data"): | |
| """Upload data files to a private HuggingFace repository.""" | |
| files_to_upload = upload_data_file_paths() | |
| # Filter to only include files that exist | |
| existing_files = [] | |
| missing_files = [] | |
| for file_path in files_to_upload: | |
| if os.path.exists(file_path): | |
| existing_files.append(file_path) | |
| else: | |
| missing_files.append(file_path) | |
| # Critical files must exist | |
| critical_files = [ | |
| "data/all_sources_data.jsonl", | |
| "data/all_sources_contextual_nodes.pkl", | |
| ] | |
| critical_missing = [f for f in critical_files if f in missing_files] | |
| if critical_missing: | |
| print( | |
| f"Error: The following critical files were not found: {', '.join(critical_missing)}" | |
| ) | |
| return False | |
| if missing_files: | |
| print( | |
| f"Warning: The following files were not found and will not be uploaded: {', '.join(missing_files)}" | |
| ) | |
| print("This is normal if you're only updating certain sources.") | |
| try: | |
| api = validate_hf_access(repo_id=repo_id) | |
| # Check if repository exists, create if it doesn't | |
| print(f"Repository {repo_id} exists") | |
| # Upload all existing files, continuing past per-file failures so the | |
| # repo gets as much fresh data as possible, but report failure overall. | |
| failed_files = [] | |
| for file_path in existing_files: | |
| try: | |
| file_name = os.path.basename(file_path) | |
| print(f"Uploading {file_name}...") | |
| api.upload_file( | |
| path_or_fileobj=file_path, | |
| path_in_repo=file_name, | |
| repo_id=repo_id, | |
| repo_type="dataset", | |
| ) | |
| print( | |
| f"Successfully uploaded {file_name} to HuggingFace repository {repo_id}" | |
| ) | |
| except Exception as e: | |
| print(f"Error uploading {file_path}: {e}") | |
| failed_files.append(file_path) | |
| if failed_files: | |
| print( | |
| f"Error: failed to upload {len(failed_files)} file(s): " | |
| f"{', '.join(failed_files)}" | |
| ) | |
| return False | |
| return True | |
| except HuggingFaceAuthError as e: | |
| print(e) | |
| return False | |
| except Exception as e: | |
| print(f"Error uploading files: {e}") | |
| return False | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Upload Data Files to HuggingFace") | |
| parser.add_argument( | |
| "--repo", | |
| default="towardsai-tutors/ai-tutor-data", | |
| help="HuggingFace dataset repository ID", | |
| ) | |
| args = parser.parse_args() | |
| success = upload_files_to_huggingface(args.repo) | |
| if not success: | |
| raise SystemExit(1) | |
| if __name__ == "__main__": | |
| main() | |