tunnel code done (+1 squashed commits)
Squashed commits: [b4bc7d20] wip integration of trycloudflare
This commit is contained in:
parent
3b227fc704
commit
21588cefd4
2 changed files with 49 additions and 1 deletions
|
@ -1693,6 +1693,7 @@ Current version: 89
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
height: 33px;
|
height: 33px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
vertical-align: top;
|
||||||
top: 11px;
|
top: 11px;
|
||||||
width: 33px;
|
width: 33px;
|
||||||
background-size: 50% !important;
|
background-size: 50% !important;
|
||||||
|
|
49
koboldcpp.py
49
koboldcpp.py
|
@ -969,6 +969,7 @@ def show_new_gui():
|
||||||
tensor_split_str_vars = ctk.StringVar(value="")
|
tensor_split_str_vars = ctk.StringVar(value="")
|
||||||
|
|
||||||
contextshift = ctk.IntVar(value=1)
|
contextshift = ctk.IntVar(value=1)
|
||||||
|
remotetunnel = ctk.IntVar(value=0)
|
||||||
smartcontext = ctk.IntVar()
|
smartcontext = ctk.IntVar()
|
||||||
context_var = ctk.IntVar()
|
context_var = ctk.IntVar()
|
||||||
customrope_var = ctk.IntVar()
|
customrope_var = ctk.IntVar()
|
||||||
|
@ -1247,7 +1248,7 @@ def show_new_gui():
|
||||||
makeslider(quick_tab, "BLAS Batch Size:", blasbatchsize_text, blas_size_var, 0, 7, 12, set=5)
|
makeslider(quick_tab, "BLAS Batch Size:", blasbatchsize_text, blas_size_var, 0, 7, 12, set=5)
|
||||||
|
|
||||||
# quick boxes
|
# quick boxes
|
||||||
quick_boxes = {"Launch Browser": launchbrowser , "High Priority" : highpriority, "Use SmartContext":smartcontext, "Disable MMAP":disablemmap,"Use ContextShift":contextshift}
|
quick_boxes = {"Launch Browser": launchbrowser , "High Priority" : highpriority, "Use SmartContext":smartcontext, "Disable MMAP":disablemmap,"Use ContextShift":contextshift,"Remote Tunnel":remotetunnel}
|
||||||
for idx, name, in enumerate(quick_boxes):
|
for idx, name, in enumerate(quick_boxes):
|
||||||
makecheckbox(quick_tab, name, quick_boxes[name], int(idx/2) +20, idx%2)
|
makecheckbox(quick_tab, name, quick_boxes[name], int(idx/2) +20, idx%2)
|
||||||
# context size
|
# context size
|
||||||
|
@ -1337,6 +1338,7 @@ def show_new_gui():
|
||||||
makelabelentry(network_tab, "Host: ", host_var, 2, 150)
|
makelabelentry(network_tab, "Host: ", host_var, 2, 150)
|
||||||
|
|
||||||
makecheckbox(network_tab, "Multiuser Mode", multiuser_var, 3)
|
makecheckbox(network_tab, "Multiuser Mode", multiuser_var, 3)
|
||||||
|
makecheckbox(network_tab, "Remote Tunnel", remotetunnel, 3, 1)
|
||||||
|
|
||||||
# horde
|
# horde
|
||||||
makelabel(network_tab, "Horde:", 5).grid(pady=10)
|
makelabel(network_tab, "Horde:", 5).grid(pady=10)
|
||||||
|
@ -1382,6 +1384,7 @@ def show_new_gui():
|
||||||
args.nommap = disablemmap.get()==1
|
args.nommap = disablemmap.get()==1
|
||||||
args.smartcontext = smartcontext.get()==1
|
args.smartcontext = smartcontext.get()==1
|
||||||
args.noshift = contextshift.get()==0
|
args.noshift = contextshift.get()==0
|
||||||
|
args.remotetunnel = remotetunnel.get()==1
|
||||||
args.foreground = keepforeground.get()==1
|
args.foreground = keepforeground.get()==1
|
||||||
|
|
||||||
gpuchoiceidx = 0
|
gpuchoiceidx = 0
|
||||||
|
@ -1446,6 +1449,7 @@ def show_new_gui():
|
||||||
disablemmap.set(1 if "nommap" in dict and dict["nommap"] else 0)
|
disablemmap.set(1 if "nommap" in dict and dict["nommap"] else 0)
|
||||||
smartcontext.set(1 if "smartcontext" in dict and dict["smartcontext"] else 0)
|
smartcontext.set(1 if "smartcontext" in dict and dict["smartcontext"] else 0)
|
||||||
contextshift.set(0 if "noshift" in dict and dict["noshift"] else 1)
|
contextshift.set(0 if "noshift" in dict and dict["noshift"] else 1)
|
||||||
|
remotetunnel.set(1 if "remotetunnel" in dict and dict["remotetunnel"] else 0)
|
||||||
keepforeground.set(1 if "foreground" in dict and dict["foreground"] else 0)
|
keepforeground.set(1 if "foreground" in dict and dict["foreground"] else 0)
|
||||||
if "useclblast" in dict and dict["useclblast"]:
|
if "useclblast" in dict and dict["useclblast"]:
|
||||||
if clblast_option is not None:
|
if clblast_option is not None:
|
||||||
|
@ -1761,6 +1765,46 @@ def run_horde_worker(args, api_key, worker_name):
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
def setuptunnel():
|
||||||
|
# This script will help setup a cloudflared tunnel for accessing KoboldCpp over the internet
|
||||||
|
# It should work out of the box on both linux and windows
|
||||||
|
try:
|
||||||
|
import subprocess, re
|
||||||
|
|
||||||
|
def run_tunnel():
|
||||||
|
tunnelproc = None
|
||||||
|
if os.name == 'nt':
|
||||||
|
print("Starting Cloudflare Tunnel for Windows...")
|
||||||
|
tunnelproc = subprocess.Popen(f"cloudflared.exe tunnel --url localhost:{args.port}", text=True, encoding='utf-8', shell=False, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
|
||||||
|
else:
|
||||||
|
print("Starting Cloudflare Tunnel for Linux...")
|
||||||
|
tunnelproc = subprocess.Popen(f"cloudflared-linux-amd64 tunnel --url http://localhost:{args.port}", text=True, encoding='utf-8', shell=False, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
|
||||||
|
time.sleep(5)
|
||||||
|
pattern = r'https://[\w\.-]+\.trycloudflare\.com'
|
||||||
|
while True:
|
||||||
|
line = tunnelproc.stderr.readline() #cloudflare writes to stderr for some reason
|
||||||
|
if not line:
|
||||||
|
break # No more data to read
|
||||||
|
found = re.findall(pattern, line)
|
||||||
|
for x in found:
|
||||||
|
print(f"Your remote tunnel is ready, please connect to {x}")
|
||||||
|
tunnelproc.wait()
|
||||||
|
break
|
||||||
|
tunnelproc.wait()
|
||||||
|
|
||||||
|
if os.name == 'nt':
|
||||||
|
print("Downloading Cloudflare Tunnel for Windows...")
|
||||||
|
subprocess.run("curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe -o cloudflared.exe", capture_output=True, text=True, check=True, encoding='utf-8')
|
||||||
|
else:
|
||||||
|
print("Downloading Cloudflare Tunnel for Linux...")
|
||||||
|
subprocess.run("curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o 'cloudflared-linux-amd64'", capture_output=True, text=True, check=True, encoding='utf-8')
|
||||||
|
subprocess.run("chmod +x 'cloudflared-linux-amd64'", shell=True)
|
||||||
|
tunnel_thread = threading.Thread(target=run_tunnel)
|
||||||
|
tunnel_thread.start()
|
||||||
|
except Exception as ex:
|
||||||
|
print("Remote Tunnel Failed!")
|
||||||
|
return None
|
||||||
|
|
||||||
def unload_libs():
|
def unload_libs():
|
||||||
global handle
|
global handle
|
||||||
import platform
|
import platform
|
||||||
|
@ -2001,6 +2045,8 @@ def main(launch_args,start_server=True):
|
||||||
timer_thread.start()
|
timer_thread.start()
|
||||||
|
|
||||||
if start_server:
|
if start_server:
|
||||||
|
if args.remotetunnel:
|
||||||
|
setuptunnel()
|
||||||
print(f"Please connect to custom endpoint at {epurl}")
|
print(f"Please connect to custom endpoint at {epurl}")
|
||||||
asyncio.run(RunServerMultiThreaded(args.host, args.port, embedded_kailite, embedded_kcpp_docs))
|
asyncio.run(RunServerMultiThreaded(args.host, args.port, embedded_kailite, embedded_kcpp_docs))
|
||||||
else:
|
else:
|
||||||
|
@ -2048,6 +2094,7 @@ if __name__ == '__main__':
|
||||||
parser.add_argument("--tensor_split", help="For CUDA with ALL GPU set only, ratio to split tensors across multiple GPUs, space-separated list of proportions, e.g. 7 3", metavar=('[Ratios]'), type=float, nargs='+')
|
parser.add_argument("--tensor_split", help="For CUDA with ALL GPU set only, ratio to split tensors across multiple GPUs, space-separated list of proportions, e.g. 7 3", metavar=('[Ratios]'), type=float, nargs='+')
|
||||||
parser.add_argument("--onready", help="An optional shell command to execute after the model has been loaded.", type=str, default="",nargs=1)
|
parser.add_argument("--onready", help="An optional shell command to execute after the model has been loaded.", type=str, default="",nargs=1)
|
||||||
parser.add_argument("--multiuser", help="Runs in multiuser mode, which queues incoming requests instead of blocking them.", action='store_true')
|
parser.add_argument("--multiuser", help="Runs in multiuser mode, which queues incoming requests instead of blocking them.", action='store_true')
|
||||||
|
parser.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')
|
||||||
parser.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')
|
parser.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')
|
||||||
|
|
||||||
# #deprecated hidden args. they do nothing. do not use
|
# #deprecated hidden args. they do nothing. do not use
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue