alozowski HF staff commited on
Commit
23c96f8
·
verified ·
1 Parent(s): 2e3dc13

submission-fix (#1065)

Browse files

- Correct official providers (e14240c4ad78a9dcaa02e155dac17cef51a783de)
- Remove TRANSFORMERS_CACHE (cb24abfbcc1f8c6ee56a261eb7db70ed913dd393)
- Bump up huggingface-hub and transformers (9213aedc08bde2e33847e9f094190b4767fb588c)
- Add check_official_provider_status function (c13b5be79785680ddacb2c979dfe3cb2b8397952)
- Integrate check_official_provider_status function (ca4ed4c7deee7eab07adbcab1b315f37607323e6)
- Change helperText (11258bb1c37afb99aee97f3fa5dcac92d1694998)
- Fix imports (495824ca0b45bb763f80d2fc3dc6e56c4e9db1b6)
- Fix logging issue (2a097f52be1ae5411e7073af73061ec29b74811b)
- Uncomment lines and remove hardcode (7017c9f51da052f3f23683fb0e2b13cb55de56d1)

Files changed (31) hide show
  1. Dockerfile +0 -1
  2. backend/README.md +2 -2
  3. backend/app/api/dependencies.py +1 -1
  4. backend/app/api/endpoints/leaderboard.py +1 -1
  5. backend/app/api/endpoints/models.py +1 -1
  6. backend/app/api/endpoints/votes.py +1 -1
  7. backend/app/asgi.py +2 -2
  8. backend/app/config/hf_config.py +1 -5
  9. backend/app/core/cache.py +4 -4
  10. backend/app/core/fastapi_cache.py +1 -1
  11. backend/app/core/formatting.py +104 -0
  12. backend/app/services/hf_service.py +1 -1
  13. backend/app/services/leaderboard.py +2 -2
  14. backend/app/services/models.py +9 -1
  15. backend/app/services/votes.py +2 -3
  16. backend/app/utils/logging.py +2 -104
  17. backend/app/utils/model_validation.py +62 -6
  18. backend/pyproject.toml +2 -2
  19. backend/utils/analyze_prod_datasets.py +1 -1
  20. backend/utils/fix_wrong_model_size.py +2 -2
  21. backend/utils/sync_datasets_locally.py +1 -1
  22. frontend/src/pages/AddModelPage/components/ModelSubmissionForm/ModelSubmissionForm.js +1 -1
  23. frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/FilteredModelCount.js +5 -5
  24. frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/Filters.js +6 -6
  25. frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/QuickFilters.js +1 -1
  26. frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/hooks/useOfficialProvidersMode.js +3 -3
  27. frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/defaults.js +3 -3
  28. frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/quickFilters.js +1 -1
  29. frontend/src/pages/LeaderboardPage/components/Leaderboard/context/LeaderboardContext.js +7 -7
  30. frontend/src/pages/LeaderboardPage/components/Leaderboard/hooks/useDataUtils.js +5 -5
  31. frontend/src/pages/LeaderboardPage/components/Leaderboard/utils/columnUtils.js +4 -4
Dockerfile CHANGED
@@ -49,7 +49,6 @@ WORKDIR /app
49
 
50
  # Environment variables
51
  ENV HF_HOME=/app/.cache \
52
- TRANSFORMERS_CACHE=/app/.cache \
53
  HF_DATASETS_CACHE=/app/.cache \
54
  INTERNAL_API_PORT=7861 \
55
  PORT=7860 \
 
49
 
50
  # Environment variables
51
  ENV HF_HOME=/app/.cache \
 
52
  HF_DATASETS_CACHE=/app/.cache \
53
  INTERNAL_API_PORT=7861 \
54
  PORT=7860 \
backend/README.md CHANGED
@@ -70,7 +70,7 @@ The application uses several datasets on the HuggingFace Hub:
70
  - **Format**: Main dataset containing all scores and metrics
71
  - **Updates**: Automatic after model evaluations
72
 
73
- ### 4. Maintainers Highlight Dataset (`{HF_ORGANIZATION}/maintainers-highlight`)
74
 
75
  - **Operations**:
76
  - 📥 Read-only access for highlighted models
@@ -203,7 +203,7 @@ Swagger documentation available at http://localhost:7860/docs
203
  is_merged: boolean,
204
  is_moe: boolean,
205
  is_flagged: boolean,
206
- is_highlighted_by_maintainer: boolean
207
  },
208
  metadata: {
209
  upload_date: string,
 
70
  - **Format**: Main dataset containing all scores and metrics
71
  - **Updates**: Automatic after model evaluations
72
 
73
+ ### 4. Official Providers Dataset (`{HF_ORGANIZATION}/official-providers`)
74
 
75
  - **Operations**:
76
  - 📥 Read-only access for highlighted models
 
203
  is_merged: boolean,
204
  is_moe: boolean,
205
  is_flagged: boolean,
206
+ is_official_provider: boolean
207
  },
