From 39124828aba5c0e99eb8a36ac2710c95c908f3ee Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:29:25 +0800 Subject: [PATCH] wip multiplayer --- koboldcpp.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/koboldcpp.py b/koboldcpp.py index 766809c62..75deb68c4 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -64,6 +64,7 @@ args = None #global args runmode_untouched = True modelfile_extracted_meta = None importvars_in_progress = False +has_multiplayer = False preloaded_story = None chatcompl_adapter = None embedded_kailite = None @@ -1792,7 +1793,7 @@ Enter Prompt:
def do_GET(self): global embedded_kailite, embedded_kcpp_docs, embedded_kcpp_sdui - global maxctx, maxhordelen, friendlymodelname, KcppVersion, totalgens, preloaded_story, exitcounter, currentusergenkey, friendlysdmodelname, fullsdmodelpath, mmprojpath, password, fullwhispermodelpath + global has_multiplayer, maxctx, maxhordelen, friendlymodelname, KcppVersion, totalgens, preloaded_story, exitcounter, currentusergenkey, friendlysdmodelname, fullsdmodelpath, mmprojpath, password, fullwhispermodelpath self.path = self.path.rstrip('/') response_body = None content_type = 'application/json' @@ -1849,7 +1850,7 @@ Enter Prompt:
has_vision = (mmprojpath!="") has_password = (password!="") has_whisper = (fullwhispermodelpath!="") - response_body = (json.dumps({"result":"KoboldCpp","version":KcppVersion, "protected":has_password ,"txt2img":has_txt2img,"vision":has_vision,"transcribe":has_whisper}).encode()) + response_body = (json.dumps({"result":"KoboldCpp","version":KcppVersion, "protected":has_password ,"txt2img":has_txt2img,"vision":has_vision,"transcribe":has_whisper,"multiplayer":has_multiplayer}).encode()) elif self.path.endswith(('/api/extra/perf')): global last_req_time, start_time @@ -2516,6 +2517,7 @@ def show_gui(): port_var = ctk.StringVar(value=defaultport) host_var = ctk.StringVar(value="") multiuser_var = ctk.IntVar(value=1) + multiplayer_var = ctk.IntVar(value=has_multiplayer) horde_name_var = ctk.StringVar(value="koboldcpp") horde_gen_var = ctk.StringVar(value=maxhordelen) horde_context_var = ctk.StringVar(value=maxhordectx) @@ -3017,10 +3019,11 @@ def show_gui(): makecheckbox(network_tab, "Remote Tunnel", remotetunnel, 3, 1,tooltiptxt="Creates a trycloudflare tunnel.\nAllows you to access koboldcpp from other devices over an internet URL.") makecheckbox(network_tab, "Quiet Mode", quietmode, 4,tooltiptxt="Prevents all generation related terminal output from being displayed.") makecheckbox(network_tab, "NoCertify Mode (Insecure)", nocertifymode, 4, 1,tooltiptxt="Allows insecure SSL connections. Use this if you have cert errors and need to bypass certificate restrictions.") + makecheckbox(network_tab, "Shared Multiplayer", multiplayer_var, 5,tooltiptxt="Hosts a shared multiplayer session that others can join.") - makefileentry(network_tab, "SSL Cert:", "Select SSL cert.pem file",ssl_cert_var, 5, width=200 ,filetypes=[("Unencrypted Certificate PEM", "*.pem")], singlerow=True, singlecol=False,tooltiptxt="Select your unencrypted .pem SSL certificate file for https.\nCan be generated with OpenSSL.") - makefileentry(network_tab, "SSL Key:", "Select SSL key.pem file", ssl_key_var, 7, width=200, filetypes=[("Unencrypted Key PEM", "*.pem")], singlerow=True, singlecol=False, tooltiptxt="Select your unencrypted .pem SSL key file for https.\nCan be generated with OpenSSL.") - makelabelentry(network_tab, "Password: ", password_var, 8, 200,tooltip="Enter a password required to use this instance.\nThis key will be required for all text endpoints.\nImage endpoints are not secured.") + makefileentry(network_tab, "SSL Cert:", "Select SSL cert.pem file",ssl_cert_var, 7, width=200 ,filetypes=[("Unencrypted Certificate PEM", "*.pem")], singlerow=True, singlecol=False,tooltiptxt="Select your unencrypted .pem SSL certificate file for https.\nCan be generated with OpenSSL.") + makefileentry(network_tab, "SSL Key:", "Select SSL key.pem file", ssl_key_var, 9, width=200, filetypes=[("Unencrypted Key PEM", "*.pem")], singlerow=True, singlecol=False, tooltiptxt="Select your unencrypted .pem SSL key file for https.\nCan be generated with OpenSSL.") + makelabelentry(network_tab, "Password: ", password_var, 10, 200,tooltip="Enter a password required to use this instance.\nThis key will be required for all text endpoints.\nImage endpoints are not secured.") # Horde Tab horde_tab = tabcontent["Horde Worker"] @@ -3254,6 +3257,7 @@ def show_gui(): args.port_param = defaultport if port_var.get()=="" else int(port_var.get()) args.host = host_var.get() args.multiuser = multiuser_var.get() + args.multiplayer = (multiplayer_var.get()==1) if usehorde_var.get() != 0: args.hordemodelname = horde_name_var.get() @@ -3420,6 +3424,7 @@ def show_gui(): port_var.set(dict["port_param"] if ("port_param" in dict and dict["port_param"]) else defaultport) host_var.set(dict["host"] if ("host" in dict and dict["host"]) else "") multiuser_var.set(dict["multiuser"] if ("multiuser" in dict) else 1) + multiplayer_var.set(dict["multiplayer"] if ("multiplayer" in dict) else 0) horde_name_var.set(dict["hordemodelname"] if ("hordemodelname" in dict and dict["hordemodelname"]) else "koboldcpp") horde_context_var.set(dict["hordemaxctx"] if ("hordemaxctx" in dict and dict["hordemaxctx"]) else maxhordectx) @@ -4206,7 +4211,7 @@ def main(launch_args,start_server=True): friendlymodelname = "koboldcpp/" + sanitize_string(newmdldisplayname) # horde worker settings - global maxhordelen, maxhordectx, showdebug + global maxhordelen, maxhordectx, showdebug, has_multiplayer if args.hordemodelname and args.hordemodelname!="": friendlymodelname = args.hordemodelname if args.debugmode == 1: @@ -4224,6 +4229,9 @@ def main(launch_args,start_server=True): if args.debugmode != 1: showdebug = False + if args.multiplayer: + has_multiplayer = True + if args.highpriority: print("Setting process to Higher Priority - Use Caution") try: @@ -4667,6 +4675,7 @@ if __name__ == '__main__': advparser.add_argument("--prompt", metavar=('[prompt]'), help="Passing a prompt string triggers a direct inference, loading the model, outputs the response to stdout and exits. Can be used alone or with benchmark.", type=str, default="") advparser.add_argument("--promptlimit", help="Sets the maximum number of generated tokens, usable only with --prompt or --benchmark",metavar=('[token limit]'), type=int, default=100) advparser.add_argument("--multiuser", help="Runs in multiuser mode, which queues incoming requests instead of blocking them.", metavar=('limit'), nargs='?', const=1, type=int, default=1) + advparser.add_argument("--multiplayer", help="Hosts a shared multiplayer session that others can join.", action='store_true') advparser.add_argument("--remotetunnel", help="Uses Cloudflare to create a remote tunnel, allowing you to access koboldcpp remotely over the internet even behind a firewall.", action='store_true') advparser.add_argument("--highpriority", help="Experimental flag. If set, increases the process CPU priority, potentially speeding up generation. Use caution.", action='store_true') advparser.add_argument("--foreground", help="Windows only. Sends the terminal to the foreground every time a new prompt is generated. This helps avoid some idle slowdown issues.", action='store_true')