From 3bab7fbfd48c4bd4dcca4a9b3c8bd07a7cb1a52a Mon Sep 17 00:00:00 2001 From: oobabooga <112222186+oobabooga@users.noreply.github.com> Date: Fri, 6 Mar 2026 06:52:49 -0800 Subject: [PATCH] Update Colab notebook: new default model, direct GGUF URL support --- Colab-TextGen-GPU.ipynb | 34 ++++++++++++++++++---------------- download-model.py | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Colab-TextGen-GPU.ipynb b/Colab-TextGen-GPU.ipynb index 971099f6..f256b0e8 100644 --- a/Colab-TextGen-GPU.ipynb +++ b/Colab-TextGen-GPU.ipynb @@ -51,7 +51,7 @@ "source": [ "#@title 2. Launch the web UI\n", "\n", - "#@markdown If unsure about the branch, write \"main\" or leave it blank.\n", + "#@markdown You can provide a direct GGUF link or a Hugging Face model URL.\n", "\n", "import os\n", "from pathlib import Path\n", @@ -72,9 +72,9 @@ " ./start_linux.sh\n", "\n", "# Parameters\n", - "model_url = \"https://huggingface.co/turboderp/gemma-2-9b-it-exl2\" #@param {type:\"string\"}\n", - "branch = \"8.0bpw\" #@param {type:\"string\"}\n", - "command_line_flags = \"--n-gpu-layers 128 --load-in-4bit --use_double_quant --no_flash_attn\" #@param {type:\"string\"}\n", + "model_url = \"https://huggingface.co/unsloth/Qwen3.5-9B-GGUF/resolve/main/Qwen3.5-9B-Q4_K_M.gguf\" #@param {type:\"string\"}\n", + "branch = \"\" #@param {type:\"string\"}\n", + "command_line_flags = \"--load-in-4bit --use_double_quant\" #@param {type:\"string\"}\n", "api = False #@param {type:\"boolean\"}\n", "\n", "if api:\n", @@ -83,26 +83,28 @@ " command_line_flags += f\" {param}\"\n", "\n", "model_url = model_url.strip()\n", + "model_name = \"\"\n", "if model_url != \"\":\n", " if not model_url.startswith('http'):\n", " model_url = 'https://huggingface.co/' + model_url\n", "\n", - " # Download the model\n", - " url_parts = model_url.strip('/').strip().split('/')\n", - " output_folder = f\"{url_parts[-2]}_{url_parts[-1]}\"\n", - " branch = branch.strip('\"\\' ')\n", - " if branch.strip() not in ['', 'main']:\n", - " output_folder += f\"_{branch}\"\n", - " !python download-model.py {model_url} --branch {branch}\n", - " else:\n", + " branch = branch.strip()\n", + " if '/resolve/' in model_url:\n", + " model_name = model_url.split('?')[0].split('/')[-1]\n", " !python download-model.py {model_url}\n", - "else:\n", - " output_folder = \"\"\n", + " else:\n", + " url_parts = model_url.strip('/').split('/')\n", + " model_name = f\"{url_parts[-2]}_{url_parts[-1]}\"\n", + " if branch not in ['', 'main']:\n", + " model_name += f\"_{branch}\"\n", + " !python download-model.py {model_url} --branch {branch}\n", + " else:\n", + " !python download-model.py {model_url}\n", "\n", "# Start the web UI\n", "cmd = f\"./start_linux.sh {command_line_flags} --share\"\n", - "if output_folder != \"\":\n", - " cmd += f\" --model {output_folder}\"\n", + "if model_name != \"\":\n", + " cmd += f\" --model {model_name}\"\n", "\n", "!$cmd" ], diff --git a/download-model.py b/download-model.py index 7acb7f46..95d25e16 100644 --- a/download-model.py +++ b/download-model.py @@ -413,6 +413,26 @@ if __name__ == '__main__': sys.exit() downloader = ModelDownloader(max_retries=args.max_retries) + + # Handle direct file URLs (e.g. https://huggingface.co/org/repo/resolve/branch/file.gguf) + if '/resolve/' in model: + url = model if model.startswith('http') else f'{base}/{model}' + url = url.split('?')[0] + filename = url.split('/')[-1] + + if args.output: + output_folder = Path(args.output) + elif args.model_dir: + output_folder = Path(args.model_dir) + else: + user_data_dir = Path(args.user_data_dir) if args.user_data_dir else resolve_user_data_dir() + output_folder = user_data_dir / 'models' + + output_folder.mkdir(parents=True, exist_ok=True) + print(f"Downloading {filename} to {output_folder}") + downloader.get_single_file(url, output_folder, start_from_scratch=args.clean) + sys.exit() + # Clean up the model/branch names try: model, branch = downloader.sanitize_model_and_branch_names(model, branch)