208
  metadata: {
209
  upload_date: string,
backend/app/api/dependencies.py CHANGED
@@ -2,7 +2,7 @@ from fastapi import Depends, HTTPException
2
  import logging
3
  from app.services.models import ModelService
4
  from app.services.votes import VoteService
5
- from app.utils.logging import LogFormatter
6
 
7
  logger = logging.getLogger(__name__)
8
 
 
2
  import logging
3
  from app.services.models import ModelService
4
  from app.services.votes import VoteService
5
+ from app.core.formatting import LogFormatter
6
 
7
  logger = logging.getLogger(__name__)
8
 
backend/app/api/endpoints/leaderboard.py CHANGED
@@ -3,7 +3,7 @@ from typing import List, Dict, Any
3
  from app.services.leaderboard import LeaderboardService
4
  from app.core.fastapi_cache import cached, build_cache_key
5
  import logging
6
- from app.utils.logging import LogFormatter
7
 
8
  logger = logging.getLogger(__name__)
9
  router = APIRouter()
 
3
  from app.services.leaderboard import LeaderboardService
4
  from app.core.fastapi_cache import cached, build_cache_key
5
  import logging
6
+ from app.core.formatting import LogFormatter
7
 
8
  logger = logging.getLogger(__name__)
9
  router = APIRouter()
backend/app/api/endpoints/models.py CHANGED
@@ -4,7 +4,7 @@ import logging
4
  from app.services.models import ModelService
5
  from app.api.dependencies import get_model_service
6
  from app.core.fastapi_cache import cached
7
- from app.utils.logging import LogFormatter
8
 
9
  logger = logging.getLogger(__name__)
10
  router = APIRouter(tags=["models"])
 
4
  from app.services.models import ModelService
5
  from app.api.dependencies import get_model_service
6
  from app.core.fastapi_cache import cached
7
+ from app.core.formatting import LogFormatter
8
 
9
  logger = logging.getLogger(__name__)
10
  router = APIRouter(tags=["models"])
backend/app/api/endpoints/votes.py CHANGED
@@ -3,7 +3,7 @@ from typing import Dict, Any, List
3
  from app.services.votes import VoteService
4
  from app.core.fastapi_cache import cached, build_cache_key, invalidate_cache_key
5
  import logging
6
- from app.utils.logging import LogFormatter
7
 
8
  logger = logging.getLogger(__name__)
9
  router = APIRouter()
 
3
  from app.services.votes import VoteService
4
  from app.core.fastapi_cache import cached, build_cache_key, invalidate_cache_key
5
  import logging
6
+ from app.core.formatting import LogFormatter
7
 
8
  logger = logging.getLogger(__name__)
9
  router = APIRouter()
backend/app/asgi.py CHANGED
@@ -12,7 +12,7 @@ import sys
12
 
13
  from app.api.router import router
14
  from app.core.fastapi_cache import setup_cache
15
- from app.utils.logging import LogFormatter
16
  from app.config import hf_config
17
 
18
  # Configure logging before anything else
@@ -99,7 +99,7 @@ async def startup_event():
99
  logger.info(LogFormatter.info(f" - Queue: {hf_config.QUEUE_REPO}"))
100
  logger.info(LogFormatter.info(f" - Aggregated: {hf_config.AGGREGATED_REPO}"))
101
  logger.info(LogFormatter.info(f" - Votes: {hf_config.VOTES_REPO}"))
102
- logger.info(LogFormatter.info(f" - Maintainers Highlight: {hf_config.MAINTAINERS_HIGHLIGHT_REPO}"))
103
 
104
  # Setup cache
105
  setup_cache()
 
12
 
13
  from app.api.router import router
14
  from app.core.fastapi_cache import setup_cache
15
+ from app.core.formatting import LogFormatter
16
  from app.config import hf_config
17
 
18
  # Configure logging before anything else
 
99
  logger.info(LogFormatter.info(f" - Queue: {hf_config.QUEUE_REPO}"))
100
  logger.info(LogFormatter.info(f" - Aggregated: {hf_config.AGGREGATED_REPO}"))
101
  logger.info(LogFormatter.info(f" - Votes: {hf_config.VOTES_REPO}"))
102
+ logger.info(LogFormatter.info(f" - Official Providers: {hf_config.OFFICIAL_PROVIDERS_REPO}"))
103
 
104
  # Setup cache
105
  setup_cache()
backend/app/config/hf_config.py CHANGED
@@ -1,13 +1,9 @@
1
- """
2
- Hugging Face configuration module
3
- """
4
  import os
5
  import logging
6
  from typing import Optional
7
  from huggingface_hub import HfApi
8
  from pathlib import Path
9
  from app.core.cache import cache_config
10
- from app.utils.logging import LogFormatter
11
 
12
  logger = logging.getLogger(__name__)
13
 
@@ -26,7 +22,7 @@ API = HfApi(token=HF_TOKEN)
26
  QUEUE_REPO = f"{HF_ORGANIZATION}/requests"
27
  AGGREGATED_REPO = f"{HF_ORGANIZATION}/contents"
28
  VOTES_REPO = f"{HF_ORGANIZATION}/votes"
29
- MAINTAINERS_HIGHLIGHT_REPO = f"{HF_ORGANIZATION}/maintainers-highlight"
30
 
31
  # File paths from cache config
32
  VOTES_PATH = cache_config.votes_file
 
 
 
 
1
  import os
2
  import logging
3
  from typing import Optional
4
  from huggingface_hub import HfApi
5
  from pathlib import Path
6
  from app.core.cache import cache_config
 
7
 
8
  logger = logging.getLogger(__name__)
9
 
 
22
  QUEUE_REPO = f"{HF_ORGANIZATION}/requests"
23
  AGGREGATED_REPO = f"{HF_ORGANIZATION}/contents"
24
  VOTES_REPO = f"{HF_ORGANIZATION}/votes"
25
+ OFFICIAL_PROVIDERS_REPO = f"{HF_ORGANIZATION}/official-providers"
26
 
27
  # File paths from cache config
28
  VOTES_PATH = cache_config.votes_file
backend/app/core/cache.py CHANGED
@@ -3,7 +3,7 @@ import shutil
3
  from pathlib import Path
4
  from datetime import timedelta
5
  import logging
6
- from app.utils.logging import LogFormatter
7
  from app.config.base import (
8
  CACHE_ROOT,
9
  DATASETS_CACHE,
@@ -58,16 +58,16 @@ class CacheConfig:
58
  def _setup_environment(self):
59
  """Configure HuggingFace environment variables"""
60
  logger.info(LogFormatter.subsection("ENVIRONMENT SETUP"))
61
-
62
  env_vars = {
63
  "HF_HOME": str(self.cache_root),
64
- "TRANSFORMERS_CACHE": str(self.models_cache),
65
  "HF_DATASETS_CACHE": str(self.datasets_cache)
66
  }
67
-
68
  for var, value in env_vars.items():
69
  os.environ[var] = value
70
  logger.info(LogFormatter.info(f"Set {var}={value}"))
 
71
 
72
  def get_cache_path(self, cache_type: str) -> Path:
73
  """Returns the path for a specific cache type"""
 
3
  from pathlib import Path
4
  from datetime import timedelta
5
  import logging
6
+ from app.core.formatting import LogFormatter
7
  from app.config.base import (
8
  CACHE_ROOT,
9
  DATASETS_CACHE,
 
58
  def _setup_environment(self):
59
  """Configure HuggingFace environment variables"""
60
  logger.info(LogFormatter.subsection("ENVIRONMENT SETUP"))
61
+
62
  env_vars = {
63
  "HF_HOME": str(self.cache_root),
 
64
  "HF_DATASETS_CACHE": str(self.datasets_cache)
65
  }
66
+
67
  for var, value in env_vars.items():
68
  os.environ[var] = value
69
  logger.info(LogFormatter.info(f"Set {var}={value}"))
70
+
71
 
72
  def get_cache_path(self, cache_type: str) -> Path:
73
  """Returns the path for a specific cache type"""
backend/app/core/fastapi_cache.py CHANGED
@@ -4,7 +4,7 @@ from fastapi_cache.decorator import cache
4
  from datetime import timedelta
5
  from app.config import CACHE_TTL
6
  import logging
7
- from app.utils.logging import LogFormatter
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  from datetime import timedelta
5
  from app.config import CACHE_TTL
6
  import logging
7
+ from app.core.formatting import LogFormatter
8
 
9
  logger = logging.getLogger(__name__)
10
 
backend/app/core/formatting.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from typing import Dict, Any, List, Optional
3
+
4
+ logger = logging.getLogger(__name__)
5
+
6
+ class LogFormatter:
7
+ """Utility class for consistent log formatting across the application"""
8
+
9
+ @staticmethod
10
+ def section(title: str) -> str:
11
+ """Create a section header"""
12
+ return f"\n{'='*20} {title.upper()} {'='*20}"
13
+
14
+ @staticmethod
15
+ def subsection(title: str) -> str:
16
+ """Create a subsection header"""
17
+ return f"\n{'─'*20} {title} {'─'*20}"
18
+
19
+ @staticmethod
20
+ def tree(items: Dict[str, Any], title: str = None) -> List[str]:
21
+ """Create a tree view of dictionary data"""
22
+ lines = []
23
+ if title:
24
+ lines.append(f"📊 {title}:")
25
+
26
+ # Get the maximum length for alignment
27
+ max_key_length = max(len(str(k)) for k in items.keys())
28
+
29
+ # Format each item
30
+ for i, (key, value) in enumerate(items.items()):
31
+ prefix = "└──" if i == len(items) - 1 else "├──"
32
+ if isinstance(value, (int, float)):
33
+ value = f"{value:,}" # Add thousand separators
34
+ lines.append(f"{prefix} {str(key):<{max_key_length}}: {value}")
35
+
36
+ return lines
37
+
38
+ @staticmethod
39
+ def stats(stats: Dict[str, int], title: str = None) -> List[str]:
40
+ """Format statistics with icons"""
41
+ lines = []
42
+ if title:
43
+ lines.append(f"📊 {title}:")
44
+
45
+ # Get the maximum length for alignment
46
+ max_key_length = max(len(str(k)) for k in stats.keys())
47
+
48
+ # Format each stat with an appropriate icon
49
+ icons = {
50
+ "total": "📌",
51
+ "success": "✅",
52
+ "error": "❌",
53
+ "pending": "⏳",
54
+ "processing": "⚙️",
55
+ "finished": "✨",
56
+ "evaluating": "🔄",
57
+ "downloads": "⬇️",
58
+ "files": "📁",
59
+ "cached": "💾",
60
+ "size": "📏",
61
+ "time": "⏱️",
62
+ "rate": "🚀"
63
+ }
64
+
65
+ # Format each item
66
+ for i, (key, value) in enumerate(stats.items()):
67
+ prefix = "└──" if i == len(stats) - 1 else "├──"
68
+ icon = icons.get(key.lower().split('_')[0], "•")
69
+ if isinstance(value, (int, float)):
70
+ value = f"{value:,}" # Add thousand separators
71
+ lines.append(f"{prefix} {icon} {str(key):<{max_key_length}}: {value}")
72
+
73
+ return lines
74
+
75
+ @staticmethod
76
+ def progress_bar(current: int, total: int, width: int = 20) -> str:
77
+ """Create a progress bar"""
78
+ percentage = (current * 100) // total
79
+ filled = "█" * (percentage * width // 100)
80
+ empty = "░" * (width - len(filled))
81
+ return f"{filled}{empty} {percentage:3d}%"
82
+
83
+ @staticmethod
84
+ def error(message: str, error: Optional[Exception] = None) -> str:
85
+ """Format error message"""
86
+ error_msg = f"\n❌ Error: {message}"
87
+ if error:
88
+ error_msg += f"\n └── Details: {str(error)}"
89
+ return error_msg
90
+
91
+ @staticmethod
92
+ def success(message: str) -> str:
93
+ """Format success message"""
94
+ return f"✅ {message}"
95
+
96
+ @staticmethod
97
+ def warning(message: str) -> str:
98
+ """Format warning message"""
99
+ return f"⚠️ {message}"
100
+
101
+ @staticmethod
102
+ def info(message: str) -> str:
103
+ """Format info message"""
104
+ return f"ℹ️ {message}"
backend/app/services/hf_service.py CHANGED
@@ -2,7 +2,7 @@ from typing import Optional
2
  from huggingface_hub import HfApi
3
  from app.config import HF_TOKEN, API
4
  from app.core.cache import cache_config
5
- from app.utils.logging import LogFormatter
6
  import logging
7
 
8
  logger = logging.getLogger(__name__)
 
2
  from huggingface_hub import HfApi
3
  from app.config import HF_TOKEN, API
4
  from app.core.cache import cache_config
5
+ from app.core.formatting import LogFormatter
6
  import logging
7
 
8
  logger = logging.getLogger(__name__)
backend/app/services/leaderboard.py CHANGED
@@ -5,7 +5,7 @@ import datasets
5
  from fastapi import HTTPException
6
  import logging
7
  from app.config.base import HF_ORGANIZATION
8
- from app.utils.logging import LogFormatter
9
 
10
  logger = logging.getLogger(__name__)
11
 
@@ -143,7 +143,7 @@ class LeaderboardService:
143
  "is_merged": data.get("Merged", False),
144
  "is_moe": data.get("MoE", False),
145
  "is_flagged": data.get("Flagged", False),
146
- "is_highlighted_by_maintainer": data.get("Official Providers", False)
147
  }
148
 
149
  metadata = {
 
5
  from fastapi import HTTPException
6
  import logging
7
  from app.config.base import HF_ORGANIZATION
8
+ from app.core.formatting import LogFormatter
9
 
10
  logger = logging.getLogger(__name__)
11
 
 
143
  "is_merged": data.get("Merged", False),
144
  "is_moe": data.get("MoE", False),
145
  "is_flagged": data.get("Flagged", False),
146
+ "is_official_provider": data.get("Official Providers", False)
147
  }
148
 
149
  metadata = {
backend/app/services/models.py CHANGED
@@ -25,7 +25,7 @@ from app.services.hf_service import HuggingFaceService
25
  from app.utils.model_validation import ModelValidator
26
  from app.services.votes import VoteService
27
  from app.core.cache import cache_config
28
- from app.utils.logging import LogFormatter
29
 
30
  # Disable datasets progress bars globally
31
  disable_progress_bar()
@@ -409,6 +409,14 @@ class ModelService(HuggingFaceService):
409
  logger.info(LogFormatter.subsection("CHECKING EXISTING SUBMISSIONS"))
410
  existing_models = await self.get_models()
411
 
 
 
 
 
 
 
 
 
412
  # Check in all statuses (pending, evaluating, finished)
413
  for status, models in existing_models.items():
414
  for model in models:
 
25
  from app.utils.model_validation import ModelValidator
26
  from app.services.votes import VoteService
27
  from app.core.cache import cache_config
28
+ from app.core.formatting import LogFormatter
29
 
30
  # Disable datasets progress bars globally
31
  disable_progress_bar()
 
409
  logger.info(LogFormatter.subsection("CHECKING EXISTING SUBMISSIONS"))
410
  existing_models = await self.get_models()
411
 
412
+ # Call the official provider status check
413
+ is_valid, error_message = await self.validator.check_official_provider_status(
414
+ model_data["model_id"],
415
+ existing_models
416
+ )
417
+ if not is_valid:
418
+ raise ValueError(error_message)
419
+
420
  # Check in all statuses (pending, evaluating, finished)
421
  for status, models in existing_models.items():
422
  for model in models:
backend/app/services/votes.py CHANGED
@@ -4,16 +4,15 @@ import json
4
  import logging
5
  import asyncio
6
  from pathlib import Path
7
- import os
8
  import aiohttp
9
  from huggingface_hub import HfApi
10
  import datasets
11
 
12
  from app.services.hf_service import HuggingFaceService
13
- from app.config import HF_TOKEN, API
14
  from app.config.hf_config import HF_ORGANIZATION
15
  from app.core.cache import cache_config
16
- from app.utils.logging import LogFormatter
17
 
18
  logger = logging.getLogger(__name__)
19
 
 
4
  import logging
5
  import asyncio
6
  from pathlib import Path
 
7
  import aiohttp
8
  from huggingface_hub import HfApi
9
  import datasets
10
 
11
  from app.services.hf_service import HuggingFaceService
12
+ from app.config import HF_TOKEN
13
  from app.config.hf_config import HF_ORGANIZATION
14
  from app.core.cache import cache_config
15
+ from app.core.formatting import LogFormatter
16
 
17
  logger = logging.getLogger(__name__)
18
 
backend/app/utils/logging.py CHANGED
@@ -1,105 +1,3 @@
1
- import logging
2
- import sys
3
- from typing import Dict, Any, List, Optional
4
 
5
- logger = logging.getLogger(__name__)
6
-
7
- class LogFormatter:
8
- """Utility class for consistent log formatting across the application"""
9
-
10
- @staticmethod
11
- def section(title: str) -> str:
12
- """Create a section header"""
13
- return f"\n{'='*20} {title.upper()} {'='*20}"
14
-
15
- @staticmethod
16
- def subsection(title: str) -> str:
17
- """Create a subsection header"""
18
- return f"\n{'─'*20} {title} {'─'*20}"
19
-
20
- @staticmethod
21
- def tree(items: Dict[str, Any], title: str = None) -> List[str]:
22
- """Create a tree view of dictionary data"""
23
- lines = []
24
- if title:
25
- lines.append(f"📊 {title}:")
26
-
27
- # Get the maximum length for alignment
28
- max_key_length = max(len(str(k)) for k in items.keys())
29
-
30
- # Format each item
31
- for i, (key, value) in enumerate(items.items()):
32
- prefix = "└──" if i == len(items) - 1 else "├──"
33
- if isinstance(value, (int, float)):
34
- value = f"{value:,}" # Add thousand separators
35
- lines.append(f"{prefix} {str(key):<{max_key_length}}: {value}")
36
-
37
- return lines
38
-
39
- @staticmethod
40
- def stats(stats: Dict[str, int], title: str = None) -> List[str]:
41
- """Format statistics with icons"""
42
- lines = []
43
- if title:
44
- lines.append(f"📊 {title}:")
45
-
46
- # Get the maximum length for alignment
47
- max_key_length = max(len(str(k)) for k in stats.keys())
48
-
49
- # Format each stat with an appropriate icon
50
- icons = {
51
- "total": "📌",
52
- "success": "✅",
53
- "error": "❌",
54
- "pending": "⏳",
55
- "processing": "⚙️",
56
- "finished": "✨",
57
- "evaluating": "🔄",
58
- "downloads": "⬇️",
59
- "files": "📁",
60
- "cached": "💾",
61
- "size": "📏",
62
- "time": "⏱️",
63
- "rate": "🚀"
64
- }
65
-
66
- # Format each item
67
- for i, (key, value) in enumerate(stats.items()):
68
- prefix = "└──" if i == len(stats) - 1 else "├──"
69
- icon = icons.get(key.lower().split('_')[0], "•")
70
- if isinstance(value, (int, float)):
71
- value = f"{value:,}" # Add thousand separators
72
- lines.append(f"{prefix} {icon} {str(key):<{max_key_length}}: {value}")
73
-
74
- return lines
75
-
76
- @staticmethod
77
- def progress_bar(current: int, total: int, width: int = 20) -> str:
78
- """Create a progress bar"""
79
- percentage = (current * 100) // total
80
- filled = "█" * (percentage * width // 100)
81
- empty = "░" * (width - len(filled))
82
- return f"{filled}{empty} {percentage:3d}%"
83
-
84
- @staticmethod
85
- def error(message: str, error: Optional[Exception] = None) -> str:
86
- """Format error message"""
87
- error_msg = f"\n❌ Error: {message}"
88
- if error:
89
- error_msg += f"\n └── Details: {str(error)}"
90
- return error_msg
91
-
92
- @staticmethod
93
- def success(message: str) -> str:
94
- """Format success message"""
95
- return f"✅ {message}"
96
-
97
- @staticmethod
98
- def warning(message: str) -> str:
99
- """Format warning message"""
100
- return f"⚠️ {message}"
101
-
102
- @staticmethod
103
- def info(message: str) -> str:
104
- """Format info message"""
105
- return f"ℹ️ {message}"
 
1
+ from app.core.formatting import LogFormatter
 
 
2
 
3
+ __all__ = ['LogFormatter']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/app/utils/model_validation.py CHANGED
@@ -1,15 +1,14 @@
1
  import json
2
  import logging
3
  import asyncio
4
- import re
5
  from typing import Tuple, Optional, Dict, Any
6
- import aiohttp
7
  from huggingface_hub import HfApi, ModelCard, hf_hub_download
8
  from huggingface_hub import hf_api
9
  from transformers import AutoConfig, AutoTokenizer
10
- from app.config.base import HF_TOKEN, API
11
- from app.utils.logging import LogFormatter
12
-
13
 
14
  logger = logging.getLogger(__name__)
15
 
@@ -207,4 +206,61 @@ class ModelValidator:
207
  except Exception as e:
208
  if "You are trying to access a gated repo." in str(e):
209
  return True, "The model is gated and requires special access permissions.", None
210
- return False, f"The model was not found or is misconfigured on the Hub. Error: {e.args[0]}", None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import json
2
  import logging
3
  import asyncio
 
4
  from typing import Tuple, Optional, Dict, Any
5
+ from datasets import load_dataset
6
  from huggingface_hub import HfApi, ModelCard, hf_hub_download
7
  from huggingface_hub import hf_api
8
  from transformers import AutoConfig, AutoTokenizer
9
+ from app.config.base import HF_TOKEN
10
+ from app.config.hf_config import OFFICIAL_PROVIDERS_REPO
11
+ from app.core.formatting import LogFormatter
12
 
13
  logger = logging.getLogger(__name__)
14
 
 
206
  except Exception as e:
207
  if "You are trying to access a gated repo." in str(e):
208
  return True, "The model is gated and requires special access permissions.", None
209
+ return False, f"The model was not found or is misconfigured on the Hub. Error: {e.args[0]}", None
210
+
211
+ async def check_official_provider_status(
212
+ self,
213
+ model_id: str,
214
+ existing_models: Dict[str, list]
215
+ ) -> Tuple[bool, Optional[str]]:
216
+ """
217
+ Check if model is from official provider and has finished submission.
218
+
219
+ Args:
220
+ model_id: The model identifier (org/model-name)
221
+ existing_models: Dictionary of models by status from get_models()
222
+
223
+ Returns:
224
+ Tuple[bool, Optional[str]]: (is_valid, error_message)
225
+ """
226
+ try:
227
+ logger.info(LogFormatter.info(f"Checking official provider status for {model_id}"))
228
+
229
+ # Get model organization
230
+ model_org = model_id.split('/')[0] if '/' in model_id else None
231
+
232
+ if not model_org:
233
+ return True, None
234
+
235
+ # Load official providers dataset
236
+ dataset = load_dataset(OFFICIAL_PROVIDERS_REPO)
237
+ official_providers = dataset["train"][0]["CURATED_SET"]
238
+
239
+ # Check if model org is in official providers
240
+ is_official = model_org in official_providers
241
+
242
+ if is_official:
243
+ logger.info(LogFormatter.info(f"Model organization '{model_org}' is an official provider"))
244
+
245
+ # Check for finished submissions
246
+ if "finished" in existing_models:
247
+ for model in existing_models["finished"]:
248
+ if model["name"] == model_id:
249
+ error_msg = (
250
+ f"Model {model_id} is an official provider model "
251
+ f"with a completed evaluation. "
252
+ f"To re-evaluate, please open a discussion."
253
+ )
254
+ logger.error(LogFormatter.error("Validation failed", error_msg))
255
+ return False, error_msg
256
+
257
+ logger.info(LogFormatter.success("No finished submission found for this official provider model"))
258
+ else:
259
+ logger.info(LogFormatter.info(f"Model organization '{model_org}' is not an official provider"))
260
+
261
+ return True, None
262
+
263
+ except Exception as e:
264
+ error_msg = f"Failed to check official provider status: {str(e)}"
265
+ logger.error(LogFormatter.error(error_msg))
266
+ return False, error_msg
backend/pyproject.toml CHANGED
@@ -13,8 +13,8 @@ pandas = "^2.2.3"
13
  datasets = "^3.2.0"
14
  pyarrow = "^18.1.0"
15
  python-multipart = "^0.0.20"
16
- huggingface-hub = "^0.27.0"
17
- transformers = "^4.47.0"
18
  safetensors = "^0.4.5"
19
  aiofiles = "^24.1.0"
20
  fastapi-cache2 = "^0.2.1"
 
13
  datasets = "^3.2.0"
14
  pyarrow = "^18.1.0"
15
  python-multipart = "^0.0.20"
16
+ huggingface-hub = "^0.27.1"
17
+ transformers = "^4.47.1"
18
  safetensors = "^0.4.5"
19
  aiofiles = "^24.1.0"
20
  fastapi-cache2 = "^0.2.1"
backend/utils/analyze_prod_datasets.py CHANGED
@@ -132,7 +132,7 @@ def main():
132
  "description": "User votes"
133
  },
134
  {
135
- "id": f"{HF_ORGANIZATION}/maintainers-highlight",
136
  "description": "Highlighted models"
137
  }
138
  ]
 
132
  "description": "User votes"
133
  },
134
  {
135
+ "id": f"{HF_ORGANIZATION}/official-providers",
136
  "description": "Highlighted models"
137
  }
138
  ]
backend/utils/fix_wrong_model_size.py CHANGED
@@ -13,7 +13,7 @@ from datetime import datetime
13
  from tqdm.auto import tqdm
14
  from tqdm.contrib.logging import logging_redirect_tqdm
15
 
16
- from app.config.hf_config import HF_TOKEN, QUEUE_REPO, API, EVAL_REQUESTS_PATH
17
 
18
  from app.utils.model_validation import ModelValidator
19
 
@@ -59,7 +59,7 @@ def write_json(repo_path, file, content):
59
 
60
 
61
  def main():
62
- requests_path = "/Users/lozowski/Developer/requests"
63
  start_date = "2024-12-09"
64
  end_date = "2025-01-07"
65
 
 
13
  from tqdm.auto import tqdm
14
  from tqdm.contrib.logging import logging_redirect_tqdm
15
 
16
+ from app.config.hf_config import HF_TOKEN, API
17
 
18
  from app.utils.model_validation import ModelValidator
19
 
 
59
 
60
 
61
  def main():
62
+ requests_path = "/requests"
63
  start_date = "2024-12-09"
64
  end_date = "2025-01-07"
65
 
backend/utils/sync_datasets_locally.py CHANGED
@@ -30,7 +30,7 @@ DATASET_NAMES = [
30
  "results",
31
  "requests",
32
  "contents",
33
- "maintainers-highlight",
34
  ]
35
 
36
  # Build list of datasets with their source and destination paths
 
30
  "results",
31
  "requests",
32
  "contents",
33
+ "official-providers",
34
  ]
