code: def get_client_info(
      bentoml_home: str = Provide[BentoMLContainer.bentoml_home],
  ) -> t.Optional[ClientInfo]:
      CLIENT_INFO_FILE_PATH = os.path.join(bentoml_home, "client_id")
  
      if os.path.exists(CLIENT_INFO_FILE_PATH):
          with open(CLIENT_INFO_FILE_PATH, "r", encoding="utf-8") as f:
              client_info = yaml.safe_load(f)
          return bentoml_cattr.structure(client_info, ClientInfo)
      else:
          # Create new client id
          new_client_info = ClientInfo(
              id=str(uuid.uuid4()),
              creation_timestamp=datetime.now(timezone.utc),
          )
          # write client info to ~/bentoml/client_id
          with open(CLIENT_INFO_FILE_PATH, "w", encoding="utf-8") as f:
              yaml.dump(attr.asdict(new_client_info), stream=f)
  
          return new_client_info
  
imports: from __future__ import annotations
  import os
  import re
  import typing
  import uuid
  from abc import ABC
  from datetime import datetime
  from datetime import timezone
  from functools import lru_cache
  from platform import platform
  from platform import python_version
  import attr
  import attr.converters
  import psutil
  import yaml
  from simple_di import Provide
  from simple_di import inject
  from ...cloud.config import CloudClientConfig
  from ...configuration import BENTOML_VERSION
  from ...configuration.containers import BentoMLContainer
  from ...utils import bentoml_cattr
label_desc: Use image node_id 3 for calling a global function with example usage: get_client_info(bentoml_home) and returns: bentoml_cattr, new_client_info