diff --git a/klite.embd b/klite.embd index 8b4c53b33..d6ddb56a0 100644 --- a/klite.embd +++ b/klite.embd @@ -6,7 +6,7 @@ It requires no dependencies, installation or setup. Just copy this single static HTML file anywhere and open it in a browser, or from a webserver. Please go to https://github.com/LostRuins/lite.koboldai.net for updates on Kobold Lite. Kobold Lite is under the AGPL v3.0 License unless otherwise exempted. Please do not remove this line. -Current version: 91 +Current version: 92 -Concedo --> @@ -6282,20 +6282,25 @@ Current version: 91 `; filetable += entry; - for(let i=0;i<4;++i) + try { - let testslot = localStorage.getItem(STORAGE_PREFIX + "slot_"+i+"_meta"); - entry = `
-
- `+(testslot?`[ Slot `+(i+1)+` - `+testslot+` ]`:`[ Slot `+(i+1)+` - Empty ]`)+` -
-
- - - - -
`; - filetable += entry; + for(let i=0;i<4;++i) + { + let testslot = localStorage.getItem(STORAGE_PREFIX + "slot_"+i+"_meta"); + entry = `
+
+ `+(testslot?`[ Slot `+(i+1)+` - `+testslot+` ]`:`[ Slot `+(i+1)+` - Empty ]`)+` +
+
+ + + + +
`; + filetable += entry; + } + } catch (e) { + console.log("get slots failed: " + e); } document.getElementById("saveloadentries").innerHTML = filetable; } @@ -7346,7 +7351,7 @@ Current version: 91 let onOk = ()=>{ pending_response_id = "-1"; waiting_for_autosummary = true; - let max_allowed_characters = Math.floor(localsettings.max_context_length * 3.2)-100; + let max_allowed_characters = Math.floor(localsettings.max_context_length * 3.0)-100; let truncated_context = concat_gametext(true, ""); let max_mem_anote_len = Math.floor(max_allowed_characters*0.9); @@ -7916,7 +7921,7 @@ Current version: 91 truncated_context = truncated_context.replace(/\xA0/g,' '); //replace non breaking space nbsp //this is a hack since we dont have a proper tokenizer, but we can estimate 1 token per 3 characters - let chars_per_token = 3.2; + let chars_per_token = 3.0; //we try to detect attempts at coding which tokenize poorly. This usually happens when the average word length is high. let avgwordlen = (1.0+truncated_context.length)/(1.0+countWords(truncated_context)); if(avgwordlen>=7.8) @@ -7928,7 +7933,7 @@ Current version: 91 //if there is no memory, then we can be a lot of lenient with the character counts since the backend will truncate excess anyway chars_per_token = 4.8; } - let max_allowed_characters = Math.max(1, Math.floor((maxctxlen-maxgenamt) * chars_per_token) - 8); + let max_allowed_characters = Math.max(1, Math.floor((maxctxlen-maxgenamt) * chars_per_token) - 12); //for adventure mode, inject hidden context, even more if there's nothing in memory if (localsettings.opmode == 2 && localsettings.adventure_context_mod) @@ -8056,7 +8061,7 @@ Current version: 91 //we clip the memory if its too long, taking the last x chars (not the first) //memory or anote is allowed to be up to 0.9 times of ctx allowance let max_mem_anote_len = Math.floor(max_allowed_characters*0.9); - let truncated_memory = current_memory.substring(current_memory.length - max_mem_anote_len); + let truncated_memory = substring_to_boundary(current_memory, max_mem_anote_len); if (truncated_memory != null && truncated_memory != "") { if(newlineaftermemory) { @@ -10187,12 +10192,17 @@ Current version: 91 function autosave() { //autosave - localStorage.setItem(STORAGE_PREFIX + "settings", JSON.stringify(localsettings)); - if (localsettings.persist_session) { - let compressedstory = generate_compressed_story(true,true,true); - localStorage.setItem(STORAGE_PREFIX + "story", compressedstory); + try { + localStorage.setItem(STORAGE_PREFIX + "settings", JSON.stringify(localsettings)); + if (localsettings.persist_session) { + let compressedstory = generate_compressed_story(true, true, true); + localStorage.setItem(STORAGE_PREFIX + "story", compressedstory); + } + console.log("autosave done"); + } catch (e) { + console.log("autosave failed: " + e); } - console.log("autosave done"); + } function btn_adventure_mode()