mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2025-09-10 17:14:36 +00:00
multiplayer error handling
This commit is contained in:
parent
1b663e10c8
commit
a439dcb38e
2 changed files with 254 additions and 13 deletions
250
klite.embd
250
klite.embd
|
@ -12,7 +12,7 @@ Current version indicated by LITEVER below.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const LITEVER = 187;
|
const LITEVER = 188;
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
var localflag = true;
|
var localflag = true;
|
||||||
const STORAGE_PREFIX = (localflag?"e_":"")+"kaihordewebui_";
|
const STORAGE_PREFIX = (localflag?"e_":"")+"kaihordewebui_";
|
||||||
|
@ -636,6 +636,16 @@ Current version indicated by LITEVER below.
|
||||||
color: #d3e7ff;
|
color: #d3e7ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.color_orangeurl {
|
||||||
|
color: #f7a223;
|
||||||
|
}
|
||||||
|
.color_orangeurl:hover {
|
||||||
|
color: #ffe8d6;
|
||||||
|
}
|
||||||
|
.color_orangeurl:focus {
|
||||||
|
color: #ffedd3;
|
||||||
|
}
|
||||||
|
|
||||||
.color_orange {
|
.color_orange {
|
||||||
color: #f7a223;
|
color: #f7a223;
|
||||||
}
|
}
|
||||||
|
@ -4241,6 +4251,7 @@ Current version indicated by LITEVER below.
|
||||||
const poll_interval_base_text = 500;
|
const poll_interval_base_text = 500;
|
||||||
const poll_interval_base_img = 3800;
|
const poll_interval_base_img = 3800;
|
||||||
const poll_interval_idle = 1000;
|
const poll_interval_idle = 1000;
|
||||||
|
const poll_interval_multiplayer = 2500; //every 2.5s
|
||||||
|
|
||||||
const text_hordes = [
|
const text_hordes = [
|
||||||
{
|
{
|
||||||
|
@ -4296,6 +4307,9 @@ Current version indicated by LITEVER below.
|
||||||
const koboldcpp_logprobs_endpoint = "/api/extra/last_logprobs";
|
const koboldcpp_logprobs_endpoint = "/api/extra/last_logprobs";
|
||||||
const koboldcpp_truemaxctxlen_endpoint = "/api/extra/true_max_context_length";
|
const koboldcpp_truemaxctxlen_endpoint = "/api/extra/true_max_context_length";
|
||||||
const koboldcpp_preloadstory_endpoint = "/api/extra/preloadstory";
|
const koboldcpp_preloadstory_endpoint = "/api/extra/preloadstory";
|
||||||
|
const koboldcpp_multiplayer_check_endpoint = "/api/extra/multiplayer/status";
|
||||||
|
const koboldcpp_multiplayer_fetch_endpoint = "/api/extra/multiplayer/getstory";
|
||||||
|
const koboldcpp_multiplayer_submit_endpoint = "/api/extra/multiplayer/setstory";
|
||||||
const koboldcpp_transcribe_endpoint = "/api/extra/transcribe";
|
const koboldcpp_transcribe_endpoint = "/api/extra/transcribe";
|
||||||
const koboldcpp_tokenize_endpoint = "/api/extra/tokencount";
|
const koboldcpp_tokenize_endpoint = "/api/extra/tokencount";
|
||||||
const koboldcpp_perf_endpoint = "/api/extra/perf";
|
const koboldcpp_perf_endpoint = "/api/extra/perf";
|
||||||
|
@ -4432,6 +4446,12 @@ Current version indicated by LITEVER below.
|
||||||
var koboldcpp_version = ""; //detect if we are using koboldcpp
|
var koboldcpp_version = ""; //detect if we are using koboldcpp
|
||||||
var koboldcpp_version_obj = {};
|
var koboldcpp_version_obj = {};
|
||||||
var koboldcpp_has_vision = false;
|
var koboldcpp_has_vision = false;
|
||||||
|
var koboldcpp_has_multiplayer = false;
|
||||||
|
var multiplayer_active = false;
|
||||||
|
var multiplayer_last_turn_major = 0;
|
||||||
|
var multiplayer_last_turn_minor = 0;
|
||||||
|
var schedule_multiplayer_minor_change = false;
|
||||||
|
var schedule_multiplayer_major_change = false;
|
||||||
var last_request_str = "No Requests Available"; //full context of last submitted request
|
var last_request_str = "No Requests Available"; //full context of last submitted request
|
||||||
var last_response_obj = null;
|
var last_response_obj = null;
|
||||||
var lastcheckgenkey = ""; //for checking polled-streaming unique id when generating in kcpp
|
var lastcheckgenkey = ""; //for checking polled-streaming unique id when generating in kcpp
|
||||||
|
@ -4983,6 +5003,7 @@ Current version indicated by LITEVER below.
|
||||||
//can we find the model that's used? if yes load it, otherwise load the first one
|
//can we find the model that's used? if yes load it, otherwise load the first one
|
||||||
if (mdls.length > 0)
|
if (mdls.length > 0)
|
||||||
{
|
{
|
||||||
|
selected_models = []; //force clear is needed, as it can get overwritten
|
||||||
for (var i = 0; i < mdls.length; ++i) {
|
for (var i = 0; i < mdls.length; ++i) {
|
||||||
let skipignored = false;
|
let skipignored = false;
|
||||||
for(let k=0;k<ignoredmodels.length;++k)
|
for(let k=0;k<ignoredmodels.length;++k)
|
||||||
|
@ -5033,6 +5054,7 @@ Current version indicated by LITEVER below.
|
||||||
setInterval(poll_pending_response, poll_interval_base_text);
|
setInterval(poll_pending_response, poll_interval_base_text);
|
||||||
setInterval(poll_image_db, poll_interval_base_img); //check images every Xs
|
setInterval(poll_image_db, poll_interval_base_img); //check images every Xs
|
||||||
setInterval(poll_idle_responses, poll_interval_idle); //a basic update loop for idle responses
|
setInterval(poll_idle_responses, poll_interval_idle); //a basic update loop for idle responses
|
||||||
|
setInterval(poll_multiplayer, poll_interval_multiplayer); //a basic update loop for idle responses
|
||||||
|
|
||||||
attempt_connect(false);
|
attempt_connect(false);
|
||||||
|
|
||||||
|
@ -5224,6 +5246,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "AI Horde";
|
document.getElementById("connectstatus").innerHTML = "AI Horde";
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
render_gametext(false);
|
render_gametext(false);
|
||||||
|
@ -5238,6 +5261,7 @@ Current version indicated by LITEVER below.
|
||||||
else {
|
else {
|
||||||
msgbox("Failed to connect to AI Horde Service!\nPlease check your network connection.<br><br>You may still be able to connect to an alternative service, <a href='#' class='color_blueurl' onclick='hide_popups();display_endpoint_container()'>click here to view options</a>.","Error Encountered",true);
|
msgbox("Failed to connect to AI Horde Service!\nPlease check your network connection.<br><br>You may still be able to connect to an alternative service, <a href='#' class='color_blueurl' onclick='hide_popups();display_endpoint_container()'>click here to view options</a>.","Error Encountered",true);
|
||||||
document.body.classList.remove("connected");
|
document.body.classList.remove("connected");
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "Offline Mode";
|
document.getElementById("connectstatus").innerHTML = "Offline Mode";
|
||||||
document.getElementById("connectstatus").classList.remove("color_offwhite");
|
document.getElementById("connectstatus").classList.remove("color_offwhite");
|
||||||
render_gametext(false);
|
render_gametext(false);
|
||||||
|
@ -5899,6 +5923,10 @@ Current version indicated by LITEVER below.
|
||||||
{
|
{
|
||||||
return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.74") >= 0);
|
return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.74") >= 0);
|
||||||
}
|
}
|
||||||
|
function is_using_kcpp_with_multiplayer()
|
||||||
|
{
|
||||||
|
return (custom_kobold_endpoint!="" && koboldcpp_version && koboldcpp_version!="" && compare_version_str(koboldcpp_version, "1.78") >= 0 && koboldcpp_has_multiplayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//0 is none, 1 is pseudostreaming, 2 is true poll-streaming, 3 is sse-streaming
|
//0 is none, 1 is pseudostreaming, 2 is true poll-streaming, 3 is sse-streaming
|
||||||
|
@ -6560,6 +6588,7 @@ Current version indicated by LITEVER below.
|
||||||
restart_new_game(false);
|
restart_new_game(false);
|
||||||
gametext_arr.push(text);
|
gametext_arr.push(text);
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
sync_multiplayer(true);
|
||||||
}, null, true)
|
}, null, true)
|
||||||
} else {
|
} else {
|
||||||
msgbox("Could not load selected file. Is it valid?");
|
msgbox("Could not load selected file. Is it valid?");
|
||||||
|
@ -6587,10 +6616,10 @@ Current version indicated by LITEVER below.
|
||||||
return is_kai;
|
return is_kai;
|
||||||
}
|
}
|
||||||
|
|
||||||
function kai_json_load(storyobj, force_load_settngs)
|
function kai_json_load(storyobj, force_load_settings, ignore_multiplayer_sync)
|
||||||
{
|
{
|
||||||
//either show popup or just proceed to load
|
//either show popup or just proceed to load
|
||||||
handle_advload_popup((localsettings.show_advanced_load && !force_load_settngs),()=>
|
handle_advload_popup((localsettings.show_advanced_load && !force_load_settings),()=>
|
||||||
{
|
{
|
||||||
let old_gametext_arr = gametext_arr;
|
let old_gametext_arr = gametext_arr;
|
||||||
let old_current_anote = current_anote;
|
let old_current_anote = current_anote;
|
||||||
|
@ -6845,7 +6874,7 @@ Current version indicated by LITEVER below.
|
||||||
migrate_old_images_in_gametext();
|
migrate_old_images_in_gametext();
|
||||||
|
|
||||||
//prompt to import settings
|
//prompt to import settings
|
||||||
if (localsettings.show_advanced_load && !force_load_settngs)
|
if (localsettings.show_advanced_load && !force_load_settings)
|
||||||
{
|
{
|
||||||
import_settings(
|
import_settings(
|
||||||
document.getElementById("advset_mainstory").checked,
|
document.getElementById("advset_mainstory").checked,
|
||||||
|
@ -6860,6 +6889,10 @@ Current version indicated by LITEVER below.
|
||||||
import_settings(true, true, true, true, true, true);
|
import_settings(true, true, true, true, true, true);
|
||||||
}
|
}
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
if(!ignore_multiplayer_sync) //we don't want an infinite loop
|
||||||
|
{
|
||||||
|
sync_multiplayer(true);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7041,6 +7074,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(localsettings.import_tavern_prompt)
|
if(localsettings.import_tavern_prompt)
|
||||||
|
@ -7082,6 +7116,7 @@ Current version indicated by LITEVER below.
|
||||||
localsettings.opmode = 3;
|
localsettings.opmode = 3;
|
||||||
localsettings.gui_type_chat = 2;
|
localsettings.gui_type_chat = 2;
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
function nai_json_load(obj)
|
function nai_json_load(obj)
|
||||||
{
|
{
|
||||||
|
@ -7104,6 +7139,7 @@ Current version indicated by LITEVER below.
|
||||||
current_wi = load_nai_wi(obj.lorebook);
|
current_wi = load_nai_wi(obj.lorebook);
|
||||||
}
|
}
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
function load_nai_wi(obj)
|
function load_nai_wi(obj)
|
||||||
{
|
{
|
||||||
|
@ -7652,6 +7688,93 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function leave_multiplayer()
|
||||||
|
{
|
||||||
|
multiplayer_active = false;
|
||||||
|
multiplayer_last_turn_major = 0;
|
||||||
|
multiplayer_last_turn_minor = 0;
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
render_gametext(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function join_multiplayer()
|
||||||
|
{
|
||||||
|
if(is_using_kcpp_with_multiplayer())
|
||||||
|
{
|
||||||
|
inputBox(`You're about to enter a Multiplayer Session.<br><br><span class="color_red">Note that stories or messages sent by other users are <b>unfiltered</b>, and may contain <b>offensive or disturbing content</b>. You assume full responsibility and participate at your own discretion.</span><br><br>Enter a unique nickname to use for chat mode (only yourself), or leave it blank to share the same common chatname with other users.`,"Join Multiplayer - Override Chat Nickname?","","[No Override]", ()=>{
|
||||||
|
let userinput = getInputBoxValue().trim();
|
||||||
|
multiplayer_active = true;
|
||||||
|
multiplayer_last_turn_major = 0;
|
||||||
|
multiplayer_last_turn_minor = 0;
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
render_gametext(false);
|
||||||
|
},true);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
leave_multiplayer();
|
||||||
|
msgbox("Multiplayer is not available or not enabled on this backend","No Multiplayer Detected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync_multiplayer(fullupdate)
|
||||||
|
{
|
||||||
|
if(!is_using_kcpp_with_multiplayer() || !multiplayer_active)
|
||||||
|
{
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
schedule_multiplayer_minor_change = true;
|
||||||
|
if(fullupdate)
|
||||||
|
{
|
||||||
|
schedule_multiplayer_major_change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function submit_multiplayer(fullupdate)
|
||||||
|
{
|
||||||
|
if(!is_using_kcpp_with_multiplayer() || !multiplayer_active)
|
||||||
|
{
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let subdata = generate_compressed_story(true,true,true);
|
||||||
|
|
||||||
|
fetch(apply_proxy_url(custom_kobold_endpoint + koboldcpp_multiplayer_submit_endpoint),
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: get_kobold_header(),
|
||||||
|
body: JSON.stringify({
|
||||||
|
"fullupdate": fullupdate,
|
||||||
|
"data": subdata,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(vals => {
|
||||||
|
if(vals && vals.success)
|
||||||
|
{
|
||||||
|
let expected_major = (fullupdate?(1+multiplayer_last_turn_major):multiplayer_last_turn_major);
|
||||||
|
let expected_minor = (fullupdate?0:(multiplayer_last_turn_minor+1));
|
||||||
|
if(vals.turn_major==expected_major && vals.turn_minor==expected_minor)
|
||||||
|
{
|
||||||
|
//if nobody else updated, disregard our own updates
|
||||||
|
multiplayer_last_turn_major = expected_major;
|
||||||
|
multiplayer_last_turn_minor = expected_minor;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
leave_multiplayer();
|
||||||
|
msgbox("Multiplayer Error: " + JSON.stringify(vals),"Disconnected from Multiplayer");
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
leave_multiplayer();
|
||||||
|
msgbox("Multiplayer Error: " + error,"Disconnected from Multiplayer");
|
||||||
|
console.log("Failed to access multiplayer status: " + error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function character_creator()
|
function character_creator()
|
||||||
{
|
{
|
||||||
hide_popups();
|
hide_popups();
|
||||||
|
@ -7704,6 +7827,7 @@ Current version indicated by LITEVER below.
|
||||||
localsettings.gui_type_chat = 2;
|
localsettings.gui_type_chat = 2;
|
||||||
localsettings.chatopponent = chatopponent;
|
localsettings.chatopponent = chatopponent;
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
tempAestheticInstructUISettings = null;
|
tempAestheticInstructUISettings = null;
|
||||||
hide_popups();
|
hide_popups();
|
||||||
|
@ -7825,6 +7949,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
|
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
function togglescenarioautopick()
|
function togglescenarioautopick()
|
||||||
{
|
{
|
||||||
|
@ -7971,6 +8096,10 @@ Current version indicated by LITEVER below.
|
||||||
let entry = `<button type="button" name="`+i+`" class="scenarioitem `+bcolor+` btn btn-primary" onclick="return click_scenario(`+i+`)">`+curr.title+`</button>`;
|
let entry = `<button type="button" name="`+i+`" class="scenarioitem `+bcolor+` btn btn-primary" onclick="return click_scenario(`+i+`)">`+curr.title+`</button>`;
|
||||||
scenarios += entry;
|
scenarios += entry;
|
||||||
}
|
}
|
||||||
|
if(is_using_kcpp_with_multiplayer())
|
||||||
|
{
|
||||||
|
scenarios += `<button type="button" name="" class="scenarioitem purple btn btn-primary" onclick="hide_popups();join_multiplayer()">Join Multiplayer</button>`;
|
||||||
|
}
|
||||||
|
|
||||||
document.getElementById("scenariogrid").innerHTML = scenarios;
|
document.getElementById("scenariogrid").innerHTML = scenarios;
|
||||||
document.getElementById("scenariodesc").innerText = "No Scenario Selected";
|
document.getElementById("scenariodesc").innerText = "No Scenario Selected";
|
||||||
|
@ -8806,7 +8935,7 @@ Current version indicated by LITEVER below.
|
||||||
function togglepalmmodel()
|
function togglepalmmodel()
|
||||||
{
|
{
|
||||||
let mdlname = document.getElementById("custom_palm_model").value;
|
let mdlname = document.getElementById("custom_palm_model").value;
|
||||||
if(mdlname=="gemini-1.5-pro-latest" || mdlname=="gemini-1.5-pro-001" || mdlname=="gemini-1.5-pro-002" || mdlname=="gemini-1.5-flash-latest" || mdlname=="gemini-1.5-pro-exp-0801" || mdlname=="gemini-1.5-pro-exp-0827")
|
if(mdlname=="gemini-1.5-pro-latest" || mdlname=="gemini-1.5-pro-001" || mdlname=="gemini-1.5-pro-002" || mdlname=="gemini-1.5-flash-latest" || mdlname=="gemini-1.5-pro-exp-0801" || mdlname=="gemini-1.5-pro-exp-0827" || mdlname=="gemini-exp-1114")
|
||||||
{
|
{
|
||||||
document.getElementById("gemini_system_instruction").classList.remove("hidden");
|
document.getElementById("gemini_system_instruction").classList.remove("hidden");
|
||||||
if(localsettings.saved_palm_jailbreak=="")
|
if(localsettings.saved_palm_jailbreak=="")
|
||||||
|
@ -9260,6 +9389,7 @@ Current version indicated by LITEVER below.
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
}
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "KoboldAI Endpoint";
|
document.getElementById("connectstatus").innerHTML = "KoboldAI Endpoint";
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
|
||||||
|
@ -9316,9 +9446,11 @@ Current version indicated by LITEVER below.
|
||||||
koboldcpp_version_obj = data;
|
koboldcpp_version_obj = data;
|
||||||
koboldcpp_version = data.version;
|
koboldcpp_version = data.version;
|
||||||
console.log("KoboldCpp Detected: " + koboldcpp_version);
|
console.log("KoboldCpp Detected: " + koboldcpp_version);
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = (`<span style='cursor: pointer;' onclick='fetch_koboldcpp_perf()'>KoboldCpp ${koboldcpp_version}</a>`);
|
document.getElementById("connectstatus").innerHTML = (`<span style='cursor: pointer;' onclick='fetch_koboldcpp_perf()'>KoboldCpp ${koboldcpp_version}</a>`);
|
||||||
koboldcpp_has_vision = (data.vision?true:false);
|
koboldcpp_has_vision = (data.vision?true:false);
|
||||||
koboldcpp_has_whisper = (data.transcribe?true:false);
|
koboldcpp_has_whisper = (data.transcribe?true:false);
|
||||||
|
koboldcpp_has_multiplayer = (data.multiplayer?true:false);
|
||||||
let has_password = (data.protected?true:false);
|
let has_password = (data.protected?true:false);
|
||||||
let has_txt2img = (data.txt2img?true:false);
|
let has_txt2img = (data.txt2img?true:false);
|
||||||
let no_txt_model = (mdlname=="inactive");
|
let no_txt_model = (mdlname=="inactive");
|
||||||
|
@ -9363,6 +9495,12 @@ Current version indicated by LITEVER below.
|
||||||
close_welcome_panel(false);
|
close_welcome_panel(false);
|
||||||
kai_json_load(tmpstory, false);
|
kai_json_load(tmpstory, false);
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
if(koboldcpp_has_multiplayer)
|
||||||
|
{
|
||||||
|
//force refresh
|
||||||
|
render_gametext(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
console.log("Failed to get preloaded story: " + error);
|
console.log("Failed to get preloaded story: " + error);
|
||||||
|
@ -9471,6 +9609,7 @@ Current version indicated by LITEVER below.
|
||||||
custom_kobold_endpoint = "";
|
custom_kobold_endpoint = "";
|
||||||
if(localflag)
|
if(localflag)
|
||||||
{
|
{
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "Offline Mode";
|
document.getElementById("connectstatus").innerHTML = "Offline Mode";
|
||||||
}
|
}
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
@ -9549,6 +9688,7 @@ Current version indicated by LITEVER below.
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
}
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "OpenAI Endpoint";
|
document.getElementById("connectstatus").innerHTML = "OpenAI Endpoint";
|
||||||
render_gametext(true);
|
render_gametext(true);
|
||||||
}
|
}
|
||||||
|
@ -9599,6 +9739,7 @@ Current version indicated by LITEVER below.
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
}
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "Claude Endpoint";
|
document.getElementById("connectstatus").innerHTML = "Claude Endpoint";
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
|
||||||
|
@ -9631,6 +9772,7 @@ Current version indicated by LITEVER below.
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
}
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "Gemini Endpoint";
|
document.getElementById("connectstatus").innerHTML = "Gemini Endpoint";
|
||||||
render_gametext();
|
render_gametext();
|
||||||
}
|
}
|
||||||
|
@ -9662,6 +9804,7 @@ Current version indicated by LITEVER below.
|
||||||
document.body.classList.add("connected");
|
document.body.classList.add("connected");
|
||||||
document.getElementById("connectstatus").classList.add("color_offwhite");
|
document.getElementById("connectstatus").classList.add("color_offwhite");
|
||||||
}
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "Cohere Endpoint";
|
document.getElementById("connectstatus").innerHTML = "Cohere Endpoint";
|
||||||
render_gametext();
|
render_gametext();
|
||||||
}
|
}
|
||||||
|
@ -10067,6 +10210,7 @@ Current version indicated by LITEVER below.
|
||||||
desired_new_home_cluster = null;
|
desired_new_home_cluster = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
document.getElementById("connectstatus").innerHTML = "AI Horde";
|
document.getElementById("connectstatus").innerHTML = "AI Horde";
|
||||||
|
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
@ -10909,6 +11053,7 @@ Current version indicated by LITEVER below.
|
||||||
|
|
||||||
autosave();//need to always autosave, so that we can switch back to non persistent sessions
|
autosave();//need to always autosave, so that we can switch back to non persistent sessions
|
||||||
render_gametext(false);
|
render_gametext(false);
|
||||||
|
sync_multiplayer(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_preset_instruct_tag_format(sel)
|
function get_preset_instruct_tag_format(sel)
|
||||||
|
@ -11175,6 +11320,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
hide_popups();
|
hide_popups();
|
||||||
restart_new_game(true, document.getElementById("keep_memory").checked);
|
restart_new_game(true, document.getElementById("keep_memory").checked);
|
||||||
|
sync_multiplayer(true);
|
||||||
hide_popups();
|
hide_popups();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11501,6 +11647,7 @@ Current version indicated by LITEVER below.
|
||||||
let ns = new AestheticInstructUISettings();
|
let ns = new AestheticInstructUISettings();
|
||||||
aestheticInstructUISettings = deepCopyAestheticSettings(ns);
|
aestheticInstructUISettings = deepCopyAestheticSettings(ns);
|
||||||
refreshPreview(false);
|
refreshPreview(false);
|
||||||
|
leave_multiplayer();
|
||||||
restart_new_game();
|
restart_new_game();
|
||||||
display_settings();
|
display_settings();
|
||||||
confirm_settings();
|
confirm_settings();
|
||||||
|
@ -12981,6 +13128,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
|
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
is_impersonate_user = false;
|
is_impersonate_user = false;
|
||||||
}
|
}
|
||||||
|
@ -15242,6 +15390,83 @@ Current version indicated by LITEVER below.
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function poll_multiplayer()
|
||||||
|
{
|
||||||
|
if(!is_using_kcpp_with_multiplayer() || !multiplayer_active)
|
||||||
|
{
|
||||||
|
document.getElementById("multiplayerstatus").innerText = "";
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
document.getElementById("multiplayerstatus").innerHTML = `<a href="#" onclick="leave_multiplayer()" class="color_orangeurl" style="font-size:10px">[Exit Multiplayer]</a>`;
|
||||||
|
|
||||||
|
//send our changes if they exist
|
||||||
|
if(schedule_multiplayer_minor_change || schedule_multiplayer_major_change)
|
||||||
|
{
|
||||||
|
submit_multiplayer(schedule_multiplayer_major_change);
|
||||||
|
schedule_multiplayer_minor_change = false;
|
||||||
|
schedule_multiplayer_major_change = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//listen for others changes
|
||||||
|
fetch(apply_proxy_url(custom_kobold_endpoint + koboldcpp_multiplayer_check_endpoint),
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: get_kobold_header(),
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(vals => {
|
||||||
|
if(vals && vals.turn_major && multiplayer_active && (vals.turn_major != multiplayer_last_turn_major || vals.turn_minor != multiplayer_last_turn_minor))
|
||||||
|
{
|
||||||
|
let minor_change = (multiplayer_last_turn_major == vals.turn_major);
|
||||||
|
multiplayer_last_turn_major = vals.turn_major;
|
||||||
|
multiplayer_last_turn_minor = vals.turn_minor;
|
||||||
|
fetch(apply_proxy_url(custom_kobold_endpoint + koboldcpp_multiplayer_fetch_endpoint),
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: get_kobold_header(),
|
||||||
|
})
|
||||||
|
.then(response => response.text())
|
||||||
|
.then(story => {
|
||||||
|
let tmpstory = decompress_story(story);
|
||||||
|
if(tmpstory && is_kai_json(tmpstory))
|
||||||
|
{
|
||||||
|
if(minor_change)
|
||||||
|
{
|
||||||
|
//minor change, load only gametext_arr. assume its v1
|
||||||
|
gametext_arr = [];
|
||||||
|
if (tmpstory.prompt != "") {
|
||||||
|
gametext_arr.push(tmpstory.prompt);
|
||||||
|
}
|
||||||
|
for (var i = 0; i < tmpstory.actions.length; ++i) {
|
||||||
|
gametext_arr.push(tmpstory.actions[i]);
|
||||||
|
}
|
||||||
|
render_gametext(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
kai_json_load(tmpstory, true, true); //major change, load everything
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
console.log("Failed to get multiplayer story: " + error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if(!vals || vals.error)
|
||||||
|
{
|
||||||
|
leave_multiplayer();
|
||||||
|
msgbox("Disconnected from multiplayer due to bad response.","Disconnected from Multiplayer");
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
leave_multiplayer();
|
||||||
|
msgbox("Disconnected from multiplayer: " + error,"Disconnected from Multiplayer");
|
||||||
|
console.log("Failed to access multiplayer status: " + error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//clock speed is 500ms per tick
|
//clock speed is 500ms per tick
|
||||||
function poll_pending_response()
|
function poll_pending_response()
|
||||||
{
|
{
|
||||||
|
@ -15341,6 +15566,7 @@ Current version indicated by LITEVER below.
|
||||||
synchro_pending_stream = "";
|
synchro_pending_stream = "";
|
||||||
show_abort_button(false);
|
show_abort_button(false);
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -15609,6 +15835,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
|
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
console.log("Merged edit field. Parts:" + gametext_arr.length);
|
console.log("Merged edit field. Parts:" + gametext_arr.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15920,7 +16147,9 @@ Current version indicated by LITEVER below.
|
||||||
|
|
||||||
document.getElementById("gametext").innerHTML = `Welcome to <span class="color_cyan">KoboldAI Lite</span>!`+
|
document.getElementById("gametext").innerHTML = `Welcome to <span class="color_cyan">KoboldAI Lite</span>!`+
|
||||||
`<br>You are using the models <span class="color_green">${selmodelstr}</span>${(selected_workers.length == 0 ? `` : ` (Pinned to ${selected_workers.length} worker IDs)`)}.`+
|
`<br>You are using the models <span class="color_green">${selmodelstr}</span>${(selected_workers.length == 0 ? `` : ` (Pinned to ${selected_workers.length} worker IDs)`)}.`+
|
||||||
`${whorun}.<br><br><b><span class="color_orange">${nowmode} Selected</span></b> - Enter a prompt below to begin!`+
|
`${whorun}.`+
|
||||||
|
(multiplayer_active?`<br><br><span class="color_green">[ Multiplayer is <b>Active</b>! This session is shared with other server participants.]<br>[ You can leave via exit button in top right corner. ]</span>`:(is_using_kcpp_with_multiplayer()?`<br><br>[ <a href="#" tabindex="${mainmenu_is_untab?`-1`:`0`}" class="color_blueurl mainnav" onclick="join_multiplayer()"><span class="color_green">Multiplayer Available</span> - Click Here To Join</a> ]`:``))+
|
||||||
|
`<br><br><b><span class="color_orange">${nowmode} Selected</span></b> - Enter a prompt below to begin!`+
|
||||||
`<br>Or, <a href="#" tabindex="${mainmenu_is_untab?`-1`:`0`}" class="color_blueurl mainnav" onclick="document.getElementById('loadfileinput').click()">load a <b>JSON File</b> or a <b>Character Card</b> here.</a>`+
|
`<br>Or, <a href="#" tabindex="${mainmenu_is_untab?`-1`:`0`}" class="color_blueurl mainnav" onclick="document.getElementById('loadfileinput').click()">load a <b>JSON File</b> or a <b>Character Card</b> here.</a>`+
|
||||||
`<br>Or, <a href="#" tabindex="${mainmenu_is_untab?`-1`:`0`}" class="color_blueurl mainnav" onclick="display_scenarios()">select a <b>Quick Start Scenario</b> here.</a>`+
|
`<br>Or, <a href="#" tabindex="${mainmenu_is_untab?`-1`:`0`}" class="color_blueurl mainnav" onclick="display_scenarios()">select a <b>Quick Start Scenario</b> here.</a>`+
|
||||||
`<br>${(welcome!=""?`<br><em>${escapeHtml(welcome)}</em>`:``)}`;
|
`<br>${(welcome!=""?`<br><em>${escapeHtml(welcome)}</em>`:``)}`;
|
||||||
|
@ -17478,6 +17707,7 @@ Current version indicated by LITEVER below.
|
||||||
}
|
}
|
||||||
retry_preserve_last = false;
|
retry_preserve_last = false;
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 2000);
|
}, 2000);
|
||||||
|
@ -17502,6 +17732,7 @@ Current version indicated by LITEVER below.
|
||||||
redo_arr.push(popped);
|
redo_arr.push(popped);
|
||||||
}
|
}
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17525,6 +17756,7 @@ Current version indicated by LITEVER below.
|
||||||
gametext_arr.push(redo_prev_text.pop());
|
gametext_arr.push(redo_prev_text.pop());
|
||||||
}
|
}
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 2000);
|
}, 2000);
|
||||||
|
@ -17542,12 +17774,14 @@ Current version indicated by LITEVER below.
|
||||||
let popped = redo_arr.pop();
|
let popped = redo_arr.pop();
|
||||||
gametext_arr.push(popped);
|
gametext_arr.push(popped);
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}else if (redo_prev_text.length>0) {
|
}else if (redo_prev_text.length>0) {
|
||||||
last_reply_was_empty = false;
|
last_reply_was_empty = false;
|
||||||
retry_prev_text.push(gametext_arr.pop());
|
retry_prev_text.push(gametext_arr.pop());
|
||||||
retry_preserve_last = false;
|
retry_preserve_last = false;
|
||||||
gametext_arr.push(redo_prev_text.pop());
|
gametext_arr.push(redo_prev_text.pop());
|
||||||
render_gametext();
|
render_gametext();
|
||||||
|
sync_multiplayer(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18394,6 +18628,7 @@ Current version indicated by LITEVER below.
|
||||||
</div>
|
</div>
|
||||||
<div id="connectstatusdiv">
|
<div id="connectstatusdiv">
|
||||||
<div id="connectstatus">Connecting</div>
|
<div id="connectstatus">Connecting</div>
|
||||||
|
<div id="multiplayerstatus"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -18868,6 +19103,7 @@ Current version indicated by LITEVER below.
|
||||||
<option value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
|
<option value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
|
||||||
<option value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>
|
<option value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>
|
||||||
<option value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>
|
<option value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>
|
||||||
|
<option value="gemini-exp-1114">gemini-exp-1114</option>
|
||||||
<option value="text-bison-001">text-bison-001</option>
|
<option value="text-bison-001">text-bison-001</option>
|
||||||
</select>
|
</select>
|
||||||
<span class="color_green" style="font-weight: bold;">Please input Gemini or PaLM API Key.</span><br><br>
|
<span class="color_green" style="font-weight: bold;">Please input Gemini or PaLM API Key.</span><br><br>
|
||||||
|
@ -19973,7 +20209,7 @@ Current version indicated by LITEVER below.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="popupfooter">
|
<div class="popupfooter">
|
||||||
<button type="button" class="btn btn-primary" onclick="confirm_memory();save_wi();commit_wi_changes();render_gametext();hide_popups()">OK</button>
|
<button type="button" class="btn btn-primary" onclick="confirm_memory();save_wi();commit_wi_changes();render_gametext();sync_multiplayer(true);hide_popups()">OK</button>
|
||||||
<button type="button" class="btn btn-primary" onclick="hide_popups();">Cancel</button>
|
<button type="button" class="btn btn-primary" onclick="hide_popups();">Cancel</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
17
koboldcpp.py
17
koboldcpp.py
|
@ -2077,13 +2077,18 @@ Enter Prompt:<br>
|
||||||
fullupdate = incoming_story.get('fullupdate', False)
|
fullupdate = incoming_story.get('fullupdate', False)
|
||||||
storybody = incoming_story.get('data', None) #should be a compressed string
|
storybody = incoming_story.get('data', None) #should be a compressed string
|
||||||
if storybody:
|
if storybody:
|
||||||
multiplayer_story_data_compressed = str(storybody) #save latest story
|
storybody = str(storybody)
|
||||||
if fullupdate:
|
if len(storybody) > (1024*1024*3): #limit story to 3mb
|
||||||
multiplayer_turn_minor = 0
|
response_code = 400
|
||||||
multiplayer_turn_major += 1
|
response_body = (json.dumps({"success":False, "error":"Story is too long!"}).encode())
|
||||||
else:
|
else:
|
||||||
multiplayer_turn_minor += 1
|
multiplayer_story_data_compressed = str(storybody) #save latest story
|
||||||
response_body = (json.dumps({"success":True,"turn_major":multiplayer_turn_major,"turn_minor":multiplayer_turn_minor}).encode())
|
if fullupdate:
|
||||||
|
multiplayer_turn_minor = 0
|
||||||
|
multiplayer_turn_major += 1
|
||||||
|
else:
|
||||||
|
multiplayer_turn_minor += 1
|
||||||
|
response_body = (json.dumps({"success":True,"turn_major":multiplayer_turn_major,"turn_minor":multiplayer_turn_minor}).encode())
|
||||||
else:
|
else:
|
||||||
response_code = 400
|
response_code = 400
|
||||||
response_body = (json.dumps({"success":False, "error":"No story submitted!"}).encode())
|
response_body = (json.dumps({"success":False, "error":"No story submitted!"}).encode())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue