Last used & min count settings

Also some performance improvements
This commit is contained in:
DominikDoom
2023-11-29 17:45:51 +01:00
parent 15478e73b5
commit a156214a48
4 changed files with 41 additions and 25 deletions

View File

@@ -173,7 +173,16 @@ function flatten(obj, roots = [], sep = ".") {
}
// Calculate biased tag score based on post count and frequent usage
function calculateUsageBias(count, uses) {
function calculateUsageBias(result, count, uses, lastUseDate) {
// Guard for minimum usage count & last usage date
const diffTime = Math.abs(Date.now() - (lastUseDate || Date.now()));
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
if (uses < TAC_CFG.frequencyMinCount || diffDays > TAC_CFG.frequencyMaxAge) {
uses = 0;
} else if (uses != 0) {
result.usageBias = true;
}
switch (TAC_CFG.frequencyFunction) {
case "Logarithmic (weak)":
return Math.log(1 + count) + Math.log(1 + uses);
@@ -187,7 +196,14 @@ function calculateUsageBias(count, uses) {
}
// Beautify return type for easier parsing
function mapUseCountArray(useCounts) {
return useCounts.map(useCount => {return {"name": useCount[0], "type": useCount[1], "count": useCount[2]}});
return useCounts.map(useCount => {
return {
"name": useCount[0],
"type": useCount[1],
"count": useCount[2],
"lastUseDate": useCount[3]
}
});
}
// Call API endpoint to increase bias of tag in the database
function increaseUseCount(tagName, type, negative = false) {

View File

@@ -1,4 +1,4 @@
const styleColors = {
const styleColors = {
"--results-bg": ["#0b0f19", "#ffffff"],
"--results-border-color": ["#4b5563", "#e5e7eb"],
"--results-border-width": ["1px", "1.5px"],
@@ -224,6 +224,8 @@ async function syncOptions() {
modelSortOrder: opts["tac_modelSortOrder"],
frequencySort: opts["tac_frequencySort"],
frequencyFunction: opts["tac_frequencyFunction"],
frequencyMinCount: opts["tac_frequencyMinCount"],
frequencyMaxAge: opts["tac_frequencyMaxAge"],
// Insertion related settings
replaceUnderscores: opts["tac_replaceUnderscores"],
escapeParentheses: opts["tac_escapeParentheses"],
@@ -1169,7 +1171,6 @@ async function autocomplete(textArea, prompt, fixedTag = null) {
// Request use counts from the DB
const counts = await getUseCounts(names, types, isNegative);
const usedResults = counts.filter(c => c.count > 0).map(c => c.name);
// Sort all
results = results.sort((a, b) => {
@@ -1178,19 +1179,16 @@ async function autocomplete(textArea, prompt, fixedTag = null) {
const aUseStats = counts.find(c => c.name === aName && c.type === a.type);
const bUseStats = counts.find(c => c.name === bName && c.type === b.type);
const aUses = aUseStats?.count || 0;
const bUses = bUseStats?.count || 0;
const aLastUseDate = Date.parse(aUseStats?.lastUseDate);
const bLastUseDate = Date.parse(bUseStats?.lastUseDate);
const aWeight = calculateUsageBias(a.count, aUseStats ? aUseStats.count : 0);
const bWeight = calculateUsageBias(b.count, bUseStats ? bUseStats.count : 0);
const aWeight = calculateUsageBias(a, a.count, aUses, aLastUseDate);
const bWeight = calculateUsageBias(b, b.count, bUses, bLastUseDate);
return bWeight - aWeight;
});
// Mark results
results.forEach(r => {
const name = r.type === ResultType.chant ? r.aliases : r.text;
if (usedResults.includes(name))
r.usageBias = true;
});
}
// Slice if the user has set a max result count and we are not in a extra networks / wildcard list