From 573f99dc8795d6ab7219b9770b5c8a43aea4b3c7 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 5 Jul 2026 14:26:43 +0100 Subject: [PATCH 1/3] fix(installer): read installed git commit from package metadata check_transformers and check_diffusers compared the target commit against a marker stored in server options, which is only persisted after full webui startup. An upgrade restart fires before that point, so the marker stayed stale and the next launch reinstalled the same pin again. Read the installed commit from the package dist-info direct_url.json instead; the options values remain as informational display. --- installer.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/installer.py b/installer.py index bf392d178..726ecb16b 100644 --- a/installer.py +++ b/installer.py @@ -151,6 +151,14 @@ def package_spec(package): return None +def package_commit(spec): + try: + direct_url = json.loads(spec.read_text('direct_url.json')) + return direct_url.get('vcs_info', {}).get('commit_id', '') + except Exception: + return '' + + # check if package is installed def installed(package, friendly: str | None = None, quiet = False): # pylint: disable=redefined-outer-name t_start = time.time() @@ -544,7 +552,7 @@ def check_diffusers(): pkg = package_spec('diffusers') parts = pkg.version.split('.') if pkg is not None else [] minor = int(parts[1]) if len(parts) > 1 else -1 - current = opts.get('diffusers_version', '') if minor > -1 else '' + current = package_commit(pkg) if minor > -1 else '' if (minor == -1) or ((current != target_commit) and (not args.experimental)): if minor == -1: log.info(f'Install: package="diffusers" commit={target_commit}') @@ -588,7 +596,7 @@ def check_transformers(): pip(f'install --upgrade transformers=={target_transformers}', ignore=False, quiet=True) else: # Git commit-pinned version - current = opts.get('transformers_version', '') + current = package_commit(pkg_transformers) if args.reinstall or (pkg_transformers is None) or (pkg_transformers.version.startswith('4')) or (current != target_commit): if pkg_transformers is None: log.info(f'Install: package="transformers" commit={target_commit}') From 869568a8013a77e709a230526a37882ce9a34ba3 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 5 Jul 2026 14:27:33 +0100 Subject: [PATCH 2/3] fix(installer): set restart flag when repository is upgraded The post-upgrade restart depended on a pinned requirement drifting in the same run, since the requirements check was the only place that set restart_required. The direct check compared a short hash and date string against a full sha and never fired. Set restart_required when the repository update moves HEAD so an upgrade restarts even when no package pins changed; a no-op pull now logs the repository as unchanged instead of upgraded and skips the restart. --- installer.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/installer.py b/installer.py index 726ecb16b..568c4686a 100644 --- a/installer.py +++ b/installer.py @@ -1631,7 +1631,7 @@ def check_version(reset=True): # pylint: disable=unused-argument if len(latest) != 40: log.error(f'Repository error: commit={latest} invalid') elif latest != commit and args.upgrade: - global quick_allowed # pylint: disable=global-statement + global quick_allowed, restart_required # pylint: disable=global-statement quick_allowed = False log.info('Updating main repository') try: @@ -1640,10 +1640,12 @@ def check_version(reset=True): # pylint: disable=unused-argument update('.', keep_branch=True) # git('git stash pop') ver = git('log -1 --pretty=format:"%h %ad"') - log.info(f'Repository upgraded: {ver}') - log.warning('Server restart is recommended to apply changes') - if ver == latest: # double check - restart() + if git('rev-parse HEAD') != commit: + log.info(f'Repository upgraded: {ver}') + log.warning('Server restart is recommended to apply changes') + restart_required = True + else: + log.info(f'Repository unchanged: {ver}') except Exception: if not reset: log.error('Repository error upgrading') From 4be57f63dfece6d692db104dc081c646b3570585 Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Sun, 5 Jul 2026 14:28:36 +0100 Subject: [PATCH 3/3] fix(installer): drop eager upgrade from pinned installs Under uv, install --upgrade re-resolves the full dependency set eagerly: the pinned tokenizers and transformers installs bumped typing-extensions past its requirements pin on every update, and the requirements check then downgraded it back, flagging a restart each time. The preceding uninstall and exact pins already force the intended change, so the flag only produced churn. The pip-routed diffusers install is aligned for consistency. --- installer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/installer.py b/installer.py index 568c4686a..3ee48d48a 100644 --- a/installer.py +++ b/installer.py @@ -561,7 +561,7 @@ def check_diffusers(): pip('uninstall --yes diffusers', ignore=True, quiet=True, uv=False) if args.skip_git: log.warning('Git: marked as not available but required for diffusers installation') - pip(f'install --upgrade git+https://github.com/huggingface/diffusers@{target_commit}', ignore=False, quiet=True, uv=False) + pip(f'install git+https://github.com/huggingface/diffusers@{target_commit}', ignore=False, quiet=True, uv=False) global diffusers_commit # pylint: disable=global-statement diffusers_commit = target_commit ts('diffusers', t_start) @@ -592,8 +592,8 @@ def check_transformers(): else: log.info(f'Update: package="transformers" current={pkg_transformers.version} target={target_transformers}') pip('uninstall --yes transformers', ignore=True, quiet=True) - pip(f'install --upgrade tokenizers=={target_tokenizers}', ignore=False, quiet=True) - pip(f'install --upgrade transformers=={target_transformers}', ignore=False, quiet=True) + pip(f'install tokenizers=={target_tokenizers}', ignore=False, quiet=True) + pip(f'install transformers=={target_transformers}', ignore=False, quiet=True) else: # Git commit-pinned version current = package_commit(pkg_transformers) @@ -603,8 +603,8 @@ def check_transformers(): else: log.info(f'Update: package="transformers" current={pkg_transformers.version} hash={current} target={target_commit}') pip('uninstall --yes transformers', ignore=True, quiet=True) - pip(f'install --upgrade tokenizers=={target_tokenizers}', ignore=False, quiet=True) - pip(f'install --upgrade git+https://github.com/huggingface/transformers@{target_commit}', ignore=False, quiet=True) + pip(f'install tokenizers=={target_tokenizers}', ignore=False, quiet=True) + pip(f'install git+https://github.com/huggingface/transformers@{target_commit}', ignore=False, quiet=True) global transformers_commit # pylint: disable=global-statement transformers_commit = target_commit ts('transformers', t_start)