From f6bbc350f25d51bc849aa74f3f320cb0c3eaa575 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Thu, 5 Jun 2025 10:25:42 +0800 Subject: [PATCH] various qol fixes --- gpttype_adapter.cpp | 4 ++-- koboldcpp.py | 51 ++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/gpttype_adapter.cpp b/gpttype_adapter.cpp index 03e0a08be..ccab246c2 100644 --- a/gpttype_adapter.cpp +++ b/gpttype_adapter.cpp @@ -1953,9 +1953,9 @@ ModelLoadResult gpttype_load_model(const load_model_inputs inputs, FileFormat in kcpp_data->swa_full = true; //cannot use SWA printf("\nSWA Mode IS DISABLED!\nSWA Mode Cannot be used with Context Shifting!\n"); } else if (inputs.use_fastforward) { - printf("\nSWA Mode is ENABLED!\nNote that using SWA Mode with Fast Forwarding can lead to degraded recall!\n"); + printf("\nSWA Mode is ENABLED!\nNote that using SWA Mode cannot be used with Context Shifting, and can lead to degraded recall when combined with Fast Forwarding!\n"); } else { - printf("\nSWA Mode IS ENABLED!\n"); + printf("\nSWA Mode IS ENABLED!\nNote that using SWA Mode cannot be used with Context Shifting\n"); } } debugmode = inputs.debugmode; diff --git a/koboldcpp.py b/koboldcpp.py index 097aa5a89..cd0727c9f 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -4354,18 +4354,18 @@ def show_gui(): button = ctk.CTkButton(parent, 50, text="Browse", command= lambda a=var,b=searchtext:getfilename(a,b)) if singlerow: if singlecol: - entry.grid(row=row, column=0, padx=(94+8), stick="w") - button.grid(row=row, column=0, padx=(94+width+12), stick="nw") + entry.grid(row=row, column=0, padx=(94+8), pady=2, stick="w") + button.grid(row=row, column=0, padx=(94+width+12), pady=2, stick="w") else: - entry.grid(row=row, column=1, padx=8, stick="w") - button.grid(row=row, column=1, padx=(width+12), stick="nw") + entry.grid(row=row, column=1, padx=8, pady=2, stick="w") + button.grid(row=row, column=1, padx=(width+12), pady=2, stick="w") else: if singlecol: - entry.grid(row=row+1, column=0, columnspan=3, padx=8, stick="nw") - button.grid(row=row+1, column=0, columnspan=3, padx=(width+12), stick="nw") + entry.grid(row=row+1, column=0, columnspan=3, padx=8, pady=2, stick="w") + button.grid(row=row+1, column=0, columnspan=3, padx=(width+12), pady=2, stick="w") else: - entry.grid(row=row+1, column=0, columnspan=1, padx=8, stick="nw") - button.grid(row=row+1, column=1, columnspan=1, padx=8, stick="nw") + entry.grid(row=row+1, column=0, columnspan=1, padx=8, pady=2, stick="w") + button.grid(row=row+1, column=1, columnspan=1, padx=8, pady=2, stick="w") return label, entry, button def model_searcher(): @@ -4753,7 +4753,7 @@ def show_gui(): # load model makefileentry(quick_tab, "GGUF Text Model:", "Select GGUF or GGML Model File", model_var, 40, 280, onchoosefile=on_picked_model_file,tooltiptxt="Select a GGUF or GGML model file on disk to be loaded.") model_var.trace("w", gui_changed_modelfile) - ctk.CTkButton(quick_tab, width=70, text = "HF Search", command = model_searcher ).grid(row=41,column=1, stick="sw", padx= 202) + ctk.CTkButton(quick_tab, width=70, text = "HF Search", command = model_searcher ).grid(row=41,column=1, stick="sw", padx= 202, pady=2) # Hardware Tab hardware_tab = tabcontent["Hardware"] @@ -4849,7 +4849,7 @@ def show_gui(): model_tab = tabcontent["Loaded Files"] makefileentry(model_tab, "Text Model:", "Select GGUF or GGML Model File", model_var, 1,width=205,singlerow=True, onchoosefile=on_picked_model_file,tooltiptxt="Select a GGUF or GGML model file on disk to be loaded.") - ctk.CTkButton(model_tab, width=70, text = "HF Search", command = model_searcher ).grid(row=1,column=0, stick="nw", padx=370) + ctk.CTkButton(model_tab, width=70, text = "HF Search", command = model_searcher ).grid(row=1,column=0, stick="nw", padx=370, pady=2) makefileentry(model_tab, "Text Lora:", "Select Lora File",lora_var, 3,width=160,singlerow=True,tooltiptxt="Select an optional GGML Text LoRA adapter to use.\nLeave blank to skip.") makelabelentry(model_tab, "Multiplier: ", loramult_var, 3, 50,padx=390,singleline=True,tooltip="Scale multiplier for Text LoRA Strength. Default is 1.0", labelpadx=330) makefileentry(model_tab, "Vision mmproj:", "Select Vision mmproj File", mmproj_var, 7,width=280,singlerow=True,tooltiptxt="Select a mmproj file to use for vision models like LLaVA.\nLeave blank to skip.") @@ -4869,7 +4869,7 @@ def show_gui(): fnam = zentk_askopenfilename(title="Pick Premade ChatCompletions Adapter",filetypes=[("JSON Adapter", "*.json")], initialdir=initialDir) if fnam: chatcompletionsadapter_var.set(fnam) - ctk.CTkButton(model_tab, 64, text="Pick Premade", command=pickpremadetemplate).grid(row=25, column=0, padx=322, stick="nw") + ctk.CTkButton(model_tab, 64, text="Pick Premade", command=pickpremadetemplate).grid(row=25, column=0, padx=322, pady=2, stick="nw") mmproj_var.trace("w", gui_changed_modelfile) draftmodel_var.trace("w", gui_changed_modelfile) @@ -4959,19 +4959,26 @@ def show_gui(): audio_tab = tabcontent["Audio"] makefileentry(audio_tab, "Whisper Model (Speech-To-Text):", "Select Whisper .bin Model File", whisper_model_var, 1, width=280, filetypes=[("*.bin","*.bin")], tooltiptxt="Select a Whisper .bin model file on disk to be loaded for Voice Recognition.") whisper_model_var.trace("w", gui_changed_modelfile) - makelabelentry(audio_tab, "OuteTTS Threads:" , tts_threads_var, 3, 50,padx=290,singleline=True,tooltip="How many threads to use during TTS generation.\nIf left blank, uses same value as threads.") - makefileentry(audio_tab, "OuteTTS Model (Text-To-Speech):", "Select OuteTTS GGUF Model File", tts_model_var, 5, width=280, filetypes=[("*.gguf","*.gguf")], tooltiptxt="Select a OuteTTS GGUF model file on disk to be loaded for Narration.") + makefileentry(audio_tab, "OuteTTS Model (Text-To-Speech Required):", "Select OuteTTS GGUF Model File", tts_model_var, 3, width=280, filetypes=[("*.gguf","*.gguf")], tooltiptxt="Select a OuteTTS GGUF model file on disk to be loaded for Narration.") tts_model_var.trace("w", gui_changed_modelfile) - makefileentry(audio_tab, "WavTokenizer Model (Text-To-Speech):", "Select WavTokenizer GGUF Model File", wavtokenizer_var, 7, width=280, filetypes=[("*.gguf","*.gguf")], tooltiptxt="Select a WavTokenizer GGUF model file on disk to be loaded for Narration.") - wavtokenizer_var.trace("w", gui_changed_modelfile) + makelabelentry(audio_tab, "OuteTTS Threads:" , tts_threads_var, 5, 50,padx=290,singleline=True,tooltip="How many threads to use during TTS generation.\nIf left blank, uses same value as threads.") + makelabelentry(audio_tab, "OuteTTS Max Tokens:" , ttsmaxlen_var, 7, 50,padx=290,singleline=True,tooltip="Max allowed audiotokens to generate per TTS request.") makecheckbox(audio_tab, "TTS Use GPU", ttsgpu_var, 9, 0,tooltiptxt="Uses the GPU for TTS.") - makelabelentry(audio_tab, "OuteTTS Max Tokens:" , ttsmaxlen_var, 11, 50,padx=290,singleline=True,tooltip="Max allowed audiotokens to generate per TTS request.") ttsgpu_var.trace("w", gui_changed_modelfile) + makefileentry(audio_tab, "WavTokenizer Model (Text-To-Speech Required):", "Select WavTokenizer GGUF Model File", wavtokenizer_var, 11, width=280, filetypes=[("*.gguf","*.gguf")], tooltiptxt="Select a WavTokenizer GGUF model file on disk to be loaded for Narration.") + wavtokenizer_var.trace("w", gui_changed_modelfile) admin_tab = tabcontent["Admin"] - makecheckbox(admin_tab, "Enable Model Administration", admin_var, 1, 0,tooltiptxt="Enable a admin server, allowing you to remotely relaunch and swap models and configs.") + def toggleadmin(a,b,c): + if admin_var.get()==1 and admin_dir_var.get()=="": + autopath = os.path.realpath(__file__) + if getattr(sys, 'frozen', False): + autopath = sys.executable + autopath = os.path.dirname(autopath) + admin_dir_var.set(autopath) + makecheckbox(admin_tab, "Enable Model Administration", admin_var, 1, 0, command=toggleadmin,tooltiptxt="Enable a admin server, allowing you to remotely relaunch and swap models and configs.") makelabelentry(admin_tab, "Admin Password:" , admin_password_var, 3, 150,padx=120,singleline=True,tooltip="Require a password to access admin functions. You are strongly advised to use one for publically accessible instances!") - makefileentry(admin_tab, "Config Directory:", "Select directory containing .kcpps files to relaunch from", admin_dir_var, 5, width=280, dialog_type=2, tooltiptxt="Specify a directory to look for .kcpps configs in, which can be used to swap models.") + makefileentry(admin_tab, "Config Directory (Required):", "Select directory containing .gguf or .kcpps files to relaunch from", admin_dir_var, 5, width=280, dialog_type=2, tooltiptxt="Specify a directory to look for .kcpps configs in, which can be used to swap models.") makecheckbox(admin_tab, "SingleInstance Mode", singleinstance_var, 10, 0,tooltiptxt="Allows this server to be shut down by another KoboldCpp instance with singleinstance starting on the same port.") def kcpp_export_template(): @@ -5458,9 +5465,9 @@ def show_gui(): ctk.CTkButton(tabs , text = "Launch", fg_color="#2f8d3c", hover_color="#2faa3c", command = guilaunch, width=80, height = 35 ).grid(row=1,column=1, stick="se", padx= 25, pady=5) ctk.CTkButton(tabs , text = "Update", fg_color="#9900cc", hover_color="#aa11dd", command = display_updates, width=90, height = 35 ).grid(row=1,column=0, stick="sw", padx= 5, pady=5) - ctk.CTkButton(tabs , text = "Save", fg_color="#084a66", hover_color="#085a88", command = save_config_gui, width=60, height = 35 ).grid(row=1,column=1, stick="sw", padx= 5, pady=5) - ctk.CTkButton(tabs , text = "Load", fg_color="#084a66", hover_color="#085a88", command = load_config_gui, width=60, height = 35 ).grid(row=1,column=1, stick="sw", padx= 70, pady=5) - ctk.CTkButton(tabs , text = "Help (Find Models)", fg_color="#992222", hover_color="#bb3333", command = display_help, width=100, height = 35 ).grid(row=1,column=1, stick="sw", padx= 135, pady=5) + ctk.CTkButton(tabs , text = "Save Config", fg_color="#084a66", hover_color="#085a88", command = save_config_gui, width=60, height = 35 ).grid(row=1,column=1, stick="sw", padx= 5, pady=5) + ctk.CTkButton(tabs , text = "Load Config", fg_color="#084a66", hover_color="#085a88", command = load_config_gui, width=60, height = 35 ).grid(row=1,column=1, stick="sw", padx= 92, pady=5) + ctk.CTkButton(tabs , text = "Help (Find Models)", fg_color="#992222", hover_color="#bb3333", command = display_help, width=100, height = 35 ).grid(row=1,column=1, stick="sw", padx= 180, pady=5) # start a thread that tries to get actual gpu names and layer counts gpuinfo_thread = threading.Thread(target=auto_set_backend_gui) @@ -5748,6 +5755,8 @@ def convert_invalid_args(args): dict["noavx2"] = True if "skiplauncher" in dict and dict["skiplauncher"]: dict["showgui"] = False + if "useswa" in dict and dict["useswa"]: + dict["noshift"] = True if ("model_param" not in dict or not dict["model_param"]) and ("model" in dict): model_value = dict["model"] #may be null, empty/non-empty string, empty/non empty array if isinstance(model_value, str) and model_value: # Non-empty string