code: def _create_channel(
      server_url: str,
      ssl: bool = False,
      ssl_client_credentials: ClientCredentials | None = None,
      channel_options: t.Any | None = None,
      compression: grpc.Compression | None = None,
  ) -> GrpcSyncChannel:
      if ssl:
          assert (
              ssl_client_credentials is not None
          ), "'ssl=True' requires 'ssl_client_credentials'"
          return grpc.secure_channel(
              server_url,
              credentials=grpc.ssl_channel_credentials(
                  **{
                      k: load_from_file(v) if isinstance(v, str) else v
                      for k, v in ssl_client_credentials.items()
                  }
              ),
              options=channel_options,
              compression=compression,
          )
      return grpc.insecure_channel(
          server_url, options=channel_options, compression=compression
      )
  
imports: from __future__ import annotations
  import asyncio
  import logging
  import time
  import typing
  from functools import cached_property
  from typing import TYPE_CHECKING
  from packaging.version import parse
  from ...exceptions import BentoMLException
  from ...grpc.utils import LATEST_PROTOCOL_VERSION
  from ...grpc.utils import import_generated_stubs
  from ...grpc.utils import import_grpc
  from ...grpc.utils import load_from_file
  from ..None import io_descriptors
  from ..service import Service
  from ..service.inference_api import InferenceAPI
  from ..utils import LazyLoader
  from .None import AsyncClient
  from .None import Client
  from .None import SyncClient
label_desc: Use image node_id 3 for calling the SyncGrpcClient obj's underlying member method code with example usage: obj._create_channel(server_url, ssl, ssl_client_credentials, channel_options, compression) and returns: grpc, grpc