Merge pull request #26 from henk717/united

Merge united
This commit is contained in:
Llama
2023-03-17 23:32:27 -07:00
committed by GitHub
12 changed files with 163 additions and 88 deletions

View File

@@ -3217,7 +3217,12 @@ def load_model(use_gpu=True, gpu_layers=None, disk_layers=None, initial_load=Fal
#koboldai_vars.badwords = gettokenids("[") #koboldai_vars.badwords = gettokenids("[")
#for key in koboldai_vars.badwords: #for key in koboldai_vars.badwords:
# koboldai_vars.badwordsids.append([vocab[key]]) # koboldai_vars.badwordsids.append([vocab[key]])
# These are model specific overrides if a model has bad defaults
if koboldai_vars.model_type == "llama":
tokenizer.decode_with_prefix_space = True
tokenizer.add_bos_token = False
logger.info(f"Pipeline created: {koboldai_vars.model}") logger.info(f"Pipeline created: {koboldai_vars.model}")
else: else:
@@ -4394,11 +4399,11 @@ def get_message(msg):
emit('from_server', {'cmd': 'wiexpandfolder', 'data': msg['data']}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'wiexpandfolder', 'data': msg['data']}, broadcast=True, room="UI_1")
elif(msg['cmd'] == 'wifoldercollapsecontent'): elif(msg['cmd'] == 'wifoldercollapsecontent'):
setgamesaved(False) setgamesaved(False)
koboldai_vars.wifolders_d[msg['data']]['collapsed'] = True koboldai_vars.wifolders_d[str(msg['data'])]['collapsed'] = True
emit('from_server', {'cmd': 'wifoldercollapsecontent', 'data': msg['data']}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'wifoldercollapsecontent', 'data': msg['data']}, broadcast=True, room="UI_1")
elif(msg['cmd'] == 'wifolderexpandcontent'): elif(msg['cmd'] == 'wifolderexpandcontent'):
setgamesaved(False) setgamesaved(False)
koboldai_vars.wifolders_d[msg['data']]['collapsed'] = False koboldai_vars.wifolders_d[str(msg['data'])]['collapsed'] = False
emit('from_server', {'cmd': 'wifolderexpandcontent', 'data': msg['data']}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'wifolderexpandcontent', 'data': msg['data']}, broadcast=True, room="UI_1")
elif(msg['cmd'] == 'wiupdate'): elif(msg['cmd'] == 'wiupdate'):
setgamesaved(False) setgamesaved(False)
@@ -4410,12 +4415,12 @@ def get_message(msg):
emit('from_server', {'cmd': 'wiupdate', 'num': msg['num'], 'data': {field: koboldai_vars.worldinfo[num][field] for field in fields}}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'wiupdate', 'num': msg['num'], 'data': {field: koboldai_vars.worldinfo[num][field] for field in fields}}, broadcast=True, room="UI_1")
elif(msg['cmd'] == 'wifolderupdate'): elif(msg['cmd'] == 'wifolderupdate'):
setgamesaved(False) setgamesaved(False)
uid = str(msg['uid']) str_uid = str(msg['uid'])
fields = ("name", "collapsed") fields = ("name", "collapsed")
for field in fields: for field in fields:
if(field in msg['data'] and type(msg['data'][field]) is (str if field != "collapsed" else bool)): if(field in msg['data'] and type(msg['data'][field]) is (str if field != "collapsed" else bool)):
koboldai_vars.wifolders_d[uid][field] = msg['data'][field] koboldai_vars.wifolders_d[str_uid][field] = msg['data'][field]
emit('from_server', {'cmd': 'wifolderupdate', 'uid': msg['uid'], 'data': {field: koboldai_vars.wifolders_d[uid][field] for field in fields}}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'wifolderupdate', 'uid': msg['uid'], 'data': {field: koboldai_vars.wifolders_d[str_uid][field] for field in fields}}, broadcast=True, room="UI_1")
elif(msg['cmd'] == 'wiselon'): elif(msg['cmd'] == 'wiselon'):
setgamesaved(False) setgamesaved(False)
koboldai_vars.worldinfo[msg['data']]["selective"] = True koboldai_vars.worldinfo[msg['data']]["selective"] = True
@@ -6756,7 +6761,8 @@ def togglewimode():
# #
#==================================================================# #==================================================================#
def addwiitem(folder_uid=None): def addwiitem(folder_uid=None):
assert folder_uid is None or folder_uid in koboldai_vars.wifolders_d str_folder_uid = str(folder_uid) if folder_uid is not None else None
assert str_folder_uid is None or str_folder_uid in koboldai_vars.wifolders_d
ob = {"key": "", "keysecondary": "", "content": "", "comment": "", "folder": folder_uid, "num": len(koboldai_vars.worldinfo), "init": False, "selective": False, "constant": False} ob = {"key": "", "keysecondary": "", "content": "", "comment": "", "folder": folder_uid, "num": len(koboldai_vars.worldinfo), "init": False, "selective": False, "constant": False}
koboldai_vars.worldinfo.append(ob) koboldai_vars.worldinfo.append(ob)
while(True): while(True):
@@ -6764,9 +6770,9 @@ def addwiitem(folder_uid=None):
if(uid not in koboldai_vars.worldinfo_u): if(uid not in koboldai_vars.worldinfo_u):
break break
koboldai_vars.worldinfo_u[uid] = koboldai_vars.worldinfo[-1] koboldai_vars.worldinfo_u[uid] = koboldai_vars.worldinfo[-1]
koboldai_vars.worldinfo[-1]["uid"] = uid koboldai_vars.worldinfo[-1]["uid"] = int(uid)
if(folder_uid is not None): if(str_folder_uid is not None):
koboldai_vars.wifolders_u[folder_uid].append(koboldai_vars.worldinfo[-1]) koboldai_vars.wifolders_u[str_folder_uid].append(koboldai_vars.worldinfo[-1])
emit('from_server', {'cmd': 'addwiitem', 'data': ob}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'addwiitem', 'data': ob}, broadcast=True, room="UI_1")
#==================================================================# #==================================================================#
@@ -6779,10 +6785,10 @@ def addwifolder():
break break
ob = {"name": "", "collapsed": False} ob = {"name": "", "collapsed": False}
koboldai_vars.wifolders_d[uid] = ob koboldai_vars.wifolders_d[uid] = ob
koboldai_vars.wifolders_l.append(uid) koboldai_vars.wifolders_l.append(int(uid))
koboldai_vars.wifolders_u[uid] = [] koboldai_vars.wifolders_u[uid] = []
emit('from_server', {'cmd': 'addwifolder', 'uid': uid, 'data': ob}, broadcast=True, room="UI_1") emit('from_server', {'cmd': 'addwifolder', 'uid': int(uid), 'data': ob}, broadcast=True, room="UI_1")
addwiitem(folder_uid=uid) addwiitem(folder_uid=int(uid))
#==================================================================# #==================================================================#
# Move the WI entry with UID src so that it immediately precedes # Move the WI entry with UID src so that it immediately precedes
@@ -6886,14 +6892,14 @@ def stablesortwi():
#==================================================================# #==================================================================#
def commitwi(ar): def commitwi(ar):
for ob in ar: for ob in ar:
ob["uid"] = str(ob["uid"]) str_uid = str(ob["uid"])
koboldai_vars.worldinfo_u[ob["uid"]]["key"] = ob["key"] koboldai_vars.worldinfo_u[str_uid]["key"] = ob["key"]
koboldai_vars.worldinfo_u[ob["uid"]]["keysecondary"] = ob["keysecondary"] koboldai_vars.worldinfo_u[str_uid]["keysecondary"] = ob["keysecondary"]
koboldai_vars.worldinfo_u[ob["uid"]]["content"] = ob["content"] koboldai_vars.worldinfo_u[str_uid]["content"] = ob["content"]
koboldai_vars.worldinfo_u[ob["uid"]]["comment"] = ob.get("comment", "") koboldai_vars.worldinfo_u[str_uid]["comment"] = ob.get("comment", "")
koboldai_vars.worldinfo_u[ob["uid"]]["folder"] = ob.get("folder", None) koboldai_vars.worldinfo_u[str_uid]["folder"] = ob.get("folder", None)
koboldai_vars.worldinfo_u[ob["uid"]]["selective"] = ob["selective"] koboldai_vars.worldinfo_u[str_uid]["selective"] = ob["selective"]
koboldai_vars.worldinfo_u[ob["uid"]]["constant"] = ob.get("constant", False) koboldai_vars.worldinfo_u[str_uid]["constant"] = ob.get("constant", False)
stablesortwi() stablesortwi()
koboldai_vars.worldinfo_i = [wi for wi in koboldai_vars.worldinfo if wi["init"]] koboldai_vars.worldinfo_i = [wi for wi in koboldai_vars.worldinfo if wi["init"]]
koboldai_vars.sync_worldinfo_v1_to_v2() koboldai_vars.sync_worldinfo_v1_to_v2()
@@ -6903,20 +6909,22 @@ def commitwi(ar):
# #
#==================================================================# #==================================================================#
def deletewi(uid): def deletewi(uid):
if(uid in koboldai_vars.worldinfo_u): if(str(uid) in koboldai_vars.worldinfo_u):
setgamesaved(False) setgamesaved(False)
# Store UID of deletion request # Store UID of deletion request
koboldai_vars.deletewi = uid koboldai_vars.deletewi = uid
if(koboldai_vars.deletewi is not None): if(koboldai_vars.deletewi is not None):
if(koboldai_vars.worldinfo_u[koboldai_vars.deletewi]["folder"] is not None): str_uid = str(uid)
for i, e in enumerate(koboldai_vars.wifolders_u[koboldai_vars.worldinfo_u[koboldai_vars.deletewi]["folder"]]): if(koboldai_vars.worldinfo_u[str_uid]["folder"] is not None):
if(e is koboldai_vars.worldinfo_u[koboldai_vars.deletewi]): str_folder_uid = str(koboldai_vars.worldinfo_u[str_uid]["folder"])
koboldai_vars.wifolders_u[koboldai_vars.worldinfo_u[koboldai_vars.deletewi]["folder"]].pop(i) for i, e in enumerate(koboldai_vars.wifolders_u[str_folder_uid]):
if(e is koboldai_vars.worldinfo_u[str_uid]):
koboldai_vars.wifolders_u[str_folder_uid].pop(i)
for i, e in enumerate(koboldai_vars.worldinfo): for i, e in enumerate(koboldai_vars.worldinfo):
if(e is koboldai_vars.worldinfo_u[koboldai_vars.deletewi]): if(e is koboldai_vars.worldinfo_u[str_uid]):
del koboldai_vars.worldinfo[i] del koboldai_vars.worldinfo[i]
break break
del koboldai_vars.worldinfo_u[koboldai_vars.deletewi] del koboldai_vars.worldinfo_u[str_uid]
# Send the new WI array structure # Send the new WI array structure
sendwi() sendwi()
# And reset deletewi # And reset deletewi
@@ -6926,9 +6934,9 @@ def deletewi(uid):
# #
#==================================================================# #==================================================================#
def deletewifolder(uid): def deletewifolder(uid):
uid = str(uid) str_uid = str(uid)
del koboldai_vars.wifolders_u[uid] del koboldai_vars.wifolders_u[str_uid]
del koboldai_vars.wifolders_d[uid] del koboldai_vars.wifolders_d[str_uid]
del koboldai_vars.wifolders_l[koboldai_vars.wifolders_l.index(uid)] del koboldai_vars.wifolders_l[koboldai_vars.wifolders_l.index(uid)]
setgamesaved(False) setgamesaved(False)
# Delete uninitialized entries in the folder we're going to delete # Delete uninitialized entries in the folder we're going to delete
@@ -7438,7 +7446,7 @@ def loadJSON(json_text_or_dict, from_file=None):
ignore = koboldai_vars.calc_ai_text() ignore = koboldai_vars.calc_ai_text()
def load_story_v1(js, from_file=None): def load_story_v1(js, from_file=None):
logger.debug("Loading V1 Story") logger.info("Loading V1 Story")
logger.debug("Called from {}".format(inspect.stack()[1].function)) logger.debug("Called from {}".format(inspect.stack()[1].function))
loadpath = js['v1_loadpath'] if 'v1_loadpath' in js else koboldai_vars.savedir loadpath = js['v1_loadpath'] if 'v1_loadpath' in js else koboldai_vars.savedir
filename = js['v1_filename'] if 'v1_filename' in js else 'untitled.json' filename = js['v1_filename'] if 'v1_filename' in js else 'untitled.json'
@@ -7467,7 +7475,7 @@ def load_story_v1(js, from_file=None):
koboldai_vars.worldinfo = [] koboldai_vars.worldinfo = []
koboldai_vars.worldinfo_i = [] koboldai_vars.worldinfo_i = []
koboldai_vars.worldinfo_u = {} koboldai_vars.worldinfo_u = {}
koboldai_vars.wifolders_d = {int(k): v for k, v in js.get("wifolders_d", {}).items()} koboldai_vars.wifolders_d = {k: v for k, v in js.get("wifolders_d", {}).items()}
koboldai_vars.wifolders_l = js.get("wifolders_l", []) koboldai_vars.wifolders_l = js.get("wifolders_l", [])
koboldai_vars.wifolders_u = {uid: [] for uid in koboldai_vars.wifolders_d} koboldai_vars.wifolders_u = {uid: [] for uid in koboldai_vars.wifolders_d}
koboldai_vars.lastact = "" koboldai_vars.lastact = ""
@@ -7527,8 +7535,9 @@ def load_story_v1(js, from_file=None):
folder = "root" folder = "root"
else: else:
if 'wifolders_d' in js: if 'wifolders_d' in js:
if wi['folder'] in js['wifolders_d']: str_folder_uid = str(wi['folder'])
folder = js['wifolders_d'][wi['folder']]['name'] if str_folder_uid in js['wifolders_d']:
folder = js['wifolders_d'][str_folder_uid]['name']
else: else:
folder = "root" folder = "root"
else: else:
@@ -7567,7 +7576,7 @@ def load_story_v1(js, from_file=None):
def load_story_v2(js, from_file=None): def load_story_v2(js, from_file=None):
logger.debug("Loading V2 Story") logger.info("Loading V2 Story")
logger.debug("Called from {}".format(inspect.stack()[1].function)) logger.debug("Called from {}".format(inspect.stack()[1].function))
leave_room(session['story']) leave_room(session['story'])
session['story'] = js['story_name'] session['story'] = js['story_name']
@@ -7578,7 +7587,8 @@ def load_story_v2(js, from_file=None):
if from_file is not None and os.path.basename(from_file) != "story.json": if from_file is not None and os.path.basename(from_file) != "story.json":
#Save the file so we get a new V2 format, then move the save file into the proper directory #Save the file so we get a new V2 format, then move the save file into the proper directory
koboldai_vars.save_story() koboldai_vars.save_story()
shutil.move(from_file, koboldai_vars.save_paths.story.replace("story.json", "v2_file.json")) #We're no longer moving the original file. It'll stay in place.
#shutil.move(from_file, koboldai_vars.save_paths.story.replace("story.json", "v2_file.json"))
@@ -10510,7 +10520,7 @@ def soft_prompt_validator(soft_prompt: str):
raise ValidationError("Cannot use soft prompts with current backend.") raise ValidationError("Cannot use soft prompts with current backend.")
if any(q in soft_prompt for q in ("/", "\\")): if any(q in soft_prompt for q in ("/", "\\")):
return return
z, _, _, _, _ = fileops.checksp(soft_prompt.strip(), koboldai_vars.modeldim) z, _, _, _, _ = fileops.checksp("./softprompts/"+soft_prompt.strip(), koboldai_vars.modeldim)
if isinstance(z, int): if isinstance(z, int):
raise ValidationError("Must be a valid soft prompt name.") raise ValidationError("Must be a valid soft prompt name.")
z.close() z.close()

