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
|