cdef class InferenceEngine:
    def __init__(self, model_bytes: bytes, batch_size: int = 1, **kwargs):
        self.batch_size = batch_size
        self.engine_name = <str>"onnx"

    @staticmethod
    def get_engine_filename():
        return None

    @staticmethod
    def get_source_filename():
        return None

    @staticmethod
    def convert_from_source(bytes source_bytes):
        return source_bytes

    cdef tuple get_input_shape(self):
        raise NotImplementedError("Subclass must implement get_input_shape")

    cdef int get_batch_size(self):
        return <int>self.batch_size

    cdef run(self, input_data):
        raise NotImplementedError("Subclass must implement run")
