`;
continue;
}
if(dictkeys[j]==seltokarr[i])
{
addspace = true;
continue;
}
lastlogprobsstr += ` | ${escape_html(dictkeys[j])} (${(Math.exp(topdict[i][dictkeys[j]])*100).toFixed(2)}%)`
}
if(addspace)
{
lastlogprobsstr += ` | `;
}
lastlogprobsstr += "";
}
lastlogprobsstr += "";
}
}
}
else
{
lastlogprobsstr += ``;
for(let i=0;i" ;="" let="" cn="lpc[i];" style="color:lime">${escape_html(cn.token)} (${(Math.exp(cn.logprob)*100).toFixed(2)}%)`;
let addspace = false;
for(let j=0;j<5;++j)
{
if(j>=cn.top_logprobs.length)
{
lastlogprobsstr += ``;
continue;
}
if(cn.top_logprobs[j].token==cn.token)
{
addspace = true;
continue;
}
lastlogprobsstr += ` | ${escape_html(cn.top_logprobs[j].token)} (${(Math.exp(cn.top_logprobs[j].logprob)*100).toFixed(2)}%)`
}
if(addspace)
{
lastlogprobsstr += ` | `;
}
lastlogprobsstr += "";
}
lastlogprobsstr += "";
}
} else {
lastlogprobsstr = "Not Available";
}
msgbox(lastlogprobsstr,"Token Probability Viewer",true);
}
var worker_data_showonly = []; //only for table display, dont mix
//track worker earn rates
var first_seen_workers = {};
function track_kudos_earnings(wdata)
{
if(wdata && wdata.length>0)
{
for (let i = 0; i < wdata.length; ++i) {
let elem = wdata[i];
if (elem && elem.id && !first_seen_workers.hasOwnProperty(elem.id)) {
first_seen_workers[elem.id] = {
startkudos: elem.kudos_rewards,
timestamp: performance.now()
};
}
}
}
}
function get_and_show_workers() {
if (localflag) {
return;
}
get_workers((wdata) => {
worker_data_showonly = wdata;
//preprocess the showonly data for extra fields
for (var i = 0; i < worker_data_showonly.length; ++i) {
let elem = worker_data_showonly[i];
let tokenspersec = elem.performance.replace(" tokens per second", "");
if(tokenspersec.toLowerCase()=="no requests fulfilled yet")
{
tokenspersec = 0;
}
worker_data_showonly[i].tokenspersec = parseFloat(tokenspersec);
if(elem.models.length>0)
{
worker_data_showonly[i].defaultmodel = elem.models[0];
}
}
track_kudos_earnings(worker_data_showonly);
show_workers();
});
}
function get_workers(onDoneCallback) {
if(localflag)
{
onDoneCallback([]);
return;
}
if(cached_worker_list!=null && cached_worker_list.length>1 && performance.now() < stale_cached_worker_time)
{
console.log("Reuse cached worker list");
onDoneCallback(cached_worker_list);
return;
}
fetch(horde_worker_endpoint)
.then(x => x.json())
.then(data => {
cached_worker_list = data;
stale_cached_worker_time = performance.now() + 30000; //cache worker list for 30s
if (onDoneCallback != null) {
onDoneCallback(data);
}
}).catch((error) => {
console.log("Error: " + error);
msgbox("Failed to retrieve AI Horde Worker list!\nPlease check your network connection.");
});
}
function worker_list_quick_search()
{
if(document.getElementById("workertable").innerHTML!="")
{
let searchstr = document.getElementById("workerlistquicksearch").value.toLowerCase();
for (var i = 0; i < worker_data_showonly.length; ++i) {
let elem = worker_data_showonly[i];
let tablerow = document.getElementById("workertablerow_"+i);
if(tablerow)
{
if(searchstr=="" || elem.name.toLowerCase().includes(searchstr) ||
elem.models[0].toLowerCase().includes(searchstr))
{
tablerow.style.display = "";
}else{
tablerow.style.display = "none";
}
}
}
}
}
var sortworkersdisplayasc = true;
var lastsortworkerkey = "";
function sort_display_workers(sortkey)
{
sortworkersdisplayasc = !sortworkersdisplayasc;
if(lastsortworkerkey!=sortkey)
{
sortworkersdisplayasc = true;
}
lastsortworkerkey = sortkey;
worker_data_showonly.sort(function(a, b) {
if(sortworkersdisplayasc)
{
if(a[sortkey] < b[sortkey]) { return -1; }
if(a[sortkey] > b[sortkey]) { return 1; }
return 0;
}else{
if(a[sortkey] < b[sortkey]) { return 1; }
if(a[sortkey] > b[sortkey]) { return -1; }
return 0;
}
});
show_workers();
}
function show_workers() {
document.getElementById("workercontainer").classList.remove("hidden");
let str = "";
let timenow = performance.now();
for (var i = 0; i < worker_data_showonly.length; ++i) {
let elem = worker_data_showonly[i];
let tokenspersec = elem.performance.replace(" tokens per second", "");
if(tokenspersec.toLowerCase()=="no requests fulfilled yet")
{
tokenspersec = 0;
}
let style = (elem.trusted ? "style=\"color:#dd77ff;\"" : "");
let brokenstyle = (elem.maintenance_mode ? "style=\"color:#ee4444;\"" : "");
let workerNameHtml = escape_html(elem.name.substring(0, 40));
let clickinfo = "";
if(elem.info && elem.info!="")
{
clickinfo += escape_html(replaceAll(elem.info,"\'","\\\'"));
}
if(elem.threads>1)
{
clickinfo += (clickinfo==""?"":"
") + "Threads: " + elem.threads;
}
if(clickinfo!="")
{
workerNameHtml = ""+workerNameHtml+"";
}
let allmdls = "";
for (let n = 0; n < elem.models.length; ++n) {
if (n > 0) { allmdls += " "; }
allmdls += escape_html(elem.models[n].substring(0, 40));
}
let kudos_per_hr = "";
if(first_seen_workers.hasOwnProperty(elem.id))
{
let firstseen = first_seen_workers[elem.id];
let kudosdiff = elem.kudos_rewards - firstseen.startkudos;
if(kudosdiff>0)
{
var hrspassed = ((timenow - firstseen.timestamp) / 1000)/3600.0; //time passed in sec
kudos_per_hr = "(" + (kudosdiff/hrspassed).toFixed(0) + "/hr)";
}
}
str += " | " + workerNameHtml + " | " + allmdls + " | " + elem.max_length + " / " + elem.max_context_length + " (" + tokenspersec + " T/s) | " + format_uptime(elem.uptime) + " (" + elem.requests_fulfilled + " jobs) | " + elem.kudos_rewards.toFixed(0) + " "+kudos_per_hr+"";
}
document.getElementById("workertable").innerHTML = str;
document.getElementById("worktitlecount").innerText = "Worker List - Total " + worker_data_showonly.length;
}
function show_my_own_workers()
{
let userData = lastValidFoundUserData;
lastValidFoundUserWorkers = [];
if (userData && userData.worker_ids && userData.worker_ids.length > 0)
{
let urls = userData.worker_ids.map(x=> horde_maintenance_endpoint + "/" + x);
Promise.all(urls.map(url => fetch(url).then(response => response.json()).catch(error => error)))
.then(values => {
values = values.filter(n => (n.id && n.id!=""));
lastValidFoundUserWorkers = values;
console.log(lastValidFoundUserWorkers);
document.getElementById("myownworkercontainer").classList.remove("hidden");
let str = "";
for (var i = 0; i < values.length; ++i) {
let elem = values[i];
let style = (elem.trusted ? "style=\"color:#dd77ff;\"" : "");
let brokenstyle = (elem.maintenance_mode ? "style=\"color:#ee4444;\"" : "");
let workerNameHtml = escape_html(elem.name.substring(0, 32));
let eleminfo = ((elem.info && elem.info!="")?elem.info:"");
str += " | " + workerNameHtml + " | | " + format_uptime(elem.uptime) + " (" + elem.requests_fulfilled + " jobs) | " + elem.kudos_rewards.toFixed(0) + " "+(elem.online?"Online":"Offline")+" | |
[ABORT]
WebSearch...
|
|