code: def run(self) -> None:
      with StepProfiler(
          method="DeleteJobsTask.run",
          step="all",
          context=f"num_jobs_to_delete={len(self.jobs_df)}",
      ):
          deleted_jobs_count = Queue().delete_jobs_by_job_id(
              job_ids=self.jobs_df["job_id"].tolist()
          )
          if deleted_jobs_count != len(self.jobs_df):
              raise ValueError(
                  f"Something went wrong when deleting jobs: {len(self.jobs_df)} jobs were supposed to be"
                  f" deleted, but {deleted_jobs_count} were deleted."
              )
  
imports: import logging
  from abc import ABC, abstractmethod
  from dataclasses import dataclass, field
  from http import HTTPStatus
  from typing import Optional, Union
  import pandas
  from libcommon.constants import CONFIG_INFO_KINDS, CONFIG_SPLIT_NAMES_KINDS, DATASET_CONFIG_NAMES_KINDS, DEFAULT_DIFFICULTY_MAX, DIFFICULTY_BONUS_BY_FAILED_RUNS
  from libcommon.processing_graph import ProcessingGraph, ProcessingStep, ProcessingStepDoesNotExist, processing_graph
  from libcommon.prometheus import StepProfiler
  from libcommon.queue import Queue
  from libcommon.simple_cache import CacheEntryDoesNotExistError, delete_dataset_responses, fetch_names, get_best_response, get_cache_entries_df, get_response_metadata, upsert_response_params
  from libcommon.state import ArtifactState, DatasetState, FirstStepsDatasetState
  from libcommon.storage_client import StorageClient
  from libcommon.utils import JobInfo, JobResult, Priority
label_desc: Use image node_id 2 for calling the DeleteJobsTask obj's underlying member method code with example usage: obj.run() without return types