diff --git a/koboldcpp.py b/koboldcpp.py
index b32e81cf4..e18336cb7 100755
--- a/koboldcpp.py
+++ b/koboldcpp.py
@@ -135,6 +135,7 @@ has_audio_support = False
has_vision_support = False
has_whisper = False
cached_chat_template = None
+cached_sd_info = {}
savedata_obj = None
mcp_connections = [] #every element is linked to one mcp source, contains obj {"client":obj, "tools":[]}
mcp_lock = threading.Lock()
@@ -2235,10 +2236,6 @@ def sd_get_info():
print("An error occurred while getting sd metadata info")
return {}
-def sd_get_available_schedulers():
- info = sd_get_info()
- return info.get('available_schedulers', [])
-
sampler_aliases = [
# sd.cpp name, UI name, aliases
['euler', 'Euler', 'k_euler'],
@@ -2253,8 +2250,8 @@ sampler_aliases = [
]
def sd_sampler_canonical_name(name):
- info = sd_get_info()
- available = info.get('available_samplers', [])
+ global cached_sd_info
+ available = cached_sd_info.get('available_samplers', [])
alias_map = {}
for aliases in sampler_aliases:
for alias in aliases:
@@ -2266,9 +2263,9 @@ def sd_sampler_canonical_name(name):
return 'default'
def sd_sdapi_samplers():
+ global cached_sd_info
result = []
- info = sd_get_info()
- available = set(info.get('available_samplers', []))
+ available = set(cached_sd_info.get('available_samplers', []))
# ensure we only advertise supported samplers
smap = {}
for aliases in sampler_aliases:
@@ -5386,7 +5383,7 @@ Change Mode
def do_GET(self):
global embedded_kailite, embedded_kcpp_docs, embedded_kcpp_sdui, embedded_kailite_gz, embedded_kcpp_docs_gz, embedded_kcpp_sdui_gz, embedded_lcpp_ui_gz, embedded_musicui, embedded_musicui_gz
- global last_req_time, start_time, cached_chat_template, has_vision_support, has_audio_support, has_whisper, friendlymodelname
+ global last_req_time, start_time, cached_chat_template, cached_sd_info, has_vision_support, has_audio_support, has_whisper, friendlymodelname
global savedata_obj, has_multiplayer, multiplayer_turn_major, multiplayer_turn_minor, multiplayer_story_data_compressed, multiplayer_dataformat, multiplayer_lastactive, maxctx, maxhordelen, friendlymodelname, lastuploadedcomfyimg, lastgeneratedcomfyimg, KcppVersion, totalgens, preloaded_story, exitcounter, currentusergenkey, friendlysdmodelname, fullsdmodelpath, password, friendlyembeddingsmodelname, voicelist
global autoswapmode, textName, sttName, ttsName, embedName, musicName, imageName, mmprojName
@@ -5570,7 +5567,7 @@ Change Mode
if (friendlysdmodelname=="inactive" or fullsdmodelpath=="") and not(autoswapmode and imageName is not None):
response_body = (json.dumps([]).encode())
else:
- response_body = (json.dumps([{"name":name,"label":name} for name in sd_get_available_schedulers()]).encode())
+ response_body = (json.dumps([{"name":name,"label":name} for name in cached_sd_info.get('available_schedulers', [])]).encode())
elif clean_path.endswith('/sdapi/v1/latent-upscale-modes'):
response_body = (json.dumps([]).encode())
elif clean_path.endswith('/sdapi/v1/upscalers'):
@@ -10230,7 +10227,7 @@ def disableSwappedFieldsInConfig(args, swapReqType):
def kcpp_main_process(launch_args, g_memory=None, gui_launcher=False):
global embedded_kailite, embedded_kcpp_docs, embedded_kcpp_sdui, embedded_kailite_gz, embedded_kcpp_docs_gz, embedded_kcpp_sdui_gz, embedded_lcpp_ui_gz, embedded_musicui, embedded_musicui_gz, start_time, exitcounter, global_memory, using_gui_launcher
- global libname, args, friendlymodelname, friendlysdmodelname, fullsdmodelpath, password, fullwhispermodelpath, ttsmodelpath, embeddingsmodelpath, musicdiffusionmodelpath, musicllmmodelpath, friendlyembeddingsmodelname, has_audio_support, has_vision_support, cached_chat_template, preloaded_custom_jinja
+ global libname, args, friendlymodelname, friendlysdmodelname, fullsdmodelpath, password, fullwhispermodelpath, ttsmodelpath, embeddingsmodelpath, musicdiffusionmodelpath, musicllmmodelpath, friendlyembeddingsmodelname, has_audio_support, has_vision_support, cached_chat_template, cached_sd_info, preloaded_custom_jinja
start_server = True
@@ -10780,6 +10777,7 @@ def kcpp_main_process(launch_args, g_memory=None, gui_launcher=False):
friendlysdmodelname = os.path.splitext(friendlysdmodelname)[0]
friendlysdmodelname = sanitize_string(friendlysdmodelname)
loadok = sd_load_model(imgmodel,imgvae,imgt5xxl,imgclip1,imgclip2,imgphotomaker,imgupscaler)
+ cached_sd_info = sd_get_info()
print("Load Image Model OK: " + str(loadok))
if not loadok:
exitcounter = 999