From 90b5dab721caa57162e50c2e11bb2583ed9d1c2b Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 08:05:08 -0400 Subject: [PATCH 01/13] Fix --- aiserver.py | 10 ++++++---- koboldai_settings.py | 3 +++ utils.py | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/aiserver.py b/aiserver.py index c65a9e84..480bbf37 100644 --- a/aiserver.py +++ b/aiserver.py @@ -1618,8 +1618,8 @@ def get_cluster_models(msg): # If the client settings file doesn't exist, create it # Write API key to file os.makedirs('settings', exist_ok=True) - if path.exists(get_config_filename(koboldai_vars.model_selected)): - with open(get_config_filename(koboldai_vars.model_selected), "r") as file: + if path.exists(get_config_filename(model)): + with open(get_config_filename(model), "r") as file: js = json.load(file) if 'online_model' in js: online_model = js['online_model'] @@ -1630,7 +1630,7 @@ def get_cluster_models(msg): changed=True if changed: js={} - with open(get_config_filename(koboldai_vars.model_selected), "w") as file: + with open(get_config_filename(model), "w") as file: js["apikey"] = koboldai_vars.oaiapikey file.write(json.dumps(js, indent=3)) @@ -1674,7 +1674,7 @@ def patch_transformers_download(): if bar != "": try: - print(bar, end="\r") + print(bar, end="") emit('from_server', {'cmd': 'model_load_status', 'data': bar.replace(" ", " ")}, broadcast=True, room="UI_1") eventlet.sleep(seconds=0) except: @@ -1712,10 +1712,12 @@ def patch_transformers_download(): desc=f"Downloading {file_name}" if file_name is not None else "Downloading", file=Send_to_socketio(), ) + koboldai_vars.total_download_chunks = total for chunk in r.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks if url[-11:] != 'config.json': progress.update(len(chunk)) + koboldai_vars.downloaded_chunks += len(chunk) temp_file.write(chunk) if url[-11:] != 'config.json': progress.close() diff --git a/koboldai_settings.py b/koboldai_settings.py index a68ecbbe..c91253cd 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -493,6 +493,9 @@ class model_settings(settings): if self.tqdm.format_dict['rate'] is not None: self.tqdm_rem_time = str(datetime.timedelta(seconds=int(float(self.total_layers-self.loaded_layers)/self.tqdm.format_dict['rate']))) #Setup TQDP for model downloading + elif name == "total_download_chunks" and 'tqdm' in self.__dict__: + self.tqdm.reset(total=value) + self.tqdm_progress = 0 elif name == "downloaded_chunks" and 'tqdm' in self.__dict__: if value == 0: self.tqdm.reset(total=self.total_download_chunks) diff --git a/utils.py b/utils.py index c49a76b0..d4af0b65 100644 --- a/utils.py +++ b/utils.py @@ -211,7 +211,8 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = done = True break if bar is None: - bar = tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) + bar = tqdm.tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) + koboldai_vars.total_download_chunks = total_length visited = set() for x in r: filename = x["files"][0]["path"] @@ -220,7 +221,8 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = for k, v in lengths.items(): if k not in visited: lengths[k] = (v[1], v[1]) - bar.n = sum(v[0] for v in lengths.values()) + koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) + bar.n = koboldai_vars.downloaded_chunks bar.update() time.sleep(0.1) path = f.name From ca3db6a05c8690263f3ee32ffc5da9b686457f0e Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 08:56:39 -0400 Subject: [PATCH 02/13] Fix for Horde Mode --- aiserver.py | 2 +- static/koboldai.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aiserver.py b/aiserver.py index 480bbf37..1fe206af 100644 --- a/aiserver.py +++ b/aiserver.py @@ -2173,7 +2173,7 @@ def load_model(use_gpu=True, gpu_layers=None, disk_layers=None, initial_load=Fal if not utils.HAS_ACCELERATE: disk_layers = None koboldai_vars.reset_model() - koboldai_vars.cluster_requested_models = online_model + koboldai_vars.cluster_requested_models = [online_model] if isinstance(online_model, str) else online_model koboldai_vars.noai = False if not use_breakmodel_args: set_aibusy(True) diff --git a/static/koboldai.js b/static/koboldai.js index 24202c12..7d85e6c7 100644 --- a/static/koboldai.js +++ b/static/koboldai.js @@ -1429,8 +1429,8 @@ function load_model() { for (item of document.getElementById("oaimodel").selectedOptions) { selected_models.push(item.value); } - if (selected_models == []) { - selected_models = ""; + if (selected_models == ['']) { + selected_models = []; } else if (selected_models.length == 1) { selected_models = selected_models[0]; } From f5ce00622b85be7adee8cb8656db2573103e20e7 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:21:08 -0400 Subject: [PATCH 03/13] Fix for UI2 download status bar --- aiserver.py | 2 +- utils.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/aiserver.py b/aiserver.py index 1fe206af..b594dbc0 100644 --- a/aiserver.py +++ b/aiserver.py @@ -1674,7 +1674,7 @@ def patch_transformers_download(): if bar != "": try: - print(bar, end="") + print(bar, end="\n") emit('from_server', {'cmd': 'model_load_status', 'data': bar.replace(" ", " ")}, broadcast=True, room="UI_1") eventlet.sleep(seconds=0) except: diff --git a/utils.py b/utils.py index d4af0b65..661d2bbd 100644 --- a/utils.py +++ b/utils.py @@ -207,6 +207,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = if bar is not None: bar.n = bar.total bar.close() + koboldai_vars.downloaded_chunks = total p.terminate() done = True break @@ -221,7 +222,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = for k, v in lengths.items(): if k not in visited: lengths[k] = (v[1], v[1]) - koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) + koboldai_vars.downloaded_chunks += sum(v[0] for v in lengths.values()) bar.n = koboldai_vars.downloaded_chunks bar.update() time.sleep(0.1) From d1c56bc6b854a85baab86385f5aef7b36737def0 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:28:33 -0400 Subject: [PATCH 04/13] Colab Fix --- utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils.py b/utils.py index 661d2bbd..ad4f2b7a 100644 --- a/utils.py +++ b/utils.py @@ -190,6 +190,7 @@ class Send_to_socketio(object): def _download_with_aria2(aria2_config: str, total_length: int, directory: str = ".", user_agent=None, force_download=False, use_auth_token=None): import transformers lengths = {} + path = None s = requests.Session() s.mount("http://", requests.adapters.HTTPAdapter(max_retries=requests.adapters.Retry(total=120, backoff_factor=1))) bar = None @@ -232,8 +233,9 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = raise e finally: try: - if os.path.exists(path): - os.remove(path) + if path is not None: + if os.path.exists(path): + os.remove(path) except OSError: pass code = p.wait() From 48101f492d1eaab26ffd98a8166a4b4c43e70314 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:30:30 -0400 Subject: [PATCH 05/13] Colab Fix --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index ad4f2b7a..3b05e1d0 100644 --- a/utils.py +++ b/utils.py @@ -213,7 +213,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = done = True break if bar is None: - bar = tqdm.tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) + bar = tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) koboldai_vars.total_download_chunks = total_length visited = set() for x in r: From cd9e4175a9d49240f8b0a5b891c46af7266fa582 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:31:37 -0400 Subject: [PATCH 06/13] Colab Fix --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 3b05e1d0..0ac311db 100644 --- a/utils.py +++ b/utils.py @@ -223,7 +223,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = for k, v in lengths.items(): if k not in visited: lengths[k] = (v[1], v[1]) - koboldai_vars.downloaded_chunks += sum(v[0] for v in lengths.values()) + koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) bar.n = koboldai_vars.downloaded_chunks bar.update() time.sleep(0.1) From 2d058afe3b886ec0c9bdbadf08542bad83a1f689 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:37:31 -0400 Subject: [PATCH 07/13] Colab Fix --- utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/utils.py b/utils.py index 0ac311db..10e2bffc 100644 --- a/utils.py +++ b/utils.py @@ -224,6 +224,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = if k not in visited: lengths[k] = (v[1], v[1]) koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) + koboldai_vars.total_download_chunks = sum(v[1] for v in lengths.values()) bar.n = koboldai_vars.downloaded_chunks bar.update() time.sleep(0.1) From cb5204731c2f9a8e495e26160e05616de6110638 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:38:03 -0400 Subject: [PATCH 08/13] Colab Fix --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 10e2bffc..cb3721c6 100644 --- a/utils.py +++ b/utils.py @@ -208,7 +208,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = if bar is not None: bar.n = bar.total bar.close() - koboldai_vars.downloaded_chunks = total + koboldai_vars.downloaded_chunks = bar.total p.terminate() done = True break From 1a31e0994cf96e2f6a19724a0065d7c9f252ba27 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:40:49 -0400 Subject: [PATCH 09/13] Colab Fix --- koboldai_settings.py | 2 +- utils.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/koboldai_settings.py b/koboldai_settings.py index c91253cd..1989ce62 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -502,7 +502,7 @@ class model_settings(settings): self.tqdm_progress = 0 else: self.tqdm.update(value-old_value) - self.tqdm_progress = round(float(self.downloaded_chunks)/float(self.total_download_chunks)*100, 1) + self.tqdm_progress = 0 if self.total_download_chunks==0 else round(float(self.downloaded_chunks)/float(self.total_download_chunks)*100, 1) if self.tqdm.format_dict['rate'] is not None: self.tqdm_rem_time = str(datetime.timedelta(seconds=int(float(self.total_download_chunks-self.downloaded_chunks)/self.tqdm.format_dict['rate']))) diff --git a/utils.py b/utils.py index cb3721c6..91fc5abc 100644 --- a/utils.py +++ b/utils.py @@ -212,10 +212,6 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = p.terminate() done = True break - if bar is None: - bar = tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) - koboldai_vars.total_download_chunks = total_length - visited = set() for x in r: filename = x["files"][0]["path"] lengths[filename] = (int(x["completedLength"]), int(x["totalLength"])) @@ -223,8 +219,11 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = for k, v in lengths.items(): if k not in visited: lengths[k] = (v[1], v[1]) + if bar is None: + bar = tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) + koboldai_vars.total_download_chunks = sum(v[1] for v in lengths.values()) + visited = set() koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) - koboldai_vars.total_download_chunks = sum(v[1] for v in lengths.values()) bar.n = koboldai_vars.downloaded_chunks bar.update() time.sleep(0.1) From 5bfe6fd73f5be060bccdcdf85f70fd49c97baf19 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:43:45 -0400 Subject: [PATCH 10/13] Colab Fix --- aiserver.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aiserver.py b/aiserver.py index b594dbc0..7c02c5ed 100644 --- a/aiserver.py +++ b/aiserver.py @@ -10921,6 +10921,7 @@ if __name__ == "__main__": try: cloudflare = str(localtunnel.stdout.readline()) cloudflare = (re.search("(?Phttps?:\/\/[^\s]+loca.lt)", cloudflare).group("url")) + koboldai_vars.cloudflare_link = cloudflare break except: attempts += 1 @@ -10930,12 +10931,15 @@ if __name__ == "__main__": print("LocalTunnel could not be created, falling back to cloudflare...") from flask_cloudflared import _run_cloudflared cloudflare = _run_cloudflared(port) + koboldai_vars.cloudflare_link = cloudflare elif(args.ngrok): from flask_ngrok import _run_ngrok cloudflare = _run_ngrok() + koboldai_vars.cloudflare_link = cloudflare elif(args.remote): from flask_cloudflared import _run_cloudflared cloudflare = _run_cloudflared(port) + koboldai_vars.cloudflare_link = cloudflare if(args.localtunnel or args.ngrok or args.remote): with open('cloudflare.log', 'w') as cloudflarelog: cloudflarelog.write("KoboldAI has finished loading and is available at the following link : " + cloudflare) From 4d8df761bac64ece8c8d530093c70c928cc04297 Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 09:45:38 -0400 Subject: [PATCH 11/13] Colab Fix --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 91fc5abc..84984f32 100644 --- a/utils.py +++ b/utils.py @@ -212,6 +212,7 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = p.terminate() done = True break + visited = set() for x in r: filename = x["files"][0]["path"] lengths[filename] = (int(x["completedLength"]), int(x["totalLength"])) @@ -222,7 +223,6 @@ def _download_with_aria2(aria2_config: str, total_length: int, directory: str = if bar is None: bar = tqdm(total=total_length, desc=f"[aria2] Downloading model", unit="B", unit_scale=True, unit_divisor=1000) koboldai_vars.total_download_chunks = sum(v[1] for v in lengths.values()) - visited = set() koboldai_vars.downloaded_chunks = sum(v[0] for v in lengths.values()) bar.n = koboldai_vars.downloaded_chunks bar.update() From 37d28950c0ab130558f5b0417bc38533880ce00f Mon Sep 17 00:00:00 2001 From: ebolam Date: Mon, 19 Sep 2022 12:17:22 -0400 Subject: [PATCH 12/13] Added in framework for stable diffusion on horde. --- aiserver.py | 105 ++++++++++++++++++++++++++++++++- environments/huggingface.yml | 1 + environments/rocm.yml | 1 + koboldai_settings.py | 7 ++- requirements.txt | 3 +- requirements_mtj.txt | 3 +- static/koboldai.css | 4 ++ static/koboldai.js | 6 +- templates/settings flyout.html | 3 + 9 files changed, 126 insertions(+), 7 deletions(-) diff --git a/aiserver.py b/aiserver.py index 7c02c5ed..0fc73714 100644 --- a/aiserver.py +++ b/aiserver.py @@ -64,7 +64,7 @@ from utils import debounce import utils import koboldai_settings import torch -from transformers import StoppingCriteria, GPT2TokenizerFast, GPT2LMHeadModel, GPTNeoForCausalLM, GPTNeoModel, AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, modeling_utils +from transformers import StoppingCriteria, GPT2TokenizerFast, GPT2LMHeadModel, GPTNeoForCausalLM, GPTNeoModel, AutoModelForCausalLM, AutoTokenizer, PreTrainedModel, modeling_utils, AutoModelForTokenClassification from transformers import __version__ as transformers_version import transformers try: @@ -73,6 +73,11 @@ except: pass import transformers.generation_utils +# Text2img +import base64 +from PIL import Image, ImageFont, ImageDraw, ImageFilter, ImageOps +from io import BytesIO + global tpu_mtj_backend @@ -8136,6 +8141,104 @@ def get_model_size(model_name): def UI_2_save_revision(data): koboldai_vars.save_revision() + +#==================================================================# +# Generate Image +#==================================================================# +@socketio.on("generate_image") +def UI_2_generate_image(data): + prompt = koboldai_vars.calc_ai_text(return_text=True) + print(prompt) + get_items_locations_from_text(prompt) + if 'art_guide' not in data: + art_guide = 'fantasy illustration, artstation, by jason felix by steve argyle by tyler jacobson by peter mohrbacher, cinematic lighting', + else: + art_guide = data['art_guide'] + #text2img(prompt, art_guide = art_guide) + + +@logger.catch +def text2img(prompt, + art_guide = 'fantasy illustration, artstation, by jason felix by steve argyle by tyler jacobson by peter mohrbacher, cinematic lighting', + filename = "story_art.png"): + print("Generating Image") + koboldai_vars.generating_image = True + final_imgen_params = { + "n": 1, + "width": 512, + "height": 512, + "steps": 50, + } + + final_submit_dict = { + "prompt": "{}, {}".format(prompt, art_guide), + "api_key": koboldai_vars.sh_apikey if koboldai_vars.sh_apikey != '' else "0000000000", + "params": final_imgen_params, + } + logger.debug(final_submit_dict) + submit_req = requests.post('https://stablehorde.net/api/v1/generate/sync', json = final_submit_dict) + if submit_req.ok: + results = submit_req.json() + for iter in range(len(results)): + b64img = results[iter]["img"] + base64_bytes = b64img.encode('utf-8') + img_bytes = base64.b64decode(base64_bytes) + img = Image.open(BytesIO(img_bytes)) + if len(results) > 1: + final_filename = f"{iter}_{filename}" + else: + final_filename = filename + img.save(final_filename) + return(img) + print("Saved Image") + koboldai_vars.generating_image = False + else: + koboldai_vars.generating_image = False + print(submit_req.text) + +def get_items_locations_from_text(text): + # load model and tokenizer + tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER") + model = AutoModelForTokenClassification.from_pretrained("dslim/bert-base-NER") + nlp = transformers.pipeline("ner", model=model, tokenizer=tokenizer) + # input example sentence + ner_results = nlp(text) + orgs = [] + last_org_position = -2 + loc = [] + last_loc_position = -2 + per = [] + last_per_position = -2 + for i, result in enumerate(ner_results): + if result['entity'] in ('B-ORG', 'I-ORG'): + if result['start']-1 <= last_org_position: + if result['start'] != last_org_position: + orgs[-1] = "{} ".format(orgs[-1]) + orgs[-1] = "{}{}".format(orgs[-1], result['word'].replace("##", "")) + else: + orgs.append(result['word']) + last_org_position = result['end'] + elif result['entity'] in ('B-LOC', 'I-LOC'): + if result['start']-1 <= last_loc_position: + if result['start'] != last_loc_position: + loc[-1] = "{} ".format(loc[-1]) + loc[-1] = "{}{}".format(loc[-1], result['word'].replace("##", "")) + else: + loc.append(result['word']) + last_loc_position = result['end'] + elif result['entity'] in ('B-PER', 'I-PER'): + if result['start']-1 <= last_per_position: + if result['start'] != last_per_position: + per[-1] = "{} ".format(per[-1]) + per[-1] = "{}{}".format(per[-1], result['word'].replace("##", "")) + else: + per.append(result['word']) + last_per_position = result['end'] + + print("Orgs: {}".format(orgs)) + print("Locations: {}".format(loc)) + print("People: {}".format(per)) + #==================================================================# # Test #==================================================================# diff --git a/environments/huggingface.yml b/environments/huggingface.yml index 25894ec8..72871c81 100644 --- a/environments/huggingface.yml +++ b/environments/huggingface.yml @@ -20,6 +20,7 @@ dependencies: - marshmallow>=3.13 - apispec-webframeworks - loguru + - Pillow - pip: - flask-cloudflared - flask-ngrok diff --git a/environments/rocm.yml b/environments/rocm.yml index fef38892..a0334a9a 100644 --- a/environments/rocm.yml +++ b/environments/rocm.yml @@ -17,6 +17,7 @@ dependencies: - marshmallow>=3.13 - apispec-webframeworks - loguru + - Pillow - pip: - --find-links https://download.pytorch.org/whl/rocm4.2/torch_stable.html - torch==1.10.* diff --git a/koboldai_settings.py b/koboldai_settings.py index 1989ce62..6fb05c23 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -111,7 +111,7 @@ class koboldai_vars(object): def reset_model(self): self._model_settings.reset_for_model_load() - def calc_ai_text(self, submitted_text="", method=2): + def calc_ai_text(self, submitted_text="", method=2, return_text=False): context = [] token_budget = self.max_length used_world_info = [] @@ -285,6 +285,8 @@ class koboldai_vars(object): tokens = self.tokenizer.encode(text) self.context = context + if return_text: + return text return tokens, used_tokens, used_tokens+self.genamt def __setattr__(self, name, value): @@ -741,7 +743,6 @@ class system_settings(settings): self.userscripts = [] # List of userscripts to load self.last_userscripts = [] # List of previous userscript filenames from the previous time userscripts were send via usstatitems self.corescript = "default.lua" # Filename of corescript to load - self.gpu_device = 0 # Which PyTorch device to use when using pure GPU generation self.savedir = os.getcwd()+"\\stories" self.hascuda = False # Whether torch has detected CUDA on the system @@ -797,6 +798,8 @@ class system_settings(settings): print("Colab Check: {}".format(self.on_colab)) self.horde_share = False self._horde_pid = None + self.sh_apikey = "" # API key to use for txt2img from the Stable Horde. + self.generating_image = False #The current status of image generation self.cookies = {} #cookies for colab since colab's URL changes, cookies are lost diff --git a/requirements.txt b/requirements.txt index 3f49630f..c9b316c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,5 @@ accelerate flask_session marshmallow>=3.13 apispec-webframeworks -loguru \ No newline at end of file +loguru +Pillow \ No newline at end of file diff --git a/requirements_mtj.txt b/requirements_mtj.txt index 2067273a..4c1c4ca7 100644 --- a/requirements_mtj.txt +++ b/requirements_mtj.txt @@ -19,4 +19,5 @@ bleach==4.1.0 flask-session marshmallow>=3.13 apispec-webframeworks -loguru \ No newline at end of file +loguru +Pillow \ No newline at end of file diff --git a/static/koboldai.css b/static/koboldai.css index f4b8fa56..12f0383b 100644 --- a/static/koboldai.css +++ b/static/koboldai.css @@ -2201,6 +2201,10 @@ button.disabled { color: red; } +.italics { + font-style: italic; +} + .within_max_length { color: var(--text_to_ai_color); font-weight: bold; diff --git a/static/koboldai.js b/static/koboldai.js index 7d85e6c7..e914922c 100644 --- a/static/koboldai.js +++ b/static/koboldai.js @@ -2917,7 +2917,8 @@ function assign_world_info_to_action(action_item, uid) { //console.log(null); var before_span = document.createElement("span"); before_span.textContent = before_highlight_text; - var hightlight_span = document.createElement("i"); + var hightlight_span = document.createElement("span"); + hightlight_span.classList.add("italics"); hightlight_span.textContent = highlight_text; hightlight_span.title = worldinfo['content']; var after_span = document.createElement("span"); @@ -2977,7 +2978,8 @@ function assign_world_info_to_action(action_item, uid) { //console.log(null); var before_span = document.createElement("span"); before_span.textContent = before_highlight_text; - var hightlight_span = document.createElement("i"); + var hightlight_span = document.createElement("span"); + hightlight_span.classList.add("italics"); hightlight_span.textContent = highlight_text; hightlight_span.title = worldinfo['content']; var after_span = document.createElement("span"); diff --git a/templates/settings flyout.html b/templates/settings flyout.html index 71ef97a4..59713878 100644 --- a/templates/settings flyout.html +++ b/templates/settings flyout.html @@ -105,6 +105,9 @@ Download debug dump +
+ +