"Client-server interface custom implementation for filter models." | |
import json | |
import concrete.numpy as cnp | |
from filters import Filter | |
from concrete.ml.deployment import FHEModelClient | |
from concrete.ml.version import __version__ as CML_VERSION | |
class CustomFHEClient(FHEModelClient): | |
"""Client interface to encrypt and decrypt FHE data associated to a Filter.""" | |
def load(self): | |
"""Load the parameters along with the FHE specs.""" | |
# Load the client | |
self.client = cnp.Client.load(self.path_dir / "client.zip", self.key_dir) | |
# Load the filter's parameters from the json file | |
with (self.path_dir / "serialized_processing.json").open("r", encoding="utf-8") as f: | |
serialized_processing = json.load(f) | |
# Make sure the version in serialized_model is the same as CML_VERSION | |
assert serialized_processing["cml_version"] == CML_VERSION, ( | |
f"The version of Concrete ML library ({CML_VERSION}) is different " | |
f"from the one used to save the model ({serialized_processing['cml_version']}). " | |
"Please update to the proper Concrete ML version.", | |
) | |
# Initialize the filter model using its filter name | |
filter_name = serialized_processing["model_post_processing_params"]["filter_name"] | |
self.model = Filter(filter_name) | |
return self.model | |