class_docstr: Wraps ray's internal_kv with a namespace to avoid collisions.
  
  Supports string keys and bytes values, caller must handle serialization.
class_docstr_tok: ["Wraps","ray","'s","internal_kv","with","a","namespace","to","avoid","collisions",".","Supports","string","keys","and","bytes","values",",","caller","must","handle","serialization","."]
docstr: Put the key-value pair into the store.
  
  Args:
      key (str)
      val (bytes)
docstr_tok: ["Put","the","key-value","pair","into","the","store",".","Args",":","key","(","str",")","val","(","bytes",")"]
code: def put(self, key: str, val: bytes) -> bool:
      """Put the key-value pair into the store.
  
      Args:
          key (str)
          val (bytes)
      """
      if not isinstance(key, str):
          raise TypeError(
              "key must be a string, got: {}.".format(type(key))
          )
      if not isinstance(val, bytes):
          raise TypeError(
              "val must be bytes, got: {}.".format(type(val))
          )
  
      try:
          return self.gcs_client.internal_kv_put(
              self.get_storage_key(key).encode(),
              val,
              overwrite=True,
              namespace=ray_constants.KV_NAMESPACE_SERVE,
              timeout=self.timeout,
          )
      except ray.exceptions.RpcError as e:
          raise KVStoreError(e.rpc_code)
  
file_path: ray/python/ray/serve/_private/storage/kv_store.py
imports: import logging
  from typing import Optional
  import ray
  from ray._private import ray_constants
  from ray._raylet import GcsClient
  from ray.serve._private.constants import RAY_SERVE_KV_TIMEOUT_S, SERVE_LOGGER_NAME
  from ray.serve._private.storage.kv_store_base import KVStoreBase
label_desc: Use image node_id 3 for calling the RayInternalKVStore obj's underlying member method code with example usage: obj.put(key, val) and returns: self