mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2025-09-11 01:24:36 +00:00
allow unpacking in CLI
This commit is contained in:
parent
8e5fd6f509
commit
7f48ed39c2
1 changed files with 48 additions and 25 deletions
73
koboldcpp.py
73
koboldcpp.py
|
@ -391,6 +391,47 @@ def tryparseint(value):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
def unpack_to_dir(destpath = ""):
|
||||||
|
import shutil
|
||||||
|
srcpath = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
cliunpack = False if destpath == "" else True
|
||||||
|
print("Attempt to unpack KoboldCpp into directory...")
|
||||||
|
|
||||||
|
if not cliunpack:
|
||||||
|
from tkinter.filedialog import askdirectory
|
||||||
|
from tkinter import messagebox
|
||||||
|
destpath = askdirectory(title='Select an empty folder to unpack KoboldCpp')
|
||||||
|
if not destpath:
|
||||||
|
return
|
||||||
|
|
||||||
|
if os.path.isdir(srcpath) and os.path.isdir(destpath) and not os.listdir(destpath):
|
||||||
|
try:
|
||||||
|
if cliunpack:
|
||||||
|
print(f"KoboldCpp will be extracted to {destpath}\nThis process may take several seconds to complete.")
|
||||||
|
else:
|
||||||
|
messagebox.showinfo("Unpack Starting", f"KoboldCpp will be extracted to {destpath}\nThis process may take several seconds to complete.")
|
||||||
|
for item in os.listdir(srcpath):
|
||||||
|
s = os.path.join(srcpath, item)
|
||||||
|
d = os.path.join(destpath, item)
|
||||||
|
if os.path.isdir(s):
|
||||||
|
shutil.copytree(s, d, False, None)
|
||||||
|
else:
|
||||||
|
shutil.copy2(s, d)
|
||||||
|
if cliunpack:
|
||||||
|
print(f"KoboldCpp successfully extracted to {destpath}")
|
||||||
|
else:
|
||||||
|
messagebox.showinfo("KoboldCpp Unpack Success", f"KoboldCpp successfully extracted to {destpath}")
|
||||||
|
except Exception as e:
|
||||||
|
if cliunpack:
|
||||||
|
print(f"An error occurred while unpacking: {e}")
|
||||||
|
else:
|
||||||
|
messagebox.showerror("Error", f"An error occurred while unpacking: {e}")
|
||||||
|
else:
|
||||||
|
if cliunpack:
|
||||||
|
print(f"The target folder is not empty or invalid. Please select an empty folder.")
|
||||||
|
else:
|
||||||
|
messagebox.showwarning("Invalid Selection", "The target folder is not empty or invalid. Please select an empty folder.")
|
||||||
|
|
||||||
def load_model(model_filename):
|
def load_model(model_filename):
|
||||||
global args
|
global args
|
||||||
inputs = load_model_inputs()
|
inputs = load_model_inputs()
|
||||||
|
@ -2466,30 +2507,6 @@ def show_new_gui():
|
||||||
audio_tab = tabcontent["Audio"]
|
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.")
|
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.")
|
||||||
|
|
||||||
def unpack_to_dir():
|
|
||||||
from tkinter.filedialog import askdirectory
|
|
||||||
from tkinter import messagebox
|
|
||||||
import shutil
|
|
||||||
destpath = askdirectory(title='Select an empty folder to unpack KoboldCpp')
|
|
||||||
if not destpath:
|
|
||||||
return
|
|
||||||
srcpath = os.path.abspath(os.path.dirname(__file__))
|
|
||||||
if os.path.isdir(srcpath) and os.path.isdir(destpath) and not os.listdir(destpath):
|
|
||||||
try:
|
|
||||||
messagebox.showinfo("Unpack Starting", f"KoboldCpp will be extracted to {destpath}\nThis process may take several seconds to complete.")
|
|
||||||
for item in os.listdir(srcpath):
|
|
||||||
s = os.path.join(srcpath, item)
|
|
||||||
d = os.path.join(destpath, item)
|
|
||||||
if os.path.isdir(s):
|
|
||||||
shutil.copytree(s, d, False, None)
|
|
||||||
else:
|
|
||||||
shutil.copy2(s, d)
|
|
||||||
messagebox.showinfo("KoboldCpp Unpack Success", f"KoboldCpp extracted to {destpath}")
|
|
||||||
except Exception as e:
|
|
||||||
messagebox.showerror("Error", f"An error occurred while unpacking: {e}")
|
|
||||||
else:
|
|
||||||
messagebox.showwarning("Invalid Selection", "The folder is not empty or invalid. Please select an empty folder.")
|
|
||||||
|
|
||||||
# extra tab
|
# extra tab
|
||||||
extra_tab = tabcontent["Extra"]
|
extra_tab = tabcontent["Extra"]
|
||||||
makelabel(extra_tab, "Unpack KoboldCpp to a local directory to modify its files.", 1, 0)
|
makelabel(extra_tab, "Unpack KoboldCpp to a local directory to modify its files.", 1, 0)
|
||||||
|
@ -3279,6 +3296,10 @@ def main(launch_args,start_server=True):
|
||||||
print(f"Error cleaning up orphaned pyinstaller dirs: {e}")
|
print(f"Error cleaning up orphaned pyinstaller dirs: {e}")
|
||||||
|
|
||||||
args = launch_args
|
args = launch_args
|
||||||
|
if args.unpack:
|
||||||
|
unpack_to_dir(args.unpack)
|
||||||
|
return
|
||||||
|
|
||||||
if args.config and len(args.config)==1:
|
if args.config and len(args.config)==1:
|
||||||
if isinstance(args.config[0], str) and os.path.exists(args.config[0]):
|
if isinstance(args.config[0], str) and os.path.exists(args.config[0]):
|
||||||
loadconfigfile(args.config[0])
|
loadconfigfile(args.config[0])
|
||||||
|
@ -3756,7 +3777,7 @@ if __name__ == '__main__':
|
||||||
# print("Python version: " + sys.version)
|
# print("Python version: " + sys.version)
|
||||||
parser = argparse.ArgumentParser(description='KoboldCpp Server')
|
parser = argparse.ArgumentParser(description='KoboldCpp Server')
|
||||||
modelgroup = parser.add_mutually_exclusive_group() #we want to be backwards compatible with the unnamed positional args
|
modelgroup = parser.add_mutually_exclusive_group() #we want to be backwards compatible with the unnamed positional args
|
||||||
modelgroup.add_argument("--model", metavar=('filename'), help="Model file to load", nargs="?")
|
modelgroup.add_argument("--model", metavar=('[filename]'), help="Model file to load", type=str, default="")
|
||||||
modelgroup.add_argument("model_param", help="Model file to load (positional)", nargs="?")
|
modelgroup.add_argument("model_param", help="Model file to load (positional)", nargs="?")
|
||||||
portgroup = parser.add_mutually_exclusive_group() #we want to be backwards compatible with the unnamed positional args
|
portgroup = parser.add_mutually_exclusive_group() #we want to be backwards compatible with the unnamed positional args
|
||||||
portgroup.add_argument("--port", metavar=('[portnumber]'), help="Port to listen on", default=defaultport, type=int, action='store')
|
portgroup.add_argument("--port", metavar=('[portnumber]'), help="Port to listen on", default=defaultport, type=int, action='store')
|
||||||
|
@ -3811,6 +3832,8 @@ if __name__ == '__main__':
|
||||||
advparser.add_argument("--quantkv", help="Sets the KV cache data type quantization, 0=f16, 1=q8, 2=q4. Requires Flash Attention, and disables context shifting.",metavar=('[quantization level 0/1/2]'), type=int, choices=[0,1,2], default=0)
|
advparser.add_argument("--quantkv", help="Sets the KV cache data type quantization, 0=f16, 1=q8, 2=q4. Requires Flash Attention, and disables context shifting.",metavar=('[quantization level 0/1/2]'), type=int, choices=[0,1,2], default=0)
|
||||||
advparser.add_argument("--forceversion", help="If the model file format detection fails (e.g. rogue modified model) you can set this to override the detected format (enter desired version, e.g. 401 for GPTNeoX-Type2).",metavar=('[version]'), type=int, default=0)
|
advparser.add_argument("--forceversion", help="If the model file format detection fails (e.g. rogue modified model) you can set this to override the detected format (enter desired version, e.g. 401 for GPTNeoX-Type2).",metavar=('[version]'), type=int, default=0)
|
||||||
advparser.add_argument("--smartcontext", help="Reserving a portion of context to try processing less frequently. Outdated. Not recommended.", action='store_true')
|
advparser.add_argument("--smartcontext", help="Reserving a portion of context to try processing less frequently. Outdated. Not recommended.", action='store_true')
|
||||||
|
advparser.add_argument("--unpack", help="Extracts the file contents of the KoboldCpp binary into a target directory.", metavar=('destination'), type=str, default="")
|
||||||
|
|
||||||
|
|
||||||
hordeparsergroup = parser.add_argument_group('Horde Worker Commands')
|
hordeparsergroup = parser.add_argument_group('Horde Worker Commands')
|
||||||
hordeparsergroup.add_argument("--hordemodelname", metavar=('[name]'), help="Sets your AI Horde display model name.", default="")
|
hordeparsergroup.add_argument("--hordemodelname", metavar=('[name]'), help="Sets your AI Horde display model name.", default="")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue