diff --git a/index.html b/index.html
index 8f9f79c..35da4e7 100644
--- a/index.html
+++ b/index.html
@@ -5218,6 +5218,23 @@
}
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;
@@ -5239,6 +5256,7 @@
worker_data_showonly[i].defaultmodel = elem.models[0];
}
}
+ track_kudos_earnings(worker_data_showonly);
show_workers();
});
@@ -5343,6 +5361,7 @@
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", "");
@@ -5364,8 +5383,18 @@
if (n > 0) { allmdls += "
"; }
allmdls += escapeHtml(elem.models[n].substring(0, 32));
}
-
- 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) + " | "+clustertag+" |
";
+ 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+" | "+clustertag+" |
";
}
document.getElementById("workertable").innerHTML = str;
document.getElementById("worktitlecount").innerText = "Worker List - Total " + worker_data_showonly.length;
@@ -6366,6 +6395,9 @@
if(modelsdone && workersdone)
{
onBothFetchesDone();
+
+ //track earnings if possible
+ track_kudos_earnings(wdata);
}
});
@@ -8790,7 +8822,7 @@
{
playbeep();
}
- let lastreq = "Last request served by " + genworker + " using "+genmdl+ " for " + genkudos + " kudos in " + getTimeTaken() + " seconds.";
+ let lastreq = "Last request served by " + genworker + " using "+genmdl+ ""+(genkudos>0?(" for " + genkudos + " kudos"):"")+" in " + getTimeTaken() + " seconds.";
document.getElementById("lastreq").innerHTML = lastreq;
document.getElementById("lastreq2").innerHTML = lastreq;
}