From 3d1743a79d7f4b7f73c8bf23100d6923cfebbdd6 Mon Sep 17 00:00:00 2001 From: Nikolaos Maroulis Date: Thu, 11 Dec 2025 00:23:54 +0100 Subject: [PATCH] handle image urls with embedded http credentials --- llama_cpp/llama_chat_format.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index f738ab9bb..94af068ae 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3032,13 +3032,26 @@ def _load_image(image_url: str) -> bytes: # TODO: Add Pillow support for other image formats beyond (jpg, png) if image_url.startswith("data:"): import base64 - image_bytes = base64.b64decode(image_url.split(",")[1]) - return image_bytes - else: - import urllib.request - with urllib.request.urlopen(image_url) as f: - image_bytes = f.read() - return image_bytes + return base64.b64decode(image_url.split(",")[1]) + + import urllib.request + import urllib.parse + + parsed = urllib.parse.urlparse(image_url) + if parsed.username and parsed.password: + # auth handler for URLs with credentials + mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() + hostport = parsed.hostname + (f":{parsed.port}" if parsed.port else "") + mgr.add_password(None, hostport, parsed.username, parsed.password) + opener = urllib.request.build_opener(urllib.request.HTTPBasicAuthHandler(mgr)) + # URL without credentials + url = urllib.parse.urlunparse(parsed._replace(netloc=hostport)) + with opener.open(url) as f: + return f.read() + + with urllib.request.urlopen(image_url) as f: + return f.read() + @staticmethod def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]):