Libra-1995 commited on
Commit
d8be8d5
·
1 Parent(s): 7747993

feat: udapte timeout feature

Browse files
Files changed (1) hide show
  1. web_server.py +11 -33
web_server.py CHANGED
@@ -151,32 +151,6 @@ def delete_client_space(client_space_id: str):
151
  print(f"Failed to delete space {client_space_id}. It may not exist or already deleted.")
152
 
153
 
154
- def get_env_id(team_id: str, submission_id: str) -> str:
155
- """
156
- Generate a unique environment ID based on team ID and submission ID.
157
- Args:
158
- team_id (str): The team ID.
159
- submission_id (str): The submission ID.
160
- Returns:
161
- str: The unique environment ID.
162
- """
163
- return f"{team_id}____{submission_id}"
164
-
165
-
166
- def parse_env_id(env_id: str) -> Tuple[str, str]:
167
- """
168
- Parse the environment ID to extract team ID and submission ID.
169
- Args:
170
- env_id (str): The environment ID.
171
- Returns:
172
- Dict[str, str]: A dictionary containing team ID and submission ID.
173
- """
174
- parts = env_id.split('____')
175
- if len(parts) != 2:
176
- raise ValueError("Invalid environment ID format.")
177
- return parts[0], parts[1]
178
-
179
-
180
  class FifoDict:
181
  def __init__(self, max_size: int):
182
  self.max_size = max_size
@@ -399,6 +373,7 @@ class EnvHandler:
399
  class EnvHandlerManager:
400
  def __init__(self):
401
  self._env_handlers = {}
 
402
  self._lock = threading.Lock()
403
  threading.Thread(target=self._clean_expired_env_handlers, daemon=True).start()
404
 
@@ -452,7 +427,7 @@ class EnvHandlerManager:
452
  with self._lock:
453
  return env_id in self._env_handlers
454
 
455
- def get_env_handler(self, env_id: str) -> EnvHandler:
456
  """
457
  Get the environment handler for the given environment ID.
458
  Args:
@@ -463,6 +438,7 @@ class EnvHandlerManager:
463
  with self._lock:
464
  if env_id not in self._env_handlers:
465
  self._env_handlers[env_id] = self._generate_env_handler(env_id)
 
466
  return self._env_handlers[env_id]
467
 
468
  def close_env_handler(self, env_id: str):
@@ -493,8 +469,11 @@ class EnvHandlerManager:
493
  ]
494
  for env_id in expired_env_ids:
495
  self.close_env_handler(env_id)
496
- team_id, submission_id = parse_env_id(env_id)
497
- update_submission_data(team_id, submission_id, {"status": SubmissionStatus.FAILED.value, "error_message": "SPACE_TIMEOUT"})
 
 
 
498
  except Exception as e:
499
  print(f"Error in cleaning expired environment handlers: {e}")
500
  time.sleep(15)
@@ -520,11 +499,10 @@ def _get_env_handler(
520
 
521
  submission_id = token_info["submission_id"]
522
  team_id = token_info["team_id"]
523
- env_id = get_env_id(team_id, submission_id)
524
- if not env_manager.exists_env_handler(env_id):
525
  update_submission_data(team_id, submission_id, {"status": SubmissionStatus.PROCESSING.value})
526
 
527
- env_handler = env_manager.get_env_handler(env_id)
528
  if env_handler is None:
529
  raise HTTPException(status_code=404, detail="Environment handler already closed.")
530
  return env_handler
@@ -590,7 +568,7 @@ def execute_action_endpoint(
590
  execute_result = env_handler.execute_action(plan_traj)
591
  if execute_result.done:
592
  token_info = get_token_info(auth_token)
593
- env_manager.close_env_handler(get_env_id(token_info["team_id"], token_info["submission_id"]))
594
  delete_client_space(token_info["client_space_id"])
595
  final_score = env_handler.calculate_score()
596
  update_submission_data(token_info["team_id"], token_info["submission_id"], {"status": SubmissionStatus.SUCCESS.value, "score": final_score})
 
151
  print(f"Failed to delete space {client_space_id}. It may not exist or already deleted.")
152
 
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  class FifoDict:
155
  def __init__(self, max_size: int):
156
  self.max_size = max_size
 
373
  class EnvHandlerManager:
374
  def __init__(self):
375
  self._env_handlers = {}
376
+ self._token_info_map = {}
377
  self._lock = threading.Lock()
378
  threading.Thread(target=self._clean_expired_env_handlers, daemon=True).start()
379
 
 
427
  with self._lock:
428
  return env_id in self._env_handlers
429
 
430
+ def get_env_handler(self, env_id: str, token_info: Dict[str, Any]) -> EnvHandler:
431
  """
432
  Get the environment handler for the given environment ID.
433
  Args:
 
438
  with self._lock:
439
  if env_id not in self._env_handlers:
440
  self._env_handlers[env_id] = self._generate_env_handler(env_id)
441
+ self._token_info_map[env_id] = token_info
442
  return self._env_handlers[env_id]
443
 
444
  def close_env_handler(self, env_id: str):
 
469
  ]
470
  for env_id in expired_env_ids:
471
  self.close_env_handler(env_id)
472
+ token_info = self._token_info_map.pop(env_id, None)
473
+ if token_info:
474
+ update_submission_data(token_info["team_id"], token_info["submission_id"], {"status": SubmissionStatus.FAILED.value, "error_message": "SPACE_TIMEOUT"})
475
+ delete_client_space(token_info["client_space_id"])
476
+
477
  except Exception as e:
478
  print(f"Error in cleaning expired environment handlers: {e}")
479
  time.sleep(15)
 
499
 
500
  submission_id = token_info["submission_id"]
501
  team_id = token_info["team_id"]
502
+ if not env_manager.exists_env_handler(submission_id):
 
503
  update_submission_data(team_id, submission_id, {"status": SubmissionStatus.PROCESSING.value})
504
 
505
+ env_handler = env_manager.get_env_handler(submission_id, token_info)
506
  if env_handler is None:
507
  raise HTTPException(status_code=404, detail="Environment handler already closed.")
508
  return env_handler
 
568
  execute_result = env_handler.execute_action(plan_traj)
569
  if execute_result.done:
570
  token_info = get_token_info(auth_token)
571
+ env_manager.close_env_handler(token_info["submission_id"])
572
  delete_client_space(token_info["client_space_id"])
573
  final_score = env_handler.calculate_score()
574
  update_submission_data(token_info["team_id"], token_info["submission_id"], {"status": SubmissionStatus.SUCCESS.value, "score": final_score})