From c938a1011d901ed94165c0bee2f2a5fe6ae90f60 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:21:27 +0800 Subject: [PATCH] updated lite --- klite.embd | 285 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 246 insertions(+), 39 deletions(-) diff --git a/klite.embd b/klite.embd index 0d0b9e468..f61439a74 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: 93 +Current version: 94 -Concedo --> @@ -3173,6 +3173,8 @@ Current version: 93 const oai_submit_endpoint = "/completions"; const oai_submit_endpoint_turbo = "/chat/completions"; + const oai_image_endpoint_full = "https://api.openai.com/v1/images/generations"; + const scale_submit_endpoint = "https://dashboard.scale.com/spellbook/api/v2/deploy/" const claude_submit_endpoint = "/complete"; @@ -3223,6 +3225,7 @@ Current version: 93 var anote_strength = 320; //distance from end var newlineaftermemory = true; var current_wi = []; //each item stores a wi object. + var wi_insertlocation = 0; //after memory var wi_searchdepth = 0; //search everything var generateimagesinterval = 650; //if generated images is enabled, it will trigger after every 600 new characters in context. var nextgeneratedimagemilestone = generateimagesinterval; //used to keep track of when to generate the next image @@ -3263,6 +3266,7 @@ Current version: 93 home_cluster: text_hordes[0].baseurl, //which horde does this api key belongs to saved_oai_key: "", //do not ever share this in save files! saved_oai_addr: default_oai_base, //do not ever share this in save files! + saved_dalle_key: "", saved_openrouter_key: "", saved_claude_key: "", //do not ever share this in save files! saved_claude_addr: default_claude_base, //do not ever share this in save files! @@ -3288,10 +3292,11 @@ Current version: 93 persist_session: true, speech_synth: 0, //0 is disabled beep_on: false, + narrate_both_sides: false, image_styles: "", grammar:"", tokenstreammode: (localflag?1:0), //0=off,1=pollstream,2=sse - generate_images_mode: (localflag?0:1), //0=off, 1=horde, 2=a1111 + generate_images_mode: (localflag?0:1), //0=off, 1=horde, 2=a1111, 3=dalle generate_images_model: "stable_diffusion", //"" is disabled and "*" is all, anything else is the model name pulled from stable horde img_autogen: false, img_allownsfw: true, @@ -3847,7 +3852,6 @@ Current version: 93 let prompt = splits[0]; let negprompt = (splits.length > 1 ? splits[1] : ""); let parsedseed = Math.floor(Math.random() * 99999999); - let sampler = req_payload.params.sampler_name; let tiling = false; //first, if we're using the wrong model, switch the model @@ -3930,6 +3934,65 @@ Current version: 93 },false); } + function set_dalle_key() + { + inputBox("Enter DALL-E API Key.\n\nNote: DALL-E is known to rephrase and rewrite submitted image prompts before generating, for censorship purposes. There is nothing Kobold Lite can do about that. ","DALL-E API Key",localsettings.saved_dalle_key,"Input DALL-E API Key", ()=>{ + let userinput = getInputBoxValue(); + userinput = userinput.trim(); + if (userinput != null && userinput!="") { + localsettings.saved_dalle_key = userinput.trim(); + } + },false); + } + + function generate_dalle_image(req_payload, onImagesDone) + { + //split the prompt + let splits = req_payload.prompt.split("###"); + let prompt = splits[0].trim(); + + let dalle_payload = { + "model": "dall-e-3", + "prompt": prompt, + "n": 1, + "size": "1024x1024", + "response_format":"b64_json", + } + + //remove all null fields + dalle_payload = Object.fromEntries(Object.entries(dalle_payload).filter(([_, v]) => v != null)); + + let gen_endpoint = oai_image_endpoint_full; + console.log(dalle_payload); + + fetch(gen_endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + localsettings.saved_dalle_key + }, + body: JSON.stringify(dalle_payload), + }) + .then(x => x.json()) + .then(resp => { + console.log(resp); + if(resp.data && resp.data.length>0) + { + onImagesDone(resp.data[0].b64_json); + } + else + { + console.log("Generation Error!"); + onImagesDone(null); + } + + }).catch((error) => { + console.log("Generation Error: " + error); + onImagesDone(null); + }); + + } + function get_cursor_position() { let editor = document.getElementById("gametext"); @@ -3994,24 +4057,24 @@ Current version: 93 function is_using_kcpp_with_streaming() { - return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.29") > 0); + return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.30") >= 0); } function is_using_kcpp_with_sse() //need 1.39 for multibyte fix { let browsersupported = (self.TransformStream!=null && self.TextDecoderStream!=null && self.WritableStream!=null); - return (browsersupported && custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.39") > 0); + return (browsersupported && custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.40") >= 0); } function is_using_kcpp_with_mirostat() { - return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.36") > 0); + return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.37") >= 0); } function is_using_kcpp_with_grammar() { - return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.43") > 0); + return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.44") >= 0); } function is_using_kcpp_with_added_memory() { - return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.48.2") > 0); + return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.49") >= 0); } //0 is none, 1 is pseudostreaming, 2 is true poll-streaming, 3 is sse-streaming @@ -4328,6 +4391,7 @@ Current version: 93 new_save_storyobj.extrastopseq = extrastopseq; new_save_storyobj.anotestr = anote_strength; new_save_storyobj.wisearchdepth = wi_searchdepth; + new_save_storyobj.wiinsertlocation = wi_insertlocation; if (export_settings) { new_save_storyobj.savedsettings = JSON.parse(JSON.stringify(localsettings)); @@ -4335,6 +4399,7 @@ Current version: 93 new_save_storyobj.savedsettings.my_api_key = "0000000000"; new_save_storyobj.savedsettings.home_cluster = text_hordes[0].baseurl; new_save_storyobj.savedsettings.saved_oai_key = ""; + new_save_storyobj.savedsettings.saved_dalle_key = ""; new_save_storyobj.savedsettings.saved_oai_addr = ""; new_save_storyobj.savedsettings.saved_claude_key = ""; new_save_storyobj.savedsettings.saved_claude_addr = ""; @@ -4544,6 +4609,9 @@ Current version: 93 if (storyobj.wisearchdepth) { wi_searchdepth = storyobj.wisearchdepth; } + if (storyobj.wiinsertlocation) { + wi_insertlocation = storyobj.wiinsertlocation; + } } else { //v2 load if(storyobj.prompt!="") @@ -4609,6 +4677,7 @@ Current version: 93 let tmphc = localsettings.home_cluster; let tmp_oai1 = localsettings.saved_oai_key; let tmp_oai2 = localsettings.saved_oai_addr; + let tmp_oai3 = localsettings.saved_dalle_key; let tmp_or1 = localsettings.saved_openrouter_key; let tmp_claude1 = localsettings.saved_claude_key; let tmp_claude2 = localsettings.saved_claude_addr; @@ -4636,6 +4705,7 @@ Current version: 93 localsettings.home_cluster = tmphc; localsettings.saved_oai_key = tmp_oai1; localsettings.saved_oai_addr = tmp_oai2; + localsettings.saved_dalle_key = tmp_oai3; localsettings.saved_openrouter_key = tmp_or1; localsettings.saved_claude_key = tmp_claude1; localsettings.saved_claude_addr = tmp_claude2; @@ -5744,14 +5814,16 @@ Current version: 93 function select_custom_oai_model() { - inputBox("Enter custom OpenAI model name","Custom Model Name",localsettings.saved_oai_custommodel,"", ()=>{ + let isOpenrouter = (document.getElementById("customapidropdown").value==5); + inputBox("Enter custom "+(isOpenrouter?"OpenAI":"OpenRouter")+" model name","Custom Model Name",localsettings.saved_oai_custommodel,"", ()=>{ let coai = getInputBoxValue().trim(); - let dropdown = document.getElementById("custom_oai_model"); + let dropdown = (isOpenrouter?document.getElementById("custom_openrouter_model"):document.getElementById("custom_oai_model")); + let mdlopt = (isOpenrouter?"custom_openrouter_model_option":"custom_oai_model_option"); if(coai!="") { - document.getElementById("custom_oai_model_option").value = coai; - document.getElementById("custom_oai_model_option").innerText = coai; - document.getElementById("custom_oai_model_option").style.display = ""; + document.getElementById(mdlopt).value = coai; + document.getElementById(mdlopt).innerText = coai; + document.getElementById(mdlopt).style.display = ""; dropdown.selectedIndex = dropdown.options.length - 1; } oai_model_change(); @@ -5759,10 +5831,11 @@ Current version: 93 } function oai_model_change() { - let dropdown = document.getElementById("custom_oai_model"); + let isOpenrouter = (document.getElementById("customapidropdown").value==5); + let dropdown = (isOpenrouter?document.getElementById("custom_openrouter_model"):document.getElementById("custom_oai_model")); let non_completions = (dropdown.value.includes("text-davinci-003") || dropdown.value.includes("text-davinci-002") || dropdown.value.includes("text-davinci-001") || dropdown.value.includes("gpt-3.5-turbo-instruct") || dropdown.value == "davinci"); - if(dropdown.selectedIndex==dropdown.options.length-1) + if(isOpenrouter || dropdown.selectedIndex==dropdown.options.length-1) { document.getElementById("useoaichatcompl").checked = true; } else { @@ -5793,7 +5866,8 @@ Current version: 93 console.log(data); if (!data.error && data.data && data.data.length > 0) { - let dropdown = document.getElementById("custom_oai_model"); + let isOpenrouter = (document.getElementById("customapidropdown").value==5); + let dropdown = (isOpenrouter?document.getElementById("custom_openrouter_model"):document.getElementById("custom_oai_model")); var lastOption = dropdown.lastElementChild; for (var i = dropdown.options.length - 1; i >= 0; i--) { var option = dropdown.options[i]; @@ -5831,6 +5905,8 @@ Current version: 93 document.getElementById("scalecustom").classList.add("hidden"); document.getElementById("claudecustom").classList.add("hidden"); document.getElementById("palmcustom").classList.add("hidden"); + document.getElementById("custom_oai_model").classList.add("hidden"); + document.getElementById("custom_openrouter_model").classList.add("hidden"); if(epchoice==0) { document.getElementById("koboldcustom").classList.remove("hidden"); @@ -5846,6 +5922,7 @@ Current version: 93 { document.getElementById("oaidesc").classList.add("hidden"); document.getElementById("openrouterdesc").classList.remove("hidden"); + document.getElementById("custom_openrouter_model").classList.remove("hidden"); document.getElementById("custom_oai_endpoint").value = default_openrouter_base; document.getElementById("custom_oai_endpoint").classList.add("hidden"); document.getElementById("custom_oai_key").value = localsettings.saved_openrouter_key; @@ -5853,13 +5930,14 @@ Current version: 93 else { document.getElementById("oaidesc").classList.remove("hidden"); + document.getElementById("custom_oai_model").classList.remove("hidden"); document.getElementById("openrouterdesc").classList.add("hidden"); document.getElementById("custom_oai_endpoint").classList.remove("hidden"); document.getElementById("custom_oai_key").value = localsettings.saved_oai_key; document.getElementById("custom_oai_endpoint").value = (localsettings.saved_oai_addr?localsettings.saved_oai_addr:default_oai_base); } - + oai_model_change(); togglejailbreak(); } else if(epchoice==2) @@ -6082,6 +6160,7 @@ Current version: 93 { localsettings.saved_oai_key = custom_oai_key; localsettings.saved_oai_addr = custom_oai_endpoint; + localsettings.saved_dalle_key = custom_oai_key; }else{ localsettings.saved_openrouter_key = custom_oai_key; } @@ -6090,7 +6169,9 @@ Current version: 93 { document.getElementById("jailbreakprompttext").value = defaultoaijailbreak; } - custom_oai_model = document.getElementById("custom_oai_model").value.trim(); + let isOpenrouter = (document.getElementById("customapidropdown").value==5); + let dropdown = (isOpenrouter?document.getElementById("custom_openrouter_model"):document.getElementById("custom_oai_model")); + custom_oai_model = dropdown.value.trim(); localsettings.saved_oai_custommodel = custom_oai_model; selected_models = [{ "performance": 100.0, "queued": 0.0, "eta": 0, "name": custom_oai_model, "count": 1 }]; selected_workers = []; @@ -6922,6 +7003,7 @@ Current version: 93 document.getElementById("ttsselect").innerHTML = ttshtml; document.getElementById("ttsselect").value = localsettings.speech_synth; document.getElementById("beep_on").checked = localsettings.beep_on; + document.getElementById("narrate_both_sides").checked = localsettings.narrate_both_sides; toggle_opmode(); //sd models display @@ -7098,6 +7180,7 @@ Current version: 93 localsettings.speech_synth = document.getElementById("ttsselect").value; localsettings.beep_on = (document.getElementById("beep_on").checked?true:false); + localsettings.narrate_both_sides = (document.getElementById("narrate_both_sides").checked?true:false); localsettings.auto_ctxlen = (document.getElementById("auto_ctxlen").checked ? true : false); localsettings.auto_genamt = (document.getElementById("auto_genamt").checked ? true : false); @@ -7215,9 +7298,11 @@ Current version: 93 if(document.getElementById("generate_images_mode").value==0) { document.getElementById("generate_images_model").classList.add("hidden"); + document.getElementById("generate_images_dalle_container").classList.add("hidden"); document.getElementById("generate_images_local_model_container").classList.add("hidden"); }else if(document.getElementById("generate_images_mode").value==1){ document.getElementById("generate_images_model").classList.remove("hidden"); + document.getElementById("generate_images_dalle_container").classList.add("hidden"); document.getElementById("generate_images_local_model_container").classList.add("hidden"); if(!image_models_fetched) { @@ -7227,10 +7312,15 @@ Current version: 93 update_horde_sdmodels(); }); } - }else{ + }else if(document.getElementById("generate_images_mode").value==2){ document.getElementById("generate_images_model").classList.add("hidden"); + document.getElementById("generate_images_dalle_container").classList.add("hidden"); document.getElementById("generate_images_local_model_container").classList.remove("hidden"); connect_to_a1111(silent); + }else if(document.getElementById("generate_images_mode").value==3){ + document.getElementById("generate_images_model").classList.add("hidden"); + document.getElementById("generate_images_dalle_container").classList.remove("hidden"); + document.getElementById("generate_images_local_model_container").classList.add("hidden"); } } @@ -7506,6 +7596,7 @@ Current version: 93 extrastopseq = ""; anote_strength = 320; wi_searchdepth = 0; + wi_insertlocation = 0; current_anotetemplate = "[Author's note: <|>]"; document.getElementById("input_text").value = ""; document.getElementById("cht_inp").value = ""; @@ -7753,20 +7844,24 @@ Current version: 93 function btn_addimg_longpress_start() { addimgLongPressTimer = setTimeout(()=>{ - inputBox("Enter a prompt to generate an image with.","Generate Image Manually","","Enter a Prompt",()=>{ - let userinput = getInputBoxValue(); - if(userinput.trim()!="") - { - var sentence = userinput.trim().substring(0, 300); - do_manual_gen_image(sentence); - } - },false); + popup_manual_image(); }, 2000); } function btn_addimg_longpress_end() { clearTimeout(addimgLongPressTimer); } + function popup_manual_image() + { + inputBox("Tip: You can generate images manually by long-pressing the 'Add Img' button.\n\nEnter a prompt to generate an image with.","Generate Image Manually","","Enter a Prompt",()=>{ + let userinput = getInputBoxValue(); + if(userinput.trim()!="") + { + var sentence = userinput.trim().substring(0, 300); + do_manual_gen_image(sentence); + } + },false); + } function do_manual_gen_image(sentence) { @@ -7792,6 +7887,8 @@ Current version: 93 nextgeneratedimagemilestone = tclen + generateimagesinterval; do_manual_gen_image(sentence); } + }else{ + popup_manual_image(); } } @@ -7807,9 +7904,12 @@ Current version: 93 idle_timer = 0; idle_triggered_counter = 0; if (localsettings.speech_synth > 0 && 'speechSynthesis' in window) { - let utterance = new window.SpeechSynthesisUtterance(newgen); - utterance.voice = window.speechSynthesis.getVoices()[localsettings.speech_synth - 1]; - window.speechSynthesis.speak(utterance); + if(localsettings.narrate_both_sides) + { + let utterance = new window.SpeechSynthesisUtterance(newgen); + utterance.voice = window.speechSynthesis.getVoices()[localsettings.speech_synth - 1]; + window.speechSynthesis.speak(utterance); + } } if (localsettings.opmode == 4) @@ -8092,6 +8192,7 @@ Current version: 93 wimatch_context = wimatch_context.toLowerCase(); } + let wistr = ""; if (current_wi.length > 0) { for (var x = 0; x < current_wi.length; ++x) { let wi = current_wi[x]; @@ -8131,11 +8232,12 @@ Current version: 93 } if (shoulduse) { - truncated_memory += wi.content + "\n"; + wistr += wi.content + "\n"; } } } + //we clip the authors note if its too long let truncated_anote = current_anotetemplate.replace("<|>", current_anote); truncated_anote = substring_to_boundary(truncated_anote, max_anote_len); @@ -8145,6 +8247,15 @@ Current version: 93 truncated_anote = ""; } + if(wi_insertlocation>0) + { + truncated_anote = wistr + truncated_anote; + } + else + { + truncated_memory += wistr; + } + //now we resize the context such that the memory and authors note can fit inside truncated_context = substring_to_boundary(truncated_context, max_allowed_characters); @@ -8350,12 +8461,12 @@ Current version: 93 submit_payload.quiet = !showlog; //for vesion 1.2.2 and later, send stopper tokens for chat and instruct - if (kobold_endpoint_version && kobold_endpoint_version != "" && compare_version_str(kobold_endpoint_version, "1.2.1") > 0) { + if (kobold_endpoint_version && kobold_endpoint_version != "" && compare_version_str(kobold_endpoint_version, "1.2.2") >= 0) { submit_payload.stop_sequence = get_stop_sequences(); } //version 1.2.4 and later supports unban tokens - if (kobold_endpoint_version && kobold_endpoint_version != "" && compare_version_str(kobold_endpoint_version, "1.2.3") > 0) + if (kobold_endpoint_version && kobold_endpoint_version != "" && compare_version_str(kobold_endpoint_version, "1.2.4") >= 0) { submit_payload.use_default_badwordsids = determine_if_ban_eos(input_was_empty); } @@ -8777,7 +8888,7 @@ Current version: 93 "r2": false } - if(localsettings.generate_images_mode==1) + if(localsettings.generate_images_mode==1) //horde { fetch(stablehorde_submit_endpoint, { method: 'POST', // or 'PUT' @@ -8807,7 +8918,9 @@ Current version: 93 console.error('Error:', error); msgbox("Image generation error: " + error); }); - } else { + } + else if(localsettings.generate_images_mode==2) //a1111 + { let desired_model = document.getElementById("generate_images_local_model").value; genimg_payload.models = [desired_model]; let imgid = "A111img"+(Math.floor(10000 + Math.random() * 90000)).toString(); @@ -8829,6 +8942,34 @@ Current version: 93 } }); } + else if(localsettings.generate_images_mode==3) //dalle + { + if(localsettings.saved_dalle_key=="") + { + msgbox("Error: A valid DALL-E Key is required to generate images with DALL-E.\nThis is usually the same as your OpenAI API key, but can be customized in settings.","Invalid DALL-E Key"); + } + else + { + let imgid = "DALLEimg"+(Math.floor(10000 + Math.random() * 90000)).toString(); + let nimgtag = "[<|p|" + imgid + "|p|>]"; + gametext_arr.push(nimgtag); + image_db[imgid] = { done: false, queue: "Generating", result: "", alt:sentence, local:true }; + generate_dalle_image(genimg_payload,(outputimg)=>{ + if(outputimg) + { + //console.log(outputimg); + let origImg = "data:image/jpeg;base64," + outputimg; + compressImage(origImg, (newDataUri) => { + image_db[imgid].done = true; + image_db[imgid].result = newDataUri; + }, true); + }else{ + image_db[imgid].queue = "Failed"; + msgbox("Image Generation Failed!\n\nPlease make sure your OpenAI key is set correctly and you are allowed to use DALL-E.\n"); + } + }); + } + } } function click_image(target) @@ -9046,6 +9187,7 @@ Current version: 93 } } + let gentxtspeak = gentxt; if (pending_context_preinjection != "") { if(gentxt!="" && gentxt[0]!=" " && localsettings.opmode==3) { @@ -9056,8 +9198,13 @@ Current version: 93 pending_context_preinjection = ""; } - if (localsettings.speech_synth > 0 && 'speechSynthesis' in window) { - let utterance = new window.SpeechSynthesisUtterance(gentxt); + if (localsettings.speech_synth > 0 && 'speechSynthesis' in window) + { + if(localsettings.narrate_both_sides) + { + gentxtspeak = gentxt; + } + let utterance = new window.SpeechSynthesisUtterance(gentxtspeak); utterance.voice = window.speechSynthesis.getVoices()[localsettings.speech_synth - 1]; window.speechSynthesis.speak(utterance); } @@ -10321,6 +10468,7 @@ Current version: 93 } localsettings.case_sensitive_wi = (document.getElementById("case_sensitive_wi").checked?true:false); wi_searchdepth = document.getElementById("wi_searchdepth").value; + wi_insertlocation = document.getElementById("wi_insertlocation").value; } let backup_wi_obj = []; @@ -10381,7 +10529,7 @@ Current version: 93 selectionhtml += "" wilist.innerHTML = selectionhtml; document.getElementById("wi_searchdepth").value = wi_searchdepth; - + document.getElementById("wi_insertlocation").value = wi_insertlocation; } var backLongPressTimer = null; @@ -11386,6 +11534,49 @@ Current version: 93 + @@ -11818,6 +12009,7 @@ Current version: 93 + @@ -11829,6 +12021,9 @@ Current version: 93 +
@@ -11858,6 +12053,10 @@ Current version: 93 +
+
Narrate Both Sides
+ +
Beep on Done
@@ -12049,10 +12248,18 @@ Current version: 93
+ +
+
WI Insert Location ?Controls where the world info should be inserted
+
WI Search Depth ?Controls how far back in the text to search for World Info Keys
-