Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
modify how finetuning jobs get submitted
Browse files- README.md +1 -1
- backend/config.py +5 -1
- backend/submission_handler.py +12 -1
- frontend/leaderboard.html +3 -5
- frontend/submit.html +24 -7
README.md
CHANGED
|
@@ -4,7 +4,7 @@ emoji: π
|
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: green
|
| 6 |
sdk: docker
|
| 7 |
-
python_version: 3.
|
| 8 |
pinned: false
|
| 9 |
short_description: Qimma leaderboard
|
| 10 |
---
|
|
|
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: green
|
| 6 |
sdk: docker
|
| 7 |
+
python_version: 3.10.19
|
| 8 |
pinned: false
|
| 9 |
short_description: Qimma leaderboard
|
| 10 |
---
|
backend/config.py
CHANGED
|
@@ -35,10 +35,14 @@ TASKS: List[Tuple[str, str, str]] = [
|
|
| 35 |
# --- 3. Model Metadata ---
|
| 36 |
|
| 37 |
MODEL_TYPE_TO_EMOJI: Dict[str, str] = {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
"π’ : pretrained": "π’",
|
| 39 |
"π© : continuously pretrained": "π©",
|
| 40 |
"π¬ : chat models (RLHF, DPO, IFT, ...)": "π¬",
|
| 41 |
"πΆ : fine-tuned on domain-specific datasets": "πΆ",
|
| 42 |
"π€ : base merges and merges": "π€",
|
| 43 |
"Missing": "?",
|
| 44 |
-
}
|
|
|
|
| 35 |
# --- 3. Model Metadata ---
|
| 36 |
|
| 37 |
MODEL_TYPE_TO_EMOJI: Dict[str, str] = {
|
| 38 |
+
"pre-trained": "π’",
|
| 39 |
+
"pretrained": "π’",
|
| 40 |
+
"finetuned": "πΆ",
|
| 41 |
+
"fine-tuned": "πΆ",
|
| 42 |
"π’ : pretrained": "π’",
|
| 43 |
"π© : continuously pretrained": "π©",
|
| 44 |
"π¬ : chat models (RLHF, DPO, IFT, ...)": "π¬",
|
| 45 |
"πΆ : fine-tuned on domain-specific datasets": "πΆ",
|
| 46 |
"π€ : base merges and merges": "π€",
|
| 47 |
"Missing": "?",
|
| 48 |
+
}
|
backend/submission_handler.py
CHANGED
|
@@ -17,6 +17,16 @@ from backend.helpers import unify_precision, get_model_size, parse_datetime
|
|
| 17 |
logging.basicConfig(level=logging.INFO)
|
| 18 |
logger = logging.getLogger(__name__)
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
class SlackNotifier:
|
| 21 |
"""
|
| 22 |
Handles all Slack notifications for the Arabic leaderboard system.
|
|
@@ -531,6 +541,7 @@ def submit_model(
|
|
| 531 |
base_model = base_model.strip()
|
| 532 |
revision = revision.strip() or "main"
|
| 533 |
precision = precision.strip()
|
|
|
|
| 534 |
|
| 535 |
|
| 536 |
|
|
@@ -634,4 +645,4 @@ def submit_model(
|
|
| 634 |
if SLACK_WEBHOOK_URL:
|
| 635 |
notifier = SlackNotifier(SLACK_WEBHOOK_URL)
|
| 636 |
notifier.notify_new_submission(submission_data)
|
| 637 |
-
return f"**Success**: Model '{model_name}' submitted for evaluation!"
|
|
|
|
| 17 |
logging.basicConfig(level=logging.INFO)
|
| 18 |
logger = logging.getLogger(__name__)
|
| 19 |
|
| 20 |
+
MODEL_TYPE_NORMALIZATION = {
|
| 21 |
+
"pt": "pre-trained",
|
| 22 |
+
"pretrained": "pre-trained",
|
| 23 |
+
"pre-trained": "pre-trained",
|
| 24 |
+
"fine-tuned": "finetuned",
|
| 25 |
+
"finetuned": "finetuned",
|
| 26 |
+
"instruct": "finetuned",
|
| 27 |
+
"chat": "finetuned",
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
class SlackNotifier:
|
| 31 |
"""
|
| 32 |
Handles all Slack notifications for the Arabic leaderboard system.
|
|
|
|
| 541 |
base_model = base_model.strip()
|
| 542 |
revision = revision.strip() or "main"
|
| 543 |
precision = precision.strip()
|
| 544 |
+
model_type = MODEL_TYPE_NORMALIZATION.get(model_type.strip().lower(), model_type.strip())
|
| 545 |
|
| 546 |
|
| 547 |
|
|
|
|
| 645 |
if SLACK_WEBHOOK_URL:
|
| 646 |
notifier = SlackNotifier(SLACK_WEBHOOK_URL)
|
| 647 |
notifier.notify_new_submission(submission_data)
|
| 648 |
+
return f"**Success**: Model '{model_name}' submitted for evaluation!"
|
frontend/leaderboard.html
CHANGED
|
@@ -745,9 +745,7 @@
|
|
| 745 |
|
| 746 |
$('#modalLinkHF').href = `https://huggingface.co/${model["Model Name"]}`;
|
| 747 |
|
| 748 |
-
|
| 749 |
-
const datasetId = `OALL/details_${cleanName}`;
|
| 750 |
-
$('#modalLinkDetails').href = `https://huggingface.co/datasets/${datasetId}`;
|
| 751 |
|
| 752 |
const chartContainer = $('#modalChart');
|
| 753 |
chartContainer.innerHTML = "";
|
|
@@ -918,7 +916,7 @@
|
|
| 918 |
def.width = '400px';
|
| 919 |
def.formatter = (c, r) => {
|
| 920 |
const type = (typeIdx > -1 && r.cells[typeIdx]) ? r.cells[typeIdx].data : "";
|
| 921 |
-
const tMap = { "
|
| 922 |
const tIcon = tMap[type] || type;
|
| 923 |
|
| 924 |
return gridjs.html(`
|
|
@@ -1042,4 +1040,4 @@
|
|
| 1042 |
|
| 1043 |
</body>
|
| 1044 |
|
| 1045 |
-
</html>
|
|
|
|
| 745 |
|
| 746 |
$('#modalLinkHF').href = `https://huggingface.co/${model["Model Name"]}`;
|
| 747 |
|
| 748 |
+
$('#modalLinkDetails').href = `https://huggingface.co/datasets/qimma/leaderboard-details/tree/main/${model["Model Name"]}`;
|
|
|
|
|
|
|
| 749 |
|
| 750 |
const chartContainer = $('#modalChart');
|
| 751 |
chartContainer.innerHTML = "";
|
|
|
|
| 916 |
def.width = '400px';
|
| 917 |
def.formatter = (c, r) => {
|
| 918 |
const type = (typeIdx > -1 && r.cells[typeIdx]) ? r.cells[typeIdx].data : "";
|
| 919 |
+
const tMap = { "pre-trained": "π’", "pretrained": "π’", "finetuned": "πΆ", "fine-tuned": "πΆ", "chat": "π¬" };
|
| 920 |
const tIcon = tMap[type] || type;
|
| 921 |
|
| 922 |
return gridjs.html(`
|
|
|
|
| 1040 |
|
| 1041 |
</body>
|
| 1042 |
|
| 1043 |
+
</html>
|
frontend/submit.html
CHANGED
|
@@ -25,10 +25,8 @@
|
|
| 25 |
Type</label>
|
| 26 |
<div class="relative"><select name="model_type"
|
| 27 |
class="w-full px-4 py-2 rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 dark:text-white focus:ring-2 focus:ring-indigo-500 outline-none appearance-none transition cursor-pointer">
|
| 28 |
-
<option value="
|
| 29 |
-
<option value="
|
| 30 |
-
<option value="fine-tuned" selected>πΆ Fine-tuned</option>
|
| 31 |
-
<option value="merges">π€ Merges</option>
|
| 32 |
</select><i data-lucide="chevron-down"
|
| 33 |
class="absolute right-3 top-3 h-4 w-4 text-slate-400 pointer-events-none"></i>
|
| 34 |
</div>
|
|
@@ -48,10 +46,10 @@
|
|
| 48 |
<div><label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Chat
|
| 49 |
Template?</label>
|
| 50 |
<div class="flex gap-4"><label class="flex items-center"><input type="radio"
|
| 51 |
-
name="chat_template" value="Yes" class="text-indigo-600 h-4 w-4"><span
|
| 52 |
class="ml-2 text-sm text-slate-600 dark:text-slate-400">Yes</span></label><label
|
| 53 |
class="flex items-center"><input type="radio" name="chat_template" value="No"
|
| 54 |
-
|
| 55 |
class="ml-2 text-sm text-slate-600 dark:text-slate-400">No</span></label>
|
| 56 |
</div>
|
| 57 |
</div>
|
|
@@ -143,6 +141,24 @@
|
|
| 143 |
// 2. Handle Form Submission
|
| 144 |
const form = document.querySelector('#submitForm');
|
| 145 |
if (form) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
form.onsubmit = async (e) => {
|
| 147 |
e.preventDefault();
|
| 148 |
const btn = document.querySelector('#submitBtn');
|
|
@@ -161,6 +177,7 @@
|
|
| 161 |
msg.className = "text-center text-sm font-medium text-emerald-600 dark:text-emerald-400";
|
| 162 |
msg.innerText = "β
" + (json.message || "Success!");
|
| 163 |
e.target.reset();
|
|
|
|
| 164 |
|
| 165 |
// Update Local Sidebar & Header
|
| 166 |
await updateSidebarQueue();
|
|
@@ -182,4 +199,4 @@
|
|
| 182 |
</script>
|
| 183 |
</body>
|
| 184 |
|
| 185 |
-
</html>
|
|
|
|
| 25 |
Type</label>
|
| 26 |
<div class="relative"><select name="model_type"
|
| 27 |
class="w-full px-4 py-2 rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 dark:text-white focus:ring-2 focus:ring-indigo-500 outline-none appearance-none transition cursor-pointer">
|
| 28 |
+
<option value="pre-trained">π’ Pretrained</option>
|
| 29 |
+
<option value="finetuned" selected>πΆ Instruct</option>
|
|
|
|
|
|
|
| 30 |
</select><i data-lucide="chevron-down"
|
| 31 |
class="absolute right-3 top-3 h-4 w-4 text-slate-400 pointer-events-none"></i>
|
| 32 |
</div>
|
|
|
|
| 46 |
<div><label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Chat
|
| 47 |
Template?</label>
|
| 48 |
<div class="flex gap-4"><label class="flex items-center"><input type="radio"
|
| 49 |
+
name="chat_template" value="Yes" checked class="text-indigo-600 h-4 w-4"><span
|
| 50 |
class="ml-2 text-sm text-slate-600 dark:text-slate-400">Yes</span></label><label
|
| 51 |
class="flex items-center"><input type="radio" name="chat_template" value="No"
|
| 52 |
+
class="text-indigo-600 h-4 w-4"><span
|
| 53 |
class="ml-2 text-sm text-slate-600 dark:text-slate-400">No</span></label>
|
| 54 |
</div>
|
| 55 |
</div>
|
|
|
|
| 141 |
// 2. Handle Form Submission
|
| 142 |
const form = document.querySelector('#submitForm');
|
| 143 |
if (form) {
|
| 144 |
+
const modelTypeSelect = form.querySelector('select[name="model_type"]');
|
| 145 |
+
const chatYes = form.querySelector('input[name="chat_template"][value="Yes"]');
|
| 146 |
+
const chatNo = form.querySelector('input[name="chat_template"][value="No"]');
|
| 147 |
+
|
| 148 |
+
const syncChatTemplateDefault = () => {
|
| 149 |
+
if (!modelTypeSelect || !chatYes || !chatNo) return;
|
| 150 |
+
if (modelTypeSelect.value === 'pre-trained') {
|
| 151 |
+
chatNo.checked = true;
|
| 152 |
+
} else if (modelTypeSelect.value === 'finetuned') {
|
| 153 |
+
chatYes.checked = true;
|
| 154 |
+
}
|
| 155 |
+
};
|
| 156 |
+
|
| 157 |
+
if (modelTypeSelect) {
|
| 158 |
+
modelTypeSelect.addEventListener('change', syncChatTemplateDefault);
|
| 159 |
+
syncChatTemplateDefault();
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
form.onsubmit = async (e) => {
|
| 163 |
e.preventDefault();
|
| 164 |
const btn = document.querySelector('#submitBtn');
|
|
|
|
| 177 |
msg.className = "text-center text-sm font-medium text-emerald-600 dark:text-emerald-400";
|
| 178 |
msg.innerText = "β
" + (json.message || "Success!");
|
| 179 |
e.target.reset();
|
| 180 |
+
syncChatTemplateDefault();
|
| 181 |
|
| 182 |
// Update Local Sidebar & Header
|
| 183 |
await updateSidebarQueue();
|
|
|
|
| 199 |
</script>
|
| 200 |
</body>
|
| 201 |
|
| 202 |
+
</html>
|