code: def extract_framework_task_model(
      model_id: str,
  ) -> Tuple[str, str, str]:
      """Parse the model ID, return a tuple framework, task, rest-of-id.
  
      Args:
          model_id (str): The model ID for which to extract the framework/task/model.
  
      Raises:
          ValueError: If the model ID cannot be parsed into at least 3 components seperated by
              "-" character.
      """
      _id_parts = model_id.split("-")
  
      if len(_id_parts) < 3:
          raise ValueError(f"incorrect model ID: {model_id}.")
  
      framework = _id_parts[0]
      task = _id_parts[1]
      name = "-".join(_id_parts[2:])
  
      return framework, task, name
  
imports: from __future__ import absolute_import
  import copy
  from concurrent.futures import ThreadPoolExecutor, as_completed
  from functools import cmp_to_key
  import json
  from typing import Any, Generator, List, Optional, Tuple, Union, Set, Dict
  from packaging.version import Version
  from sagemaker.jumpstart import accessors
  from sagemaker.jumpstart.constants import DEFAULT_JUMPSTART_SAGEMAKER_SESSION, JUMPSTART_DEFAULT_REGION_NAME
  from sagemaker.jumpstart.enums import JumpStartScriptScope
  from sagemaker.jumpstart.filters import SPECIAL_SUPPORTED_FILTER_KEYS, BooleanValues, Identity, SpecialSupportedFilterKeys
  from sagemaker.jumpstart.filters import Constant, ModelFilter, Operator, evaluate_filter_expression
  from sagemaker.jumpstart.types import JumpStartModelHeader, JumpStartModelSpecs
  from sagemaker.jumpstart.utils import get_jumpstart_content_bucket, get_sagemaker_version, verify_model_region_and_return_specs
  from sagemaker.session import Session
label_desc: Use image node_id 5 for calling a global function with example usage: extract_framework_task_model(model_id) and returns: framework,  task,  name