eleftherias commited on
Commit
0e6522f
·
1 Parent(s): a19fa9d

Restart eval backend when model is submitted

Browse files
backend/app/config/base.py CHANGED
@@ -37,4 +37,5 @@ EVAL_CACHE = CACHE_ROOT / "eval-queue"
37
 
38
  # Repository configuration
39
  QUEUE_REPO = f"{HF_ORGANIZATION}/llm-security-leaderboard-requests"
 
40
  EVAL_REQUESTS_PATH = EVAL_CACHE / "eval_requests.jsonl"
 
37
 
38
  # Repository configuration
39
  QUEUE_REPO = f"{HF_ORGANIZATION}/llm-security-leaderboard-requests"
40
+ EVAL_BACKEND = f"{HF_ORGANIZATION}/llm-security-evaluation-backend"
41
  EVAL_REQUESTS_PATH = EVAL_CACHE / "eval_requests.jsonl"
backend/app/services/models.py CHANGED
@@ -11,13 +11,14 @@ import sys
11
  import contextlib
12
  import tempfile
13
 
14
- from app.config import HF_TOKEN
15
  from app.config.hf_config import QUEUE_REPO
16
  from app.services.hf_service import HuggingFaceService
17
  from app.utils.model_validation import ModelValidator
18
  from app.services.votes import VoteService
19
  from app.core.cache import cache_config
20
  from app.core.formatting import LogFormatter
 
21
 
22
  # Disable datasets progress bars globally
23
  disable_progress_bar()
@@ -118,6 +119,7 @@ class ModelService(HuggingFaceService):
118
  super().__init__()
119
  self.validator = ModelValidator()
120
  self.vote_service = VoteService()
 
121
  self.eval_requests_path = cache_config.eval_requests_file
122
  logger.info(
123
  LogFormatter.info(
@@ -559,6 +561,14 @@ class ModelService(HuggingFaceService):
559
  logger.error(LogFormatter.error("Upload failed", e))
560
  raise
561
 
 
 
 
 
 
 
 
 
562
  # Add automatic vote
563
  try:
564
  logger.info(LogFormatter.subsection("AUTOMATIC VOTE"))
 
11
  import contextlib
12
  import tempfile
13
 
14
+ from app.config import HF_TOKEN, EVAL_BACKEND
15
  from app.config.hf_config import QUEUE_REPO
16
  from app.services.hf_service import HuggingFaceService
17
  from app.utils.model_validation import ModelValidator
18
  from app.services.votes import VoteService
19
  from app.core.cache import cache_config
20
  from app.core.formatting import LogFormatter
21
+ from app.utils.space_controller import SpaceController
22
 
23
  # Disable datasets progress bars globally
24
  disable_progress_bar()
 
119
  super().__init__()
120
  self.validator = ModelValidator()
121
  self.vote_service = VoteService()
122
+ self.space_controller = SpaceController()
123
  self.eval_requests_path = cache_config.eval_requests_file
124
  logger.info(
125
  LogFormatter.info(
 
561
  logger.error(LogFormatter.error("Upload failed", e))
562
  raise
563
 
564
+ # Restart the evaluation backend if needed
565
+ try:
566
+ logger.info(LogFormatter.subsection("Starting EVALUATION BACKEND"))
567
+ self.space_controller.start_space(EVAL_BACKEND)
568
+ except Exception as e:
569
+ logger.error(LogFormatter.error("Failed to restart evaluation backend", e))
570
+ raise
571
+
572
  # Add automatic vote
573
  try:
574
  logger.info(LogFormatter.subsection("AUTOMATIC VOTE"))
backend/app/utils/space_controller.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+
3
+ from huggingface_hub import HfApi
4
+
5
+ from app.config.base import HF_TOKEN
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ ACTIVE_SPACE_STATES = ["APP_STARTING", "RUNNING", "BUILDING", "RUNNING_APP_STARTING"]
10
+
11
+
12
+ class SpaceController:
13
+ def __init__(self):
14
+ self.token = HF_TOKEN
15
+ self.api = HfApi(token=self.token)
16
+
17
+ def get_space_status(self, space_id):
18
+ """Get the current status of a space"""
19
+ try:
20
+ space_info = self.api.space_info(repo_id=space_id)
21
+ return space_info.runtime.stage
22
+ except Exception as e:
23
+ logger.error(f"Error getting space status: {e}")
24
+ return None
25
+
26
+ def start_space(self, space_id):
27
+ """Start a paused space"""
28
+ try:
29
+ current_status = self.get_space_status(space_id)
30
+
31
+ if current_status in ACTIVE_SPACE_STATES:
32
+ logger.info(f"Space {space_id} is already active with status: {current_status}")
33
+ else:
34
+ logger.info(f"Starting space {space_id}...")
35
+ self.api.restart_space(repo_id=space_id)
36
+
37
+ except Exception as e:
38
+ logger.error(f"Error starting space: {e}")
39
+ raise