summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--htroot/LLMSelection_p.html46
1 files changed, 28 insertions, 18 deletions
diff --git a/htroot/LLMSelection_p.html b/htroot/LLMSelection_p.html
index baebcd342..74f38d48a 100644
--- a/htroot/LLMSelection_p.html
+++ b/htroot/LLMSelection_p.html
@@ -37,6 +37,10 @@
const PRODUCTION_MODEL_ACTION_COLUMN_INDEX = PRODUCTION_MODEL_TOTAL_COLUMNS - 1;
const PRODUCTION_MODEL_TOOLING_COLUMN_INDEX = PRODUCTION_MODEL_FEATURE_COLUMN_START;
const PRODUCTION_MODEL_VISION_COLUMN_INDEX = PRODUCTION_MODEL_FEATURE_COLUMN_START + 1;
+ const PRODUCTION_MODEL_ENABLED_USAGE_COLUMNS = new Set([
+ 6, // chat
+ 11 // tldr
+ ]);
const PRODUCTION_MODEL_COLUMN_NAMES = [
"service",
"model",
@@ -66,17 +70,20 @@
["qwen2.5:1.5b-instruct-q4_K_M", " 0.88", "2GB", "Good small model for 1GB RAM", "Alibaba", "apache-2.0"],
["llama3.2:3b-instruct-q4_K_M", " 0.66", "3GB", "A good 3B model", "Meta", "llama3.2"],
//["qwen3-vl:2b-instruct-q4_K_M", " 0.73", "3GB", "A very small vision-model, can understand what is sees in images"],
- ["qwen3:4b-instruct-2507-q4_K_M", " 7.70", "3GB", "Exceptional good 4B model", "Alibaba", "apache-2.0"],
["hf.co/unsloth/medgemma-4b-it-GGUF:Q4_K_M", " 0.60", "4GB", "Medical Knowledge and Vision", "Google", "health-ai-developer-foundations"],
["olmo-3:7b-instruct-q4_K_M", " 2.22", "4GB", "open and accessible training data, open-source training code", "allenai.org", "apache-2.0"],
- //["phi4:14b-q4_K_M", " 5.24", "10GB", "Strong, made with synthetic data", "Microsoft", "mit"],
- ["hf.co/mradermacher/Ling-mini-2.0-GGUF:Q4_K_M", "20.00", "14GB", "very fast MoE model with 1.4B activated parameters per expert", "InclusionAI", "mit"],
- //["magistral:24b-small-2506-q4_K_M", " 2.37", "16GB", "European flagship model, strong multilangual, reasoning", "mistral.ai", "apache-2.0"],
- //["gemma3:27b-it-q4_K_M", " 4.81", "20GB", "Strong content safety, multilingual support in over 140 languages", "google.com", "gemma"],
+ ["qwen3:4b-instruct-2507-q4_K_M", " 7.70", "3GB", "a good 4B model", "Alibaba", "apache-2.0"],
+ ["hf.co/janhq/Jan-v3-4B-base-instruct-gguf:Q4_K_M", " 8.19", "6GB", "a brilliant 4B model, post-trained with large teacher from qwen3:4b", "jan.ai", "apache-2.0"],
+ ["ministral-3:14b-instruct-2512-q4_K_M", " 8.55", "10GB", "European flagship model, strong multilangual, vision, agentic", "mistral.ai", "apache-2.0"],
+ ["olmo-3.1:32b-instruct-q4_K_M", "10.25", "20GB", "open and accessible training data, open-source training code", "allenai.org", "apache-2.0"],
+ //["phi4:14b-q4_K_M", " 5.24", "10GB", "Strong, made with synthetic data", "Microsoft", "mit"],
+ //["gemma3:27b-it-q4_K_M", " 4.81", "20GB", "Strong content safety, multilingual support in over 140 languages", "google.com", "gemma"],
//["qwen3-vl:30b-a3b-instruct-q4_K_M", "17.33", "22GB", "Very fast, exceptional good 30B model, ranking above GPT-4-turbo, GPT-4.1-nano, GPT-o1, GPT-4o-mini", "Alibaba", "apache-2.0"],
- ["qwen3.5:35b-a3b-q4_K_M", "44.63", "25GB", "Very fast MoE, exceptional good 35B model with vision, ranking above GPT-4-turbo, GPT-4.1-nano, GPT-o1, GPT-4o-mini", "Alibaba", "apache-2.0"]
+ ["qwen3.5:9b-q4_K_M", "18.37", "14GB", "multimodal, outstanding for its size, long-context 256K Tokens, strong instruction following model", "Alibaba", "apache-2.0"],
+ ["hf.co/mradermacher/Ling-mini-2.0-GGUF:Q4_K_M", "20.00", "20GB", "very fast 16B MoE model with 1.4B activated parameters per expert", "InclusionAI", "mit"],
+ ["qwen3.5:35b-a3b-q4_K_M", "44.63", "25GB", "Very fast MoE, exceptional good 35B model with vision, ranking above GPT-4-turbo, GPT-4.1-nano, GPT-o1, GPT-4o-mini", "Alibaba", "apache-2.0"]
];
-
+
const MODEL_TABLE_HEADERS = ["Model", "Ranking", "Size", "Description", "Provider", "License", "Actions"];
const RECOMMENDED_MODEL_MAP = new Map(
RECOMMENDED_MODELS.map(([name, ranking, size, description, provider, license]) => [
@@ -563,6 +570,10 @@
return button;
}
+ function isSelectableUsageColumn(col) {
+ return PRODUCTION_MODEL_ENABLED_USAGE_COLUMNS.has(col);
+ }
+
function handleModelSelect(modelName) {
if (!modelName) return;
upsertProductionModel(modelName);
@@ -668,18 +679,17 @@
checkbox.type = "checkbox";
cell.textContent = "";
cell.appendChild(checkbox);
- checkbox.checked = !!defaultChecked && col <= PRODUCTION_MODEL_USAGE_COLUMN_END;
- if (col >= PRODUCTION_MODEL_FEATURE_COLUMN_START) {
- // disable the checkbox
- checkbox.disabled = true
- }
+ checkbox.checked = !!defaultChecked && isSelectableUsageColumn(col);
}
+ checkbox.disabled = col >= PRODUCTION_MODEL_FEATURE_COLUMN_START || !isSelectableUsageColumn(col);
+ if (!isSelectableUsageColumn(col)) checkbox.checked = false;
initializeUsageCheckbox(checkbox, col);
}
if (defaultChecked) {
// enforce feature exclusivity for row
if (!row) return;
for (let col = PRODUCTION_MODEL_USAGE_COLUMN_START; col <= PRODUCTION_MODEL_USAGE_COLUMN_END; col += 1) {
+ if (!isSelectableUsageColumn(col)) continue;
const cell = row.cells[col];
if (!cell) continue;
const checkbox = cell.querySelector('input[type="checkbox"]');
@@ -804,7 +814,7 @@
PRODUCTION_MODEL_COLUMN_NAMES.forEach((columnName, index) => {
if (index >= PRODUCTION_MODEL_USAGE_COLUMN_START && index <= PRODUCTION_MODEL_FEATURE_COLUMN_END) {
const checkbox = row.cells[index] ? row.cells[index].querySelector('input[type="checkbox"]') : null;
- rowData[columnName] = checkbox ? checkbox.checked : false;
+ rowData[columnName] = checkbox && (index >= PRODUCTION_MODEL_FEATURE_COLUMN_START || isSelectableUsageColumn(index)) ? checkbox.checked : false;
} else {
rowData[columnName] = row.cells[index] ? row.cells[index].textContent.trim() : "";
}
@@ -1285,12 +1295,12 @@
<td>#[api_key]#</td>
<td>#[max_tokens]#</td>
- <td><input type="checkbox" #(search)#::checked=true#(/search)#></td>
+ <td><input type="checkbox" #(search)#::checked=true#(/search)# disabled="disabled"></td>
<td><input type="checkbox" #(chat)#::checked=true#(/chat)#></td>
- <td><input type="checkbox" #(translation)#::checked=true#(/translation)#></td>
- <td><input type="checkbox" #(classification)#::checked=true#(/classification)#></td>
- <td><input type="checkbox" #(query)#::checked=true#(/query)#></td>
- <td><input type="checkbox" #(qapairs)#::checked=true#(/qapairs)#></td>
+ <td><input type="checkbox" #(translation)#::checked=true#(/translation)# disabled="disabled"></td>
+ <td><input type="checkbox" #(classification)#::checked=true#(/classification)# disabled="disabled"></td>
+ <td><input type="checkbox" #(query)#::checked=true#(/query)# disabled="disabled"></td>
+ <td><input type="checkbox" #(qapairs)#::checked=true#(/qapairs)# disabled="disabled"></td>
<td><input type="checkbox" #(tldr)#::checked=true#(/tldr)#></td>
<td><input type="checkbox" #(tooling)#::checked=true#(/tooling)# disabled=true></td>