| import os |
| import sys |
| import time |
| import requests |
|
|
| def download_file(url, dest_path): |
| print(f"Downloading from: {url}") |
| print(f"Saving to: {dest_path}") |
| |
| |
| dest_dir = os.path.dirname(dest_path) |
| os.makedirs(dest_dir, exist_ok=True) |
| |
| |
| temp_path = dest_path + ".download" |
| initial_bytes = 0 |
| headers = {} |
| |
| if os.path.exists(temp_path): |
| initial_bytes = os.path.getsize(temp_path) |
| headers["Range"] = f"bytes={initial_bytes}-" |
| print(f"Resuming download from byte offset: {initial_bytes:,}") |
| |
| response = requests.get(url, stream=True, headers=headers, timeout=30) |
| |
| |
| if response.status_code == 206: |
| total_size = int(response.headers.get('content-range').split('/')[-1]) |
| mode = "ab" |
| elif response.status_code == 200: |
| total_size = int(response.headers.get('content-length', 0)) |
| initial_bytes = 0 |
| mode = "wb" |
| else: |
| print(f"Failed to start download. HTTP Status Code: {response.status_code}") |
| if response.status_code == 416: |
| print("Range Not Satisfiable. The file may already be fully downloaded or server has issues.") |
| return False |
| |
| print(f"Total target size: {total_size:,} bytes ({total_size / (1024**3):.2f} GB)") |
| |
| downloaded = initial_bytes |
| start_time = time.time() |
| last_print = time.time() |
| last_downloaded = downloaded |
| |
| with open(temp_path, mode) as f: |
| for chunk in response.iter_content(chunk_size=1024 * 1024): |
| if chunk: |
| f.write(chunk) |
| downloaded += len(chunk) |
| |
| |
| current_time = time.time() |
| if current_time - last_print >= 2.0: |
| elapsed = current_time - start_time |
| speed = (downloaded - last_downloaded) / (current_time - last_print) if current_time > last_print else 0 |
| percent = (downloaded / total_size) * 100 if total_size > 0 else 0 |
| eta = (total_size - downloaded) / speed if speed > 0 else 0 |
| |
| print(f"Progress: {percent:.2f}% | " |
| f"{downloaded / (1024**2):.1f}/{total_size / (1024**2):.1f} MB | " |
| f"Speed: {speed / (1024**2):.2f} MB/s | " |
| f"ETA: {int(eta // 60)}m {int(eta % 60)}s") |
| |
| last_print = current_time |
| last_downloaded = downloaded |
| |
| |
| if os.path.exists(dest_path): |
| os.remove(dest_path) |
| os.rename(temp_path, dest_path) |
| print("Download completed successfully!") |
| return True |
|
|
| if __name__ == "__main__": |
| url = "https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/resolve/main/model-00001-of-00002.safetensors" |
| dest = r"C:\Users\BHUVAN GIRISH DESAI\.cache\huggingface\hub\models--microsoft--Phi-3-mini-4k-instruct\snapshots\f39ac1d28e925b323eae81227eaba4464caced4e\model-00001-of-00002.safetensors" |
| |
| success = download_file(url, dest) |
| if success: |
| |
| blobs_dir = r"C:\Users\BHUVAN GIRISH DESAI\.cache\huggingface\hub\models--microsoft--Phi-3-mini-4k-instruct\blobs" |
| if os.path.exists(blobs_dir): |
| for file in os.listdir(blobs_dir): |
| if file.endswith(".incomplete"): |
| try: |
| os.remove(os.path.join(blobs_dir, file)) |
| print(f"Cleaned up incomplete blob file: {file}") |
| except Exception as e: |
| print(f"Could not clean up incomplete file: {e}") |
| |
| print("\nModel files are fully complete! You can now load the model instantly via the Web Dashboard.") |
| else: |
| sys.exit(1) |
|
|