From 268b6f76dfdc7d0bd0e76722aa66c2364e13ae59 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Wed, 18 Jun 2025 21:06:24 +0800 Subject: [PATCH] updated lite --- klite.embd | 289 ++++++++++++++++++++++++++--------------------------- 1 file changed, 141 insertions(+), 148 deletions(-) diff --git a/klite.embd b/klite.embd index fec70b418..f8f50c721 100644 --- a/klite.embd +++ b/klite.embd @@ -1455,7 +1455,7 @@ Current version indicated by LITEVER below. padding-left: 10px; padding-right: 10px; padding-top: 7px; - border: 1px solid #bbbbbbaa; + border: 1px solid #bbbbbbaa; } .cht_inp_bg_inner { @@ -1490,7 +1490,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_chat) !important; } .chat_btnmode_adventure{ @@ -1507,7 +1507,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; } .chat_btnmode_adventure.storymode { @@ -1535,7 +1535,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_chat_send_btn) !important; } .chat_msg_send_btn:hover { @@ -1567,7 +1567,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_chat_abort_btn) !important; } .chat_msg_send_btn_abort:hover { @@ -1590,7 +1590,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 64% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_chat_cust_btn) !important ; } @@ -1725,7 +1725,7 @@ Current version indicated by LITEVER below. padding-right: 12px; padding-top: 8px; width:100%; - border: 1px solid #bbbbbbaa; + border: 1px solid #bbbbbbaa; position: relative; } .corpo_edit_inner @@ -1754,7 +1754,7 @@ Current version indicated by LITEVER below. padding-left: 52px; padding-right: 52px; padding-top: 8px; - border: 1px solid #bbbbbbaa; + border: 1px solid #bbbbbbaa; position: relative; } body.darkmode .corpo_chat_outer @@ -1793,7 +1793,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_corpo_clip) !important; } .corpo_chat_img_btn:hover { @@ -1816,7 +1816,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_corpo_send_btn) !important; } .corpo_chat_send_btn:hover { @@ -1839,7 +1839,7 @@ Current version indicated by LITEVER below. width: 33px; background-size: 50% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; background-image: var(--img_corpo_abort_btn) !important; } .corpo_btn_text @@ -1859,7 +1859,7 @@ Current version indicated by LITEVER below. width: 32px; background-size: 60% !important; background-repeat: no-repeat !important; - background-position: center !important; + background-position: center !important; } .corpo_hover_btn:hover { background: #eeeeee none repeat scroll 0 0; @@ -1882,22 +1882,22 @@ Current version indicated by LITEVER below. background-color: #161616; } .corpoendeditbutton { - position: fixed; - top: 75px; - right: 25px; - width: 40px; - padding: 8px 6px; - background-color: #de5b5b; - color: white; - border-radius: 24px; - opacity: 0.65; - cursor: pointer; - box-shadow: 1 2px 8px rgba(0, 0, 0, 0.2); - } + position: fixed; + top: 75px; + right: 25px; + width: 40px; + padding: 8px 6px; + background-color: #de5b5b; + color: white; + border-radius: 24px; + opacity: 0.65; + cursor: pointer; + box-shadow: 1 2px 8px rgba(0, 0, 0, 0.2); + } - .corpoendeditbutton:hover { - background-color: #f67676; - } + .corpoendeditbutton:hover { + background-color: #f67676; + } .corpoleftpanelitems { display: flex; @@ -1936,10 +1936,10 @@ Current version indicated by LITEVER below. cursor: pointer; font-size: 17px; background-repeat: no-repeat; - background-position: 8px; + background-position: 8px; background-size: 24px; overflow: hidden; - text-overflow: ellipsis; + text-overflow: ellipsis; white-space: nowrap; user-select: none; width: 100%; @@ -1947,14 +1947,14 @@ Current version indicated by LITEVER below. .corpo_leftpanel_btn:hover { background: #9dcef5; background-repeat: no-repeat; - background-position: 8px; + background-position: 8px; background-size: 24px; } .corpo_leftpanel_btn.red:hover { color: #000000; background: #f5767f; background-repeat: no-repeat; - background-position: 8px; + background-position: 8px; background-size: 24px; } .corpo_leftpanel_btn:active { @@ -1965,7 +1965,7 @@ Current version indicated by LITEVER below. color: #76a8ee; background: #454545; background-repeat: no-repeat; - background-position: 8px; + background-position: 8px; background-size: 24px; } body.darkmode .corpo_leftpanel_btn.red:hover @@ -1973,7 +1973,7 @@ Current version indicated by LITEVER below. color: #000000; background: #f5767f; background-repeat: no-repeat; - background-position: 8px; + background-position: 8px; background-size: 24px; } .corporightpanel @@ -1981,7 +1981,7 @@ Current version indicated by LITEVER below. width: 100%; height: calc(100vh - 68px); display: flex; - flex-direction: column; + flex-direction: column; padding-left: 2px; padding-right: 2px; } @@ -2076,7 +2076,7 @@ Current version indicated by LITEVER below. { max-width: 860px; margin-left: auto; - margin-right: auto; + margin-right: auto; padding-left: 8px; padding-right: 8px; } @@ -3051,8 +3051,8 @@ Current version indicated by LITEVER below. const default_cohere_base = "https://api.cohere.ai/v1/chat"; const a1111_models_endpoint = "/sdapi/v1/sd-models"; - const a1111_options_endpoint = "/sdapi/v1/options"; - const a1111_txt2img_endpoint = "/sdapi/v1/txt2img"; + const a1111_options_endpoint = "/sdapi/v1/options"; + const a1111_txt2img_endpoint = "/sdapi/v1/txt2img"; const a1111_img2img_endpoint = "/sdapi/v1/img2img"; const a1111_interrogate_endpoint = "/sdapi/v1/interrogate"; @@ -3368,7 +3368,6 @@ Current version indicated by LITEVER below. render_streaming_markdown: true, raw_instruct_tags: false, //experimental flag show_endpoint_selector: false, - never_rewind_ctx: false, //section migrated from story itself extrastopseq: "", @@ -4710,12 +4709,12 @@ Current version indicated by LITEVER below. } const request = indexedDB.open(STORAGE_PREFIX, 1); - request.onsuccess = (event) => { + request.onsuccess = (event) => { const db = event.target.result; const transaction = db.transaction(STORAGE_PREFIX, "readonly"); const store = transaction.objectStore(STORAGE_PREFIX); - const getRequest = store.get(objkey); - getRequest.onsuccess = () => { + const getRequest = store.get(objkey); + getRequest.onsuccess = () => { let res = getRequest.result; if(res){ resolve(res.value); //since it was json previously, return it @@ -4723,12 +4722,12 @@ Current version indicated by LITEVER below. resolve(defaultvalue); } } - getRequest.onerror = () => + getRequest.onerror = () => { console.log(getRequest.error); fallbackResolveLoad(); } - }; + }; request.onupgradeneeded = function(event) { @@ -4744,12 +4743,12 @@ Current version indicated by LITEVER below. } } - request.onerror = function(event) + request.onerror = function(event) { console.error(`Unable to initialize IndexedDB Database! Fallback to localstorage.`); fallbackResolveLoad(); } - }); + }); } function readTavernPngFromBlob(blob, onDone) // File loading and import functionality { @@ -4982,7 +4981,7 @@ Current version indicated by LITEVER below. } var plainfile = unzip.decompress(correctfile); const decoder = new TextDecoder('utf-8'); - const readtxt = decoder.decode(plainfile); + const readtxt = decoder.decode(plainfile); var decoded = JSON.parse(readtxt); console.log(decoded); return decoded; @@ -4992,7 +4991,7 @@ Current version indicated by LITEVER below. } } return null; - }; + }; function extractRisuData(arr) { function strToBytes(str) { @@ -5781,7 +5780,7 @@ Current version indicated by LITEVER below. } function playbeep() { - var sound = new Audio("data:audio/wav;base64,UklGRkwBAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YScBAAB8gIN8fICAgIB8gHmAjXVkhptyXYqbcmiKjXKAim5ymIpWcqmKU3Klhl18kXl5jXlkjZ5oVpelZFaUm2trioN1ioZkeaKDU3msgFN8nnxog4Nyg5FrZJubXWGem2FnlIpufIZyfJR8XYOleVaDonlhg5F1eYZ5dZGNYXWbimhrm4Nrg3KDjWt/hm6UkUmDvV1TrINdkXxol4Boinx1nmtWr5RChqVheZdkeZtucop1io1WgLNhWql/XZd/YZSNZH+GeY1yZKKNUIaeZHmYZ3WbeWuGg4B/a4Oba2uXgGuNf2iKjWt5ioB/eXWNg2t/jXJ8inJ5kXxug4N8fHl/hnl1hnx5hn91g4Z1fIN8fHx8f4B5gIB8gH98fIN8fH+AfHx8fH98fIB/AA=="); + var sound = new Audio("data:audio/wav;base64,UklGRkwBAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YScBAAB8gIN8fICAgIB8gHmAjXVkhptyXYqbcmiKjXKAim5ymIpWcqmKU3Klhl18kXl5jXlkjZ5oVpelZFaUm2trioN1ioZkeaKDU3msgFN8nnxog4Nyg5FrZJubXWGem2FnlIpufIZyfJR8XYOleVaDonlhg5F1eYZ5dZGNYXWbimhrm4Nrg3KDjWt/hm6UkUmDvV1TrINdkXxol4Boinx1nmtWr5RChqVheZdkeZtucop1io1WgLNhWql/XZd/YZSNZH+GeY1yZKKNUIaeZHmYZ3WbeWuGg4B/a4Oba2uXgGuNf2iKjWt5ioB/eXWNg2t/jXJ8inJ5kXxug4N8fHl/hnl1hnx5hn91g4Z1fIN8fHx8f4B5gIB8gH98fIN8fH+AfHx8fH98fIB/AA=="); sound.play(); console.log("beep sound"); } @@ -5864,7 +5863,7 @@ Current version indicated by LITEVER below. if (innercode.startsWith(matcher)) { innercode = innercode.substring(matcher.length); break; - } + } } copyToClipboard(innercode); } @@ -6331,7 +6330,7 @@ Current version indicated by LITEVER below. function connect_to_a1111(silent=false) - { + { console.log("Attempt A1111 Connection..."); //establish initial connection to a1111 api fetch(localsettings.saved_a1111_url + a1111_models_endpoint) @@ -6391,7 +6390,7 @@ Current version indicated by LITEVER below. function connect_to_comfyui(silent=false) - { + { console.log("Attempt ComfyUI Connection..."); //establish initial connection to a1111 api fetch(localsettings.saved_comfy_url + comfy_models_endpoint) @@ -8516,7 +8515,7 @@ Current version indicated by LITEVER below. { hide_popups(); document.getElementById("charcreator_name").value = document.getElementById("charcreator_persona").value = document.getElementById("charcreator_scenario").value = document.getElementById("charcreator_greeting").value = ""; - document.getElementById("usecharactertemplate").checked = false; + document.getElementById("usecharactertemplate").checked = false; document.getElementById("charactercreator").classList.remove("hidden"); tempAestheticInstructUISettings = deepCopyAestheticSettings(aestheticInstructUISettings); character_creator_updateimg(); @@ -8599,9 +8598,9 @@ Current version indicated by LITEVER below. tempAestheticInstructUISettings = null; hide_popups(); if (confirm && usingtemplate) - { - btn_memory(); - } + { + btn_memory(); + } } function click_scenario(idx) @@ -9082,7 +9081,7 @@ Current version indicated by LITEVER below. } return userInput; } - else { + else { userInput = userInput.split("#")[0].split("?")[0]; userInput = userInput.endsWith('/') ? userInput.slice(0, -1) : userInput; if (userInput.match(/aicharactercards\.com\//i) || userInput.match(/AICC\//i)) { @@ -9305,14 +9304,14 @@ Current version indicated by LITEVER below. let searchstr = document.getElementById("scenariosearch").value.trim().toLowerCase(); let sdrop = document.getElementById("scenariosearchdropdown").value; let sgrid_nodes = sgrid.children; - for(let i=0; i 0, then we exceeded context window @@ -16088,7 +16085,7 @@ Current version indicated by LITEVER below. } anote_insert_idx = clamp(anote_insert_idx, 0, truncated_context.length); truncated_context = truncated_context.slice(0, anote_insert_idx) + truncated_anote + truncated_context.slice(anote_insert_idx); - if(!is_using_kcpp_with_added_memory() || localsettings.never_rewind_ctx) + if(!is_using_kcpp_with_added_memory()) { truncated_context = truncated_memory + truncated_context; } @@ -16096,7 +16093,7 @@ Current version indicated by LITEVER below. truncated_context = replace_placeholders(truncated_context,false,false,true); - if(is_using_kcpp_with_added_memory() && !localsettings.never_rewind_ctx) + if(is_using_kcpp_with_added_memory()) { last_token_budget = (truncated_memory.length + truncated_context.length) + "/" + max_allowed_characters; } @@ -16126,7 +16123,7 @@ Current version indicated by LITEVER below. "models": selected_models.map((m) => { return m.name }), }; - if(is_using_kcpp_with_added_memory() && !localsettings.never_rewind_ctx) + if(is_using_kcpp_with_added_memory()) { submit_payload.params.memory = truncated_memory; submit_payload.params.trim_stop = true; @@ -16301,7 +16298,7 @@ Current version indicated by LITEVER below. const sentenceEndings = /[.!?]/g; let lastsentences = gametext_arr[gametext_arr.length-1].split(sentenceEndings); lastsentences = lastsentences.map(lastsentences => lastsentences.trim()); //remove whitespace - lastsentences = lastsentences.filter(lastsentences => lastsentences.length > 0); + lastsentences = lastsentences.filter(lastsentences => lastsentences.length > 0); if(lastsentences.length>0) { let lastsentence = lastsentences[lastsentences.length - 1]; @@ -21123,7 +21120,7 @@ Current version indicated by LITEVER below. const kcppEmbeddingDropdownOption = Array.from(providerdropdown.options).find(opt => opt.value === "2"); if(is_using_kcpp_with_embeddings()) { - kcppEmbeddingDropdownOption.disabled = false; + kcppEmbeddingDropdownOption.classList.remove("hidden"); } else { @@ -21131,7 +21128,7 @@ Current version indicated by LITEVER below. { document.getElementById("documentdb_provider").value = 1; } - kcppEmbeddingDropdownOption.disabled = true; + kcppEmbeddingDropdownOption.classList.add("hidden"); } toggle_documentdb_provider(); } @@ -21343,7 +21340,7 @@ Current version indicated by LITEVER below. pending_wi_obj[idx - 1] = pending_wi_obj[idx]; pending_wi_obj[idx] = temp; } - } + } update_wi(); } @@ -21359,7 +21356,7 @@ Current version indicated by LITEVER below. pending_wi_obj[idx + 1] = pending_wi_obj[idx]; pending_wi_obj[idx] = temp; } - } + } update_wi(); } @@ -21952,8 +21949,8 @@ Current version indicated by LITEVER below. } const stableSort = (arr, compare) => { return arr.map((item, index) => ({ item, index })) - .sort((a, b) => compare(a.item, b.item) || a.index - b.index) - .map(({ item }) => item); + .sort((a, b) => compare(a.item, b.item) || a.index - b.index) + .map(({ item }) => item); }; @@ -22708,7 +22705,7 @@ Current version indicated by LITEVER below. const embedding = yield generateNewEmbedding(documentContent); if (embedding && embedding.data && embedding.data.length > 0 && embedding.data[0].embedding) { const newembedding = { - document: documentName ? documentName : "None", + document: documentName ? documentName : "", hash: hash, embedding: embedding.data[0].embedding, snippet: documentContent, @@ -22883,30 +22880,30 @@ Current version indicated by LITEVER below. recentTextStr = replace_search_placeholders(recentTextStr); let i = 0; - allText.split("[DOCUMENT BREAK]").forEach(doc => { - doc = doc.trim(); - if (!doc) { return; } - let titleMatch = doc.match(/^\[([^\n]+?)\]/); - let title = null; - if (titleMatch !== null) - { - doc = doc.replace(titleMatch[0], ""); - title = titleMatch[1]; - } - let startLoc = 0; - while (startLoc < doc.length && i < Number.MAX_SAFE_INTEGER) { - let actualChunkStart = Math.max(0, startLoc - chunkSizeOverlap); - let actualChunkEnd = Math.min(doc.length, actualChunkStart + chunkSize); - let currentSnippet = doc.substring(actualChunkStart, actualChunkEnd); - paragraphs.push({snippet: currentSnippet, document: title}); - startLoc = actualChunkEnd; - i++; - } - }); - paragraphs = paragraphs.map(c => { - c.snippet = c.snippet.replace(/\n\n/g, "\n"); - return c; - }).filter(c => !!c.snippet); + allText.split("[DOCUMENT BREAK]").forEach(doc => { + doc = doc.trim(); + if (!doc) { return; } + let titleMatch = doc.match(/^\[([^\n]+?)\]/); + let title = null; + if (titleMatch !== null) + { + doc = doc.replace(titleMatch[0], ""); + title = titleMatch[1]; + } + let startLoc = 0; + while (startLoc < doc.length && i < Number.MAX_SAFE_INTEGER) { + let actualChunkStart = Math.max(0, startLoc - chunkSizeOverlap); + let actualChunkEnd = Math.min(doc.length, actualChunkStart + chunkSize); + let currentSnippet = doc.substring(actualChunkStart, actualChunkEnd); + paragraphs.push({snippet: currentSnippet, document: title}); + startLoc = actualChunkEnd; + i++; + } + }); + paragraphs = paragraphs.map(c => { + c.snippet = c.snippet.replace(/\n\n/g, "\n"); + return c; + }).filter(c => !!c.snippet); let miniSearch; if ((documentdb_provider==2 && is_using_kcpp_with_embeddings()) || documentdb_provider==3) @@ -23099,7 +23096,7 @@ Current version indicated by LITEVER below. { if (event.key === 'Enter') { trigger_wordsearch_candidates(); - } + } } function trigger_wordsearch_results(query) { @@ -23170,6 +23167,7 @@ Current version indicated by LITEVER below. const containerRect = gametext.getBoundingClientRect(); if (rect.top < containerRect.top || rect.bottom > containerRect.bottom) { if (range.startContainer && range.startContainer.nodeType === Node.TEXT_NODE) { + gametext.scrollTop = 0; //simple fix for safari scrolling const span = document.createElement("span"); span.style.display = "inline"; span.style.background = "transparent"; @@ -23440,7 +23438,7 @@ Current version indicated by LITEVER below.
  • Memory
  • World Info
  • TextDB
  • - +
    @@ -23550,7 +23548,7 @@ Current version indicated by LITEVER below. - +
    @@ -23685,7 +23683,7 @@ Current version indicated by LITEVER below.
    @@ -23865,17 +23863,17 @@ Current version indicated by LITEVER below.
    Context Size ?Maximum number of context tokens submitted to the AI. Must exceed max output tokens. Can be further increased by editing the textbox. Older models stop at 2048, newer ones can do 4096 or greater.
    + document.getElementById('max_context_length_slide').value = this.value;">
    + document.getElementById('max_context_length').value = this.value;">
    512
    4096
    Auto-Adjust Limits
    - +
    @@ -23884,17 +23882,17 @@ Current version indicated by LITEVER below.
    Max Output ?Number of tokens the AI should generate. Higher numbers will take longer to generate.
    + document.getElementById('max_length_slide').value = this.value;">
    + document.getElementById('max_length').value = this.value;">
    16
    512
    Auto-Adjust Limits
    - +
    @@ -23909,7 +23907,7 @@ Current version indicated by LITEVER below.
    + document.getElementById('temperature').value = this.value;">
    0.1
    2
    @@ -23922,7 +23920,7 @@ Current version indicated by LITEVER below. class="helptext">Used to penalize words that were already generated or belong to the context (too high causes incoherence!).
    + document.getElementById('rep_pen_slide').value = this.value;">
    @@ -23938,7 +23936,7 @@ Current version indicated by LITEVER below. to discard unlikely text in a nucleus sampling process. Lower values will make text more predictable but can become repetitious. Set to 1 to deactivate it. + document.getElementById('top_p_slide').value = this.value;">
    @@ -23952,7 +23950,7 @@ Current version indicated by LITEVER below.
    Top-K Sampling ?Top-K Sampling. Discards all but the K most likely tokens. Set 0 to Deactivate. Range 0 to 100.
    + document.getElementById('top_k_slide').value = this.value;">
    @@ -24190,7 +24188,7 @@ Current version indicated by LITEVER below.
    Save In A1111/Forge
    - +
    Save Images
    - +
    @@ -24332,11 +24330,11 @@ Current version indicated by LITEVER below.
    Narrate Both Sides
    - +
    Narrate Only Dialog
    - +
    Browser TTS Speed:
    @@ -24354,7 +24352,7 @@ Current version indicated by LITEVER below.
    Suppress Non-Speech
    - +
    Language
    @@ -24596,7 +24594,7 @@ Current version indicated by LITEVER below.
    Token Streaming ?Use token streaming for partial responses. SSE is smoother but less well-supported. Poll is chunkier but more reliable. Not available on Horde.
    - @@ -24631,23 +24629,23 @@ Current version indicated by LITEVER below.
    Render Streaming Markdown ?Attempt to render markdown when streaming. May result in wonky output or lag on older devices.
    - +
    Never Escape HTML ?Avoids escaping any HTML tags, allowing HTML injections. Not recommended!
    - +
    Render Sp.Tags ?If enabled, renders special tags like EOS and padding tokens. Not recommended.
    - +
    Request Logprobs ?If enabled, request top 5 alternative token log-probabilities for each generated token. Incurs an overhead.
    - +
    @@ -24661,22 +24659,22 @@ Current version indicated by LITEVER below.
    Embed Settings File ?Includes your current settings when saving or sharing your story
    - +
    Rename Save File ?Prompts to input a different filename when saving file.
    - +
    Show Advanced Load ?If enabled, allows you to select additional configurations during file load
    - +
    Card Import Prompt ?If enabled, prompts the user to choose what mode to import a character card in. If disabled, automatically picks chat mode.
    - +
    @@ -24684,7 +24682,7 @@ Current version indicated by LITEVER below.
    Run In Background ?Prevents the browser from suspending KoboldAI Lite by playing a silent audio track. This setting cannot be saved.
    - +
    User Mods ?Allows you to load third-party user created mods (caution).
    @@ -24700,17 +24698,17 @@ Current version indicated by LITEVER below.
    Autoscroll Text ?Automatically scrolls the text window down when new text is generated
    - +
    Unlock Scroll Height ?Unlocks the text viewport, allowing for infinite height without scrolling
    - +
    Viewport Width ?Controls horizontal scaling of the viewport window
    - @@ -24720,12 +24718,12 @@ Current version indicated by LITEVER below.
    SidePanel Mode ?Displays the settings and context panels permanently on the sides, instead of as popups. Not available on Mobile displays.
    - +
    Inverted Colors ?Inverts all colors, simple light mode
    - +
    @@ -24739,17 +24737,12 @@ Current version indicated by LITEVER below.
    RawInstructTags ?Does not insert instruct placeholders, only uses raw tags
    - +
    ShowEndpointSelector ?Allows you to change the connected custom endpoint at runtime even in local mode.
    - -
    -
    -
    NeverRewindCtxWindow ?Prevents ever rewinding to context that has already been shifted out of the context window.
    - +
    @@ -25010,9 +25003,9 @@ Current version indicated by LITEVER below.
    -
    Use Character Template ?Adds a character template to memory while creating the character instead. -
    -
    +
    Use Character Template ?Adds a character template to memory while creating the character instead. +
    +
    Character Persona: