# Copyright 2022 The KServe Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
"""Client and server classes corresponding to protobuf-defined services."""

from __future__ import annotations

from typing import TYPE_CHECKING

import hopsworks_common.client.istio.grpc.inference_client as inference_client
import hopsworks_common.client.istio.grpc.proto.grpc_predict_v2_pb2 as grpc__predict__v2__pb2


if TYPE_CHECKING:
    import grpc._channel


class GRPCInferenceServiceStub:
    """Inference Server GRPC endpoints."""

    def __init__(self, channel: grpc._channel.Channel):
        """Constructor.

        Parameters:
            channel: A grpc.Channel.
        """
        self.ServerLive = channel.unary_unary(
            "/inference.GRPCInferenceService/ServerLive",
            request_serializer=grpc__predict__v2__pb2.ServerLiveRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ServerLiveResponse.FromString,
        )
        self.ServerReady = channel.unary_unary(
            "/inference.GRPCInferenceService/ServerReady",
            request_serializer=grpc__predict__v2__pb2.ServerReadyRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ServerReadyResponse.FromString,
        )
        self.ModelReady = channel.unary_unary(
            "/inference.GRPCInferenceService/ModelReady",
            request_serializer=grpc__predict__v2__pb2.ModelReadyRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ModelReadyResponse.FromString,
        )
        self.ServerMetadata = channel.unary_unary(
            "/inference.GRPCInferenceService/ServerMetadata",
            request_serializer=grpc__predict__v2__pb2.ServerMetadataRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ServerMetadataResponse.FromString,
        )
        self.ModelMetadata = channel.unary_unary(
            "/inference.GRPCInferenceService/ModelMetadata",
            request_serializer=grpc__predict__v2__pb2.ModelMetadataRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ModelMetadataResponse.FromString,
        )
        self.ModelInfer = channel.unary_unary(
            "/inference.GRPCInferenceService/ModelInfer",
            request_serializer=grpc__predict__v2__pb2.ModelInferRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.ModelInferResponse.FromString,
        )
        self.RepositoryModelLoad = channel.unary_unary(
            "/inference.GRPCInferenceService/RepositoryModelLoad",
            request_serializer=grpc__predict__v2__pb2.RepositoryModelLoadRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.RepositoryModelLoadResponse.FromString,
        )
        self.RepositoryModelUnload = channel.unary_unary(
            "/inference.GRPCInferenceService/RepositoryModelUnload",
            request_serializer=grpc__predict__v2__pb2.RepositoryModelUnloadRequest.SerializeToString,
            response_deserializer=grpc__predict__v2__pb2.RepositoryModelUnloadResponse.FromString,
        )


class GRPCInferenceServiceServicer:
    """Inference Server GRPC endpoints."""

    def ServerLive(self, request, context):
        """The ServerLive API indicates if the inference server is able to receive and respond to metadata and inference requests.

        Parameters:
            request: The request message.
            context: The gRPC context.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def ServerReady(self, request, context):
        """The ServerReady API indicates if the server is ready for inferencing.

        Parameters:
            request: The request message.
            context: The gRPC context.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def ModelReady(self, request, context):
        """The ModelReady API indicates if a specific model is ready for inferencing.

        Parameters:
            request: The request message.
            context: The gRPC context.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def ServerMetadata(self, request, context):
        """The ServerMetadata API provides information about the server.

        Parameters:
            request: The request message.
            context: The gRPC context.

        Errors are indicated by the google.rpc.Status returned for the request.
        The OK code indicates success and other codes indicate failure.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def ModelMetadata(self, request, context):
        """The per-model metadata API provides information about a model.

        Parameters:
            request: The request message.
            context: The gRPC context.

        Errors are indicated by the google.rpc.Status returned for the request.
        The OK code indicates success and other codes indicate failure.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def ModelInfer(self, request, context):
        """The ModelInfer API performs inference using the specified model.

        Parameters:
            request: The request message.
            context: The gRPC context.

        Errors are indicated by the google.rpc.Status returned for the request.
        The OK code indicates success and other codes indicate failure.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def RepositoryModelLoad(self, request, context):
        """Load or reload a model from a repository.

        Parameters:
            request: The request message.
            context: The gRPC context.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")

    def RepositoryModelUnload(self, request, context):
        """Unload a model.

        Parameters:
            request: The request message.
            context: The gRPC context.
        """
        context.set_code(inference_client.StatusCode.UNIMPLEMENTED)
        context.set_details("Method not implemented!")
        raise NotImplementedError("Method not implemented!")


def add_GRPCInferenceServiceServicer_to_server(servicer, server):
    rpc_method_handlers = {
        "ServerLive": inference_client.unary_unary_rpc_method_handler(
            servicer.ServerLive,
            request_deserializer=grpc__predict__v2__pb2.ServerLiveRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ServerLiveResponse.SerializeToString,
        ),
        "ServerReady": inference_client.unary_unary_rpc_method_handler(
            servicer.ServerReady,
            request_deserializer=grpc__predict__v2__pb2.ServerReadyRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ServerReadyResponse.SerializeToString,
        ),
        "ModelReady": inference_client.unary_unary_rpc_method_handler(
            servicer.ModelReady,
            request_deserializer=grpc__predict__v2__pb2.ModelReadyRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ModelReadyResponse.SerializeToString,
        ),
        "ServerMetadata": inference_client.unary_unary_rpc_method_handler(
            servicer.ServerMetadata,
            request_deserializer=grpc__predict__v2__pb2.ServerMetadataRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ServerMetadataResponse.SerializeToString,
        ),
        "ModelMetadata": inference_client.unary_unary_rpc_method_handler(
            servicer.ModelMetadata,
            request_deserializer=grpc__predict__v2__pb2.ModelMetadataRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ModelMetadataResponse.SerializeToString,
        ),
        "ModelInfer": inference_client.unary_unary_rpc_method_handler(
            servicer.ModelInfer,
            request_deserializer=grpc__predict__v2__pb2.ModelInferRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.ModelInferResponse.SerializeToString,
        ),
        "RepositoryModelLoad": inference_client.unary_unary_rpc_method_handler(
            servicer.RepositoryModelLoad,
            request_deserializer=grpc__predict__v2__pb2.RepositoryModelLoadRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.RepositoryModelLoadResponse.SerializeToString,
        ),
        "RepositoryModelUnload": inference_client.unary_unary_rpc_method_handler(
            servicer.RepositoryModelUnload,
            request_deserializer=grpc__predict__v2__pb2.RepositoryModelUnloadRequest.FromString,
            response_serializer=grpc__predict__v2__pb2.RepositoryModelUnloadResponse.SerializeToString,
        ),
    }
    generic_handler = inference_client.method_handlers_generic_handler(
        "inference.GRPCInferenceService", rpc_method_handlers
    )
    server.add_generic_rpc_handlers((generic_handler,))


# This class is part of an EXPERIMENTAL API.
class GRPCInferenceService:
    """Inference Server GRPC endpoints."""

    @staticmethod
    def ServerLive(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ServerLive",
            grpc__predict__v2__pb2.ServerLiveRequest.SerializeToString,
            grpc__predict__v2__pb2.ServerLiveResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def ServerReady(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ServerReady",
            grpc__predict__v2__pb2.ServerReadyRequest.SerializeToString,
            grpc__predict__v2__pb2.ServerReadyResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def ModelReady(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ModelReady",
            grpc__predict__v2__pb2.ModelReadyRequest.SerializeToString,
            grpc__predict__v2__pb2.ModelReadyResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def ServerMetadata(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ServerMetadata",
            grpc__predict__v2__pb2.ServerMetadataRequest.SerializeToString,
            grpc__predict__v2__pb2.ServerMetadataResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def ModelMetadata(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ModelMetadata",
            grpc__predict__v2__pb2.ModelMetadataRequest.SerializeToString,
            grpc__predict__v2__pb2.ModelMetadataResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def ModelInfer(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/ModelInfer",
            grpc__predict__v2__pb2.ModelInferRequest.SerializeToString,
            grpc__predict__v2__pb2.ModelInferResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def RepositoryModelLoad(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/RepositoryModelLoad",
            grpc__predict__v2__pb2.RepositoryModelLoadRequest.SerializeToString,
            grpc__predict__v2__pb2.RepositoryModelLoadResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )

    @staticmethod
    def RepositoryModelUnload(
        request,
        target,
        options=(),
        channel_credentials=None,
        call_credentials=None,
        insecure=False,
        compression=None,
        wait_for_ready=None,
        timeout=None,
        metadata=None,
    ):
        return inference_client.experimental.unary_unary(
            request,
            target,
            "/inference.GRPCInferenceService/RepositoryModelUnload",
            grpc__predict__v2__pb2.RepositoryModelUnloadRequest.SerializeToString,
            grpc__predict__v2__pb2.RepositoryModelUnloadResponse.FromString,
            options,
            channel_credentials,
            insecure,
            call_credentials,
            compression,
            wait_for_ready,
            timeout,
            metadata,
        )