35
 
36
  # Build list of datasets with their source and destination paths
frontend/src/pages/AddModelPage/components/ModelSubmissionForm/ModelSubmissionForm.js CHANGED
@@ -411,7 +411,7 @@ function ModelSubmissionForm({ user, isAuthenticated }) {
411
  placeholder="organization/model-name"
412
  value={formData.modelName}
413
  onChange={handleChange}
414
- helperText="Example: meta-llama/Llama-2-7b-hf"
415
  InputProps={{
416
  endAdornment: (
417
  <InfoIconWithTooltip tooltip={HELP_TEXTS.modelName} />
 
411
  placeholder="organization/model-name"
412
  value={formData.modelName}
413
  onChange={handleChange}
414
+ helperText="Example: meta-llama/Llama-3.2-1B"
415
  InputProps={{
416
  endAdornment: (
417
  <InfoIconWithTooltip tooltip={HELP_TEXTS.modelName} />
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/FilteredModelCount.js CHANGED
@@ -19,7 +19,7 @@ const useModelCount = ({ totalCount, filteredCount, data, table, loading }) => {
19
  };
20
  }
21
  const displayCount = isOfficialProviderActive
22
- ? officialOnlyCounts.maintainersHighlight
23
  : totalCount;
24
 
25
  // Calculate total number of pinned models
@@ -46,8 +46,8 @@ const useModelCount = ({ totalCount, filteredCount, data, table, loading }) => {
46
  // Filter by official providers
47
  if (filterConfig.isOfficialProviderActive) {
48
  if (
49
- !model.features?.is_highlighted_by_maintainer &&
50
- !model.metadata?.is_highlighted_by_maintainer
51
  ) {
52
  return false;
53
  }
@@ -100,7 +100,7 @@ const useModelCount = ({ totalCount, filteredCount, data, table, loading }) => {
100
  typeof filter === "object" ? filter.value : filter;
101
 
102
  // Maintainer's Highlight keeps positive logic
103
- if (filterValue === "is_highlighted_by_maintainer") {
104
  return model.features[filterValue];
105
  }
106
 
@@ -134,7 +134,7 @@ const useModelCount = ({ totalCount, filteredCount, data, table, loading }) => {
134
  data,
135
  state.filters,
136
  isOfficialProviderActive,
137
- officialOnlyCounts.maintainersHighlight,
138
  ]);
139
  };
140
 
 
19
  };
20
  }
21
  const displayCount = isOfficialProviderActive
22
+ ? officialOnlyCounts.officialProviders
23
  : totalCount;
24
 
25
  // Calculate total number of pinned models
 
46
  // Filter by official providers
47
  if (filterConfig.isOfficialProviderActive) {
48
  if (
49
+ !model.features?.is_official_provider &&
50
+ !model.metadata?.is_official_provider
51
  ) {
52
  return false;
53
  }
 
100
  typeof filter === "object" ? filter.value : filter;
101
 
102
  // Maintainer's Highlight keeps positive logic
103
+ if (filterValue === "is_official_provider") {
104
  return model.features[filterValue];
105
  }
106
 
 
134
  data,
135
  state.filters,
136
  isOfficialProviderActive,
137
+ officialOnlyCounts.officialProviders,
138
  ]);
139
  };
140
 
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/Filters.js CHANGED
@@ -781,18 +781,18 @@ const LeaderboardFilters = ({
781
  <FilterTag
782
  label={filter.label}
783
  checked={
784
- filter.value === "is_highlighted_by_maintainer"
785
  ? isOfficialProviderActive
786
  : selectedBooleanFilters.includes(filter.value)
787
  }
788
  onChange={
789
- filter.value === "is_highlighted_by_maintainer"
790
  ? handleOfficialProviderToggle
791
  : () => handleBooleanFilterToggle(filter.value)
792
  }
793
  count={
794
- filter.value === "is_highlighted_by_maintainer"
795
- ? currentCounts.maintainersHighlight
796
  : 0
797
  }
798
  showCheckbox={true}
@@ -815,7 +815,7 @@ const LeaderboardFilters = ({
815
  borderRadius: "50%",
816
  backgroundColor: (
817
  filter.value ===
818
- "is_highlighted_by_maintainer"
819
  ? isOfficialProviderActive
820
  : selectedBooleanFilters.includes(
821
  filter.value
@@ -826,7 +826,7 @@ const LeaderboardFilters = ({
826
  }}
827
  />
828
  {(
829
- filter.value === "is_highlighted_by_maintainer"
830
  ? isOfficialProviderActive
831
  : selectedBooleanFilters.includes(filter.value)
832
  )
 
781
  <FilterTag
782
  label={filter.label}
783
  checked={
784
+ filter.value === "is_official_provider"
785
  ? isOfficialProviderActive
786
  : selectedBooleanFilters.includes(filter.value)
787
  }
788
  onChange={
789
+ filter.value === "is_official_provider"
790
  ? handleOfficialProviderToggle
791
  : () => handleBooleanFilterToggle(filter.value)
792
  }
793
  count={
794
+ filter.value === "is_official_provider"
795
+ ? currentCounts.officialProviders
796
  : 0
797
  }
798
  showCheckbox={true}
 
815
  borderRadius: "50%",
816
  backgroundColor: (
817
  filter.value ===
818
+ "is_official_provider"
819
  ? isOfficialProviderActive
820
  : selectedBooleanFilters.includes(
821
  filter.value
 
826
  }}
827
  />
828
  {(
829
+ filter.value === "is_official_provider"
830
  ? isOfficialProviderActive
831
  : selectedBooleanFilters.includes(filter.value)
832
  )
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/QuickFilters.js CHANGED
@@ -206,7 +206,7 @@ const QuickFilters = ({ totalCount = 0, loading = false }) => {
206
  label={officialProvidersPreset.label}
207
  checked={isOfficialProviderActive}
208
  onChange={handleOfficialProviderToggle}
209
- count={currentCounts.maintainersHighlight}
210
  totalCount={totalCount}
211
  showCheckbox={true}
212
  variant="secondary"
 
206
  label={officialProvidersPreset.label}
207
  checked={isOfficialProviderActive}
208
  onChange={handleOfficialProviderToggle}
209
+ count={currentCounts.officialProviders}
210
  totalCount={totalCount}
211
  showCheckbox={true}
212
  variant="secondary"
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/hooks/useOfficialProvidersMode.js CHANGED
@@ -23,7 +23,7 @@ export const useOfficialProvidersMode = () => {
23
 
24
  const filters = searchParams.get("filters");
25
  const isHighlighted =
26
- filters?.includes("is_highlighted_by_maintainer") || false;
27
 
28
  // On initial load
29
  if (isInitialLoadRef.current) {
@@ -33,7 +33,7 @@ export const useOfficialProvidersMode = () => {
33
  if (isHighlighted && filters) {
34
  const initialNormalFilters = filters
35
  .split(",")
36
- .filter((f) => f !== "is_highlighted_by_maintainer" && f !== "")
37
  .filter(Boolean);
38
  if (initialNormalFilters.length > 0) {
39
  normalFiltersRef.current = initialNormalFilters.join(",");
@@ -70,7 +70,7 @@ export const useOfficialProvidersMode = () => {
70
  const currentFiltersStr = searchParams.get("filters");
71
  const currentFilters =
72
  currentFiltersStr?.split(",").filter(Boolean) || [];
73
- const highlightFilter = "is_highlighted_by_maintainer";
74
  const newSearchParams = new URLSearchParams(searchParams);
75
 
76
  if (currentFilters.includes(highlightFilter)) {
 
23
 
24
  const filters = searchParams.get("filters");
25
  const isHighlighted =
26
+ filters?.includes("is_official_provider") || false;
27
 
28
  // On initial load
29
  if (isInitialLoadRef.current) {
 
33
  if (isHighlighted && filters) {
34
  const initialNormalFilters = filters
35
  .split(",")
36
+ .filter((f) => f !== "is_official_provider" && f !== "")
37
  .filter(Boolean);
38
  if (initialNormalFilters.length > 0) {
39
  normalFiltersRef.current = initialNormalFilters.join(",");
 
70
  const currentFiltersStr = searchParams.get("filters");
71
  const currentFilters =
72
  currentFiltersStr?.split(",").filter(Boolean) || [];
73
+ const highlightFilter = "is_official_provider";
74
  const newSearchParams = new URLSearchParams(searchParams);
75
 
76
  if (currentFilters.includes(highlightFilter)) {
frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/defaults.js CHANGED
@@ -59,14 +59,14 @@ const FILTERS = {
59
  hide: true,
60
  },
61
  {
62
- value: "is_highlighted_by_maintainer",
63
  label: "Only Official Providers",
64
  hide: false,
65
  },
66
  ],
67
  HIGHLIGHT_OPTIONS: [
68
  {
69
- value: "is_highlighted_by_maintainer",
70
  label: "Only Official Providers",
71
  },
72
  ],
@@ -237,7 +237,7 @@ const COLUMNS = {
237
  defaultVisible: false,
238
  label: "Hub Availability",
239
  },
240
- "features.is_highlighted_by_maintainer": {
241
  group: "additional_info",
242
  size: COLUMN_SIZES.OFFICIAL_PROVIDER,
243
  defaultVisible: false,
 
59
  hide: true,
60
  },
61
  {
62
+ value: "is_official_provider",
63
  label: "Only Official Providers",
64
  hide: false,
65
  },
66
  ],
67
  HIGHLIGHT_OPTIONS: [
68
  {
69
+ value: "is_official_provider",
70
  label: "Only Official Providers",
71
  },
72
  ],
 
237
  defaultVisible: false,
238
  label: "Hub Availability",
239
  },
240
+ "features.is_official_provider": {
241
  group: "additional_info",
242
  size: COLUMN_SIZES.OFFICIAL_PROVIDER,
243
  defaultVisible: false,
frontend/src/pages/LeaderboardPage/components/Leaderboard/constants/quickFilters.js CHANGED
@@ -45,7 +45,7 @@ export const QUICK_FILTER_PRESETS = [
45
  shortDescription: 'Officially provided models',
46
  description: 'Models that are officially provided and maintained by official creators or organizations.',
47
  filters: {
48
- selectedBooleanFilters: ['is_highlighted_by_maintainer']
49
  }
50
  }
51
  ];
 
45
  shortDescription: 'Officially provided models',
46
  description: 'Models that are officially provided and maintained by official creators or organizations.',
47
  filters: {
48
+ selectedBooleanFilters: ['is_official_provider']
49
  }
50
  }
51
  ];
frontend/src/pages/LeaderboardPage/components/Leaderboard/context/LeaderboardContext.js CHANGED
@@ -47,7 +47,7 @@ const createInitialCounts = () => {
47
  return {
48
  modelTypes,
49
  precisions,
50
- maintainersHighlight: 0,
51
  mixtureOfExperts: 0,
52
  flagged: 0,
53
  merged: 0,
@@ -129,7 +129,7 @@ const modelMatchesFilters = (model, filters) => {
129
  const filterValue = typeof filter === "object" ? filter.value : filter;
130
 
131
  // Maintainer's Highlight keeps positive logic
132
- if (filterValue === "is_highlighted_by_maintainer") {
133
  return model.features[filterValue];
134
  }
135
 
@@ -187,8 +187,8 @@ const calculateModelCounts = (models) => {
187
 
188
  models.forEach((model) => {
189
  const isOfficial =
190
- model.features?.is_highlighted_by_maintainer ||
191
- model.metadata?.is_highlighted_by_maintainer;
192
  const countsToUpdate = [normalCounts];
193
 
194
  if (isOfficial) {
@@ -214,10 +214,10 @@ const calculateModelCounts = (models) => {
214
 
215
  // Boolean filters
216
  if (
217
- model.features?.is_highlighted_by_maintainer ||
218
- model.metadata?.is_highlighted_by_maintainer
219
  )
220
- counts.maintainersHighlight++;
221
  if (model.features?.is_moe || model.metadata?.is_moe)
222
  counts.mixtureOfExperts++;
223
  if (model.features?.is_flagged || model.metadata?.is_flagged)
 
47
  return {
48
  modelTypes,
49
  precisions,
50
+ officialProviders: 0,
51
  mixtureOfExperts: 0,
52
  flagged: 0,
53
  merged: 0,
 
129
  const filterValue = typeof filter === "object" ? filter.value : filter;
130
 
131
  // Maintainer's Highlight keeps positive logic
132
+ if (filterValue === "is_official_provider") {
133
  return model.features[filterValue];
134
  }
135
 
 
187
 
188
  models.forEach((model) => {
189
  const isOfficial =
190
+ model.features?.is_official_provider ||
191
+ model.metadata?.is_official_provider;
192
  const countsToUpdate = [normalCounts];
193
 
194
  if (isOfficial) {
 
214
 
215
  // Boolean filters
216
  if (
217
+ model.features?.is_official_provider ||
218
+ model.metadata?.is_official_provider
219
  )
220
+ counts.officialProviders++;
221
  if (model.features?.is_moe || model.metadata?.is_moe)
222
  counts.mixtureOfExperts++;
223
  if (model.features?.is_flagged || model.metadata?.is_flagged)
frontend/src/pages/LeaderboardPage/components/Leaderboard/hooks/useDataUtils.js CHANGED
@@ -58,8 +58,8 @@ export const useProcessedData = (data, averageMode, visibleColumns) => {
58
  ...item.features,
59
  is_moe: Boolean(item.features.is_moe),
60
  is_flagged: Boolean(item.features.is_flagged),
61
- is_highlighted_by_maintainer: Boolean(
62
- item.features.is_highlighted_by_maintainer
63
  ),
64
  is_merged: Boolean(item.features.is_merged),
65
  is_not_available_on_hub: Boolean(item.features.is_not_available_on_hub),
@@ -117,8 +117,8 @@ export const useFilteredData = (
117
  if (isOfficialProviderActive) {
118
  filteredUnpinned = filteredUnpinned.filter(
119
  (row) =>
120
- row.features?.is_highlighted_by_maintainer ||
121
- row.metadata?.is_highlighted_by_maintainer
122
  );
123
  }
124
 
@@ -197,7 +197,7 @@ export const useFilteredData = (
197
  typeof filter === "object" ? filter.value : filter;
198
 
199
  // Maintainer's Highlight keeps positive logic
200
- if (filterValue === "is_highlighted_by_maintainer") {
201
  return row.features[filterValue];
202
  }
203
 
 
58
  ...item.features,
59
  is_moe: Boolean(item.features.is_moe),
60
  is_flagged: Boolean(item.features.is_flagged),
61
+ is_official_provider: Boolean(
62
+ item.features.is_official_provider
63
  ),
64
  is_merged: Boolean(item.features.is_merged),
65
  is_not_available_on_hub: Boolean(item.features.is_not_available_on_hub),
 
117
  if (isOfficialProviderActive) {
118
  filteredUnpinned = filteredUnpinned.filter(
119
  (row) =>
120
+ row.features?.is_official_provider ||
121
+ row.metadata?.is_official_provider
122
  );
123
  }
124
 
 
197
  typeof filter === "object" ? filter.value : filter;
198
 
199
  // Maintainer's Highlight keeps positive logic
200
+ if (filterValue === "is_official_provider") {
201
  return row.features[filterValue];
202
  }
203
 
frontend/src/pages/LeaderboardPage/components/Leaderboard/utils/columnUtils.js CHANGED
@@ -1003,18 +1003,18 @@ export const createColumns = (
1003
  ],
1004
  },
1005
  {
1006
- accessorKey: "features.is_highlighted_by_maintainer",
1007
  header: createHeaderCell(
1008
  "Official Providers",
1009
  "Models that are officially provided and maintained by their original creators or organizations"
1010
  ),
1011
  cell: ({ row }) => (
1012
  <BooleanValue
1013
- value={row.original.features.is_highlighted_by_maintainer}
1014
  />
1015
  ),
1016
  size: TABLE_DEFAULTS.COLUMNS.COLUMN_SIZES[
1017
- "features.is_highlighted_by_maintainer"
1018
  ],
1019
  enableSorting: true,
1020
  },
@@ -1061,7 +1061,7 @@ export const createColumns = (
1061
  "metadata.base_model": 10,
1062
  "model.has_chat_template": 11,
1063
  "features.is_not_available_on_hub": 12,
1064
- "features.is_highlighted_by_maintainer": 13,
1065
  "features.is_moe": 14,
1066
  "features.is_flagged": 15,
1067
  };
 
1003
  ],
1004
  },
1005
  {
1006
+ accessorKey: "features.is_official_provider",
1007
  header: createHeaderCell(
1008
  "Official Providers",
1009
  "Models that are officially provided and maintained by their original creators or organizations"
1010
  ),
1011
  cell: ({ row }) => (
1012
  <BooleanValue
1013
+ value={row.original.features.is_official_provider}
1014
  />
1015
  ),
1016
  size: TABLE_DEFAULTS.COLUMNS.COLUMN_SIZES[
1017
+ "features.is_official_provider"
1018
  ],
1019
  enableSorting: true,
1020
  },
 
1061
  "metadata.base_model": 10,
1062
  "model.has_chat_template": 11,
1063
  "features.is_not_available_on_hub": 12,
1064
+ "features.is_official_provider": 13,
1065
  "features.is_moe": 14,
1066
  "features.is_flagged": 15,
1067
  };