View File

@@ -66,7 +66,7 @@
"#@title <b><-- Select your model below and then click this to start KoboldAI</b>\n", "#@title <b><-- Select your model below and then click this to start KoboldAI</b>\n",
"#@markdown You can find a description of the models below along with instructions on how to start KoboldAI.\n", "#@markdown You can find a description of the models below along with instructions on how to start KoboldAI.\n",
"\n", "\n",
"Model = \"Nerys 13B V2\" #@param [\"Nerys 13B V2\", \"Nerybus 13B\", \"Erebus 13B\", \"Janeway 13B\", \"Shinen 13B\", \"Skein 20B\", \"Erebus 20B\", \"Skein 6B\", \"Janeway 6B\", \"Adventure 6B\", \"Shinen 6B\", \"Pygmalion 6B\", \"Lit V2 6B\", \"Lit 6B\", \"NeoX 20B\", \"OPT 13B\", \"Fairseq Dense 13B\", \"GPT-J-6B\"] {allow-input: true}\n", "Model = \"Nerys 13B V2\" #@param [\"Nerys 13B V2\", \"Nerybus 13B\", \"Erebus 13B\", \"Janeway 13B\", \"Shinen 13B\", \"Skein 20B\", \"Erebus 20B\", \"Skein 6B\", \"Janeway 6B\", \"Adventure 6B\", \"Shinen 6B\", \"Pygmalion 6B\", \"Pygmalion 6B Dev\", \"Lit V2 6B\", \"Lit 6B\", \"NeoX 20B\", \"OPT 13B\", \"Fairseq Dense 13B\", \"GPT-J-6B\"] {allow-input: true}\n",
"Version = \"Official\" #@param [\"Official\", \"United\"] {allow-input: true}\n", "Version = \"Official\" #@param [\"Official\", \"United\"] {allow-input: true}\n",
"Provider = \"Cloudflare\" #@param [\"Localtunnel\", \"Cloudflare\"]\n", "Provider = \"Cloudflare\" #@param [\"Localtunnel\", \"Cloudflare\"]\n",
"use_google_drive = True #@param {type:\"boolean\"}\n", "use_google_drive = True #@param {type:\"boolean\"}\n",
@@ -89,6 +89,8 @@
" if not os.path.exists(\"/content/drive/MyDrive/\"):\n", " if not os.path.exists(\"/content/drive/MyDrive/\"):\n",
" os.mkdir(\"/content/drive/MyDrive/\")\n", " os.mkdir(\"/content/drive/MyDrive/\")\n",
"\n", "\n",
"Revision = \"\"\n",
"\n",
"if Model == \"Janeway 13B\":\n", "if Model == \"Janeway 13B\":\n",
" Model = \"KoboldAI/fairseq-dense-13B-Janeway\"\n", " Model = \"KoboldAI/fairseq-dense-13B-Janeway\"\n",
" path = \"\"\n", " path = \"\"\n",
@@ -177,7 +179,7 @@
"else:\n", "else:\n",
" tunnel = \"\"\n", " tunnel = \"\"\n",
"\n", "\n",
"!wget https://koboldai.org/ckds -O - | bash /dev/stdin $path$download -m $Model -g $Version $tunnel" "!wget https://koboldai.org/ckds -O - | bash /dev/stdin $path$download -m $Model -g $Version $tunnel $Revision"
] ]
}, },
{ {

View File

@@ -1,6 +1,10 @@
@echo off @echo off
cd /D %~dp0 cd /D %~dp0
:Isolation
SET CONDA_SHLVL= SET CONDA_SHLVL=
SET PYTHONNOUSERSITE=1
SET PYTHONPATH=
TITLE CMD for KoboldAI Runtime TITLE CMD for KoboldAI Runtime
SET /P M=<loader.settings SET /P M=<loader.settings

View File

@@ -5,12 +5,13 @@ channels:
- defaults - defaults
dependencies: dependencies:
- colorama - colorama
- flask-socketio - flask-socketio=5.3.2
- flask-session - flask-session=0.4.0
- python-socketio=5.7.2
- pytorch=1.11.* - pytorch=1.11.*
- python=3.8.* - python=3.8.*
- cudatoolkit=11.1 - cudatoolkit=11.1
- eventlet - eventlet=0.33.3
- dnspython=2.2.1 - dnspython=2.2.1
- markdown - markdown
- bleach=4.1.0 - bleach=4.1.0

View File

@@ -4,10 +4,11 @@ channels:
- defaults - defaults
dependencies: dependencies:
- colorama - colorama
- flask-socketio - flask-socketio=5.3.2
- flask-session - flask-session=0.4.0
- python-socketio=5.7.2
- python=3.8.* - python=3.8.*
- eventlet - eventlet=0.33.3
- dnspython=2.2.1 - dnspython=2.2.1
- markdown - markdown
- bleach=4.1.0 - bleach=4.1.0

View File

@@ -825,7 +825,7 @@ gensettingstf = [
"max": 1, "max": 1,
"step": 1, "step": 1,
"default": 0, "default": 0,
"tooltip": "If enabled a specfic seed will be used for the random generator on text generation", "tooltip": "If enabled, a specific seed will be used for the random generator on text generation",
"menu_path": "Settings", "menu_path": "Settings",
"sub_path": "Other", "sub_path": "Other",
"classname": "system", "classname": "system",

View File

@@ -0,0 +1,41 @@
@echo off
cd /D %~dp0
SET CONDA_SHLVL=
TITLE KoboldAI - Git Transformers Installer
ECHO This script will replace the Transformers version with the latest Git Transformers which may contain breaking changes.
ECHO If you wish to return to the approved version of transformers you can run the install_requirements.bat script or KoboldAI Updater.
pause
SET /P M=<loader.settings
IF %M%==1 GOTO drivemap
IF %M%==2 GOTO subfolder
IF %M%==3 GOTO drivemap_B
:subfolder
ECHO Runtime launching in subfolder mode
SET TEMP=%~DP0MINICONDA3
SET TMP=%~DP0MINICONDA3
call miniconda3\condabin\activate
pip install git+https://github.com/huggingface/transformers
cmd /k
:drivemap
ECHO Runtime launching in K: drive mode
subst /D K: >nul
subst K: miniconda3 >nul
SET TEMP=K:\
SET TMP=K:\
call K:\python\condabin\activate
pip install git+https://github.com/huggingface/transformers
cmd /k
:drivemap_B
ECHO Runtime launching in B: drive mode
subst /D B: >nul
subst B: miniconda3 >nul
SET TEMP=B:\
SET TMP=B:\
call B:\python\condabin\activate
pip install git+https://github.com/huggingface/transformers
cmd /k

View File

@@ -968,9 +968,9 @@ class story_settings(settings):
else: else:
logger.warning(f"Story mismatch in v2 migration. Existing file had story id {v2j['story_id']} but we have {self.story_id}") logger.warning(f"Story mismatch in v2 migration. Existing file had story id {v2j['story_id']} but we have {self.story_id}")
self.gamesaved = True
with open(self.save_paths.story, "w", encoding="utf-8") as file: with open(self.save_paths.story, "w", encoding="utf-8") as file:
file.write(self.to_json()) file.write(self.to_json())
self.gamesaved = True
def update_story_path_structure(self, path: str) -> None: def update_story_path_structure(self, path: str) -> None:
# Upon loading a file, makes directories that are required for certain # Upon loading a file, makes directories that are required for certain
@@ -1202,12 +1202,12 @@ class system_settings(settings):
local_only_variables = ['lua_state', 'lua_logname', 'lua_koboldbridge', 'lua_kobold', local_only_variables = ['lua_state', 'lua_logname', 'lua_koboldbridge', 'lua_kobold',
'lua_koboldcore', 'regex_sl', 'acregex_ai', 'acregex_ui', 'comregex_ai', 'lua_koboldcore', 'regex_sl', 'acregex_ai', 'acregex_ui', 'comregex_ai',
'comregex_ui', 'sp', '_horde_pid', 'inference_config', 'image_pipeline', 'comregex_ui', 'sp', '_horde_pid', 'inference_config', 'image_pipeline',
'summarizer', 'summary_tokenizer', 'tts_model'] 'summarizer', 'summary_tokenizer', 'tts_model', 'rng_states']
no_save_variables = ['lua_state', 'lua_logname', 'lua_koboldbridge', 'lua_kobold', no_save_variables = ['lua_state', 'lua_logname', 'lua_koboldbridge', 'lua_kobold',
'lua_koboldcore', 'sp', 'sp_length', '_horde_pid', 'horde_share', 'aibusy', 'lua_koboldcore', 'sp', 'sp_length', '_horde_pid', 'horde_share', 'aibusy',
'serverstarted', 'inference_config', 'image_pipeline', 'summarizer', 'serverstarted', 'inference_config', 'image_pipeline', 'summarizer',
'summary_tokenizer', 'use_colab_tpu', 'noai', 'disable_set_aibusy', 'cloudflare_link', 'tts_model', 'summary_tokenizer', 'use_colab_tpu', 'noai', 'disable_set_aibusy', 'cloudflare_link', 'tts_model',
'generating_image', 'bit_8_available', 'host', 'hascuda', 'usegpu'] 'generating_image', 'bit_8_available', 'host', 'hascuda', 'usegpu', 'rng_states']
settings_name = "system" settings_name = "system"
def __init__(self, socketio, koboldai_var): def __init__(self, socketio, koboldai_var):
self._socketio = socketio self._socketio = socketio
@@ -1263,6 +1263,7 @@ class system_settings(settings):
self.disable_output_formatting = False self.disable_output_formatting = False
self.full_determinism = False # Whether or not full determinism is enabled self.full_determinism = False # Whether or not full determinism is enabled
self.seed_specified = False # Whether or not the current RNG seed was specified by the user (in their settings file) self.seed_specified = False # Whether or not the current RNG seed was specified by the user (in their settings file)
self.rng_states = {} # creates an empty dictionary to store the random number generator (RNG) states for a given seed, which is used to restore the RNG state later on
self.seed = None # The current RNG seed (as an int), or None if unknown self.seed = None # The current RNG seed (as an int), or None if unknown
self.alt_gen = False # Use the calc_ai_text method for generating text to go to the AI self.alt_gen = False # Use the calc_ai_text method for generating text to go to the AI
self.theme_list = [".".join(f.split(".")[:-1]) for f in os.listdir("./themes") if os.path.isfile(os.path.join("./themes", f))] self.theme_list = [".".join(f.split(".")[:-1]) for f in os.listdir("./themes") if os.path.isfile(os.path.join("./themes", f))]
@@ -1504,7 +1505,7 @@ class KoboldStoryRegister(object):
else: else:
self.actions[i]["Probabilities"][token_num][token_option]["Used"] = False self.actions[i]["Probabilities"][token_num][token_option]["Used"] = False
if "Options" in self.actions[i]: if "Options" in self.actions[i]:
for j in range(len(self.actions[i]["Options"])): for j in reversed(range(len(self.actions[i]["Options"]))):
if self.actions[i]["Options"][j]["text"] == text: if self.actions[i]["Options"][j]["text"] == text:
del self.actions[i]["Options"][j] del self.actions[i]["Options"][j]
if old_text != "": if old_text != "":
@@ -2259,6 +2260,8 @@ class KoboldWorldInfo(object):
self._socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2") self._socketio.emit("world_info_folder", {x: self.world_info_folder[x] for x in self.world_info_folder}, broadcast=True, room="UI_2")
def delete_folder(self, folder): def delete_folder(self, folder):
if folder == "root":
raise Exception("removing the root folder is not supported")
keys = [key for key in self.world_info] keys = [key for key in self.world_info]
for key in keys: for key in keys:
if self.world_info[key]['folder'] == folder: if self.world_info[key]['folder'] == folder:
@@ -2272,7 +2275,7 @@ class KoboldWorldInfo(object):
def add_item_to_folder(self, uid, folder, before=None): def add_item_to_folder(self, uid, folder, before=None):
if uid in self.world_info: if uid in self.world_info:
#fiirst we need to remove the item from whatever folder it's in #first we need to remove the item from whatever folder it's in
for temp in self.world_info_folder: for temp in self.world_info_folder:
if uid in self.world_info_folder[temp]: if uid in self.world_info_folder[temp]:
self.world_info_folder[temp].remove(uid) self.world_info_folder[temp].remove(uid)
@@ -2357,7 +2360,8 @@ class KoboldWorldInfo(object):
raise raise
if folder not in self.world_info_folder: if folder not in self.world_info_folder:
self.world_info_folder[folder] = [] self.world_info_folder[folder] = []
self.world_info_folder[folder].append(uid) if uid not in self.world_info_folder[folder]:
self.world_info_folder[folder].append(uid)
self.story_settings.gamesaved = False self.story_settings.gamesaved = False
if sync: if sync:
self.sync_world_info_to_old_format() self.sync_world_info_to_old_format()
@@ -2442,8 +2446,11 @@ class KoboldWorldInfo(object):
self._socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2") self._socketio.emit("world_info_entry", self.world_info[uid], broadcast=True, room="UI_2")
def delete(self, uid): def delete(self, uid):
if self.world_info[uid]['folder'] == "root":
raise Exception("removing the root folder is not supported")
del self.world_info[uid] del self.world_info[uid]
try: try:
os.remove(os.path.join(self._koboldai_vars.save_paths.wi_images, str(uid))) os.remove(os.path.join(self._koboldai_vars.save_paths.wi_images, str(uid)))
except FileNotFoundError: except FileNotFoundError:
@@ -2463,6 +2470,8 @@ class KoboldWorldInfo(object):
ignore = self._koboldai_vars.calc_ai_text() ignore = self._koboldai_vars.calc_ai_text()
def rename_folder(self, old_folder, folder): def rename_folder(self, old_folder, folder):
if old_folder == "root":
raise Exception("renaming the root folder is not supported")
self.story_settings.gamesaved = False self.story_settings.gamesaved = False
if folder in self.world_info_folder: if folder in self.world_info_folder:
i=0 i=0
@@ -2536,14 +2545,10 @@ class KoboldWorldInfo(object):
file.write(base64.b64decode(image_b64)) file.write(base64.b64decode(image_b64))
data["entries"] = {k: self.upgrade_entry(v) for k,v in data["entries"].items()} data["entries"] = {k: self.upgrade_entry(v) for k,v in data["entries"].items()}
if folder is None:
self.world_info_folder = data['folders']
#Add the item #Add the item
start_time = time.time() start_time = time.time()
for uid, item in data['entries'].items(): for uid, item in data['entries'].items():
self.add_item(item['title'] if 'title' in item else item['key'][0], self.add_item(item['title'] if 'title' in item else item['key'][0],
item['key'] if 'key' in item else [], item['key'] if 'key' in item else [],
item['keysecondary'] if 'keysecondary' in item else [], item['keysecondary'] if 'keysecondary' in item else [],
@@ -2555,10 +2560,9 @@ class KoboldWorldInfo(object):
use_wpp=item['use_wpp'] if 'use_wpp' in item else False, use_wpp=item['use_wpp'] if 'use_wpp' in item else False,
wpp=item['wpp'] if 'wpp' in item else {'name': "", 'type': "", 'format': "W++", 'attributes': {}}, wpp=item['wpp'] if 'wpp' in item else {'name': "", 'type': "", 'format': "W++", 'attributes': {}},
object_type=item.get("object_type"), object_type=item.get("object_type"),
v1_uid=item.get("v1_uid"),
recalc=False, sync=False) recalc=False, sync=False)
if folder is None:
#self.world_info = {int(x): data['entries'][x] for x in data['entries']}
self.world_info_folder = data['folders']
logger.debug("Load World Info took {}s".format(time.time()-start_time)) logger.debug("Load World Info took {}s".format(time.time()-start_time))
try: try:
start_time = time.time() start_time = time.time()
@@ -2577,50 +2581,52 @@ class KoboldWorldInfo(object):
for folder in self.world_info_folder: for folder in self.world_info_folder:
folder_entries[folder] = i folder_entries[folder] = i
i-=1 i-=1
#self.wifolders_l = [] # List of World Info folder UIDs
self.story_settings.wifolders_l = [folder_entries[x] for x in folder_entries if x != "root"]
#self.worldinfo_i = [] # List of World Info key/value objects sans uninitialized entries #self.worldinfo_i = [] # List of World Info key/value objects sans uninitialized entries
self.story_settings.worldinfo_i = [{ self.story_settings.worldinfo_i = [{
"comment": self.world_info[x]['comment'],
"constant": self.world_info[x]['constant'],
"content": self.world_info[x]['content'],
"folder": folder_entries[self.world_info[x]['folder']],
"init": True,
"key": ",".join(self.world_info[x]['key']), "key": ",".join(self.world_info[x]['key']),
"keysecondary": ",".join(self.world_info[x]['keysecondary']), "keysecondary": ",".join(self.world_info[x]['keysecondary']),
"content": self.world_info[x]['content'],
"comment": self.world_info[x]['comment'],
"folder": folder_entries[self.world_info[x]['folder']] if self.world_info[x]['folder'] != "root" else None,
"num": x, "num": x,
"init": True,
"selective": len(self.world_info[x]['keysecondary'])>0, "selective": len(self.world_info[x]['keysecondary'])>0,
"constant": self.world_info[x]['constant'],
"uid": self.world_info[x]['uid'] if 'v1_uid' not in self.world_info[x] or self.world_info[x]['v1_uid'] is None else self.world_info[x]['v1_uid'] "uid": self.world_info[x]['uid'] if 'v1_uid' not in self.world_info[x] or self.world_info[x]['v1_uid'] is None else self.world_info[x]['v1_uid']
} for x in self.world_info] } for x in self.world_info]
#self.worldinfo = [] # List of World Info key/value objects #self.worldinfo = [] # List of World Info key/value objects
self.story_settings.worldinfo = [x for x in self.story_settings.worldinfo_i] self.story_settings.worldinfo = [x for x in self.story_settings.worldinfo_i]
#We have to have an uninitialized blank entry for every folder or the old method craps out #We have to have an uninitialized blank entry for every folder or the old method craps out
for folder in folder_entries: for folder in folder_entries:
self.story_settings.worldinfo.append({ self.story_settings.worldinfo.append({
"comment": "",
"constant": False,
"content": "",
"folder": folder_entries[folder],
"init": False,
"key": "", "key": "",
"keysecondary": "", "keysecondary": "",
"content": "",
"comment": "",
"folder": folder_entries[folder] if folder != "root" else None,
"num": (0 if len(self.world_info) == 0 else max(self.world_info))+(folder_entries[folder]*-1), "num": (0 if len(self.world_info) == 0 else max(self.world_info))+(folder_entries[folder]*-1),
"init": False,
"selective": False, "selective": False,
"constant": False,
"uid": folder_entries[folder] "uid": folder_entries[folder]
}) })
mapping = {uid: index for index, uid in enumerate(self.story_settings.wifolders_l)}
self.story_settings.worldinfo.sort(key=lambda x: mapping[x["folder"]] if x["folder"] is not None else float("inf"))
#self.wifolders_d = {} # Dictionary of World Info folder UID-info pairs #self.wifolders_d = {} # Dictionary of World Info folder UID-info pairs
self.story_settings.wifolders_d = {folder_entries[x]: {'collapsed': False, 'name': x} for x in folder_entries} self.story_settings.wifolders_d = {str(folder_entries[x]): {'name': x, 'collapsed': False} for x in folder_entries if x != "root"}
#self.worldinfo_u = {} # Dictionary of World Info UID - key/value pairs #self.worldinfo_u = {} # Dictionary of World Info UID - key/value pairs
self.story_settings.worldinfo_u = {x['uid']: x for x in self.story_settings.worldinfo} self.story_settings.worldinfo_u = {str(y["uid"]): y for x in folder_entries for y in self.story_settings.worldinfo if y["folder"] == (folder_entries[x] if x != "root" else None)}
#self.wifolders_l = [] # List of World Info folder UIDs
self.story_settings.wifolders_l = [folder_entries[x] for x in folder_entries]
#self.wifolders_u = {} # Dictionary of pairs of folder UID - list of WI UID #self.wifolders_u = {} # Dictionary of pairs of folder UID - list of WI UID
self.story_settings.wifolders_u = {folder_entries[x]: [y for y in self.story_settings.worldinfo if y['folder'] == x] for x in folder_entries} self.story_settings.wifolders_u = {str(folder_entries[x]): [y for y in self.story_settings.worldinfo if y['folder'] == folder_entries[x]] for x in folder_entries if x != "root"}
def reset_used_in_game(self): def reset_used_in_game(self):
for key in self.world_info: for key in self.world_info:

View File

@@ -1,6 +1,10 @@
@echo off @echo off
cd /D %~dp0 cd /D %~dp0
:Isolation
SET CONDA_SHLVL= SET CONDA_SHLVL=
SET PYTHONNOUSERSITE=1
SET PYTHONPATH=
rmdir /S /Q flask_session rmdir /S /Q flask_session

View File

@@ -1,13 +1,14 @@
transformers==4.25.1 transformers==4.25.1
huggingface_hub==0.12.1 huggingface_hub==0.12.1
Flask Flask==2.2.3
Flask-SocketIO Flask-SocketIO==5.3.2
python-socketio==5.7.2
requests requests
torch >= 1.9, < 1.13 torch >= 1.9, < 1.13
flask-cloudflared==0.0.10 flask-cloudflared==0.0.10
flask-ngrok flask-ngrok
flask-cors flask-cors
eventlet eventlet==0.33.3
dnspython==2.2.1 dnspython==2.2.1
lupa==1.10 lupa==1.10
markdown markdown
@@ -15,7 +16,7 @@ bleach==4.1.0
sentencepiece sentencepiece
protobuf protobuf
accelerate accelerate
flask_session flask-session==0.4.0
marshmallow>=3.13 marshmallow>=3.13
apispec-webframeworks apispec-webframeworks
loguru loguru

View File

@@ -9,17 +9,18 @@ transformers == 4.25.1
huggingface_hub==0.12.1 huggingface_hub==0.12.1
progressbar2 progressbar2
git+https://github.com/VE-FORBRYDERNE/mesh-transformer-jax@ck git+https://github.com/VE-FORBRYDERNE/mesh-transformer-jax@ck
flask Flask==2.2.3
Flask-SocketIO Flask-SocketIO==5.3.2
python-socketio==5.7.2
flask-cloudflared==0.0.10 flask-cloudflared==0.0.10
flask-ngrok flask-ngrok
flask-cors flask-cors
eventlet eventlet==0.33.3
dnspython==2.2.1 dnspython==2.2.1
lupa==1.10 lupa==1.10
markdown markdown
bleach==4.1.0 bleach==4.1.0
flask-session flask-session==0.4.0
marshmallow>=3.13 marshmallow>=3.13
apispec-webframeworks apispec-webframeworks
loguru loguru

View File

@@ -1,6 +1,10 @@
@echo off @echo off
cd /d %~dp0 cd /d %~dp0
:Isolation
SET CONDA_SHLVL= SET CONDA_SHLVL=
SET PYTHONNOUSERSITE=1
SET PYTHONPATH=
TITLE KoboldAI - Updater TITLE KoboldAI - Updater
SET /P M=<loader.settings SET /P M=<loader.settings